Skip to main content
Version: 0.9.19

Release identity and service compatibility

Use this reference before you choose a release, replace a component or roll back an upgrade. Deploy the approved component and configuration set for your deployment. A shared tag, an unchanged component or a service-change table alone does not prove that a mixed set works together.

Availability: Operators need the target release notes, the generated deployment bundle, registry access and the release's schema and upgrade instructions. SDK versions and the separately managed Portal have their own release identities. Confirm support coverage with your support agreement; a shared version label does not establish tested compatibility.

Keep four identities separate​

IdentityWhat it tells youWhat it does not establish
Product release/tagWhich product revision and release instructions are intendedThat a specific host runs its images or has applied its configuration
Deployment manifest and bundle referenceWhich roles, images and generated files are selected for that environment/featuresThat the target hosts fetched them or passed acceptance
Actual image/configuration identityWhat content was delivered and is runningCompatibility with every other service, schema or client
Test/acceptance evidenceWhich concrete combination and scenario workedArbitrary later image tags, different feature sets or untested workloads

The Portal's release distribution manifest selects deployment registries and Delphi image names. Upstream images, mounted binaries and externally managed services also belong in your deployment inventory. The distribution list is neither the complete running-container catalogue nor a test result.

Capture a useful release record​

Before and after a change, record:

  • Deployment and namespace; product release; release notes and migration instructions.
  • Each affected service's image reference, registry digest and running image identity; platform/architecture when relevant.
  • Configuration bundle reference and recoverable exact content/version; effective feature profile and required configuration/secret version identifiers, without their values.
  • Schema/migration state, independently versioned SDK/client contracts and external dependency versions needed for the scenario.
  • The acceptance checks, result and time, plus the previous compatible recovery set.

On a known API host, a bounded identity check is:

docker inspect --format '{{.Name}} {{.Config.Image}} {{.Image}}' voiceai-telapi

This prints the container's reference and image ID, not its environment. A local image ID is not interchangeable with a registry manifest digest, so keep the distribution/registry record as well. The normal refresh helper compares running container IDs with local image metadata. It detects stale local instances; it is not a provenance or interoperability test.

Tags are not immutable content​

Service Compose uses the configured Delphi release tag and upstream references such as postgres:17-alpine, redis:7-alpine, caddy:2-alpine and ubuntu/squid:latest. These names can resolve to different content over time. Record resolved digests when reproducibility matters. Several Delphi base images are pinned by digest from 0.9.18; the Compose service images above are not.

Decide whether a component can move alone​

Proposed changeEvidence needed before applying it
Restart/recreate unchanged componentRecorded image/configuration identity, dependency health and the same intended schema/credentials
Apply a documented component patchExact patch scope, permitted dependency set, migration/activation order, targeted acceptance and rollback instructions
Mix a newer component with older dependenciesExplicit evidence for that combination; otherwise use the approved coordinated release set
Roll back after a migrationConfirm old images can use the resulting schema, or use the planned schema/data recovery procedure; merely retagging images is insufficient
Change optional modules/topologyGenerated manifest and effective flags, additional dependencies/network paths, entitlement and feature-specific verification

Mixed-release compatibility: this handbook lists no accepted mixed-release combination. Upgrade the complete release set unless the release notes for a documented patch name the permitted dependency set. To add a combination, deploy it in a test environment, run the checks in apply and accept the selected set, and keep the image digests and results.

A service-change table says which components changed. It does not certify unchanged components against new schemas, queue payloads or runtime contracts.

Release register​

The register lists release references for upgrade planning. It does not assign support status or establish that a release is deployed. Confirm the selected release, its published artifacts and your support agreement before an upgrade.

Release lineLatest patchRelease month
v0.9.19v0.9.19October 2026
v0.9.18v0.9.18October 2026
v0.9.17v0.9.17-patch2September 2026
v0.9.16v0.9.16-patch2July 2026
v0.9.15v0.9.15-patch4July 2026
v0.9.14v0.9.14-patch3June 2026
v0.9.13v0.9.13-patch3June 2026
v0.9.12v0.9.12-patch1May 2026
v0.9.11NoneMay 2026
v0.9.10v0.9.10-patch1April 2026

Upgrade to 0.9.19​

