A screenwriting editor application with native Fountain support.
  • Zig 94.4%
  • Scheme 3.7%
  • Shell 1.2%
  • Python 0.5%
  • Swift 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-07 10:54:15 +02:00
examples pagination: print parity + byte-level speech cuts; editor: seam-aware movement 2026-07-21 17:22:18 +02:00
fonts fonts: ship Quote-Unquote's own Courier Prime licence 2026-08-05 02:02:01 +02:00
scripts release: put sokol back in DEPS, and check the pin before tagging 2026-08-07 10:38:19 +02:00
src comments: state the design, not how it got there 2026-08-07 00:05:32 +02:00
test editor: no empty element under a page break; mark a selected break 2026-08-03 12:30:40 +02:00
.devkit.conf release: put sokol back in DEPS, and check the pin before tagging 2026-08-07 10:38:19 +02:00
.gitattributes git: merge=ours on build.zig.zon (matches quote and comb) 2026-07-25 21:40:57 +02:00
.gitignore dev: setup-tools + devkit config for the main/dev split 2026-07-25 20:06:10 +02:00
build.zig theme: lighter scene and section boxes in dark, and keep the stripes 2026-08-06 18:50:08 +02:00
build.zig.zon Merge branch 'dev' 2026-08-07 10:54:15 +02:00
CLAUDE.md docs: record the main/dev workflow for future sessions 2026-07-25 20:10:52 +02:00
context.md docs: close-to-background, the dialog rule, and what the failures taught 2026-08-05 22:32:11 +02:00
DESIGN.md docs: close-to-background, the dialog rule, and what the failures taught 2026-08-05 22:32:11 +02:00
LICENSE Add MIT license 2026-07-25 12:00:19 +02:00
README.md docs: the release incident, the new features, and a README that is current 2026-08-05 03:02:21 +02:00
RELEASING.md release: put sokol back in DEPS, and check the pin before tagging 2026-08-07 10:38:19 +02:00
reveal.svg docs: the release incident, the new features, and a README that is current 2026-08-05 03:02:21 +02:00
TODO.md window: a Dock click with no document puts up the Open panel 2026-08-06 10:19:34 +02:00

Reveal

A screenwriting editor — Fountain format, written in Zig with an immediate-mode GUI and Scheme scripting.

Status: in development, but usable for real work — it edits, paginates and prints screenplays, reads and writes Final Draft .fdx, and ships as a macOS app that updates itself. Releases.

Install

zig build install-user -Doptimize=ReleaseFast   # -> ~/Applications/Reveal.app

Or download a release. Updates are verified against a minisign signature and a pinned sha256 before anything is replaced.

Build

zig build                                  # -> zig-out/bin/reveal
zig build run
zig build install test                     # build the exe AND run the tests
zig build bundle -Doptimize=ReleaseFast    # -> zig-out/Reveal.app

Zig 0.16.0. Dependencies are sibling checkouts on dev, pinned url + hash on main — see DESIGN.md "Branches".

Stack

Concern Library
Window + event loop dvui-sokol
Immediate-mode GUI dvui (our fork)
Document / text model storykit
Fountain parse / serialize zfountain
Final Draft .fdx zfdx
PDF export platen
Scripting + integration tests zscheme

The core is a bidirectional bridge between zfountain.Document and storykit.Document: zfountain owns screenplay semantics, storykit owns the editable text model, so structure survives editing instead of being re-inferred on every keystroke. Everything that can be is a pure library module — pagination, PDF layout, file detection, update verification — unit-testable without a window.

DESIGN.md has the full design; RELEASING.md how a release is cut.

Examples

examples/ carries public-domain Fountain screenplays with reference PDFs: Big Fish (also .fdx), Brick & Steel, The Last Birthday Card.

Fonts

src/fonts/ bundles Courier Prime (the page and every PDF), Courier Prime Sans (alternative page face), Inter (UI chrome) and Noto Emoji (glyph fallback) — all OFL 1.1, each with its licence, all @embedFiled. Nothing to install, and PDF export needs no system fonts.

License

MIT — see LICENSE.