Symptoms
In #17098, the captions panel opens and Start turns grey. Jigasi joins and reportedly writes recognized speech to a file, but the button never becomes Stop and language selection never appears. The report supplies no server version or runtime error. It closed automatically as stale, not through a confirmed fix. [S1]
Android #16710 reports missing controls/text in app 25.6.1, build 21431857, while desktop works. The proposed fix #16718 closed unmerged. Its author’s initial overlay diagnosis was later revised to button visibility logic. Neither closure proves recovery. [S2][S6]
Cause
There are separate paths for recognition, status presence and live caption messages. Jigasi sends a transcription-status presence extension; the client processes transcription-result JSON. Saving speech alone does not establish that both reached the UI. [S12][S16]
In Meet 11248, transcription.enabled must be true and disableClosedCaptions false. Disabling captions can still leave transcription available from the recording dialog. The panel also depends on the local showSubtitlesOnStage preference and is unavailable in breakout rooms. translationEnabled: false hides translation selection; a visible picker does not install a translator. [S10][S11]
Other causes have clearer diagnoses: #17079 passed an object where setSubtitles expects a boolean; #16850 invited Jigasi without anyone requesting subtitles. Maintainers confirmed both mistakes. #16373 establishes neither a universal one-person-call defect nor a fixed release, and its maintainer says Jigasi must be configured. [S3][S4][S5]
Fix
-
Docker
stable-11248: check the backend and effective configuration. It remains the latest Docker release checked October 12. For stock Jigasi transcription, setENABLE_TRANSCRIPTIONS=1in your existing.env. Use the matchingtranscriber.yml; preserve any extra overlays from your deployment. Backend installation is covered in Jigasi and Vosk setup, which describes an older layout. [S9][S14][S15]Inspect logs with the current stock service names: [S15][S18]
Terminaldocker compose -f docker-compose.yml -f transcriber.yml logs --tail=200 transcriber prosody jicofo -
Docker
stable-11248: apply only the needed overrides. Put this in${CONFIG}/web/custom-config.js, readable by the web container.autoCaptionOnTranscribedefaults to false; enable it when you want clients to request subtitles automatically once a transcriber arrives. It does not start recognition without a backend. Preserve existing language/backend settings. [S10][S12][S14]JavaScriptconfig.transcription ||= {}; Object.assign(config.transcription, { enabled: true, disableClosedCaptions: false, autoCaptionOnTranscribe: true });During a maintenance window, recreate the affected services using your full overlay list. Startup regenerates the web configuration. [S14][S15][S18]
Terminaldocker compose -f docker-compose.yml -f transcriber.yml up -d --force-recreate web prosody jicofo transcriber -
Debian/Ubuntu, Meet
2.0.11248: edit/etc/jitsi/meet/meet.example.com-config.js. Append the same assignments after the existingconfigdefinition, then reload the meeting. Docker.envvariables andcustom-config.jsare not the package configuration mechanism. Inspect the installed Jigasi service separately: [S10][S17][S18]Terminalsudo journalctl -u jigasi -u jicofo -u prosody -n 200 --no-pager -
Web clients on checked Meet 11248, either installation: try the stage overlay. In Settings, More, enable Show subtitles on stage. The released local setting is
showSubtitlesOnStage, default false. This implements the older display path suggested in #17098; recovery of that report remains untested. Do not setdisableClosedCaptions: true, which removes both displays. [S1][S10][S11] -
Embedded clients, reported
stable-10741and checked 11248: correct the API arguments. Run this after joining, withapiyour existingJitsiMeetExternalAPIinstance. The positional arguments mean enabled, display subtitles, language: [S3][S13]JavaScriptapi.executeCommand('setSubtitles', true, true, 'en'); // Stop this client's subtitle request: api.executeCommand('setSubtitles', false);Do not pass
{ enabled: true }. For custom autostart, prefer the verified automatic client request above. A server-only invitation needs appropriate room metadata; the maintainer’s partial example usesroom.jitsiMetadata.recording.isTranscribingEnabledand anauto-startedheader, not a complete installable plugin. [S3][S5] -
Native apps, either server installation: update and check Chat. PR #16787 merged January 20; app
26.0.0, released January 23, includes captions inside chat. The latest documented app is26.3.0, September 28. These releases establish support, but do not confirm a fix for every #16710 symptom. #16718 remains unmerged. [S2][S6][S7][S8]
Verify
For Docker and packages 11248, inspect what browsers receive, then inspect config.transcription in the meeting frame’s console. Expect enabled: true, disableClosedCaptions: false, and autoCaptionOnTranscribe: true after the example. Refresh with caches bypassed if the served settings differ. [S10][S14][S17][S18]
curl -fsS https://meet.example.com/config.jsFor embedded clients, examine outgoing XMPP presence after starting captions and again after muting. The exact expected element is: [S3]
<jitsi_participant_requestingTranscription>true</jitsi_participant_requestingTranscription>[object Object] proves the API argument is still wrong. Require received transcription-result messages containing recognized speech and visible text on the selected display. A file or joined bot alone is insufficient. No live meeting was tested here. [S3][S12][S16]
If it still fails
For stock Docker 11248, match JIGASI_TRANSCRIBER_USER and XMPP_HIDDEN_DOMAIN across Jigasi and Prosody, and verify the existing password without sharing it. Prosody’s transcriber_prefixes identifies that hidden-domain user; the client ignores ordinary, non-hidden participant endpoint messages for this path. Check Jicofo’s jigasi.brewery-jid against JIGASI_BREWERY_MUC and XMPP_INTERNAL_MUC_DOMAIN. These are discovery and identity checks, not proof of #17098’s cause. [S12][S15]
Check the transcription-capable Jigasi endpoint, its conference presence and JSON delivery rather than inventing a separate Prosody transcription component. In Jigasi logs, TranscriptionService is not properly configured indicates backend setup failure. TranscriptionGatewaySession started transcribing is a debug-level start message, not proof of recognized words. Browser Error dialing indicates a failed invitation. [S12][S16]
For authentication or recognition failures, use transcription troubleshooting. For language routing, use caption languages and translation. [S10][S15][S16]
FAQ
Does upgrading fix the grey panel?
No confirmed release fix was identified for #17098. It is not fixed as of 2026-10-12 in the sense that recovery remains unverified; its stale closure is not a fix. [S1]
Can captions work without Jigasi?
These instructions cover Jigasi transcription. The #16373 maintainer requires a configured Jigasi backend for that setup; enabling a UI flag alone is insufficient. [S4]
Why does autostart stop after changing camera state?
Jigasi can leave when nobody requests subtitles and backend transcription is inactive. #16850’s maintainer recommends client requests or backend metadata, not a new release. [S5][S16]
Can someone help inspect the full setup?
Our Jitsi transcription service covers backend and caption integration. Provide versions, sanitized configuration and matching browser/server logs.
Sources
[S1] Grey panel #17098, including maintainer reply, March 5, 2026, community report and maintainer comment; status checked October 12.
[S2] Android #16710, November 26, 2025, community report; status checked October 12, 2026.
[S3] IFrame presence #17079, March 4, 2026, community report and maintainer confirmation.
[S4] setSubtitles #16373, August 26 to September 1, 2025, community report and maintainer comment.
[S5] Autostart #16850, January 20 to 22, 2026, maintainer comments and partial example.
[S6] Android proposal #16718, November 2025 to July 2026, proposed source code and contributor discussion; closed unmerged.
[S7] Native captions #16787, merged January 20, 2026, source code.
[S8] Mobile app changelog, January 23 and September 28, 2026, release notes.
[S9] Latest Docker release, September 14, 2026, release note; checked October 12.
[S10] Meet 11248 config, September 2026, source code.
[S11] Settings UI, caption gates, preference default, September 2026, source code.
[S12] Caption middleware, September 2026, source code.
[S13] IFrame commands, checked October 12, 2026, official doc.
[S14] Docker web settings, startup, mounts, September 14, 2026, source code.
[S15] Transcriber Compose, credentials/JSON, Prosody, Jicofo, September 14, 2026, source code.
[S16] Jigasi session, September 2026, source code.
[S17] Package config installation, Jigasi unit, September 2026, source code.
[S18] Compose up, logs, journalctl, curl, HTTP caching, checked October 12, 2026, official docs.
Open questions
The maintainer did not name a config.js switch for the older UI; the verified fallback is a local setting. The panel’s root cause, #16373’s screenshot-only error, and recovery on specific Android devices need testing. No released fix for those reports was confirmed.