Read the 0.9.19 release notes before you start. The following steps are mandatory for an upgrade from 0.9.18:

  1. Upgrade the full 0.9.19 release set, and update every Node service (TelWeb, TelAPI, TelPhi, Tasker and Scaler) in the same maintenance window. From 0.9.19, Save in Flow Designer stores a new saved-version status that 0.9.18 services were not built to recognize. Do not use Save on remaining 0.9.18 replicas, and do not plan a return to 0.9.18 after versions were saved without acceptance evidence for it.
  2. Before the migrations, run a read-only check for duplicate draft or published versions per flow. The shared-draft migration archives such duplicates, and that step cannot be reversed.
  3. Update the Ops host first. Its db-migrate service applies these migrations before the new API, Web and Voice services start:
    • 20261008100000_server_group_role_telpro and 20261008100100_telpro_instances: TelPro server groups.
    • 20261013100000_shared_flow_drafts: shared draft editing.
    • 20261013140000_base_number_prefix_cleanup: repairs stored base numbers with a repeated + or a trunk 0 after +49. It skips a row whose corrected value already exists. A number that starts with +4949 can be correct, so the migration leaves it unchanged; review such numbers yourself with SELECT "id", "number" FROM "BaseNumber" WHERE "number" LIKE '+4949%';.
    • 20261015120000_carrier_bye_budget: adds the per-trunk BYE size budget. Existing trunks keep it disabled.
    • 20261019120000_app_sensitive_storage_default: adds the App storage protection choice.
    • 20261019120000_system_audio_reference_recovery: removes stale system-audio references and adds the hourly system-audio-reference-sweep schedule. Its deletions cannot be reversed. Start the new Tasker right after it; an older Tasker fails that job as unknown.
  4. Before you initialize the Media host, issue the Media certificate from the media CA, and set the CA as TTS_MEDIA_CACHE_CA_BUNDLE for Web, API, Voice and Ops. The issuing script writes it for API and Voice only; set it for Web and Ops yourself. Media no longer generates a self-signed certificate, so initialization fails without valid material. Update Media first, then Web, API, Voice and Ops in the same window. See Media HTTPS trust.
  5. On each TelPro edge that sets TELPRO_MEDIA_IP, confirm that the address is bound before you rerun initialization. Otherwise initialization stops without recreating the containers. The TURN_LISTEN_IP default changed to empty. See Bind the floating media address. Deploy the TelPro image together with its configuration bundle, because edge certificates are now delivered through standard input.
  6. Allow the Ops and Web hosts to reach the SigNoz query API (default port 8080) directly. Without it, SIP ladders and span trees are not stored with conversations. See Network ports.
  7. An App that is already switched off keeps answering calls until it is published again, its flows are synchronized or a platform flow rebuild runs, and until both TelAPI and TelPhi run 0.9.19. Publish switched-off Apps after the upgrade if they must refuse calls. See Refuse calls while an app is switched off.
  8. Update log queries and alerts. Request, response and error objects in OTLP logs are now serialized as text, nested values beyond the size bound are replaced by [Truncated], and the budget_measurement and sip_headers_prepared events no longer carry audioCodesHeaderCountRemaining, audioCodesMaxMessageChars and audioCodesMessageRemaining.

Verify the upgrade with apply and accept the selected set.

Upgrade to 0.9.18​

Read the 0.9.18 release notes before you start. The following steps are mandatory for an upgrade from 0.9.17:

  1. Upgrade the full 0.9.18 release set. Do not mix in 0.9.17 components without acceptance evidence for that exact combination.
  2. Run the database migrations with the Ops db-migrate service, including the new live_session_usage migration, before the new API, Web and Voice services start.
  3. Set FEATURE_BROWSER_SDK and FEATURE_WEBRTC explicitly to true or false. Unset flags are off. TelAPI and TelWeb reject a supplied value other than literal true or false; they also reject WebRTC enabled without the Browser SDK.
  4. Remove the retired FEATURE_API_ACCESS; it has no alias. Because FEATURE_API_ACCESS was on by default in 0.9.17, the Browser SDK stays off unless you enable it. Follow upgrade the integration capabilities.
  5. If your teams use the system-audio library, configure its storage first. Without it, uploads fail with "System audio storage is not configured". See choose a storage backend.

Verify the upgrade with apply and accept the selected set. Feature availability lists which services need each flag.

Service image changes by release​

Each row lists the Delphi images whose digest changed against the preceding release. The table stores changed/not-changed labels only, not digests or test results, so it cannot reconstruct an immutable deployment. An omitted component means "not changed", not "tested against every other component". Missing patch rows are unknown; do not interpolate them.

