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.

Room — yours alone, discarded when you leave.

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.

Control your laptop Go server signalling only Viewer second monitor Viewer tablet on the floor Viewer phone across the room ── introductions, once ── the script, peer to peer the script never touches the server

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.

Read the architecture

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.

Docker From source
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.

Self-hosting guide