{"id":50720698,"url":"https://github.com/packetThrower/Baudrun","last_synced_at":"2026-06-27T00:01:01.314Z","repository":{"id":352970294,"uuid":"1217236328","full_name":"packetThrower/Baudrun","owner":"packetThrower","description":"Serial terminal app for connecting to serial devices with profiles.","archived":false,"fork":false,"pushed_at":"2026-06-23T02:37:30.000Z","size":25589,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T04:16:23.923Z","etag":null,"topics":["baud-rate","gpui","gpui-component","linux","linux-arm","macos","rust","rust-lang","serial-communication","serial-console","serial-terminal","serialport","terminal","tty","uart","windows","windows-arm","xmodem","ymodem"],"latest_commit_sha":null,"homepage":"https://packetthrower.github.io/Baudrun/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/packetThrower.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["packetThrower"],"patreon":"packetthrower","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":"packetthrower","issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"packetthrower","thanks_dev":null,"custom":null}},"created_at":"2026-04-21T17:23:05.000Z","updated_at":"2026-06-23T02:37:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/packetThrower/Baudrun","commit_stats":null,"previous_names":["packetthrower/baudrun"],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/packetThrower/Baudrun","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FBaudrun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FBaudrun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FBaudrun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FBaudrun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/packetThrower","download_url":"https://codeload.github.com/packetThrower/Baudrun/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/packetThrower%2FBaudrun/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34835785,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["baud-rate","gpui","gpui-component","linux","linux-arm","macos","rust","rust-lang","serial-communication","serial-console","serial-terminal","serialport","terminal","tty","uart","windows","windows-arm","xmodem","ymodem"],"created_at":"2026-06-10T00:00:24.932Z","updated_at":"2026-06-27T00:01:01.308Z","avatar_url":"https://github.com/packetThrower.png","language":"Rust","funding_links":["https://github.com/sponsors/packetThrower","https://patreon.com/packetthrower","https://liberapay.com/packetthrower","https://buymeacoffee.com/packetthrower"],"categories":["Apps"],"sub_categories":["Developer Tools"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"build/appicon.png\" alt=\"Baudrun\" width=\"128\"\u003e\n\u003c/p\u003e\n\n# Baudrun\n\n[![CI](https://img.shields.io/github/actions/workflow/status/packetThrower/Baudrun/ci.yml?branch=main\u0026style=flat-square\u0026logo=github\u0026label=CI)](https://github.com/packetThrower/Baudrun/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/packetThrower/Baudrun?style=flat-square\u0026logo=github\u0026label=release\u0026include_prereleases)](https://github.com/packetThrower/Baudrun/releases/latest)\n[![Downloads](https://img.shields.io/github/downloads/packetThrower/Baudrun/total?style=flat-square\u0026logo=github\u0026label=downloads)](https://github.com/packetThrower/Baudrun/releases)\n[![winget](https://img.shields.io/badge/winget-packetThrower.Baudrun-0078D4?style=flat-square\u0026logo=windows\u0026logoColor=white)](https://github.com/microsoft/winget-pkgs/tree/master/manifests/p/packetThrower/Baudrun)\n[![Rust](https://img.shields.io/badge/Rust-stable-CE422B?style=flat-square\u0026logo=rust\u0026logoColor=white)](Cargo.toml)\n[![License: GPL v3+](https://img.shields.io/badge/license-GPLv3%2B-blue?style=flat-square)](LICENSE)\n\n## Minimum OS versions\n\n**macOS** (Apple Silicon and Intel)\n\n[![macOS 11+](https://img.shields.io/badge/macOS-11%2B-333?style=flat-square\u0026logo=apple\u0026logoColor=white)](https://packetthrower.github.io/Baudrun/reference/requirements/)\n[![Apple Silicon](https://img.shields.io/badge/Apple%20Silicon-arm64-333?style=flat-square\u0026logo=apple\u0026logoColor=white)](https://packetthrower.github.io/Baudrun/reference/requirements/)\n[![Intel](https://img.shields.io/badge/Intel-x86__64-333?style=flat-square\u0026logo=apple\u0026logoColor=white)](https://packetthrower.github.io/Baudrun/reference/requirements/)\n\n**Windows** (x64 and ARM64)\n\n[![Windows 10 21H2+](https://img.shields.io/badge/Windows%2010%2021H2%2B-x64%20%2F%20arm64-0078D4?style=flat-square\u0026logo=windows\u0026logoColor=white)](https://packetthrower.github.io/Baudrun/reference/requirements/)\n\n**Linux** (amd64 and arm64)\n\n[![Ubuntu 22.04+](https://img.shields.io/badge/Ubuntu-22.04%2B-E95420?style=flat-square\u0026logo=ubuntu\u0026logoColor=white)](https://packetthrower.github.io/Baudrun/reference/requirements/)\n[![Debian 12+](https://img.shields.io/badge/Debian-12%2B-A81D33?style=flat-square\u0026logo=debian\u0026logoColor=white)](https://packetthrower.github.io/Baudrun/reference/requirements/)\n[![Fedora 38+](https://img.shields.io/badge/Fedora-38%2B-294172?style=flat-square\u0026logo=fedora\u0026logoColor=white)](https://packetthrower.github.io/Baudrun/reference/requirements/)\n[![Arch](https://img.shields.io/badge/Arch-1793D1?style=flat-square\u0026logo=archlinux\u0026logoColor=white)](https://packetthrower.github.io/Baudrun/reference/requirements/)\n[![openSUSE Tumbleweed](https://img.shields.io/badge/openSUSE-Tumbleweed-73BA25?style=flat-square\u0026logo=opensuse\u0026logoColor=white)](https://packetthrower.github.io/Baudrun/reference/requirements/)\n\nLinux additionally needs a Vulkan-capable GPU with current Mesa drivers.\n\nA cross-platform serial terminal for network devices. Built for switch consoles,\nrouter CLIs, and other serial-attached gear. Each device gets a saved profile\nwith its port, baud rate, framing, flow control, line ending, and any\nsend-on-connect sequences. One click connect.\n\nDeveloped in close collaboration with Claude (Anthropic). See\n[AI-USAGE.md](AI-USAGE.md) for how that split works.\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs-next/public/screenshots/macos-dark-baudrun.png\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"docs-next/public/screenshots/macos-light-baudrun.png\"\u003e\n    \u003cimg src=\"docs-next/public/screenshots/macos-dark-baudrun.png\" alt=\"Baudrun in its default skin\" width=\"720\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n## Documentation\n\nFull reference docs live at [packetthrower.github.io/Baudrun](https://packetthrower.github.io/Baudrun/).\nThe site covers profiles, themes, skins, highlight-rule authoring, the regex\nplayground, file-transfer protocols, and accessibility. Markdown sources are\nunder [`docs-next/`](docs-next/).\n\nSample JSON for authoring your own skins, themes, and highlight packs is on the\n[website](https://packetthrower.github.io/Baudrun/authoring/themes/).\n\n## Highlights\n\n- **Profiles.** Each device gets a saved profile — its port, baud, framing,\n  flow control, line ending, and control-line policy — stored as plain JSON.\n  See [Profiles](https://packetthrower.github.io/Baudrun/usage/profiles/).\n- **USB chipset detection.** A VID/PID lookup recognises CP210x, FTDI, PL2303,\n  CH340, MCP2221, and others, and links to the vendor driver when one is\n  missing. CDC-ACM USB-C consoles (HPE/Aruba, newer Cisco, RuggedCom RST2228)\n  work with no driver at all.\n- **Auto-reconnect.** When a USB adapter drops, the session comes back on its\n  own and the scrollback survives the gap.\n- **Output formatting and capture.** Per-line wall-clock timestamps,\n  session-local line numbers, a hex-dump view of incoming bytes, and raw\n  session recording to a file. Each is a per-profile toggle.\n- **Send Break.** A 300 ms TX-low pulse for Cisco ROMMON, Juniper diagnostic\n  mode, and bootloader interrupts.\n- **File transfer.** XMODEM, XMODEM-CRC, XMODEM-1K, and YMODEM, for pushing\n  firmware to embedded bootloaders.\n- **Paste safety.** A confirmation prompt before multi-line pastes, plus a\n  slow-paste mode so UARTs with small buffers don't drop bytes.\n- **Suspend and resume.** Step away from a live session without closing the\n  port; the backlog is waiting when you come back.\n- **Multi-window.** Right-click a profile to open it in a new window, or drag\n  a live session out — the port, scrollback, and DTR/RTS state move with it.\n  Run sessions to several devices side by side.\n- **Vendor-aware syntax highlighting.** Bundled rule packs for Cisco IOS,\n  Juniper Junos, Aruba AOS-CX, Arista EOS, and MikroTik RouterOS, plus a\n  vendor-neutral default. Write your own and test them against real captures\n  in the [rule playground](https://packetthrower.github.io/Baudrun/playground.html).\n- **15 terminal themes, 16 app skins.** Themes include Dracula, Solarized,\n  Gruvbox, Nord, OneDark, Tokyo Night, and a Colorblind Safe palette built\n  for red-green vision deficiency. Skins include macOS 26 (Liquid Glass),\n  Windows 11, GNOME, KDE, CRT, Cyberpunk, Blueprint, E-Ink, High Contrast,\n  Foundry, and Tokyo Night. Skins and themes are chosen independently.\n- **Accessibility.** Baudrun honours the OS reduce-motion setting, supports\n  keyboard zoom, and keeps every action reachable from the keyboard through\n  customisable shortcuts. A High Contrast skin and a Colorblind Safe theme\n  ship with it. Screen-reader output for the terminal grid is still a gap;\n  the [accessibility page](https://packetthrower.github.io/Baudrun/reference/accessibility/)\n  has the details.\n- **Relocatable config directory.** Keep your profiles, themes, skins, and\n  settings next to your dotfiles; set the location in Settings → Advanced.\n\n## Install\n\nOn macOS and Windows, the package managers track the latest stable tag and get\nyou past the first-launch Gatekeeper and SmartScreen warnings. Homebrew, Scoop,\nand winget also bypass the SmartScreen prompt; winget is Microsoft's own and\nships built-in on Windows 10 1809+ and Windows 11.\n\n```sh\n# macOS — Homebrew (6.0.0+ requires trusting the tap first)\nbrew tap packetThrower/tap\nbrew trust packetThrower/tap\nbrew install --cask baudrun                 # stable\nbrew install --cask baudrun@alpha           # pre-release\n\n# Windows — winget (Microsoft's package manager, preinstalled)\nwinget install packetThrower.Baudrun        # or: winget install baudrun\n\n# Windows — Scoop\nscoop install git                           # if you don't already have git\nscoop bucket add packetThrower https://github.com/packetThrower/scoop-bucket\nscoop install baudrun                       # stable\nscoop install baudrun-prerelease            # pre-release\n```\n\nThe Homebrew and Scoop taps also hold related tools, and Scoop has a separate\nmanifest for the pre-release channel. winget only carries stable; for\npre-release builds on Windows, use Scoop or download from\n[Releases](https://github.com/packetThrower/Baudrun/releases) directly. Repos:\n[packetThrower/homebrew-tap](https://github.com/packetThrower/homebrew-tap),\n[packetThrower/scoop-bucket](https://github.com/packetThrower/scoop-bucket),\n[microsoft/winget-pkgs `packetThrower/Baudrun`](https://github.com/microsoft/winget-pkgs/tree/master/manifests/p/packetThrower/Baudrun).\n\nLinux users grab the matching `.deb` / `.rpm` / `.AppImage` /\n`.pkg.tar.zst` directly from the\n[Releases page](https://github.com/packetThrower/Baudrun/releases). The packages\ninstall a udev rule for `/dev/ttyUSB*` access, so there's no need to add yourself\nto the dialout group. Arch users can install the `.pkg.tar.zst` with `pacman -U`.\n\nTo install by hand, download from\n[Releases](https://github.com/packetThrower/Baudrun/releases) and drag\n`Baudrun.app` to `/Applications` on macOS, or run the NSIS installer on Windows.\nThe macOS builds are ad-hoc signed, so the first launch needs a right-click →\nOpen (or `xattr -cr Baudrun.app`); the Windows installer is unsigned, so\nSmartScreen needs \"More info\" → \"Run anyway\". Notarized macOS builds and signed\nWindows builds are both planned — see [TODO.md](TODO.md).\n\n## Building from source\n\nSingle-crate Rust project at the repo root.\n\n```bash\ngit clone git@github.com:packetThrower/Baudrun.git\ncd Baudrun\ncargo run                                # dev launch (loopback mode if no port)\ncargo run -- /dev/cu.usbserial-XXX       # dev launch attached to a port\ncargo build --release                    # optimized binary at target/release/Baudrun\n```\n\nSystem libraries:\n\n- **macOS**: `brew install libusb pkg-config`\n- **Debian / Ubuntu**: `sudo apt install libusb-1.0-0-dev libudev-dev pkg-config`\n- **Fedora**: `sudo dnf install libusb1-devel systemd-devel pkgconf-pkg-config`\n- **Arch**: `sudo pacman -S libusb pkgconf`\n- **Windows**: nothing extra; the gpui DirectX backend ships with Windows 10+.\n\n## Project layout\n\n```\nBaudrun/\n├── Cargo.toml                # baudrun crate (binary name: Baudrun)\n├── src/\n│   ├── main.rs               # app entry + macOS menubar / dock setup\n│   ├── app_view.rs           # window-level UI: sidebar, editor, session header\n│   ├── terminal_view.rs      # alacritty_terminal bridge + grid renderer\n│   ├── terminal_grid.rs      # the cell grid the renderer paints from\n│   ├── term_bridge.rs        # alacritty → gpui colour / attribute translation\n│   ├── settings_view.rs      # standalone Settings window (tabs, panes, filter)\n│   ├── settings_bus.rs       # App-scoped settings entity + change broadcast\n│   ├── skin_tokens.rs        # active-skin token cache (read by every render)\n│   ├── highlight_runtime.rs  # line-buffered regex highlighter\n│   ├── serial_io.rs          # serial-port read/write threads + write channel\n│   └── data/                 # pure-Rust data layer (no UI deps)\n│       ├── profiles.rs       # JSON-backed profile store + validation\n│       ├── settings.rs       # global settings store\n│       ├── themes/           # theme store + .itermcolors plist parser\n│       ├── skins.rs          # skin store + CSS-var validation\n│       ├── highlight.rs      # rule-pack store\n│       ├── sanitize.rs       # session-log sanitizer\n│       ├── transfer.rs       # XMODEM / YMODEM state machines\n│       ├── serial/           # port enumeration + chipset detection\n│       ├── usbserial/        # libusb-direct backend (CP210x)\n│       └── appdata.rs        # OS config-directory resolution\n├── resources/                # bundled at compile time\n│   ├── Info.plist            # macOS bundle metadata\n│   ├── icons/                # .icns / .ico / .png set\n│   ├── builtin_skins.json    # 16 built-in app skins\n│   ├── builtin_themes.json   # 15 built-in terminal themes\n│   └── highlight/            # bundled vendor rule packs\n├── build/                    # icon source + Windows installer assets\n├── packaging/                # Linux udev rule + .desktop file + Arch PKGBUILD\n├── scripts/                  # dev tools (each its own Cargo workspace)\n│   ├── virtual-serial/       # baud-paced virtual pty pair for testing\n│   └── transfer-tests/       # headless harness for XMODEM / YMODEM / hex\n├── test/                     # tracked fixtures for the test harness\n│   ├── transfers/            # deterministic binary + hex payloads\n│   └── json/                 # JSON packs for Settings → Import smoke tests\n├── docs-next/                # Astro/Starlight docs site source\n│   └── public/examples/      # sample skin / theme / highlight-pack JSON\n└── .github/workflows/        # CI + release + docs deploy\n```\n\nCI (`.github/workflows/ci.yml`) runs `cargo check / clippy / test` across\nmacOS, Windows, and Linux on every push. Release\n(`.github/workflows/release.yml`) builds `.dmg` / NSIS / `.deb` / `.rpm` /\n`.AppImage` / `.pkg.tar.zst` bundles via `cargo-packager` on every tag and\nattaches them to the GitHub Releases page. The docs workflow (`docs.yml`)\ndeploys the Astro site to GitHub Pages on changes under `docs-next/`.\n\n## Testing\n\nTwo complementary layers.\n\n**Unit tests** (`cargo test`) cover pure-data invariants — JSON\nround-trips, parser edge cases, protocol checksum / CRC, the\nhex-input validator, the highlight runtime. Fast, no I/O, run on\nevery CI push.\n\n**Wire-level transfer tests** drive Baudrun's actual XMODEM /\nYMODEM / Send-Hex code paths against a baud-paced virtual pty\npair, then byte-diff what arrives at the other end against\ndeterministic fixtures. See\n[`scripts/transfer-tests/`](scripts/transfer-tests/) for the\nharness and [`scripts/virtual-serial/TESTING.md`](scripts/virtual-serial/TESTING.md)\nfor the manual playbook the same fixtures back. Unix-only — pty\nprimitives don't exist on Windows.\n\n```sh\n# one-time setup\n(cd scripts/virtual-serial  \u0026\u0026 cargo build --release)\n(cd scripts/transfer-tests  \u0026\u0026 cargo build --release)\n\n# run all 11 cases (~144 s wall) or pass --quick to skip T9 (~18 s)\n./scripts/transfer-tests/target/release/transfer-tests\n```\n\nLast verified **2026-05-15** on macOS arm64 (Apple Silicon) against\nvirtual-serial at the throttled baud rates shown:\n\n| Test | What | Baud | Wall | Result |\n|---|---|---:|---:|:---:|\n| T1 | hex ASCII (`Hello`) | 9 600 | 0.01 s | ok |\n| T3 | hex binary / non-printable (`00 01 02 ff fe 7f`) | 9 600 | 0.01 s | ok |\n| T5 | hex 1 KiB random | 9 600 | 1.35 s | ok |\n| T11 | YMODEM 512 B over slow link | 9 600 | 5.92 s | ok |\n| T6 | YMODEM 4 KiB | 115 200 | 3.69 s | ok |\n| T9 | YMODEM 1 MiB | 115 200 | 126.00 s | ok |\n| T7c | XMODEM classic (128 B / checksum) | 115 200 | 1.56 s | ok |\n| T7C | XMODEM-CRC (128 B / CRC-16) | 115 200 | 1.56 s | ok |\n| T7k | XMODEM-1K (1024 B / CRC-16) | 115 200 | 1.55 s | ok |\n| T8 | XMODEM single-block (SUB padding) | 115 200 | 1.08 s | ok |\n| T10 | YMODEM cancel mid-transfer | 115 200 | 1.18 s | ok |\n\n**11 / 11 passed, 143.9 s wall.** T9 dominates the run time; the\nother ten cases together finish in under 18 seconds. Each test\nmaps to a section in\n[TESTING.md](scripts/virtual-serial/TESTING.md) — the harness\nexists so the same playbook can be run unattended.\n\nThe harness lifts [`src/data/transfer.rs`](src/data/transfer.rs)\nverbatim via `#[path]`, so it exercises the same XMODEM / YMODEM\nstate machines Baudrun ships — protocol-level regressions surface\nat the next `cargo build` of the harness without any manual sync\nstep. See\n[scripts/transfer-tests/README.md](scripts/transfer-tests/README.md)\nfor the full design and flag reference, and\n[`test/transfers/`](test/transfers/) for the deterministic payload set.\n\n## License\n\n[GNU General Public License v3.0 or later](LICENSE). Forks are welcome;\nderivative works must stay open under the same license. Commercial use is\npermitted but can't close the source.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FpacketThrower%2FBaudrun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FpacketThrower%2FBaudrun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FpacketThrower%2FBaudrun/lists"}