Symptoms
Some speakers lose captions during a meeting with several speakers. The report was reproduced on Docker stable-9955, using Jigasi 1.1-369-gb80d3df. These are the exact parsing lines from PR #647, including the valid JSON reply: [S1]
SEVERE: VoskWebsocketStreamingSession.onMessage: Error parsing message: {
"partial" : "the out for the ancient"
}
Unexpected character (") at position 29.The report also includes these streaming-error fragments: [S1]
SEVERE: VoskWebsocketStreamingSession.onError: Error while streaming audio data
to transcription service
java.util.NoSuchElementException
at VoskTranscriptionService.onMessageInternal(VoskTranscriptionService.java:286)Your timestamp, text and source line number can differ. The useful clue is a parsing failure on a valid Vosk response while multiple participant sessions are active. Not every meeting with several people necessarily reproduces the race. [S1][S2]
Cause
Older VoskTranscriptionService code used one JSONParser for multiple participant sessions. Jetty can deliver their WebSocket callbacks concurrently. Each parse changes the parser’s internal state, so another callback can overwrite it mid-parse. Valid JSON can then fail, or results can contain another participant’s text, as the contributor’s stress test reported. [S1][S2]
The merged fix uses ThreadLocal<JSONParser> and calls jsonParser.get().parse(msg). This gives each callback thread its own parser. It is a Jigasi code fix, with no new Vosk model or configuration setting required. [S2]
PR #647 merged on September 11, 2026, as commit 2750d54. The official September 14 stable-11248 Jigasi image build installed 1.1-415-g2750d54-1 for both linux/amd64 and linux/arm64. The previous stable Docker release was stable-11146-2, published August 17, before the fix. stable-11248 is therefore the first stable Docker release containing it, and remained the latest when checked on October 12, 2026. [S1][S3][S4]
The Jitsi stable APT repository also offers 1.1-415-g2750d54-1. The web changelog records Jitsi Meet 2.0.11248, but does not list this Jigasi fix. The package index and image build logs establish the transcriber version directly. [S3][S5][S6]
Fix
-
Docker, existing Vosk transcription installations: check the running service. Run this from your Docker deployment directory. The stock service is
transcriber, using the Jigasi image. Include every overlay you normally deploy in the helper. If your custom setup runs transcription in a service namedjigasi, use that name in the service-specific commands. [S7][S8]Terminaldc() { docker compose -f docker-compose.yml -f transcriber.yml "$@" } dc images transcriber dc exec -T transcriber dpkg-query -W -f='${Version}\n' jigasi dc logs --tail=200 transcriberImage inspection, execution and log options are documented by Docker; the package query reads the installed version inside the running container. Save the error context before replacing it. [S10][S11]
-
Docker, upgrade to
stable-11248: update the release files and images together. Follow the handbook’s updating section to replace the Compose files with those from the release. Keep your existing.env, credentials and configuration. When upgrading from beforestable-11146, follow its rootless directory migration too, including writable storage directories for UID 1000. [S7]Set this existing image selector in
.env: [S8]ConfigJITSI_IMAGE_VERSION=stable-11248Then run the helper from step 1 during a maintenance window: [S9][S10]
Terminaldc config --images dc pull dc up -d dc images dc exec -T transcriber dpkg-query -W -f='${Version}\n' jigasiCheck that every Jitsi component uses
stable-11248. Your separate Vosk image has its own version.pulldownloads images;up -drecreates services whose images or configuration changed. A restart of an old container alone does not replace its image. [S8][S9][S10] -
Debian/Ubuntu packages, Jigasi before the fix: upgrade Jigasi itself. These commands assume the official Jitsi stable APT repository is already configured. Check its candidate before installing. At the research date, the confirmed fixed candidate was
1.1-415-g2750d54-1. [S5][S12][S13]Terminaldpkg-query -W -f='${Version}\n' jigasi sudo apt-get update apt-cache policy jigasi sudo apt-get install --only-upgrade jigasi sudo systemctl restart jigasi dpkg-query -W -f='${Version}\n' jigasi systemctl is-active jigasiUse your normal package configuration review during the upgrade. The service is named
jigasi; restarting it ensures the process loads the updated code. An OS release name alone does not establish which Jigasi build is running. [S11][S13][S14]
No confirmed configuration-only workaround was supplied in PR #647. Treat reducing simultaneous speakers or restarting old Jigasi as unverified mitigation, not a substitute for upgrading. Use the existing Vosk setup guide for backend configuration. [S1][S2]
Verify
For Docker after step 2, the installed-package command must print exactly this version for the build verified here. The same output applies to packages after step 3: [S3][S5][S11]
1.1-415-g2750d54-1On package installations, systemctl is-active jigasi should print active. That confirms service state, not successful captions. [S14]
For both install types, run a fresh test meeting on meet.example.com. Have several participants speak, including overlapping speech, and confirm captions continue for each person. Check that the reproduced test produces no new parsing or streaming errors shown above. This is a proposed functional test, not a load test performed by jitsi.help. The upstream contributor’s parser stress test was clean after the change. [S1][S2]
If it still fails
Docker stable-11248: follow the transcriber log while repeating the test: [S7][S10]
dc logs --since=10m --follow transcriberDebian/Ubuntu, fixed package: the upstream unit redirects application output to /var/log/jitsi/jigasi.log. Read that file for parsing errors; the journal is useful for service startup failures. Custom units can change logging, so inspect the actual unit if this file stays empty. [S15][S16][S17]
sudo tail -n 200 /var/log/jitsi/jigasi.log
systemctl cat jigasi
sudo journalctl -u jigasi -n 100 --no-pagerRecheck every transcriber instance’s installed package. For a custom build, verify it contains commit 2750d54; a reassuring image name alone is insufficient evidence. In the released Vosk class, Error to send websocket request for participant and Error to finalize websocket connection for participant are distinct send/finalization log prefixes. Investigate those separately rather than treating every WebSocket error as this parser race. [S2][S11]
Use transcription not working for setup failures. If you need help gathering evidence across several instances, our transcription service covers that investigation.
FAQ
Does stable-11248 include the Vosk parser fix?
Yes. Its official Jigasi image build installed 1.1-415-g2750d54-1 on both supported build architectures. That package’s commit is the merged PR #647 fix. [S1][S3]
Does Unexpected character mean Vosk sent invalid JSON?
Not necessarily. The reported reply was valid JSON; concurrent callbacks corrupted the shared parser’s state. Genuine invalid responses still need investigation after installing the fix. [S1][S2]
Will restarting Jigasi solve it?
A restart does not add the missing code to an older container or package. Install the fixed build and recreate the container or restart the upgraded package service. [S2][S9][S14]
Is this the same as Jigasi running out of memory?
This page covers the parser race fixed by PR #647. The Jigasi memory troubleshooting page covers a separate investigation; this parser change does not establish that all resource or connection-lifecycle problems are fixed. [S2]
Sources
[S1] Jigasi PR #647, merged 2026-09-11, community production report and maintainer-approved repository fix.
[S2] Released VoskTranscriptionService.java, 2026-09-11, source code.
[S3] stable-11248 Jigasi image build, 2026-09-14, official repository build log; package installation verified through GitHub’s authenticated log download.
[S4] Docker releases, checked 2026-10-12, release notes.
[S5] Jitsi stable package index, checked 2026-10-12, official repository metadata.
[S6] Jitsi web changelog, 2026-09-14 release, release notes.
[S7] Docker handbook, checked 2026-10-12, official doc.
[S8] stable-11248 transcriber.yml, 2026-09-14 release, source code.
[S9] Docker pull and up, checked 2026-10-12, official docs.
[S10] Docker images, config, exec and logs, checked 2026-10-12, official docs.
[S11] dpkg-query, checked 2026-10-12, official Debian manual.
[S12] Debian/Ubuntu handbook, checked 2026-10-12, official doc.
[S13] apt-get and apt-cache, checked 2026-10-12, official Debian manuals.
[S14] systemctl, checked 2026-10-12, official Debian manual.
[S15] Jigasi package service unit, 2026-09-11, source code.
[S16] tail, checked 2026-10-12, official Debian manual.
[S17] journalctl, checked 2026-10-12, official Debian manual.
Open questions
We did not reproduce the concurrency failure or run a sustained multi-speaker test on a real server. PR #647 does not establish a failure probability or participant threshold. Independently built images need their own package/code verification. No reliable pre-upgrade workaround was confirmed. [S1][S2]