Professional screenwriting software. Free. Open source. Runs in your browser.
OpenWrite is a fully-featured, industry-standard screenwriting tool that runs as a single HTML file. Zero dependencies. Zero installation. Zero cost. Open it in a browser and start writing.
Part of the OpenSlate suite — a free, open-source filmmaking toolkit.
Every element matches WGA industry-standard format — margins, capitalization, spacing, and indentation are all correct out of the box. The Enter key is context-aware throughout. Tab cycles element types instantly.
| Element | Format |
|---|---|
| Scene Heading | ALL-CAPS, bold. Auto-detected on INT. / EXT. |
| Action | Full width, mixed case |
| Character | ALL-CAPS, centered column |
| Parenthetical | Italic, auto-wrapped in parentheses |
| Dialogue | Standard screenplay column margins |
| Transition | ALL-CAPS, right-aligned. Auto-detected |
Suggestions appear as you type — no trigger required.
- Type
Iin a scene heading →INT.,INT./EXT.,I/E - Type
E→EXT. - After
INT. LOCATION -→DAY,NIGHT,CONTINUOUS,LATER, and more - In a Character element → every name used in the script so far
- In a Transition element →
CUT TO:,FADE OUT.,SMASH CUT TO:, full standard list
Navigate with arrow keys. Confirm with Tab, Enter, or click.
Real-time analysis panel. Flags professional issues as you write without interrupting your flow. Click any issue to jump directly to the line.
| Flag | Rule |
|---|---|
Missing FADE IN: |
Scripts open with FADE IN: |
Missing FADE OUT. |
Scripts close with FADE OUT. or THE END |
| Long action block | Over 4 lines slows pacing |
| Long monologue | Over 8 lines loses readers |
"We see" / "We hear" |
Describe directly |
| Scene missing time of day | Every heading needs DAY, NIGHT, CONTINUOUS, etc. |
| Passive voice | Action lines need active verbs |
| No scene heading on page 1 | Every location needs a scene heading |
Select any text and a floating toolbar appears — Bold, Italic, Underline, Strikethrough, Clear formatting. Works on every element type. Touch-screen supported.
- A4-proportioned page shell — always looks like a real sheet of paper
- Pages grow naturally as you write
- Page-break rulers appear every 55 lines with page numbers
- Live page count, word count, and scene count in the navbar
Left sidebar:
- Scenes — live list of every scene heading; click to jump
- Characters — auto-populated from every Character element
- Notes — freeform scratchpad, saves with the script
Right sidebar — Script Doctor with clickable issue cards.
Both collapse on desktop. On mobile they become full-screen slide-over drawers.
PDF — Ctrl+P opens a print-ready layout. All UI chrome hidden. Browser headers and footers suppressed via @page { margin: 0 }. If a title page is configured it prints as a separate first page with correct screenplay formatting.
.txt / .fountain — Ctrl+S downloads a plain-text file with proper screenplay indentation preserved.
Configured via the Title Pg button — Title, Author, Based On, Draft, Date, Contact. Stored separately from the editor. Never clutters your writing view. Prepended automatically on every export.
- Autosaves to
localStorageevery 30 seconds - Detects and offers to restore a saved script on reload
- Live save status indicator
| Feature | Shortcut |
|---|---|
| Dark / Light mode | Ctrl+D |
| Revision mode — new lines highlighted in blue | toolbar |
| Focus mode — hides all UI, just the page | Ctrl+Shift+F |
| Find & Replace with match count | Ctrl+F |
Fully functional on phones and tablets. The layout adapts completely at ≤768px:
- Navbar shows logo, title, and hamburger
☰only - Bottom element bar — all six element types at thumb level
- Sidebars become full-screen slide-over drawers; swipe to dismiss
- Hamburger menu — bottom sheet with every feature
- Virtual keyboard handling via
visualViewportAPI - Swipe in from screen edges to open sidebars
- Touch-aware formatting toolbar
| Action | Shortcut |
|---|---|
| Cycle element type | Tab |
| Smart new line | Enter |
| Confirm autocomplete | Tab / Enter |
| Scene Heading | Ctrl+1 |
| Action | Ctrl+2 |
| Character | Ctrl+3 |
| Parenthetical | Ctrl+4 |
| Dialogue | Ctrl+5 |
| Transition | Ctrl+6 |
| Bold / Italic / Underline | Ctrl+B / Ctrl+I / Ctrl+U |
| Save as .txt | Ctrl+S |
| Export PDF | Ctrl+P |
| Find & Replace | Ctrl+F |
| Dark / Light mode | Ctrl+D |
| New scene heading | Ctrl+Shift+N |
| Focus mode | Ctrl+Shift+F |
FADE IN:
INT. POLICE STATION - INTERROGATION ROOM - NIGHT
A single bulb swings above a metal table. KHALID (30s,
sharp eyes, exhausted) sits with his hands flat on
the surface. DETECTIVE RAZA (40s) enters.
DETECTIVE RAZA
We found the car.
KHALID
(not looking up)
Then you already know everything.
CUT TO:
| Layer | Choice |
|---|---|
| Language | Vanilla HTML / CSS / JS — zero build step |
| Font | Courier Prime via Google Fonts |
| Storage | localStorage |
| Hosting | Vercel |
| CI/CD | Push to main → live in ~20 seconds |
Use it instantly:
https://openwrite.vercel.app
Run locally:
git clone git@github.com:kazim-45/openwrite.git
cd openwrite
# Open index.html in any browser — no server neededDeploy your own:
Fork this repo → connect to Vercel → done.
Vercel detects index.html automatically. No configuration required.
OpenWrite is the first tool in the OpenSlate filmmaking suite.
| Tool | Description | Status |
|---|---|---|
| OpenWrite | Screenplay editor | ✅ Live |
| OpenFrame | Pre-production suite — storyboard, shot list, call sheet | ✅ Live |
| OpenView | Viewfinder and shot planning tool | 🔜 Coming |
The long-term vision: write your script in OpenWrite, plan your shoot in OpenFrame, frame your shots in OpenView — all connected, all free.
- Import script into OpenFrame with one click
- Google authentication via NextAuth.js
- Cloud saves — Supabase per-user storage
- Script dashboard — list, rename, duplicate, version history
- Real-time collaboration
- Custom domain —
openwrite.app
Pull requests are open. If you find a formatting bug — wrong margins, wrong capitalization behavior, incorrect Tab/Enter flow — open an issue with the specific element type and the expected vs. actual behavior.
MIT — use it, fork it, ship it. Credit appreciated, not required.
Built by Kazim — 17-year-old developer and filmmaker from Lahore, Pakistan.
GitHub · OpenWrite · OpenFrame
FADE IN. Write something real.