█

Loading the workbench

Skip to TTY

What it does.

# A TTY in this tab.

You can open a USB serial port and talk to the board on your desk, paste a log and see the colors and cursor the author saw, or point it at a dump and get a name for the error.

Chrome can use the port directly. Firefox and Safari need a small Python helper on your computer. Free, MIT License.

Open Workbench USB setup

What to download.

py
Local Helper

One Python file. Firefox and Safari use it to reach a USB adapter on your computer.

`python3 server.py --helper`

Opens USB serial ports on the computer that runs it. Listens only on 127.0.0.1:7682.

Firefox and Safari have no Web Serial. Start the script, then open http://127.0.0.1:7682/ in a tab. Chrome and Edge can pick Web Serial instead and skip this.

macOS and Linux need Python 3 only. Windows needs Python and pyserial.

An HTTPS page cannot call this helper. That is why you open its own address. Bytes stay on that machine.

For the workbench at that address, keep the site files next to the script, or use the zip. Without flags the same file hosts the site on port 8000. --serial exposes that machine’s ports to browsers that can reach it.

Download server.py Setup steps View the source

What is here.

## On the wire

- Serial USB UART, Web Serial, local helper, or Demo UART.
- Workbench Live glass plus detect, record, and commands.
- EZ-ESP32 Write a .bin through the ROM from this tab.

## Name what you captured

- Detect Fingerprint a boot log. Local pattern rules.
- Explain Named error patterns. Not a model.
- Calculators Baud math, levels, checksums.
- Profiles Known UART settings by board.

## Keep the session

- Record TX/RX, timestamps, last Detect report, .tty000 replay.
- Diff Two dumps.

## Look at the bytes

- View ANSI colors and cursor.
- Cast Asciinema replay.
- Lab Compose CSI. Educational, not a kernel.
- Term What TERM actually promises.

## Practice

- SIM Fake the device, not the chip.
- Board impersonators ESP32, Nano, STM32, Pico.
- RTT GA/SK typed conversation. Not a 711 relay.

Want your own?

Install a local copy of this workbench plus the USB bridge. Chrome can skip this and use Web Serial on this site. Firefox and Safari have to open the helper's own address: an HTTPS page cannot talk to localhost.

    pip3 install https://tty000.com/tty000.zip
    tty000 --helper

Then open http://127.0.0.1:7682/. Windows: pip pulls in pyserial. macOS and Linux need Python 3 only.

    brew install --formula https://tty000.com/deploy/homebrew/tty000.rb
    tty000 --helper

Prefer a folder you can read? Download the zip or server.py, then `python3 server.py --helper`.

Setup

# Give this page a USB port.

Browsers treat serial hardware differently. Pick the row that matches you. Two of the three need nothing installed.

No install

## Demo UART

A fake board that boots, echoes, and answers `AT`. Every browser, every OS, including phones. Use it to learn the workbench before you plug anything in.

Open Serial and pick Demo UART
No install

## Web Serial

Chrome, Edge, and other Chromium browsers can open a real USB port after one permission prompt. Nothing to download and nothing to run.

Checking this browser…

Small download

## The local helper

Firefox and Safari have no Web Serial. A ~18 KB Python script on your machine owns the port instead and hands it to the browser. Instructions below.

Read the steps

The local helper

## Three commands, then a browser tab

The helper is one file with no dependencies on macOS or Linux. It listens on `127.0.0.1:7682`, talks to your USB adapter, and serves the same workbench from your own machine. Nothing it reads leaves the machine.

### Step 1 · Get the file

One script. Read it first if you like. It is short, and it is the same file this site runs on.

Download server.py View the source

### Step 2 · Set up and run

1. #### Install Python 3

   Windows has no Python by default. Use the store package or the installer, and tick Add python.exe to PATH.

       winget install -e --id Python.Python.3.12

   No winget? Get it from python.org/downloads.

2. #### Add the one dependency

   Windows is the only platform that needs a package: `pyserial` provides the COM port access.

       py -m pip install --user pyserial

3. #### Start the helper

   Open PowerShell in your Downloads folder and run it. Leave the window open while you work.

       cd $HOME\Downloads
       py server.py --helper

4. #### Open the workbench

   Go to http://127.0.0.1:7682/. Your COM ports appear under How to reach the wire.

Driver missing? Most cheap adapters need CP210x or CH340 drivers on Windows.

1. #### Check Python 3

   macOS ships it. If the command prints a version, you are done. There are no packages to install.

       python3 --version

   Missing? macOS offers the Command Line Tools, or use `brew install python`.

2. #### Start the helper

   Open Terminal in the folder you downloaded to. Leave it running while you work.

       cd ~/Downloads
       python3 server.py --helper

3. #### Open the workbench

   Go to http://127.0.0.1:7682/. Your adapter shows up as `/dev/cu.usbserial-*` or `/dev/cu.usbmodem*`.

4. #### Stop it when you are done

   Press `Ctrl` `C` in Terminal. Nothing is left running and nothing was installed.

Pick `/dev/cu.*` rather than `/dev/tty.*`. The tty device blocks waiting for carrier detect.

1. #### Check Python 3

   Almost every distribution already has it, and the helper needs no pip packages here.

       python3 --version
       # Debian or Ubuntu, if missing:
       sudo apt install python3

2. #### Let your user reach the port

   Serial devices belong to the `dialout` group. Add yourself once, then log out and back in for it to take effect.

       sudo usermod -aG dialout $USER

   Arch and openSUSE use `uucp` instead of `dialout`.

3. #### Start the helper

       cd ~/Downloads
       python3 server.py --helper

4. #### Open the workbench

   Go to http://127.0.0.1:7682/. Ports appear as `/dev/ttyUSB0` or `/dev/ttyACM0`.

Hosting tty000 for a lab? `TTY000_SERIAL=1` on the server exposes that machine's UARTs to any browser. See the README.

If it will not connect

## The four usual causes

The port list is empty

The adapter is not enumerating. Unplug and replug it, then reload the helper page. On Windows this is nearly always a missing CP210x or CH340 driver.

Permission denied on Linux

You are not in `dialout` yet, or you have not logged out since adding yourself. Check with `groups`; the change does not apply to an existing session.

The browser will not reach 127.0.0.1

An HTTPS page cannot call plain `http://127.0.0.1`. That is why you open the helper's own address in a tab instead of loading it from this site.

Connected, but the output is garbage

Wrong baud rate. Try the profile for your board, or press Guess baud and let it sweep for the rate with the most printable text.

## You

## Far

## About tty000

TTY means teletypewriter. Unix kept the word for the device, the line discipline, and the serial port. Accessibility kept it for typed conversation. This site is those meanings in a browser tab.

After the page loads, serial traffic, pasted logs, and RTT text stay in this tab unless you download them.

View, Lab, Explain, RTT, and Demo UART work in every modern browser. Real USB on this computer: Web Serial in Chromium, or python3 server.py in helper mode. Real USB on the Debian host: enable serial and pick Host ports.

This website is open source under the MIT License.

Download the website (zip)

Donations to CashApp $t3xus are appreciated, but not required to use or modify this site.

Yearly donations can also include tty000 subdomain redirects and email aliases.