_$ LinuxOnTab

_$ Real Linux. In a browser tab.
No install. No server. No Docker.

LinuxOnTab boots a real x86 Linux kernel and Alpine userland inside your browser using WebAssembly and the v86 emulator. A zero-install, local-first, in-browser Linux terminal — a lightweight Docker alternative for instant sandboxes, teaching, demos, and disposable shells.

Launch Linux → How it works
Real x86 kernel Runs offline Open source stack Free, no signup

What is LinuxOnTab?

LinuxOnTab is a browser-only Linux desktop. Open the page and a real x86 Linux kernel boots inside the v86 WebAssembly emulator, presenting an Alpine Linux shell over xterm.js. Every system call hits a real kernel running in your tab — not a transpiled toy, not a remote container, not a cloud VM you have to log into.

Networking is opt-in. When you want it, the guest connects to a backend over a WISP v1 WebSocket and gets full TCP egress. You can then expose in-guest ports back to your host over a pairing-code tunnel and SSH, SCP, SFTP, or rsync into the browser tab as if it were any other Linux box.

Features

Real Linux kernel

Boots an actual x86 kernel image plus an Alpine userland inside the v86 WebAssembly emulator — not a faked terminal.

Local-first

Code runs in your tab. Your data lives in IndexedDB. Close the tab and the VM is gone — no orphan containers, no zombie processes on your laptop.

Zero install

Static site over HTTPS. No daemon, no kernel modules, no admin rights, no package install. Works on Mac, Windows, Linux, ChromeOS.

apk package manager

Full Alpine package ecosystem: apk add python3 nodejs git openssh syncthing — install whatever you need, persist via snapshot.

Persistent snapshots

Save full VM state to IndexedDB. Restore on next boot with installed packages, files, and shell history intact.

SSH from your host

Tunnel guest TCP ports out through a pairing-code WebSocket bridge. Run ssh -p 2222 root@localhost on your Mac and you're in.

Public file viewer

Anything you drop in ~/public in the guest is browsable from any HTTPS client via a 4-character pairing code.

Nostr-backed social layer

Share folders peer-to-peer over Nostr relays. No accounts, no servers — just keypairs and public manifests.

Works offline

Once the page and ISO are cached, the VM boots without a network connection. Networking inside the guest is the only piece that needs the internet.

Use cases

LinuxOnTab vs Docker vs cloud shells

For ephemeral, browser-side Linux work, LinuxOnTab and Docker are not really competitors — they cover different ground. Here's the rough split:

LinuxOnTabDockerCloud shell (e.g. SSH VM)
Install required No Yes (daemon)No (but account needed)
Account / signup No No Yes
Real Linux kernel Yes (in WASM)Yes (host kernel)Yes
Runs offline Yes Yes No
State after closing tab IndexedDB snapshotsPersistent volumes Persistent disk
Cleanup overhead Close the tabContainers, volumes, networksStop / destroy VM
Resource cost Browser RAM onlyDaemon + kernel resources$ per hour
Sandboxed from host Browser-gradeNamespaces only Network-isolated
Best for Disposable shells, teaching, demosReproducible builds, prod imagesLong-running compute

Verdict: LinuxOnTab is a complement to Docker, not a replacement for it. For one-off shells, demos, and "I just need a Linux box for two minutes," it is dramatically faster and lighter than spinning up a container or a VM.

Technology

v86

x86 emulator in WebAssembly. Boots real kernel images in any modern browser. The core that makes LinuxOnTab possible.

Alpine Linux

Minimal, fast-booting userland with a great package manager. Default ISO ships with BusyBox and apk.

xterm.js

Front-end terminal that renders the guest serial console.

WISP v1 over WebSocket

Streaming TCP-over-WS protocol. Lets the in-browser kernel speak real TCP through a backend server.

Cloudflare Workers + Fly.io

Optional services for DoH, port tunnels, and TCP egress. Source is in this repo — self-host the whole stack if you want.

IndexedDB

Stores full VM snapshots client-side, so reload doesn't blow away your work.

Quickstart

1. Launch the shell. Wait for the Alpine login prompt.

2. Set a root password and install useful tools:

printf 'changeme\nchangeme\n' | passwd root
apk add websocat curl jq openssh-server unbound

3. Open a tunnel to your host:

wget -qO- https://linuxontab.com/local/tunnel-up.sh | sh
# → prints a 4-character pairing code, e.g. ARXN

4. On your Mac / Linux host, open a local listener bridged to the guest:

sh <(curl -sS https://linuxontab.com/local/tunnel-listen.sh) ARXN
ssh -p 2222 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost

That's it — you're SSH'd into a Linux kernel running inside a browser tab.

Frequently asked questions

Is this a real Linux kernel or some kind of fake terminal?

Real kernel. LinuxOnTab boots an x86 Linux kernel image and an Alpine userland inside the v86 WebAssembly emulator. Every syscall, every /proc entry, every man page is genuine.

Is it a Docker alternative?

For ephemeral browser-side shells: yes. LinuxOnTab gives you a disposable Linux box without a daemon, an install, or a cleanup step. For reproducible production builds and image distribution, stick with Docker — the two are complementary.

Does it work offline?

Once the page and ISO have been fetched, the VM runs entirely in your browser and survives going offline. Networking inside the guest needs internet, but the kernel itself doesn't.

Can I SSH into the in-browser Linux from my Mac / Linux host?

Yes. Run the in-guest tunnel-up.sh script to register a pairing code, then run tunnel-listen.sh on your host. SSH, SCP, SFTP, and rsync all work as if the guest were a remote box.

Is my data persistent across reloads?

Snapshots are stored in IndexedDB on demand. Save before closing the tab and you'll boot back into the same state next time.

What about security?

The kernel runs inside the browser's WebAssembly sandbox. It has no direct access to your filesystem, devices, or other tabs. Network egress only happens through the explicit WISP/WebSocket tunnel — and you can disable that entirely.

Is the source open?

Yes. The shell page, helper scripts, and backend services are all in the public LinuxOnTab repo. The v86 emulator is upstream and BSD-licensed.

How is this different from Replit / Codespaces / WebContainers / cloud IDEs?

Replit and Codespaces run on remote servers — you're paying for a cloud VM. WebContainers (StackBlitz) runs Node.js in the browser via a custom kernel — fast, but it's not a real Linux kernel. LinuxOnTab is the rare combination: real kernel + fully local + no account.