Real TV. None of the surveillance.

One account for the line you already pay for. Open a tab and it's on. Bytes in. Bytes out. Never decoded.

The demo needs no account

Private beta · invite code, no email

Open a tab. It's on.

The player · 01

The whole player in a browser tab — open twiga.tv, pick a channel, and the picture is playing. Nothing to install; shipping today.

Channels and the day, on one screen.

The player · 02

Dense list view. Twelve-hour grid. Type to filter, Enter to play. Keyboard shortcuts that read like a terminal, feel like a remote.

Guide grid · hover for description, click to tune.Guide grid · every channel, the whole day.

One channel, not nine rows of it.

The player · 04

Providers list the same channel over and over — one row per quality. twiga folds those variants into a single row and opens it at the tier you picked.

From the provider

  • Savanna Live UHD
  • Savanna Live FHD
  • Savanna Live HD
  • Savanna Live SD
  • The Long Walk FHD
  • The Long Walk HD
  • The Long Walk SD
  • Acacia TV HD
  • Acacia TV SD

What you see

  • Savanna Live FHD
  • The Long Walk FHD
  • Acacia TV HD

Pick a tier once. Every channel opens there, and the duplicate rows fold away.

The big screen. In testing.

Every screen · 05

The player redrawn for the ten-foot room — a roving-focus guide, D-pad channel surf, and cinema that fills the screen. An Android TV / Google TV app is in testing, not part of this beta. The web player is the way in.

Web player · live · Android TV / Google TV app · in testing

twiga on Android TV & Google TV · flick the stick, surf the wall

Turn it sideways. Cinema.

Every screen · 06

Upright, it browses — the picture keeps playing in its tile while you scroll the lineup. Sideways, the player goes full-bleed cinema — no button pressed. It installs from the browser, too — Share, then Add to Home Screen; no app store.

orientation is the mode switch · drag sideways to surf, let go to zap

Same twiga. Tuned to the device.

Every screen · 07

Each screen gets its own grammar, not a stretched port. On the desk: arrow-key zaps, slash search, a dense grid. In the ten-foot room: roving focus and the stick. In your hand: the live tile up top, the lineup under your thumb, stars and filters one tap away.

the mobile browse · the tile keeps playing while you scroll

Star it once. It follows you.

Every screen · 08

The star lives on every row — tap it and the channel joins a lineup of your own. Favourites ride your account, so the set you build on the sofa is waiting at the desk, and starred channels surface higher when you search.

the star is the whole gesture · watch it join the set

True to your provider.

Your lineup · 09

New channels appear. Dropped channels leave. twiga reconciles your lineup and the guide on a schedule — or on demand, from the account menu: Update channels, Update guide.

Now the part you can't see.

Sealed at your end. Blind in the middle.

No one watching · 10

Your dial leaves the device sealed. The relay forwards the stream without decoding it and never writes it to disk. It holds only the last few seconds in memory while they pass through. The stream leaves from twiga’s exits, so your provider sees twiga’s IP, not yours. And the guide travels its own road, over Tor.

Your browser is the decoder.

No one watching · 11

The stream arrives as raw broadcast MPEG-TS. twiga's engine unpacks and re-wraps it in a worker on your machine, and the browser's own decoder decodes and paints it. The tab decodes MPEG-2, and HEVC where the browser can't, and re-encodes it to H.264. On iPhone the same engine rides Safari's managed media path; the installed PWA is the same player. No plugin. No server transcode. That's why the relay can stay blind: all the decoding happens in front of you.

tap the VX chip and it opens · engine · audio codec · audio path · video codec

The budgets we hold to.

No one watching · 12

Three timing budgets the player is held to — all three at once, so the proportion between them is the message. You change the channel and the channel is on.

01 · Prewarmed zap 500 ms target

Channel-to-channel switch once the engine is warm.

02 · Cold zap 1200 ms target

Switch from a cold engine. One line means one upstream connection — the old one has to release before the next can open.

03 · Cold start 2000 ms target

First frame after a fresh page load.

Budgets, not promises — what's measured publishes at /uptime, read straight from the relay.

You've seen the bones.

Some of this you can check yourself: the vault proof runs offline at /verify.html, and the decoding happens in your own tab. The rest is our account of how the server is built.

Private beta · invite code, no email