free forever, open source, installs like an app

Your script,
on both screens.

Turn any second device into the remote for the screen your audience sees. Both stay on the same line.

Both panels are showing the same script at different type sizes. The remote’s controls drive them together.

The screen they seeK7M-2QF
Good evening, and thank you for making the time.
Tonight I want to talk about one small thing.
cuelook at the lens, not the screen
Every product starts as a sentence someone said out loud.
Before the deck. Before the first line of code.
Somebody stood up and said it badly to three people.
cueslow down, let it land
Our job is to keep that sentence intact.
Through every handoff, every rewrite, every sprint.
That is the whole idea. Thank you.
Good evening, and thank you for making the time.
Tonight I want to talk about one small thing.
cuelook at the lens, not the screen
Every product starts as a sentence someone said out loud.
Before the deck. Before the first line of code.
Somebody stood up and said it badly to three people.
cueslow down, let it land
Our job is to keep that sentence intact.
Through every handoff, every rewrite, every sprint.
That is the whole idea. Thank you.
Good evening, and thank you for making the time.
Tonight I want to talk about one small thing.
cuelook at the lens, not the screen
Every product starts as a sentence someone said out loud.
Before the deck. Before the first line of code.
Somebody stood up and said it badly to three people.
cueslow down, let it land
Our job is to keep that sentence intact.
Through every handoff, every rewrite, every sprint.
That is the whole idea. Thank you.
Good evening, and thank you for making the time.
Tonight I want to talk about one small thing.
cuelook at the lens, not the screen
Every product starts as a sentence someone said out loud.
Before the deck. Before the first line of code.
Somebody stood up and said it badly to three people.
cueslow down, let it land
Our job is to keep that sentence intact.
Through every handoff, every rewrite, every sprint.
That is the whole idea. Thank you.
Good evening, and thank you for making the time.
Tonight I want to talk about one small thing.
cuelook at the lens, not the screen
Every product starts as a sentence someone said out loud.
Before the deck. Before the first line of code.
Somebody stood up and said it badly to three people.
cueslow down, let it land
Our job is to keep that sentence intact.
Through every handoff, every rewrite, every sprint.
That is the whole idea. Thank you.
Good evening, and thank you for making the time.
Tonight I want to talk about one small thing.
cuelook at the lens, not the screen
Every product starts as a sentence someone said out loud.
Before the deck. Before the first line of code.
Somebody stood up and said it badly to three people.
cueslow down, let it land
Our job is to keep that sentence intact.
Through every handoff, every rewrite, every sprint.
That is the whole idea. Thank you.

The one you hold

Three steps, then the script follows your voice instead of your thumb.

  1. 01

    Write it

    A plain Markdown editor. Headings split the script into sections, bullets give you one beat per line, and a line starting with two colons becomes a cue only you see.

  2. 02

    Open a room

    Press Start a session and this screen becomes the display. You get a six-character code, the only thing you have to carry to the other device.

  3. 03

    Drive it

    Sign in on your phone with the same account, type the code, and it becomes the remote: play, pace, previous line, next line, tap any line to jump there.

Or stop setting a pace, and just talk.

Turn on voice tracking and the display listens. Words go grey as you say them, and the script moves when you move, not at 130 words a minute, not at whatever you guessed before you started. Pause to take a question and it waits. Skip a sentence and it skips with you.

It finds your place, not your next word
The last few words you said are matched against the script around where you already were, so a misheard word, an ad-lib or a skipped line costs nothing. Lose the thread entirely and it searches the whole script to pick you back up.
In the browser, with no account anywhere
It uses the speech recognition already built into Chrome, Edge and Safari. There is no key to get and no service to sign up for, including for anyone running their own copy.
The remote still runs the room
Start and stop listening from your phone, and watch the words grey out on the mirror as they are read. The microphone stays on the display, where the person speaking is.
How voice tracking works, and where it does not
Listening18/32

Every product starts as a sentence. Somebody said it out loud, badly, to three people. Our jobis to keep that sentence intact.

heard: “somebody said it out loud badly to three people our job”

Recognition is your browser’s, not ours. In Chrome and Edge that means the audio goes to the browser vendor’s speech service; it never reaches Teleprompt, and nothing is recorded or stored. If that is not a trade you want to make, leave it off: everything else works exactly as it did.

The things you only notice when they are missing.

Mirror and flip

For beam-splitter glass and overhead rigs. Toggle from either device, mid-take.

Pace in words per minute

Not pixels per second. 130 wpm reads the same on a phone and a 27-inch display, because the speed is derived from the measured height of your script.

Cues you never say

Lines beginning with :: show up in orange on the prompter and are excluded from the word count.

Night, amber, paper

Three reading surfaces. Amber is the classic low-glare prompter look.

Keyboard first

Space to roll, arrows to step and change pace, F for fullscreen, M to mirror.

More than two devices

Add a second display for a co-host, or a second remote for a producer. One device drives; the rest follow.

Stays awake

The display holds a screen wake lock, so it will not dim halfway through your second paragraph.

Picks up where you stopped

Position is written back to the database every few seconds. Reload, or hand the remote to someone else, and the line is still there.

Markdown, plus one idea of our own.

No rich-text toolbar to fight, no formatting that only exists in one app. Write the words you are going to say, and let the structure of the document become the structure of the read.

