Offline ink-and-paper screenwriting.
Script · Board · Timeline — one document, no accounts.
⬇ Download latest release · Install · Features · Develop
One entity, three views. A scene is a script block and a board card and a timeline event.
| Author | Nicholas Siegel (liminallyspaced) |
| Stack | Electron 33 · vanilla JS · esbuild · vitest |
| Platforms | Windows x64 (installer + portable) · macOS arm64/x64 (DMG via CI/Mac) |
| License | MIT |
Screenwriters juggle format tools, boards, and timelines — three apps, three models of “what a scene is,” plus logins and subscriptions.
DreamWrite is a single offline desktop workspace:
- Industry-style pagination for screen and PDF
- Full undo (command stack — prose is never silently dropped)
- Board + timeline linked to the same script entities
- No accounts, no telemetry, no network by default
| Area | What you get |
|---|---|
| Script | Courier Prime · 54 lines/page · Tab/Enter flow · CONT'D/MORE · multi-page paper stack · PDF |
| Pagination | One engine for layout, stats, and export |
| Undo | Full command history · typing merges · Ctrl/Cmd+Z |
| Marking wheel | Middle-mouse hold · ≤8 contextual items · flick to mark · drag to pan |
| Timeline | Integer ticks · bookend eras · lane packing · scene sync · jump to script |
| Board | Notes · scene-cards · nested boards · templates · image assets · tables |
| Search / Bible | Offline full-text · characters & locations from script |
| Projects | Fountain in/out · folder packages + content-addressed assets · atomic saves |
| Non-goal | Why |
|---|---|
| Real-time collab | Needs accounts/server — breaks the premise |
| Stock photos by default | Network is not the default |
| Web clipper as core | Separate product if ever |
Monochrome carbon desk · clean white paper · Courier only on the page · IBM Plex / Source Serif for chrome.
Screenshots are live captures of the app (sample project The Last Signal), not concept art.
From Releases:
| File | Use |
|---|---|
DreamWrite-Portable-*.exe |
Preferred: install via npm run deploy:desktop |
DreamWrite-Setup-*.exe |
Optional NSIS (does not auto-spam Desktop shortcuts) |
npm run deploy:desktop # pack + install + scrub Desktop
npm run deploy:desktop:quick # reinstall from existing dist/| What | Where |
|---|---|
| App binary | %LOCALAPPDATA%\Programs\DreamWrite\DreamWrite.exe |
| Desktop | Exactly one DreamWrite.lnk (nothing else) |
| Old builds | %LOCALAPPDATA%\DreamWrite\archive\ (never Desktop) |
Deploy removes loose Desktop DreamWrite*.exe, *-FIXED.lnk, unpack folders, and old archive piles. Do not keep a second git clone on the Desktop — use SYNTH-PROJECTS\ScriptDesk only.
SmartScreen may warn on unsigned builds → More info → Run anyway if you trust the source.
Download the .dmg for your chip (arm64 or x64) from Releases (when published), or build on a Mac:
npm install && bash scripts/pack-mac.shFirst open if unsigned: right-click → Open.
Projects live in Documents/DreamWrite/.
git clone https://github.com/liminallyspaced/dreamwrite.git
cd dreamwrite
npm install
npm startnpm test # unit tests
npm run test:smoke # Electron smoke (Windows)
npm run pack:win # Setup + Portable → dist/
npm run deploy:desktop # pack + clean Desktop (archive older builds)| Command | Output |
|---|---|
npm run pack:win |
DreamWrite-Setup-<ver>.exe + DreamWrite-Portable-<ver>.exe in dist/ |
npm run pack:mac |
DMG + ZIP (must run on macOS) |
npm run deploy:desktop |
Single Desktop shortcut → LocalAppData install; archives off-Desktop |
Tag a release to trigger CI builds:
git tag v1.2.1
git push origin v1.2.1src/core/ pure modules — store, pagination, board, timeline, format-v2
src/views/ script / board / timeline UI
src/app.js renderer shell
main.js Electron main — dialogs, atomic writes, path sandbox
docs/ ADRs + specs
website/ README images + optional static landing assets
Invariants: offline · core/ has no DOM · mutations via command stack · one pagination engine · never silently delete prose · never migrate projects in place.
- 177 unit tests (vitest)
- Electron smoke (load · type · autosave)
- Windows NSIS installer + portable via electron-builder
| Shortcut | Action |
|---|---|
| Tab / Enter | Cycle element / new block |
| Ctrl/Cmd+1…7 | Element type |
| Ctrl/Cmd+Z | Undo |
| Ctrl/Cmd+S / O / N | Save / Open / New |
| Ctrl/Cmd+F | Find |
| Ctrl/Cmd+P | Export PDF |
| F11 | Focus mode |
| MMB | Wheel / mark / pan |
MIT — see LICENSE.
Not affiliated with Final Draft, WriterDuet, Celtx, Milanote, or Aeon Timeline.



