How do I migrate deprecated Jigasi transcription to the bridge?

Short answer

Jitsi has deprecated Jigasi transcription without announcing a removal release or date. Its replacement sends audio from JVB to a proxy, controlled by Jicofo. Test a separate room before retiring your transcriber, because saved files and offline backends need separate migration work. The notice concerns transcription, not Jigasi SIP calling. [S1][S2][S3][S4]

Who this is for

For administrators running Jigasi captions with Vosk, Google or Whisper/Skynet. Keep the Vosk guide as your legacy reference. [S3][S13]

The handbook’s exact deprecation sentence is:

The Jigasi transcription support is deprecated and will be removed in a future release. [S1]

It appeared on July 9, 2026, in commit ce6b471 through PR #645. No removal date or release was announced in the sources checked on October 6, 2026. [S1]

The notice names transcription. Jigasi’s SIP gateway has a separate switch; Docker provides separate jigasi and transcriber services. Preserve SIP dial-in and dial-out. [S2][S3]

How it works

Jigasi joins as a transcriber. Its replacement sends audio from a selected JVB over WebSocket to opus-transcriber-proxy, which connects to recognition backends and returns captions. Jicofo supplies the destination and controls activation. [S3][S4][S7][S8]

With server-controlled asyncTranscription=true, the client skips dialing Jigasi. Jicofo also requires recording.isTranscribingEnabled=true, set through start/stop controls. This enables routing by room. Use fresh rooms: an already attached transcriber or custom client can still request the old path. [S6][S7]

Comparison: [S3][S4][S6]

Feature Jigasi route Bridge route
Live captions Supported. Results return through JVB to the client. [S3][S4][S8]
Saved transcripts TXT/JSON output and advertised download links are configurable. Optional JSONL debug dumps exist; an equivalent finished transcript download workflow was not verified. [S3][S4]
Translation Google or a custom service. ENABLE_TEXT_TRANSLATION=true enables separately configured text translation. [S3][S4]
Languages Depend on the recognition service and model. Depend on the selected provider/model; old language settings do not transfer automatically. [S3][S4]
Speaker names Participant information accompanies results. Audio sources carry endpoint identity; validate displayed names during the pilot. [S3][S4][S6][S8]
Recording Can save transcriber audio; Jibri video recording is separate. The client can request recording and transcription together; the proxy does not replace Jibri. [S3][S6]
Offline recognition Local Vosk and Whisper/Skynet services are supported. A compatible local Realtime WebSocket adapter is needed; a drop-in Vosk or Skynet migration was not verified. [S3][S4]

Before you start

On October 6, 2026, the latest Docker release remains stable-11248, published September 14. It ships transcriber.yml; use matching Compose files and Jitsi images. The proxy is pinned separately to 6747f187c0e7f4fa17f7744e0d76a5ce6d7d4b24. [S2][S4]

Package baseline: Jitsi Meet 2.0.11248-1, web/Prosody plugins 1.0.9442-1, Jicofo 1.0-1205-1, JVB 2.3-318-gbf271b11f-1, Jigasi 1.1-415-g2750d54-1. The earliest compatible release remains unconfirmed. [S10]

Back up environment, overlays, Jigasi configuration, custom Prosody/Jicofo files and transcripts. Keep credentials private. Schedule changes and rollback with no active meetings or SIP calls. Decide which languages, translation, files and recording workflows must pass before switching. [S2][S3][S5][S6][S12]

Keep the proxy internal, or on loopback when package JVB shares its host. Remote bridges need an authenticated WSS gateway; the standalone proxy lacks incoming authentication. Cloud backends receive audio even when the proxy is self-hosted. [S4][S13]