## Section
Splits the script into parts you can jump between.
- bullet
One beat per line, so a remote can step through them.
:: cue
A note to yourself. Shown in orange, never counted as words.
---
A hard break, drawn as a rule on the prompter.
Writing scripts
keynote-open.md
## Opening Good evening, and thank you for making the time. :: look at the lens, not the screen Tonight I want to talk about one small thing. - Every product starts as a sentence.- Somebody said it out loud, badly, to three people.- Our job is to keep that sentence intact. --- :: slow down, let it land That is the whole idea. Thank you.

Add it to the home screen and forget it is a website.

Teleprompt installs like an app on iOS, Android, macOS and Windows. Full screen, its own icon, its own window, and a service worker that keeps the shell on the device, so a flaky venue network cannot leave you staring at a browser error two minutes before you go on.

  • Launches straight into your scripts
  • A shortcut that opens the remote directly
  • Never caches your scripts’ API responses, so what you see is what is saved

Read it, run it, change it.

The whole thing is MIT licensed and the repository is the real one: same code that runs here. Bring your own Supabase project and Google OAuth client and you have your own instance in about ten minutes.

built with

  • Next.js
  • TypeScript
  • tRPC
  • Tailwind CSS
  • Drizzle ORM
  • Supabase Postgres
  • Auth.js
  • WebRTC

Things worth contributing

  • A TURN server option, for networks that block direct routes.
  • Import from Google Docs and plain .txt.
  • Per-section countdowns for timed segments.
  • A foot-pedal mapping over the Gamepad API.
Contributing guide

the studio behind it

biios

Building what's next.

We partner with ambitious founders to build, scale and grow businesses that create real impact. Biios is a startup consulting studio in Pune, India.

120+
Projects delivered
45+
Industries served
98%
Client retention
12+
Countries reached
  • StrategyMarket research, positioning and go-to-market.
  • BrandingIdentity, storytelling and visual systems.
  • DigitalWebsites, web apps and digital experiences.
  • GrowthPaid campaigns, SEO and growth marketing.

Teleprompt started as a tool we needed for founder videos and launch films, and there was no reason to keep it to ourselves. It is given to the community as it is used internally: same code, no held-back paid tier.

Start a project with Biios

The ones people actually ask.

Can someone else join my room?

Only if they are signed in to your account. Rooms are scoped to an account, and the secret that names the realtime channel is only ever returned to a signed-in device on the owning account. The six-character code is a convenience for you, not a permission grant.

Why does the remote show smaller text than the display?

Because it is a phone. Both devices show the same words on the same line, but each lays them out for its own screen.

Does it work with beam-splitter glass?

Yes. Mirror horizontally for a standard beam-splitter rig, and flip vertically for an overhead setup. Both toggles are available from either device and take effect immediately.

What happens if I edit the script while a room is open?

The room picks it up on its own, within a few seconds. A room holds a snapshot rather than a live reference, because both devices have to render byte-identical text for positions to mean the same thing on each, but keeping that snapshot current is the app's job, not yours. Your reading position is carried across the change rather than reset.

Does voice tracking send my audio anywhere?

It uses the speech recognition built into your browser, so where the audio goes is your browser's decision rather than ours. In Chrome and Edge it is streamed to the browser vendor's speech service; Safari does more of it on the device. Either way it never reaches Teleprompt, we receive no audio and store no transcript, and nothing listens until you press the microphone button.

How well does voice tracking actually work?

Well enough to present with, though "well enough" is not "always". It matches the last few words you said against the part of the script you were already in, so mishearings, ad-libs and skipped lines are absorbed. It struggles in a loud room, with heavy background music, and with languages that are not written with spaces between words.

Is there a paid tier?

No. Teleprompt is free and MIT licensed, and the hosted version runs the same code that is in the repository. If you would rather run your own, the self-hosting guide takes about ten minutes.

What do you store?

Your name, email address and profile image from whichever provider you signed in with, the scripts you write, and the rooms you open. No analytics on what you say, no recordings, no third-party trackers.

Is it really peer-to-peer?

Where the network allows it, yes. The two devices meet on a realtime channel, exchange WebRTC offers over it, and then move the position updates onto a direct data channel between them. The connection badge tells you which path is live: Direct or Relay. Signalling always goes through the relay, because that is what bootstraps the direct path.

Do both devices have to be on the same network?

No. Same Wi-Fi gives the lowest latency and the best chance of a direct route, but a phone on mobile data and a laptop on hotel Wi-Fi will still pair. They just fall back to the relay if no direct route can be found.

Something else? Troubleshooting covers the awkward cases, and the documentation covers everything else.

Two screens, one line.

Most remote-prompter setups sync a scroll position. That works right up until the two devices are different shapes, which they always are. Teleprompt syncs the text itself.

What goes over the wire

{
  "t": "state",
  "state": {
    "anchor": { "blockIndex": 42, "blockFraction": 0.31 },
    "isPlaying": true,
    "speedWpm": 130
  }
}

Block 42, a third of the way through. Every device turns that into its own pixel offset.

How the protocol works
  • Words, not pixels

    Devices exchange a text anchor: which block is under the reading line, and how far into it. A phone at 19px and a monitor at 72px resolve that to completely different scroll offsets and still land on the same sentence.

  • Direct where possible

    The two devices meet on a realtime channel, then negotiate a WebRTC data channel and move the position updates onto it. On the same Wi-Fi that is single-digit milliseconds, with no server in the path.

  • Relay when not

    Locked-down networks and symmetric NATs happen. When a direct route cannot be established, the relay keeps carrying the same messages and the badge simply reads Relay instead of Direct. Nothing else changes.

Put the words where you are looking.

Sign in with Google or GitHub on the screen you want to read from, then on the phone you want to hold. That is the entire setup.