Releases: luongndcoder/Scribble
Release list
v1.2.7
🔐 macOS — permissions now persist across updates
Stop being asked for mic + system-audio permissions every time you update. The fix is on the build side: every macOS release is now signed with a stable code-signing identity, so macOS TCC recognises each update as "the same app" and keeps prior grants alive.
What changed
.github/workflows/build-macos.ymlimports a code-signing cert from secrets and uses it assigningIdentityinstead of ad-hoc (-). Falls back to ad-hoc when the secret is absent, so non-mac builds aren't affected.- Identity extraction tolerates self-signed certs (the strict
codesigningpolicy filter rejects them, but codesign itself accepts them by name).
Heads-up — one last permission prompt
Upgrading from v1.2.6 → v1.2.7 will still trigger the macOS permission dialog one more time (mic, system audio), because v1.2.6 was ad-hoc-signed and v1.2.7 has a real identity — different designated requirement = different "app" to TCC.
From v1.2.7 onward, every future update will keep your permissions. No more annoying prompts.
Verification
codesign -dvv /Applications/Scribble.app 2>&1 | grep Authority
# Expected: Authority=Scribble Code Signing (NOT: Authority=(ad-hoc))v1.2.6
🔐 Soniox realtime — round two (the actual fix)
v1.2.4 fixed the websockets.sync bundle gap. The Soniox realtime WebSocket then progressed further but immediately died on TLS handshake:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed: unable to get local issuer certificate
Root cause
Python's stdlib ssl module uses compile-time hardcoded CA paths (/System/Library/OpenSSL/cert.pem etc) that don't exist in a PyInstaller bundle. The file-upload path was never affected because httpx ships certifi's CA bundle internally — but websockets.sync falls back to the raw stdlib and broke.
Fix
main.py: at the very top of boot (before uvicorn, websockets, or anything caches an SSL context), setSSL_CERT_FILE/SSL_CERT_DIR/REQUESTS_CA_BUNDLEtocertifi.where(). Guard withsys.frozenso dev runs still use the system trust store.scribble-sidecar.spec:collect_all('certifi')socacert.pemis actually present in the bundle. Previously certifi was only there incidentally via httpx; now it's explicitly required and load-bearing.
After this update
Settings → STT Provider = Soniox → "Cuộc họp mới" → start recording → transcript appears in real time, with built-in speaker diarization.
📦 Downloads
Scribble_1.2.6_aarch64.dmg— macOS Apple SiliconScribble_1.2.6_x64-setup.exe— Windows x64Scribble_1.2.6_amd64.AppImage— Linux x64 (AppImage)scribble_1.2.6_amd64.deb— Linux x64 (Debian/Ubuntu)
v1.2.5
🪟 Sticky meeting-list header
Tiny UX fix on top of v1.2.4.
What changed
- Meeting history title + search bar now stay pinned at the top while you scroll the meeting cards
- Previously the whole
.viewwas the scroll container — scrolling past the first screen lost the title, the "Upload file" / "Cuộc họp mới" buttons, AND the search field together - The
.meetings-gridis now the only scrolling region inside the list view; detail view is unaffected (uses its own layout)
📦 Downloads
Scribble_1.2.5_aarch64.dmg— macOS Apple SiliconScribble_1.2.5_x64-setup.exe— Windows x64Scribble_1.2.5_amd64.AppImage— Linux x64 (AppImage)scribble_1.2.5_amd64.deb— Linux x64 (Debian/Ubuntu)
🔗 Quick recap of v1.2.x changes
| Version | Highlight |
|---|---|
| 1.2.5 | Sticky meeting-list header + search (this release) |
| 1.2.4 | Soniox realtime fix + draggable window + clickable links |
| 1.2.3 | Clickable markdown links in update modal |
| 1.2.2 | Real markdown renderer + bottom-right banner + drop "Ready" toast |
| 1.2.1 | Auto-update infra (signing + manifest + Settings controls) |
| 1.2.0 | Audio upload + reference materials + UX redesign |
v1.2.4
🐛 Fixes
This is a triple-bugfix release covering window controls, clickable docs links, and the broken Soniox realtime transcription that several users reported after v1.2.3.
🎤 Soniox realtime transcription works again
- Root cause: the PyInstaller bundle was missing
websockets.sync(onlyspeedups.sogot packed). The Soniox SDK importsfrom websockets.sync.client import connectfor realtime sessions — every WebSocket attempt threwModuleNotFoundErrorand was silently swallowed by an emptyexcept. Frontend looped reconnect 2x/sec. - Fix: spec uses
collect_all('websockets')now, pulling every submodule. The Soniox file-upload path was never affected because it uses HTTP (httpx), not WebSockets. - Also added:
log.error(..., exc_info=True)on the soniox-stream exception path. Future failures will show a real traceback instead of going silent.
🪟 Window draggable from the topnav
- macOS overlay title-bar mode hid the native chrome — clicking on "Scribble v1.2.x" just selected the version text. Same on Windows/Linux.
- Fix: topnav, brand, status chip, and language label all get
data-tauri-drag-region+-webkit-app-region: drag+user-select: none. Click-and-drag the topnav to move the window. Buttons opt out of drag withno-dragso their onClick still fires.
🔗 Clickable markdown links actually open
- v1.2.3 added
[text](url)rendering in the update modal but routed through@tauri-apps/plugin-shellwithout granting the permission. Click did nothing visible. - Fix:
shell:allow-openadded to capabilities. Click any release-notes link → opens in your system browser.
📦 Downloads
Scribble_1.2.4_aarch64.dmg— macOS Apple SiliconScribble_1.2.4_x64-setup.exe— Windows x64Scribble_1.2.4_amd64.AppImage— Linux x64 (AppImage)scribble_1.2.4_amd64.deb— Linux x64 (Debian/Ubuntu)
v1.2.3
🔗 Clickable links in release notes
This is a small follow-up to v1.2.2 that adds proper hyperlink support in the update modal. v1.2.2's markdown renderer handled headings, lists, bold, and inline code — but [link](url) was rendered as plain text.
🖱 What changed
- Links now route through
@tauri-apps/plugin-shell→ open in your system browser (not the Tauri webview) - Hover state added: underline darkens from light indigo to solid
- The renderer falls back to
window.open()in plain browser dev (still 0 deps)
🎯 Why this matters
Future release notes can now point users at proper docs:
- See the full operator guide:
docs/auto-update.md - File issues at the issue tracker
- Discuss in
#scribbleon our internal Slack
🧪 Markdown features exercised in this release
This release deliberately uses every supported markdown feature so you can verify the renderer is solid:
- bold text like this
- italics aren't supported (single-asterisk would clash with bullet markers, so we skip it)
inline codelike this- Headings at 3 levels:
#,##,### - Bullet lists (this one!)
- Hyperlinks (try clicking the docs link above)
📦 Downloads
Scribble_1.2.3_aarch64.dmg— macOS Apple SiliconScribble_1.2.3_x64-setup.exe— Windows x64Scribble_1.2.3_amd64.AppImage— Linux x64 (AppImage)scribble_1.2.3_amd64.deb— Linux x64 (Debian/Ubuntu)
🚦 Verify the renderer works
If you're already on v1.2.2: open Settings → App Updates → "Kiểm tra cập nhật" → click "Xem" on the banner. The modal you see should have proper headings, lists, and a working clickable link to the docs above.
v1.2.2
✨ UI polish for the in-app updater
This release fixes 3 visible flaws from v1.2.1 — release notes now render properly, the update banner moves out of the topnav, and the "system ready" toast goes away.
🎨 Markdown rendering in the update modal
##,###,**bold**,`code`,[link](url), and- bulletsall render correctly now- v1.2.1 displayed them as raw text — this release ships a 80-line in-house markdown renderer (no
react-markdownbloat)
📍 Banner repositioned
- Was:
top: 12px; left: 50%— sandwiched between brand chip and right-side controls - Now:
bottom: 24px; right: 24pxtoast pattern — out of the topnav scan path, slide-up animation
🤫 Removed redundant "system ready" toast
- The status chip in the topnav already flips from "Đang khởi động" → "✓ Sẵn sàng" when the sidecar comes online
- The bottom startup strip also disappears at the same moment
- Toast was a third signal — dropped per user feedback
📦 Downloads
Scribble_1.2.2_aarch64.dmg— macOS Apple SiliconScribble_1.2.2_x64-setup.exe— Windows x64Scribble_1.2.2_amd64.AppImage— Linux x64 (AppImage)scribble_1.2.2_amd64.deb— Linux x64 (Debian/Ubuntu)
🚦 Auto-update flow
v1.2.0 users see a banner within 30 minutes of launching the app, or can click Settings → App Updates → "Kiểm tra cập nhật" to check immediately.
v1.2.1 — Auto-update release pipeline
🚀 What's new — Auto-update is now functional
This release lights up the auto-updater that's been wired up but inert since v1.1.x. Going forward, every release will reach v1.2.0+ users automatically — no more manual reinstall.
🔄 Auto-update
- In-app banner when a new version drops, with full release notes modal (no more 100-char truncation)
- Download progress with MB / total / ETA in both the banner and modal
- One-click update — downloads in background, verifies cryptographic signature, relaunches into the new version
- Skip this version if you want to stay on a release
- Auto-check toggle + manual "Check for updates" button in Settings → App Updates
🛠 Under the hood
- All 3 platforms (Windows, macOS aarch64, Linux AppImage) now ship with minisign signatures
- New
latest.jsonmanifest published per release describes available platforms + signatures + URLs - Tauri client downloads + verifies signature against the embedded pubkey before applying — releases that don't verify are rejected
- New
build-macos.ymlworkflow (macOS aarch64 ad-hoc signed, runs onmacos-14runner) - New
release-manifest.ymlworkflow auto-generateslatest.jsonafter all 3 platform builds upload signatures
📝 Note for existing users
- v1.2.0 users will see an update banner within 30 minutes of opening the app (or click Settings → App Updates → "Kiểm tra cập nhật" to check immediately)
- Linux
.debusers: auto-update is AppImage-only; please switch to AppImage or upgrade manually with apt/dpkg - macOS Gatekeeper: this is ad-hoc signed (not notarized), so first-time install requires right-click → Open. The auto-update itself is independently signed and verifies cleanly.
📦 Downloads
Scribble_1.2.1_aarch64.dmg— macOS Apple SiliconScribble_1.2.1_x64-setup.exe— Windows x64Scribble_1.2.1_amd64.AppImage— Linux x64 (AppImage)scribble_1.2.1_amd64.deb— Linux x64 (Debian/Ubuntu)
See docs/auto-update.md for the full operator guide.
v1.2.0 — Upload audio + Reference materials + UX redesign
✨ What's new in v1.2.0
New features
- 📤 Upload audio file — drop in mp3/m4a/wav/mp4/mkv/webm (up to 2 GB) and let the pipeline run: normalize → silence-aligned chunking → parallel STT (3 concurrent) → diarize → LLM summary. Resumable across app restarts (per-chunk save). Idempotent by SHA-256 — re-uploading the same file redirects to the existing meeting.
- 📎 Reference materials — attach .md / .txt docs to a meeting as LLM context. 1 MB/file, 2 MB/meeting, 10 files. AI corrects mistranscribed names, cross-references the agenda, and lists used files at the end of the minutes.
- 🎯 Soniox STT backend alongside Nvidia Riva — premium quality + multi-language mixed audio + built-in diarization. Upload path sends the whole file in one async call (stt-async-v4), so speaker IDs are globally consistent across the entire meeting.
- ⏱ Per-chunk transcript timestamps — every ~22s gets its own time badge instead of one big block.
UX redesign
- Startup: blocking center modal → slim bottom status strip + revealed app shell + elapsed-time indicator.
- Meeting detail top: 3-row stack → 1-row toolbar (~80 px saved).
- Meeting detail bottom: 2 separate bars → 1 merged band, record button 52 → 40 px.
- Attachments panel: collapsible slim bar by default when populated.
- Topnav + macOS title bar: macOS overlay title bar removes the duplicate "Scribble" label; topnav compacted to ~34 px.
- Settings panel: 520 → 760 px, STT and AI as 2 side-by-side columns (no scroll), Test Connection button restyled from full-width gradient to compact outlined pill.
Backend hardening
- Idempotent
Databasesingleton (fixes lazy-import state reset). find_ffmpeg()everywhere — fixes macOS Finder-launch PATH issue.- Riva streaming for vi / zh (offline_recognize unavailable on free tier).
- Sidecar cache key =
app_version + tar.gz mtime— rebuilds without version bump re-extract. - Upload pipeline respects
stt_providersetting — was hardcoded to Nvidia, now dispatches correctly. - Soniox path enables built-in diarization (
enable_speaker_diarization=True) and uses the single-file async API for globally consistent speakers. - Audio download default = MP3 96 kbps mono (~43 MB/hr vs WAV ~115 MB/hr) — 62 % smaller for sharing.
📥 Downloads
| OS | Architecture | Installer | Size |
|---|---|---|---|
| 🍎 macOS | Apple Silicon (M1/M2/M3/M4) | Scribble_1.2.0_aarch64.dmg | 109 MB |
| 🪟 Windows | x64 | Scribble_1.2.0_x64-setup.exe | 118 MB |
| 🐧 Linux | x64 AppImage | Scribble_1.2.0_amd64.AppImage | 213 MB |
| 🐧 Linux | x64 deb | scribble_1.2.0_amd64.deb | 138 MB |
macOS Gatekeeper: If first launch shows "Scribble Not Opened", run
xattr -cr /Applications/Scribble.appor use System Settings → Privacy & Security → Allow Anyway.
🤖 Release notes generated with Claude Code
v1.1.4 — Fix Windows webview stuck at sidecar connection
Critical Fix
- Windows + Linux: Allow
http://tauri.localhostorigin for CORS. v1.1.3 only allowedhttps://tauri.localhost(HTTPS variant) andtauri://localhost(macOS-only scheme), so the cross-origin/healthfetch from webview was blocked before reaching the sidecar. App was stuck forever at "Đang khởi động hệ thống → Kết nối tới sidecar" splash. - Root cause: Tauri 2 webview origin is
http://tauri.localhost(HTTP, not HTTPS) on Windows + Linux. Only macOS usestauri://localhost. The HTTPS entry in CORS allow_list never matched any real client.
Build infrastructure
- Rewrite
build-windows.batfor onedir + tar.gz layout (script was still using onefile copy fromdaa0747) - CI
workflow_dispatchnow uploads installer as artifact, no tag needed — useful for testing builds without creating public releases
Upgrade notes
After installing v1.1.4, delete the old sidecar cache to force re-extraction of the new tar.gz:
```powershell
Remove-Item -Recurse -Force "$env:USERPROFILE.voicescribe\sidecar"
```
Downloads
| OS | File |
|---|---|
| 🍎 macOS (Apple Silicon) | Scribble_1.1.4_aarch64.dmg |
| 🪟 Windows (64-bit) | Scribble_1.1.4_x64-setup.exe |
| 🐧 Linux (AppImage) | Scribble_1.1.4_amd64.AppImage |
| 🐧 Linux (deb) | scribble_1.1.4_amd64.deb |
Carry over from v1.1.3
- Windows:
onnxruntimein PyInstaller spec for diarizer - Sidecar tar.gz path resolution for Windows installer / Linux deb
Carry over from v1.1.1
- Nvidia speaker diarization (CAM++ ONNX)
- Per-chunk translation with chunk_id targeting
- Auto-updater via GitHub Releases
- Hierarchical MapReduce + Deep Analysis template
- App startup ~2-5s