Steps

  1. Docker stable-11248: record the working configuration. Run from your Compose directory. Add existing overlays, including jigasi.yml for SIP, to every command. The backup filename is this guide’s example. [S2][S12]

    Terminal
    docker compose -f docker-compose.yml -f transcriber.yml config --services
    docker compose -f docker-compose.yml -f transcriber.yml config --images
    umask 077
    cp -p .env .env.before-bridge
    chmod 600 .env.before-bridge

    Service transcriber has literal JIGASI_MODE=transcriber; .env cannot override it. Preserve its password and backend settings. [S2]

  2. Docker stable-11248: install the bridge route without enabling it everywhere. Reuse the proxy service, backend assignments and Jicofo HOCON from the bridge transcription setup guide. That recipe creates compose.override.yaml and ${CONFIG}/jicofo/custom-jicofo.conf. Keep transcriber.yml in your command list. Replace its all-room Prosody module with the pilot below before applying changes. [S4][S5][S13]

    Set shell CONFIG to match your existing .env; the documented default is: [S5]

    Terminal
    CONFIG="$HOME/.jitsi-meet-cfg"

    Create ${CONFIG}/prosody/prosody-plugins-custom/mod_bridge_transcription_pilot.lua. This is an adaptation of the handbook module, using Prosody’s JID API to select only bridge-migration-test. It runs after metadata initialization and leaves other rooms alone. [S1][S5][S6][S11]

    Lua
    local jid = require "util.jid";
    local is_healthcheck_room = module:require("util").is_healthcheck_room;
    module:hook("muc-room-created", function(event)
        local room = event.room;
        if is_healthcheck_room(room.jid)
            or jid.node(room.jid) ~= "bridge-migration-test" then
            return;
        end
        room.jitsiMetadata = room.jitsiMetadata or {};
        room.jitsiMetadata.asyncTranscription = true;
    end, -2);

    In .env, keep ENABLE_TRANSCRIPTIONS=1 and append bridge_transcription_pilot to existing XMPP_MUC_MODULES. Do not also load force_async_transcription, which would select every room. Make the pilot readable and the secret-bearing custom Jicofo file private for UID 1000. [S5][S12]

    Terminal
    sudo chmod 644 "${CONFIG}/prosody/prosody-plugins-custom/mod_bridge_transcription_pilot.lua"
    sudo chown 1000:1000 "${CONFIG}/jicofo/custom-jicofo.conf"
    sudo chmod 600 "${CONFIG}/jicofo/custom-jicofo.conf"
  3. Docker stable-11248: start the pilot. Define this shell helper; add your normal optional overlays inside it. Validate, then recreate the changed services during the maintenance window. It keeps the legacy transcriber available. [S2][S12]

    Terminal
    dc() {
        docker compose -f docker-compose.yml -f transcriber.yml -f compose.override.yaml "$@"
    }
    dc config --quiet
    dc up -d --force-recreate opus-transcriber-proxy web prosody jicofo

    Open a new https://meet.example.com/bridge-migration-test as moderator and start transcription. Verify no Jigasi transcriber joined it. Test a separate new room for legacy captions. [S6][S7]

  4. Docker stable-11248: switch after acceptance. Remove only the pilot’s room-name condition to select all ordinary new rooms, retaining the health-check exclusion. Recreate Prosody during maintenance. After legacy sessions finish and all required features pass, stop only the caption service: [S1][S2][S6][S12]

    Terminal
    dc up -d --force-recreate prosody
    dc stop transcriber

    Keep its configuration, transcript storage and credentials. Leave the separate SIP jigasi service running. A later unrestricted dc up -d can start transcriber again while its overlay remains included; remove that overlay from routine commands after the rollback period. [S2][S12]

  5. Docker stable-11248: roll back. Stop captions and close bridge rooms. Remove only bridge_transcription_pilot from XMPP_MUC_MODULES. Start the retained transcriber and apply changes. The unused proxy URL can remain with async routing disabled. Test a new room. [S6][S7][S12]

    Terminal
    dc start transcriber
    dc up -d --force-recreate web prosody jicofo
    dc stop opus-transcriber-proxy
  6. Debian/Ubuntu reference packages: perform the same room pilot. Follow the package proxy and Jicofo steps in the setup guide. Merge its URL block into /etc/jitsi/jicofo/jicofo.conf. Save the pilot above as /usr/share/jitsi-meet/prosody-plugins/mod_bridge_transcription_pilot.lua; enable "bridge_transcription_pilot"; in the main conference MUC’s existing modules_enabled list in /etc/prosody/conf.avail/meet.example.com.cfg.lua. Set existing transcription.enabled to true in /etc/jitsi/meet/meet.example.com-config.js. [S10][S13]

    Terminal
    sudo systemctl restart prosody
    sudo systemctl restart jicofo

    Keep Jigasi during the pilot. For cutover, remove the room-name condition as in step 4, restart Prosody and test a new ordinary room. Then a transcription-only installation can use sudo systemctl stop jigasi. For shared SIP, set existing org.jitsi.jigasi.ENABLE_TRANSCRIPTION=false in /etc/jitsi/jigasi/sip-communicator.properties, preserve org.jitsi.jigasi.ENABLE_SIP, and restart Jigasi during maintenance. [S3][S10][S12]

    For rollback, remove the pilot from the MUC modules, restore the previous transcription setting and restart Prosody, Jicofo and Jigasi. Use a new room; existing async rooms do not automatically turn into legacy rooms. [S3][S6][S12]

Configuration reference

Defaults: stable-11248, released Jigasi and pinned proxy. Provider/listener settings are in the setup guide. [S2][S3][S4][S13]

Setting Location Default Migration role
CONFIG Docker .env ~/.jitsi-meet-cfg Host configuration root. [S5]
JIGASI_MODE Docker overlays transcriber or sip, explicitly set Identifies separate services. [S2]
JIGASI_TRANSCRIBER_PASSWORD Docker .env Unset Retain legacy authentication for rollback. [S2]
ENABLE_TRANSCRIPTIONS Docker .env 0 Keep caption controls enabled. [S5]
XMPP_MUC_MODULES Docker .env Empty Add the pilot module. [S5]
modules_enabled Prosody conference MUC Install-specific Load the pilot module. [S10]
asyncTranscription Server room metadata Absent Select bridge routing. [S6][S7]
recording.isTranscribingEnabled Room metadata Absent Start/stop bridge transcription. [S7]
transcription.enabled Client config false Caption UI availability. [S10]
jicofo.transcription.url-template Jicofo HOCON Unset Bridge proxy destination. [S7]
org.jitsi.jigasi.ENABLE_TRANSCRIPTION Jigasi properties false in code Disable only legacy transcription after acceptance. [S3]
org.jitsi.jigasi.ENABLE_SIP Jigasi properties true in code Preserve existing SIP behavior. [S3]
ENABLE_TEXT_TRANSLATION Proxy environment false Enables caption text translation. [S4]

