# Why is the Jitsi captions button grey or missing on mobile?

> A transcriber joining does not prove the browser received its status and caption messages. Enable captions, check presence and JSON delivery, and try Show subtitles on stage for the panel problem. Pass a boolean to setSubtitles; mobile captions in chat shipped in app 26.0.0, but the separate Android visibility proposal never merged. [S1][S3][S6][S7][S8][S10][S11][S12]

Source: https://jitsi.help/troubleshooting/jitsi-captions-button-stuck/
Updated: October 12, 2026
Publisher: Jitsi Help (https://jitsi.help/)

## 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

1. **Docker `stable-11248`: check the backend and effective configuration.** It remains the latest Docker release checked October 12. For stock Jigasi transcription, set `ENABLE_TRANSCRIPTIONS=1` in your existing `.env`. Use the matching `transcriber.yml`; preserve any extra overlays from your deployment. Backend installation is covered in [Jigasi and Vosk setup](/guides/jitsi-transcription-vosk/), which describes an older layout. [S9][S14][S15]

   Inspect logs with the current stock service names: [S15][S18]

   ```sh
   docker compose -f docker-compose.yml -f transcriber.yml logs --tail=200 transcriber prosody jicofo
   ```

2. **Docker `stable-11248`: apply only the needed overrides.** Put this in `${CONFIG}/web/custom-config.js`, readable by the web container. `autoCaptionOnTranscribe` defaults 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]

   ```js
   config.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]

   ```sh
   docker compose -f docker-compose.yml -f transcriber.yml up -d --force-recreate web prosody jicofo transcriber
   ```

3. **Debian/Ubuntu, Meet `2.0.11248`: edit `/etc/jitsi/meet/meet.example.com-config.js`.** Append the same assignments after the existing `config` definition, then reload the meeting. Docker `.env` variables and `custom-config.js` are not the package configuration mechanism. Inspect the installed Jigasi service separately: [S10][S17][S18]

   ```sh
   sudo journalctl -u jigasi -u jicofo -u prosody -n 200 --no-pager
   ```

4. **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 set `disableClosedCaptions: true`, which removes both displays. [S1][S10][S11]

5. **Embedded clients, reported `stable-10741` and checked 11248: correct the API arguments.** Run this after joining, with `api` your existing `JitsiMeetExternalAPI` instance. The positional arguments mean enabled, display subtitles, language: [S3][S13]

   ```js
   api.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 uses `room.jitsiMetadata.recording.isTranscribingEnabled` and an `auto-started` header, not a complete installable plugin. [S3][S5]

6. **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 is `26.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]

```sh
curl -fsS https://meet.example.com/config.js
```

For embedded clients, examine outgoing XMPP presence after starting captions and again after muting. The exact expected element is: [S3]

```xml
<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](/troubleshooting/jitsi-transcription-not-working/). For language routing, use [caption languages and translation](/guides/jitsi-captions-languages-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](/services/jitsi-transcription/) covers backend and caption integration. Provide versions, sanitized configuration and matching browser/server logs.

## Sources

[S1] [Grey panel #17098, including maintainer reply](https://github.com/jitsi/jitsi-meet/issues/17098), March 5, 2026, community report and maintainer comment; status checked October 12.

[S2] [Android #16710](https://github.com/jitsi/jitsi-meet/issues/16710), November 26, 2025, community report; status checked October 12, 2026.

[S3] [IFrame presence #17079](https://github.com/jitsi/jitsi-meet/issues/17079), March 4, 2026, community report and maintainer confirmation.

[S4] [setSubtitles #16373](https://github.com/jitsi/jitsi-meet/issues/16373), August 26 to September 1, 2025, community report and maintainer comment.

[S5] [Autostart #16850](https://github.com/jitsi/jitsi-meet/issues/16850), January 20 to 22, 2026, maintainer comments and partial example.

[S6] [Android proposal #16718](https://github.com/jitsi/jitsi-meet/pull/16718), November 2025 to July 2026, proposed source code and contributor discussion; closed unmerged.

[S7] [Native captions #16787](https://github.com/jitsi/jitsi-meet/pull/16787), merged January 20, 2026, source code.

[S8] [Mobile app changelog](https://github.com/jitsi/jitsi-meet-release-notes/blob/master/CHANGELOG-MOBILE-APPS.md), January 23 and September 28, 2026, release notes.

[S9] [Latest Docker release](https://github.com/jitsi/docker-jitsi-meet/releases/latest), September 14, 2026, release note; checked October 12.

[S10] [Meet 11248 config](https://github.com/jitsi/jitsi-meet/blob/stable/jitsi-meet_11248/config.js), September 2026, source code.

[S11] [Settings UI](https://github.com/jitsi/jitsi-meet/blob/stable/jitsi-meet_11248/react/features/settings/components/web/MoreTab.tsx), [caption gates](https://github.com/jitsi/jitsi-meet/blob/stable/jitsi-meet_11248/react/features/subtitles/functions.any.ts), [preference default](https://github.com/jitsi/jitsi-meet/blob/stable/jitsi-meet_11248/react/features/base/settings/reducer.ts), September 2026, source code.

[S12] [Caption middleware](https://github.com/jitsi/jitsi-meet/blob/stable/jitsi-meet_11248/react/features/subtitles/middleware.ts), September 2026, source code.

[S13] [IFrame commands](https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe-commands/#setsubtitles), checked October 12, 2026, official doc.

[S14] [Docker web settings](https://github.com/jitsi/docker-jitsi-meet/blob/stable-11248/web/rootfs/defaults/settings-config.js), [startup](https://github.com/jitsi/docker-jitsi-meet/blob/stable-11248/web/rootfs/etc/s6-overlay/scripts/config), [mounts](https://github.com/jitsi/docker-jitsi-meet/blob/stable-11248/docker-compose.yml), September 14, 2026, source code.

[S15] [Transcriber Compose](https://github.com/jitsi/docker-jitsi-meet/blob/stable-11248/transcriber.yml), [credentials/JSON](https://github.com/jitsi/docker-jitsi-meet/blob/stable-11248/jigasi/rootfs/defaults/transcriber-sip-communicator.properties), [Prosody](https://github.com/jitsi/docker-jitsi-meet/blob/stable-11248/prosody/rootfs/defaults/conf.d/jitsi-meet.cfg.lua), [Jicofo](https://github.com/jitsi/docker-jitsi-meet/blob/stable-11248/jicofo/rootfs/defaults/jicofo.conf), September 14, 2026, source code.

[S16] [Jigasi session](https://github.com/jitsi/jigasi/blob/2750d5448271a7a421cb28a914970a4383127380/src/main/java/org/jitsi/jigasi/TranscriptionGatewaySession.java), September 2026, source code.

[S17] [Package config installation](https://github.com/jitsi/jitsi-meet/blob/stable/jitsi-meet_11248/debian/jitsi-meet-web-config.postinst), [Jigasi unit](https://github.com/jitsi/jigasi/blob/2750d5448271a7a421cb28a914970a4383127380/debian/jigasi.service), September 2026, source code.

[S18] [Compose up](https://docs.docker.com/reference/cli/docker/compose/up/), [logs](https://docs.docker.com/reference/cli/docker/compose/logs/), [journalctl](https://www.freedesktop.org/software/systemd/man/latest/journalctl.html), [curl](https://curl.se/docs/manpage.html), [HTTP caching](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/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.

---

Jitsi Help is an independent service. It is not affiliated with, endorsed by or sponsored by 8x8, Inc. or the Jitsi project. Jitsi and Jitsi Meet are trademarks of 8x8, Inc., used here only to describe the software we host and support.