ReleaseImages that changed
v0.9.19TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span
v0.9.18TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span
v0.9.17-patch2TelPro, TelPhi, TelAPI, TelWeb, Tasker, DB migrate, Scaler
v0.9.17-patch1TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span
v0.9.17TelPro, TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span
v0.9.16-patch1TelPro, RTPEngine, TelPhi, TelAPI, TelWeb, Scaler, Log-to-span
v0.9.16TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span
v0.9.15TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span
v0.9.14-patch3TelPro, RTPEngine, WebRTC (Janus), TelPhi, AudioProc, TelAPI, TelWeb, Scaler, Tasker, DB migrate, Log-to-span
v0.9.14-patch1TelPhi, TelAPI, TelWeb, DB migrate
v0.9.14TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate
v0.9.13-patch3TelAPI, TelWeb, TelPro, TelPhi, Tasker, DB migrate
v0.9.13-patch1TelPro, TelPhi, TelWeb, TelAPI, DB migrate
v0.9.13TelPro, TelSys, TelPhi, TelAPI, TelWeb, Scaler, Tasker, DB migrate, Log-to-span
v0.9.12-patch1TelPhi
v0.9.12TelPhi, TelAPI, TelWeb, Media server, Scaler, Tasker
v0.9.11TelPro, TelSys, TelPhi, TelAPI, TelWeb, Media server, Scaler, Tasker

The Media server image contains the media-upload service. The voiceai-log-to-span image is used by the local development topology. Voice and TelPro hosts run the same converter as a mounted binary in an alpine:3.24.2 sidecar, so a Log-to-span change also needs that binary updated. Relay uses the upstream coturn image below; there is no Delphi voiceai-turn image. The SDK keeps its own version and release process; these rows are not an SDK support matrix. See browser integration for the separately versioned SDK reference.

Upgrade the separately managed Portal​

Availability: this procedure is for operators responsible for the Portal deployment. A Delphi customer deployment upgrade does not itself upgrade the Portal.

  1. Back up the Portal database and record the Portal image and migration state before its separate rollout. Confirm that the backup can be restored.
  2. Apply the Portal release's database migrations before starting its new application version. These migrations include table rebuilds and removal of obsolete module-grant storage; they are not purely additive. Account session-version changes can require users to sign in again. For 0.9.19, the Portal adds 20261015060000_customer_administrators (a customer administrator marker that stays off for every existing member) and 20261015100000_documentation_generation.
  3. Verify Portal sign-in, customer memberships and feature-profile selection after the migration. Keep the prior image and database backup together for recovery. Replacing the container alone does not reverse a database migration.

Declared upstream versions​

These are the upstream versions declared in the current product source, which can be newer than release 0.9.19; the 0.9.19 version of this page lists that release's declarations. They are declarations and defaults, not a bill of materials read from running images: build arguments, deployment overrides and mutable tags can change delivered content, so record resolved digests and effective overrides separately.

