Adapted from
docs/ARCHITECTURE.mdin Script-Control-Software. See Script Control Software for the overview.
React workspace
mode presets · document tabs · panel registry/dock renderer · ScriptTarget navigation
│ validated Tauri commands and targeted events
Rust backend
session coordinator · window/drag registry · FDX parser · recoverable project I/O
│
Open local data
scs.project.json · Fountain/FDX · reports · provider folders · HTTPS Git
SCS is a Tauri 2 app: React/TypeScript workspace up front, Rust commands for native authority, files, and parsing.
The shipping runtime persists one versioned ProjectSession as its durable unit — all screenplay documents, shared series/collaboration/layout data, and history move and persist together. Screenplay block arrays are the source for derived scenes, characters, locations, objects, and reports. Board order remains outline state until the writer explicitly chooses Make Draft Match Outline.
Key domains: analysis.ts (deterministic recognition, reports) · story.ts / storyNavigation.ts / storyPlacement.ts (Act → Sequence → Scene → Beat hierarchy) · scriptTarget.ts (typed script navigation) · documentTabs.ts · workspaceLayouts.ts / dockTree.ts (docking, layouts, recovery).
Local-first: a team shares the same portable scs.project.json through a provider-synced folder, network folder, removable drive, or HTTPS Git remote. SCS never uploads a project by itself.
Nine roles gate every mutating control: Owner, Writer, Co-writer, Director, Producer, Story editor, Script coordinator, Reader, Viewer — with granular edit/comment/suggest/approve/review/writer-room/sync/people permissions.
The Acting as selector is a local advisory identity, not authentication — it lets a trusted team exercise role-specific workflows without a server. Real security boundaries come from OS permissions, provider sharing controls, or Git-host access controls. The future hosted transport (protocol v1, server-readable over authenticated TLS, not E2EE) binds verified users/devices/actors to exact project grants.
pnpm install --frozen-lockfile && pnpm check && pnpm lint && pnpm test
pnpm exec playwright install chromium && pnpm test:e2e
cargo fmt --manifest-path src-tauri/Cargo.toml -- --check
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets --all-features -- -D warnings
cargo test --manifest-path src-tauri/Cargo.toml
Chromium and Rust unit tests don't prove OS windows, native capabilities, file dialogs, or external-editor handoff — the native multi-window checklist in docs/TESTING.md covers release verification.