Technical documentation

August 1, 2026 · View on GitHub

Reference documentation for how OpenScreen is built. It describes the system as it is on this branch — not how it got here. Product direction lives in ../ROADMAP.md, day-to-day contributor rules in ../AGENTS.md and ../CONTRIBUTING.md, and end-user documentation in ../website/docs/.

Organised by type — architecture (what the system is), engineering (how it is built and shipped), testing (how it is verified) — and within each type, by subsystem.

Architecture

Start with the overview: the process model, the authoring levels, and who reads and writes the project document.

DocSubsystem
overview.mdThe whole picture: windows, processes, data flow, subsystem map
document-model.mdAxcutDocument — the single source of truth, its schema, migrations and persistence
timeline-model.mdTime reference frames, clip-anchored modifiers, and the invariants that keep preview and render agreeing
editor-shell.mdThe editor UI: surfaces, modes, facets, and how to add a region kind
preview.mdShowing the frame at the playhead: scene description, frame delivery, playback sync
native-compositor.mdThe Rust + D3D11 engine that composites and encodes, for both preview and export
export-pipeline.mdDocument to file: render plan, segment loop, audio junctions, output formats
recording.mdCapture on Windows, macOS and Linux: the HUD, the native helpers, what lands on disk
cursor.mdCursor capture, telemetry, rendering and auto-follow
transcription-and-captions.mdOn-device speech to text, and the caption layer derived from it
ai-agent.mdThe optional agent: tool loop, checkpoints, context management
llm-providers.mdProvider registry, auth modes, credential storage
native-bridge.mdThe renderer ↔ main-process contract every native capability goes through
decisions.mdThe decision ledger — what is settled, what was rejected and why

Engineering

DocTopic
rendering-performance.mdThe measurement record for preview fluidity and export speed
build-and-packaging.mdBuild commands, native artifacts, per-platform packaging
ci-workflows.mdThe GitHub Actions tiers and how artifacts flow between them
release-and-secrets.mdCutting and promoting a release; the secrets it needs

Testing

DocTopic
writing-tests.mdUnit, browser and end-to-end tests: which to write, where, how to run them
manual-e2e-checklist.mdWhat automated tests cannot reach — real capture, a real webcam, the tray, export
native-cursor-diagnostics.mdWindows and macOS cursor sampler tools and how to read their reports

Keeping this current

Three rules, in order of how much damage breaking them does:

  1. The code is the authority. If a doc and the code disagree, the doc is wrong. Fix it in the same change that made it wrong.
  2. Describe, don't narrate. These are references, not plans or changelogs. No task tables, no phase numbers, no "recently fixed" — git already records history, and a doc that mixes the two makes a reader guess which sentences are still true.
  3. Settled questions go in decisions.md. Including the rejected routes, with the reason. That file is what stops the same idea being re-proposed every quarter.

npm run docs:check enforces the mechanical part: every required doc exists, every relative link resolves, and no doc presents a removed component as current.