Common mistakes

  • Assuming REST compatibility means offline bridge support. The custom proxy backend needs OpenAI Realtime transcription over WebSocket, including streaming audio and transcript events. Standard Whisper HTTP uploads and Jigasi’s Vosk/Skynet protocols are not substitutes. A local adapter may work, but a complete offline deployment was not verified. [S3][S4]
  • Expecting old files and translations automatically. Legacy settings are read by Jigasi, not the proxy. Debug dumps require separate storage planning and do not prove downloadable final transcripts. Treat translation and recording as separate acceptance tests. [S3][S4][S6]
  • Using unreleased Docker variables. PR #2326 remains open and unmerged as of October 6, 2026; stock stable-11248 needs the custom Jicofo file. The OpenAI failure in Meet #17742 is also open, with no released fix verified. [S5][S9]

Verify

Docker: [S4][S12]

Terminal
dc exec -T jvb curl --fail --silent --show-error http://opus-transcriber-proxy:8080/health
dc logs --tail=100 opus-transcriber-proxy jvb jicofo transcriber

The health request must return HTTP 200 with exact body OK. JVB’s Websocket connected: true shows transport connection, not successful speech recognition. [S4][S8]

Have two people speak different sentences in the pilot and confirm both appear with the correct attribution. Then stop transcription. Confirm the other test room still obtains legacy captions. Repeat your required language, translation, transcript-download and Jibri recording workflows before switching. These user-visible results are the acceptance proof, not just a green health check. [S3][S4][S6]

Package SIP should log initialized SipGateway and skipped initialization of TranscriptionGateway after disabling transcription. Test actual calls. [S3]

If it still fails

Jicofo’s Transcription enabled, but no URL is configured. means the URL was not loaded. Check the generated include and custom file permissions, then both room flags. On packages, use the configured logs; defaults include /var/log/jitsi/jicofo.log and /var/log/jitsi/jvb.log. [S5][S7][S10]

For the package example, curl --fail --silent --show-error http://127.0.0.1:9090/health should also return OK. Read docker logs transcriber for proxy errors, and journalctl -u prosody -u jicofo -u jigasi --since "10 minutes ago" for service errors. Here the standalone container name transcriber denotes the new proxy; in Compose it denotes legacy Jigasi. [S4][S12][S13]

Keep production audio and secrets out of debug dumps. For old authentication and Vosk failures, use transcription troubleshooting. [S4][S13]

FAQ

Must I migrate today?

No deadline was announced, and stable-11248 still ships the transcriber. Plan and test the change. [S1][S2]

Will SIP calls stop working?

Preserve SIP’s service or enable setting. Restart shared services with no active calls. [S2][S3][S12]

Can I migrate Vosk without sending audio to a cloud?

Keep Vosk until a local Realtime adapter passes your tests; no drop-in replacement was verified. Our transcription setup service offers implementation help. [S3][S4][S13]

Sources

All checked 2026-10-06.

[S1] Transcription handbook, first addition, PR #645, 2026-07-09; current page updated 2026-10-05, official doc and source history.

[S2] Latest Docker release, transcriber overlay, SIP overlay, 2026-09-14, release note and source code.

[S3] Released Jigasi README, gateway switches, transcription implementation, package service, 2026-09-11 snapshot, official doc and source code.

[S4] Proxy configuration, server, backend implementations, proxy implementation, 2026-10-05 snapshot, source code.

[S5] Docker handbook, Jicofo initialization, Jicofo template, Prosody template, web template, stable-11248, official doc and source code.

[S6] 11248 client caption routing, room metadata, recording dialog, speaker names, 2026-09-14, source code.

[S7] 11248 Jicofo room gates, conference logic, configuration defaults, 2026-09-14, source code.

[S8] 11248 JVB exporter, serializer, 2026-09-14, source code.

[S9] Docker PR #2326, proposed source code; Meet #17742, community report, status checked 2026-10-06.

[S10] Package index, 11248 web installer, Prosody installer, plugin mapping, Jicofo launcher, client defaults, Jicofo logging, JVB service, checked 2026-10-06, official repository and source code.

[S11] Prosody JID API, dated 2020-09-20, official doc.

[S12] Compose CLI, merging files, copy, chmod, chown, systemctl, journalctl, curl, checked 2026-10-06, official docs.

[S13] jitsi.help bridge setup, Vosk guide, troubleshooting, setup service, checked 2026-10-06, independent guides.

Open questions

No removal release/date, fully tested offline Realtime adapter, or saved-download parity was confirmed. The complete migration and rollback need testing on a real server, especially with SIP, required languages, translation and recording. No live meeting test is claimed here. [S1][S3][S4][S6]

Recently updated