diktier
diktier is a local push-to-dictate desktop app: press a hotkey, speak, pause, and the text is transcribed on your own computer with whisper.cpp and pasted into the app you are in. No cloud speech-to-text.
Version 0.12.0, build 8bedf7488f25,
channel main, built 2026-11-02T06:52:55Z.
Install
In a terminal:
curl -fsSL https://diktier.divramod.me/install | sh
The script checks the download's SHA-256 before it installs anything.
Download
macOS (Apple silicon) 0.12.0, build 8bedf7488f25 |
|---|
| installer: diktier-0.12.0-macos-aarch64.dmg (7.7 MB) SHA-256 554d1697c74407a87478343bc2e874584f67b5a268e964efed756743a51a44bb |
| zip: diktier-0.12.0-macos-aarch64.zip (7.0 MB) SHA-256 80f6b79af5ace862a5f4fc592ecf22c1046f7aa49351a6fe4d59f1176e2fd98c |
Changelog
Every landing's user-facing changes, newest first, collected from the plans' fragments (plans/<plan>/changelog.md) by hal2-cli-changelog. Format: Keep a Changelog 1.1.0; hal2 versions each unit itself.
2026-11-02 06:03 UTC · plan 0022
- Plans: 0022 yoga access, erd v2
Added
docs: the Lenovo Yoga 13 (Windows) has a section indocs/host-runners.md: how to reach it with ssh, how to find its address, which key opens it and that no diktier runner runs on it yet. (0022)docs: diktier has its own SSH key for the Yoga, kept as the repo secretDIKTIER_YOGA13_LAPTOP_SSH_KEY_SEC, so anyone with the repo secrets can restore it and log in without hal2's key. (0022)docs: masterplan 0001's data-model design now also shows ERD v2 (the shown revision and the encryption binding of plan 0010) beside v1, so the masterplan shows the data model as built. (0022)
2026-11-02 05:50 UTC · plan 0021
- Plans: 0021 changelog and tags
Added
diktier: every unit gets a tag<lang>/<name>/v<version>for each version, from 0.9.0 on, and a landing that raises a version sets its tags. (0021)diktier: after the site is deployed and its smoke check passed, the unit gets a tag<lang>/<name>/deployed-v<version>. (0021)
Changed
diktier: the releases of version 0.9.0 and 0.10.0 moved to the tagsrust/diktier/v0.9.0andrust/diktier/v0.10.0, with the same downloads (the .dmg, the zip and their checksums). (0021)diktier: the README links the download at the tagrust/diktier/v0.9.0. (0021)diktier: every new release is published under its unit tagrust/diktier/v<version>. (0021)
Removed
diktier: the tagsv0.9.0andv0.10.0are gone; their releases live at the unit tags. (0021)
2026-11-02 05:42 UTC · plan 0020
- Plans: 0020 mic loss while recording
- Versions: diktier 0.12.0, diktier-audio 0.12.0, diktier-cli 0.12.0, diktier-core 0.12.0, diktier-history 0.12.0, diktier-models 0.12.0, diktier-paste 0.12.0, diktier-permissions 0.12.0, diktier-stt 0.12.0
Fixed
diktier: a microphone that is unplugged or switched away while you dictate now ends the recording at once instead of recording silence unnoticed; what you said before it is still transcribed and pasted, and the menu bar and the Status view say in German or English that the microphone was lost. (0020)
2026-11-02 05:24 UTC · plan 0010
- Plans: 0010 history
- Versions: diktier 0.11.0, diktier-audio 0.11.0, diktier-cli 0.11.0, diktier-core 0.11.0, diktier-history 0.11.0, diktier-models 0.11.0, diktier-paste 0.11.0, diktier-permissions 0.11.0, diktier-stt 0.11.0
Added
diktier-ui: a forgotten passphrase is not recovered, but "Forgot it? Delete the history and start over…" deletes every dictation, turns encryption and the passphrase off and removes the key, leaving an empty history that works again. (0010)
2026-11-02 04:47 UTC · plan 0008
- Plans: 0008 app shell
Added
diktier: Help › Changelog in the main window (and "Changelog…" in the menu bar menu) shows what changed in each version, newest first, beside the version; it is bundled with the app, so it works offline. (0008)diktier: only one diktier runs at a time; opening it again shows the running one's window, and a settings file from a newer diktier is left untouched while the app runs on defaults and says so. (0008)
2026-11-02 04:40 UTC · plan 0012
- Plans: 0012 delivery
Added
diktier: a README for a stranger: what diktier does, how to install, use and build it, how it works (with diagrams), where the decisions live, its limits and troubleshooting. (0012)diktier:docs/hal-way.mdexplains how the repository is worked on, on one page. (0012)diktier:AI-USAGE.mdsays where AI wrote the work and how each result was checked. (0012)diktier:transcripts/holds excerpts of the agent sessions and a scrub check that refuses personal paths, e-mail addresses, tokens and private names in them. (0012)
Changed
diktier: commit heads now name the plan and step they belong to, for examplefeat(0012|3): .... (0012)
2026-11-02 00:55 UTC · plan 0011
- Plans: 0011 macos release
Added
diktier: the Mac app and its .dmg are signed with a Developer ID and notarised by Apple, so macOS opens diktier without a "cannot be checked for malicious software" warning. (0011)diktier: every new diktier version gets a GitHub releasev<version>with the Mac .dmg, the zip and their SHA-256 files to check the download. (0011)
2026-11-02 00:44 UTC · plan 0010
- Plans: 0010 history
- Versions: diktier 0.9.0, diktier-audio 0.9.0, diktier-cli 0.9.0, diktier-core 0.9.0, diktier-history 0.9.0, diktier-models 0.9.0, diktier-paste 0.9.0, diktier-permissions 0.9.0, diktier-stt 0.9.0
Added
diktier-history: every dictation is kept in a history on this computer, one filehistory.sqlitein the app's data folder: the text, the time, the app it was pasted into, the language, the model, the audio, speech and decode times and the real-time factor; nothing leaves the machine. (0010)diktier-history: the history keeps the newest 100 dictations by default (any number from 1 to 100,000, or unlimited); the oldest go with their audio and revisions as soon as a new one is saved or the limit is lowered. (0010)diktier-history: the list shows the newest first, searches the text and the target app without regard to case, and deletes one dictation or all of them, with their audio and revisions; with the history off nothing new is saved and the saved items stay until you delete them. (0010)diktier-history: "Encrypt history" seals every dictation, its audio and its revisions on its own (XChaCha20-Poly1305) with a random key kept in the macOS Keychain (Windows Credential Manager, Linux Secret Service); a copy of the file shows no dictated word, a damaged item fails alone, and switching it on or off rewrites everything in one step or changes nothing. (0010)diktier-history: an optional passphrase (8 or more characters, Argon2id) wraps the key, so the history opens locked and locks again on quit, on "Lock" and after 15 minutes unused; after 5 wrong passphrases every unlock waits 30 seconds, and a dictation made while locked is pasted as usual and saved at the next unlock (up to 20). (0010)diktier-history: "keep audio" stores each dictation's audio (16 kHz, mono, 16-bit); an item with audio can be transcribed again with another model or language, each result is kept as a revision beside the dictated text, and "use new" shows a revision without losing the dictated one; a running dictation, a missing model or no audio gives a clear error. (0010)diktier: each dictation is saved to the history after it was pasted, without delaying the paste; the history settings apply at once, the file's own encryption state is the truth, and no dictated text, audio, passphrase or key is written to a log. (0010)diktier-ui: a History view lists the dictations with chips for app, language, model and audio length, a search field, and "Copy", "Paste again", "Re-transcribe…" (old and new text side by side) and "Delete" with an undo; it also shows the locked, empty, no-match and history-off states. (0010)diktier-ui: "History & privacy" in the settings holds the switches for saving the history and keeping audio, the number of dictations to keep, "Encrypt history", the passphrase dialogs and "Delete all history…"; all of it in German and English, light and dark. (0010)diktier-history: a history file written by a newer version of diktier is read, never written, and a save gives a version error instead of damaging it. (0010)
2026-11-02 00:37 UTC · plan 0017
- Plans: 0017 linux follow-up
- Versions: diktier 0.8.1, diktier-audio 0.8.1, diktier-cli 0.8.1, diktier-core 0.8.1, diktier-models 0.8.1, diktier-paste 0.8.1, diktier-permissions 0.8.1, diktier-stt 0.8.1
Added
diktier: after every landing on main, the Linux CI on the T460p builds the app, installs it and restarts it in the user's session, so the running app is always main's version and sha; the window title shows both. (0017)diktier:code/bash/scripts/linux-hand-checkis a read-only script that checks the T460p over ssh after a landing: the app's unit and stamp against main, the CLI on a fixture recording, and what a person must still look at. (0017)
Changed
diktier: the Linux CI is much faster: sccache and a warm build folder are kept between runs, a landing that changes nothing Linux skips the Linux jobs (green markers), and only the build-relevant checks run. (0017)diktier: the Linux CI jobs are never required for a landing; a red Linux job is fixed afterwards in a follow-up landing. (0017)
Fixed
diktier: a stale test binary on the Linux CI machine no longer fails the whisper tests: fixtures are read at run time and scratch builds stay out of the runner's build folder. (0017)
2026-11-02 00:00 UTC · plan 0016
- Plans: 0016 windows follow-up
Added
diktier: Windows CI has its own workflowci-windows(.github/workflows/ci-windows.yml) on the Windows laptop: only the Windows build and the tests of the per-OS crates, skipped when nothing it reads changed since its last green run (green markers,code/bash/scripts/gate/lib/green.sh); fmt, clippy and the UI checks stay on the Mac. (0016)
2026-11-01 23:13 UTC · plan 0019
- Plans: 0019 website install
Added
diktier: diktier can be downloaded and installed from diktier.divramod.me:curl -fsSL https://diktier.divramod.me/install | shchecks the download's SHA-256 and installs the newest Mac build into /Applications, and the .dmg from the page opens by double-click and installs by draggingdiktier.apponto Applications. (0019)diktier: the page diktier.divramod.me shows the latest version and sha of every system (Mac, Linux, Windows) with its download, and marks a system whose build is behind the newest as not the latest. (0019)
2026-11-01 22:03 UTC · plan 0007
- Plans: 0007 transcription
- Versions: diktier 0.7.0, diktier-audio 0.7.0, diktier-cli 0.7.0, diktier-core 0.7.0, diktier-models 0.7.0, diktier-paste 0.7.0, diktier-permissions 0.7.0, diktier-stt 0.7.0
Added
diktier-stt: speech is turned into text on this computer with whisper.cpp (no cloud speech-to-text), on the Mac's GPU (Metal) and on the CPU elsewhere, German, English or detected automatically; the model is loaded once and kept warm on its own thread, and unloaded after a while without use. (0007)diktier-stt: silence never reaches the decoder: a quiet room, steady noise (a fan, running water) and the phrases whisper.cpp invents from silence ("Untertitel ...", "Thanks for watching") give no text at all. (0007)diktier-stt: a live partial text while you speak (only the newest one is decoded, a final result stops a running partial, and a partial is never pasted), and each result carries its audio, speech and decode times and the real-time factor. (0007)diktier-cli:diktier-cli models [--tsv]lists the speech models and the Silero voice detector with size, SHA-256 and download address, anddiktier-cli models fetch <name>...downloads them into the models folder (DIKTIER_MODELS_DIR, else the system cache folder), checks the SHA-256 and keeps a file that is already correct. (0007)diktier-cli:diktier-cli transcribe [--model] [--vad-model] [--language de|en|auto] [--cpu] <in.wav>transcribes any WAV file (any sample rate and channel count); the text goes to stdout, the timings to stderr, and a file without speech prints nothing and exits with 0. (0007)diktier-cli:diktier-cli listen [--device <id>] [--language de|en|auto] [--cpu]listens to the microphone for one utterance, shows partial text on stderr while you speak and prints the final sentence on stdout; with no speech it prints no text and exits with 0, with a dead microphone it exits with 3. (0007)diktier-cli:diktier-cli bench [--runs 3] <wav or folder>decodes each file several times and prints the median decode time and the real-time factor per file, to compare the models and the Metal and CPU backends. (0007)
2026-11-01 21:58 UTC · plan 0016
- Plans: 0016 windows follow-up
Added
diktier: Windows CI has its own workflow "CI · Windows" (.github/workflows/ci-windows.yml) on the Windows laptop: only the Windows build and the tests of the per-OS crates, skipped when nothing it reads changed since its last green run (green markers,code/bash/scripts/gate/lib/green.sh); fmt, clippy and the UI checks stay on the Mac. (0016)
2026-11-01 21:45 UTC · plan 0015
- Plans: 0015 app on every landing
Added
diktier: the app shows its version and git sha, asdiktier <version> (<sha>)in the window title and in a line at the bottom of the main window. (0015)diktier: every landing on main builds the release app on the Mac host runner with a warm cache, installs it, restarts it and checks that the running app has the landed sha (workflow "App on landing · Mac",docs/host-runners.md); the Mac's build caches no longer used are cleaned after each run. (0015)diktier:CHANGELOG.mdis written on every landing from the plans' changelog fragments, and the app's version is bumped by it. (0015)
2026-11-01 21:17 UTC · plan 0016
- Plans: 0016 windows follow-up
Added
diktier: the Windows build laptop's CI runs faster: an idempotent script (code/powershell/scripts/defender-exclusions/Install.ps1, run elevated) excludes diktier's build folders and the Rust build tools from Microsoft Defender's real-time scan; the decision recorddefender-exclusions-laptop-cisays what is excluded, why and how to undo it. (0016)
2026-11-01 20:57 UTC · plans 0003, 0004, 0005, 0006, 0008
- Plans: 0003 skeleton and ci, 0004 audio capture, 0005 core pipeline, 0006 macos paste, 0008 app shell
- Versions: diktier 0.6.0, diktier-audio 0.6.0, diktier-cli 0.6.0, diktier-core 0.6.0, diktier-models 0.6.0, diktier-paste 0.6.0, diktier-permissions 0.6.0, diktier-stt 0.6.0
Added
diktier: diktier has its first runnable build: a Cargo workspace with thediktier-core,diktier-audio,diktier-sttanddiktier-pastelibraries and thediktier-clitool (diktier-cli --version). (0003)diktier: a desktop app window "diktier" built with Tauri 2 and React for Apple Silicon Macs on macOS 14 or newer (pnpm tauri build --bundles app); it shows its text in German or English by the system language and follows the light or dark theme of the system. (0003)diktier: continuous integration on self-hosted runners: every landing is tested on the Mac host runner (formatting, clippy, tests, UI checks and the app build), and a separate workflow checks Linux and Windows on the two laptops without ever holding up a landing. (0003)diktier-audio: microphone capture with the device's own settings (any sample rate, channel count and sample format): the input devices can be listed, the audio is mixed down to mono in the real-time callback and handed on through a wait-free ring that drops and counts samples when it is full. (0004)diktier-cli:diktier-cli deviceslists the input devices (the default marked with*), anddiktier-cli record --seconds <n> [--device <id>] <out.wav>records the microphone to a mono 16-bit WAV file; on macOS it warns, with exit code 3, when the recording is silent because the terminal app has no microphone permission. (0004)diktier-core: microphone audio at any sample rate becomes 16 kHz speech segments; silence and steady noise give none, a pause of 0.9 seconds ends a segment and one segment lasts 30 seconds at most. (0005)diktier-core: the settings for this (pause length, sensitivity, maximum length and more) have sensible defaults, are checked for impossible values and an older settings file still loads. (0005)diktier: two written decision records explain why audio is mixed down before it is resampled and why a simple energy-based voice detector is used first. (0005)diktier-paste: text can be pasted into the frontmost macOS app, by a clipboard write and a Cmd+V, with the clipboard restored afterwards (it needs the Accessibility permission); tried by hand withcargo run -p diktier-paste --example paste, the app's hotkey comes later. (0006)diktier: diktier is a menu bar app without a Dock icon: press Option+Space and speak, pause or press again, and the text is pasted into the app you were in; hold the key for push-to-talk; the menu bar icon shows the state, its menu cancels a dictation. (0008)diktier: a first-run onboarding leads through the microphone and Accessibility permissions, downloads the recommended speech model with progress and a checksum check, sets the hotkey and lets you try a dictation. (0008)diktier: a main window with the status, the last text and how long it took, and settings for the hotkey, auto-stop, a paste-last-again shortcut, the input device, dictation language, models, a vocabulary list, theme, UI language and opening at login. (0008)diktier: every screen and the menu are in German and English and follow the system's light or dark look, each switchable in the settings. (0008)