ComponentDeclared version or imageDeclaration location
Kamailio / TelPro6.1.4 source build.docker/voiceai-telpro/Dockerfile: KAMAILIO_VERSION
hiredis / TelProv1.4.1 source build.docker/voiceai-telpro/Dockerfile: HIREDIS_VERSION
RTPEngineRepository channel 26.0, packages 26.0.1.24-1~bpo13+1.docker/voiceai-rtpengine/Dockerfile: RTPENGINE_VERSION, RTPENGINE_PACKAGE_VERSION
Asterisk / TelSys22.11.0, source archive verified with a SHA-256 checksum.docker/voiceai-telsys/Dockerfile: ASTERISK_VER, ASTERISK_SHA256
Janus / browser gatewayv1.4.1 Git tag.docker/voiceai-webrtc/Dockerfile: JANUS_VERSION
Silero VAD model / AudioProcv5.1.2.docker/voiceai-audioproc/Dockerfile: SILERO_VAD_VERSION
Node.js / application and migration imagesnode:24.21.0-alpine3.24, pinned by digest.docker/voiceai-{telapi,telweb,telphi,tasker,scaler,db-migrate}/Dockerfile
Debian / TelPro, TelSys, RTPEngine and Janusdebian:trixie-slim, pinned by digestTheir .docker/voiceai-*/Dockerfile files; also the AudioProc zlib-builder build stage
Go / media-upload, Log-to-span, TelSys toolgolang:1.27.2-alpine3.24, pinned by digest; build stage only.docker/voiceai-media-server/Dockerfile, apps/log-to-span/Dockerfile, TelSys Dockerfile
Alpine / media-upload and Log-to-span imagesalpine:3.24.2, pinned by digest.docker/voiceai-media-server/Dockerfile, apps/log-to-span/Dockerfile
Alpine / Log-to-span sidecarsalpine:3.24.2, pinned by digest.infrastructure/services/voice/docker-compose.yaml and telpro/docker-compose.yml
CPU AudioProcpython:3.11-slim-trixie, pinned by digest.docker/voiceai-audioproc/Dockerfile
GPU AudioProcnvidia/cuda:12.4.1-runtime-ubuntu22.04Same AudioProc Dockerfile; the DEVICE build argument selects the stage
coturn / relaycoturn/coturn:4.6.2.infrastructure/services/telpro/docker-compose.yml
PostgreSQLpostgres:17-alpine.infrastructure/services/database/docker-compose.yaml
PgBounceredoburu/pgbouncer:v1.25.1-p0Database Compose
Redisredis:7-alpineDatabase Compose
Caddy / Web and Mediacaddy:2-alpine.infrastructure/services/web/docker-compose.yaml and media/docker-compose.yaml
Host operating systemubuntu-22.04 cloud image.infrastructure/terraform/modules/server/main.tf: image
Squidubuntu/squid:latest.infrastructure/services/squid/docker-compose.yaml
OpenTelemetry collector (contrib)otel/opentelemetry-collector-contrib:0.159.0API, Database, Ops, Squid, TelPro, Voice and Web Compose; signoz/docker-compose.export-collector.yaml
SigNoz applicationsignoz/signoz:v0.139.0 default.infrastructure/services/signoz/vars.yaml and render-casting.sh: SIGNOZ_VERSION
SigNoz ingester collectorsignoz/signoz-otel-collector:v0.142.0 defaultsignoz/render-casting.sh; SIGNOZ_OTELCOL_TAG overrides it
ClickHouseclickhouse/clickhouse-server:25.5.6 defaultsignoz/vars.yaml and render-casting.sh: CLICKHOUSE_IMAGE
Keycloak / Portal identityquay.io/keycloak/keycloak:26.7.4, pinned by digestapps/portal/identity/Dockerfile; part of the separately managed Portal
Node.js / Portalnode:22-alpineapps/portal/Dockerfile; part of the separately managed Portal

Defaults, overrides and mutable references​

ECR_REGISTRY and ECR_TAG select the Delphi images in the generated service Compose files. Several production declarations fall back to latest; development uses dev. A fallback is not a recommended release selection. Verify the effective generated deployment and keep its identities.

Squid is not the only mutable reference. Major/minor image tags and even version-looking tags can be replaced, and repository channels can gain new packages. Use the declarations to investigate, then keep the actual build and running identities.

SigNoz's application, ingester collector, contrib export collector and ClickHouse have separate version controls. Do not set the ingester to the application version merely to make them match. Inspect the rendered casting and the effective deployment overrides before you apply its upgrade procedure. Telemetry and monitoring explains the collector and ingester roles; service health covers controlled activation.

Review the dependency boundaries​

Component setWhat can couple its upgrade to other components
TelWebDatabase/auth model, role/session rules, API contracts and background notification jobs
TelAPIDatabase/Redis schema and state, browser SDK/session protocols, callbacks, Voice and provider/media behavior
TelPhi + TelSys + optional AudioProcARI/media interfaces, provider audio, edge signaling, recording/job contracts; treat the bundle as coordinated unless the patch documents otherwise
TelPro signaling/media/gatewayVoice routing/media, generated trunk/TLS policy, Redis state and enabled browser gateway/relay behavior
OpsMigration schema, job payload producers/consumers, cloud operations, backups and notification transport
Database/RedisEvery consumer's credentials, TLS, schema/state and recovery compatibility
Media/telemetry/proxyConsumer authentication/trust, data formats, persistent storage, export paths and external connectivity

For browser clients, keep the SDK's independent version and verify its supported session modes and contracts with the browser integration guide. Do not assign the platform tag to the SDK to make a table look aligned.

Apply and accept the selected set​

Follow the deployment journey: preserve the recovery point, preview the intended update, run required migrations and activation in the release's order, and verify each affected role. A finished release distribution is not evidence that your installation completed this step.

Use service health plus the applicable end-to-end scenario: sign-in and team access, phone or browser conversation, callback, recording or backup job, or feature activation. Store the result with the identities above. A failed scoped check is a failed release criterion for that change; do not replace it with an unrelated green build.

If acceptance fails, find the failed layer before rollback. Configuration recovery separates application snapshots, bundle/secret versions, database recovery and external objects. Verify again after rollback and keep the failed combination on record rather than marking it compatible.