Open source · MIT · self-hostable
The script on your laptop.
On every screen in the room.
A control page holds the script and the controls. One or more viewer displays show it — a window on a second monitor, a tablet on the floor, a phone across the room. Scroll position, content, speed, text size, layout, messages and clocks stay in sync, peer‑to‑peer. Nothing to install.
Try the live demo Get started Source
The Go server only introduces the peers. Your script never passes through it.
Try it, right here
Below is the real application, not a recording — a control page and a viewer, in their own private room, talking to each other peer to peer. Type in the script; it appears on the viewer. Press Space in the control pane to roll.
Two full applications side by side need a screen wider than this one. Open the app in its own tab — it is built for a phone too.
What you get
Any screen is a display
Open the viewer link on anything with a browser. Each display reports its own shape, so a phone in portrait and a monitor in landscape both show the right amount of script.
Read ahead, on purpose
The operator's own pane is deliberately not scroll-synced — you read ahead of, or behind, the talent. The Sync buttons close that gap in either direction when you want it closed.
Edit without anyone seeing
Hold your edits back while you fix a line mid-service, then push the whole thing with Send my script. Or leave live editing on and let every keystroke through.
PDFs, not just prose
Drop a PDF in and prompt straight from it. It travels on its own data channel, and each document remembers where you had got to.
Clocks and cues
A countdown by duration or to a time of day, surviving a reload, plus messages you can put on the talent's screen without touching the script.
A game controller works
Triggers for speed, sticks to scroll, D-pad for the viewers' text size. Cheap, silent, and it fits in a pocket.
Layouts are just CSS
Viewer themes are stylesheets, edited live in the app against nine documented custom properties. Ship your own look.
Yours to run
One Go binary with the frontend embedded, one dependency, a Dockerfile, and an MIT licence. Run it on a laptop on a LAN or on a box you own.
What it looks like
How it works
The control page and the viewers connect to each other directly, over WebRTC data channels. The server's only job is introducing them — after that it is not in the path, and it never sees a word of your script.
That is also why it stays responsive on bad conference wifi: scroll position goes over an unreliable channel where a dropped sample is simply the next one arriving, while content and control travel reliably on their own.
Run your own
The frontend is TypeScript bundled by Deno; the Go server embeds it and serves it alongside the signalling endpoint. With Docker it is one command.
git clone https://github.com/17xande-dev/teleprompter.git
cd teleprompter
docker compose up --build
deno task build
cd src/backend && go run .
Then open http://localhost:8080. The control page gives
itself a room and shows a viewer link — open that on any device on the
network.