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
-
Docker stable-11248: record the working configuration. Run from your Compose directory. Add existing overlays, including
jigasi.ymlfor SIP, to every command. The backup filename is this guide’s example. [S2][S12]Terminaldocker 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-bridgeService
transcriberhas literalJIGASI_MODE=transcriber;.envcannot override it. Preserve its password and backend settings. [S2] -
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.yamland${CONFIG}/jicofo/custom-jicofo.conf. Keeptranscriber.ymlin your command list. Replace its all-room Prosody module with the pilot below before applying changes. [S4][S5][S13]Set shell
CONFIGto match your existing.env; the documented default is: [S5]TerminalCONFIG="$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 onlybridge-migration-test. It runs after metadata initialization and leaves other rooms alone. [S1][S5][S6][S11]Lualocal 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, keepENABLE_TRANSCRIPTIONS=1and appendbridge_transcription_pilotto existingXMPP_MUC_MODULES. Do not also loadforce_async_transcription, which would select every room. Make the pilot readable and the secret-bearing custom Jicofo file private for UID 1000. [S5][S12]Terminalsudo 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" -
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]
Terminaldc() { 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 jicofoOpen a new
https://meet.example.com/bridge-migration-testas moderator and start transcription. Verify no Jigasi transcriber joined it. Test a separate new room for legacy captions. [S6][S7] -
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]
Terminaldc up -d --force-recreate prosody dc stop transcriberKeep its configuration, transcript storage and credentials. Leave the separate SIP
jigasiservice running. A later unrestricteddc up -dcan starttranscriberagain while its overlay remains included; remove that overlay from routine commands after the rollback period. [S2][S12] -
Docker stable-11248: roll back. Stop captions and close bridge rooms. Remove only
bridge_transcription_pilotfromXMPP_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]Terminaldc start transcriber dc up -d --force-recreate web prosody jicofo dc stop opus-transcriber-proxy -
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 existingmodules_enabledlist in/etc/prosody/conf.avail/meet.example.com.cfg.lua. Set existingtranscription.enabledtotruein/etc/jitsi/meet/meet.example.com-config.js. [S10][S13]Terminalsudo systemctl restart prosody sudo systemctl restart jicofoKeep 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 existingorg.jitsi.jigasi.ENABLE_TRANSCRIPTION=falsein/etc/jitsi/jigasi/sip-communicator.properties, preserveorg.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]
dc exec -T jvb curl --fail --silent --show-error http://opus-transcriber-proxy:8080/health
dc logs --tail=100 opus-transcriber-proxy jvb jicofo transcriberThe 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]