17 · Developer Guide

Development Setup

Install build tools and run Steno from source.

Prerequisites

Use an Apple silicon Mac, Xcode with Swift 6.2 or later and command-line tools, XcodeGen, CMake, and a local Apple Developer Team for an Xcode-run build. CI is configured for Xcode 26.3. Your build host must support the selected Xcode version; macOS 13 is the app's deployment target.

If you use Homebrew, install missing tools with brew install xcodegen cmake.

Repository Setup

Clone the app repository and select the branch or tag you want to build. Use the setup guide from that source version.

git clone https://github.com/Ankit-Cherian/steno.git
cd steno

From the selected source checkout, build the pinned runtime and download the models:

git clone https://github.com/ggerganov/whisper.cpp vendor/whisper.cpp
cd vendor/whisper.cpp
git checkout 764482c3175d9c3bc6089c1ec84df7d1b9537d83
cd ../..
scripts/build-whisper-runtime-helper.sh
cd vendor/whisper.cpp
./models/download-ggml-model.sh small.en
cd models
./download-vad-model.sh silero-v6.2.0
cd ../../..

The helper verifies the pinned revision and builds whisper-cli and steno-whisper-runtime under vendor/whisper.cpp/build-steno/bin/, targeting arm64 and macOS 13. The models should be ggml-small.en.bin and ggml-silero-v6.2.0.bin under vendor/whisper.cpp/models/. These downloads require internet access. The runtime build does not enable a server or network listener.

Project Generation

xcodegen generate
open Steno.xcodeproj

Set your team in Signing & Capabilities and run the Steno scheme. Edit project.yml and regenerate when project configuration changes; the generated Xcode project is not the source of truth.

If discovery fails, open Settings → Speech model → Advanced setup and diagnostics. Use absolute paths within your checkout for the CLI, Small model, and VAD model, then choose Save changes. Public distribution signing and notarization are separate from this local setup.

Developer Workflow

Make a focused change, run relevant StenoKit tests, and build the app. Test the affected recording, insertion, permissions, or interface behavior in the app. Confirm that the completed text reaches the intended field. Changing signing identity can require new macOS permission grants.