{"id":49301066,"url":"https://github.com/block/proto-fleet","last_synced_at":"2026-05-27T07:01:57.653Z","repository":{"id":353387603,"uuid":"1192652555","full_name":"block/proto-fleet","owner":"block","description":"Proto Fleet. Mining management software. Evolved.","archived":false,"fork":false,"pushed_at":"2026-05-25T19:23:09.000Z","size":6536,"stargazers_count":28,"open_issues_count":73,"forks_count":6,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T21:24:36.960Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://docs.proto.xyz","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/block.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-26T12:34:13.000Z","updated_at":"2026-05-25T14:31:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/block/proto-fleet","commit_stats":null,"previous_names":["block/proto-fleet"],"tags_count":38,"template":false,"template_full_name":"block/oss-project-template","purl":"pkg:github/block/proto-fleet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fproto-fleet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fproto-fleet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fproto-fleet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fproto-fleet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/block","download_url":"https://codeload.github.com/block/proto-fleet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/block%2Fproto-fleet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33500703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T14:31:05.219Z","status":"online","status_checked_at":"2026-05-26T02:00:06.821Z","response_time":63,"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":[],"created_at":"2026-04-26T07:01:16.441Z","updated_at":"2026-05-27T07:01:57.619Z","avatar_url":"https://github.com/block.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/block/proto-fleet\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cimg width=\"64\" src=\"docs/logo.svg\" alt=\"Proto logo\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003e\n  Proto Fleet\n\u003c/h1\u003e\n\u003ch3 align=\"center\"\u003e\n  Mining management software. Evolved.\n\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\n  No fees. No training. Full control.\u003cbr/\u003e\n  Open source fleet management for bitcoin miners.\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue.svg\" alt=\"Proto Fleet is released under the Apache 2.0 license.\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/block/proto-fleet/actions/workflows/protofleet-client-checks.yml\"\u003e\n    \u003cimg src=\"https://github.com/block/proto-fleet/actions/workflows/protofleet-client-checks.yml/badge.svg\" alt=\"Client checks status.\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/block/proto-fleet/actions/workflows/protofleet-server-checks.yml\"\u003e\n    \u003cimg src=\"https://github.com/block/proto-fleet/actions/workflows/protofleet-server-checks.yml/badge.svg\" alt=\"Server checks status.\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/block/proto-fleet/actions/workflows/protofleet-e2e-tests.yml\"\u003e\n    \u003cimg src=\"https://github.com/block/proto-fleet/actions/workflows/protofleet-e2e-tests.yml/badge.svg\" alt=\"E2E tests status.\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n**Proto Fleet** is open-source fleet management software for bitcoin miners. It helps operators pair devices, monitor telemetry, and manage mining infrastructure without giving up control. Built with React and TypeScript clients, Go services, Connect RPC, Protocol Buffers, and TimescaleDB. For architecture details, see [docs/architecture.md](docs/architecture.md).\n\n## Install\n\nProto Fleet deploys into Docker on Linux and macOS, or into WSL2 on Windows.\n\n### Linux and macOS\n\nRequires Docker and Docker Compose. On macOS (and Windows via Docker Desktop), enable host networking under **Settings → Resources → Network → Enable host networking**. See [deployment-files/README.md](deployment-files/README.md) for the full prerequisites.\n\n#### Latest Version\n\n```bash\nbash \u003c(curl -fsSL https://fleet.proto.xyz/install.sh)\n```\n\n#### Specific Version\n\n```bash\nbash \u003c(curl -fsSL https://fleet.proto.xyz/install.sh) v0.1.0\n```\n\n#### Uninstall\n\n```bash\nbash \u003c(curl -fsSL https://fleet.proto.xyz/uninstall.sh)\n```\n\nIf Proto Fleet was installed in a non-default location, pass it explicitly:\n\n```bash\nbash \u003c(curl -fsSL https://fleet.proto.xyz/uninstall.sh) --deployment-path /path/to/install/root\n```\n\n### Windows\n\nRequires Windows 10 (build 19041 or newer) or Windows 11 (x64), local Administrator access, and virtualization enabled in BIOS/UEFI. Docker Desktop is **not** required — the installer enables WSL2, installs an Ubuntu distro and Docker Engine inside it, and deploys Proto Fleet at `~/proto-fleet` within the distro.\n\n`installer.exe` is not standalone. It resolves the deployment payload from files packaged alongside it in the release bundle, so you need to download and extract the full bundle before running it. Windows is supported on x64 only.\n\n1. Go to the [latest release](https://github.com/block/proto-fleet/releases/latest) and download `proto-fleet-\u003cversion\u003e-amd64.tar.gz`.\n2. Extract the archive. From PowerShell:\n\n   ```powershell\n   tar -xzf proto-fleet-\u003cversion\u003e-amd64.tar.gz\n   ```\n\n   Or right-click the file in File Explorer and choose **Extract All**.\n3. Open the extracted `deployment\\install\\` folder and double-click `installer.exe`.\n\nThe installer self-elevates via UAC. If it has to enable Windows features for WSL, it may prompt for a reboot and then resume automatically.\n\n#### Uninstall\n\nRun `uninstall.exe` from the `deployment\\install\\` folder of the bundle you extracted during install. If you no longer have it, re-download and extract the latest release bundle and use the `uninstall.exe` inside it.\n\nFor Windows installer/uninstaller build and test details, see [`deployment-files/windows/README.md`](deployment-files/windows/README.md).\n\n## Supported Hardware\n\nPer-device feature support.\n\n- **✅** — supported and tested.\n- **❌** — not supported.\n- **🟡** — supported by [asic-rs](https://github.com/256foundation/asic-rs), but not yet tested on this combination.\n\n\u003c!-- prettier-ignore-start --\u003e\n\u003ctable\u003e\n\u003ctr align=\"center\"\u003e\u003cth\u003eManufacturer\u003c/th\u003e\u003cth\u003eProto\u003c/th\u003e\u003cth\u003eMicroBT\u003c/th\u003e\u003cth colspan=\"6\"\u003eBitmain\u003c/th\u003e\u003cth\u003eCanaan\u003c/th\u003e\u003cth\u003eBitaxe\u003c/th\u003e\u003cth\u003eNerdAxe\u003c/th\u003e\u003cth\u003eePIC\u003c/th\u003e\u003cth\u003eAuradine\u003c/th\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eModel line\u003c/td\u003e\u003ctd\u003eRig\u003c/td\u003e\u003ctd\u003eWhatsMiner\u003c/td\u003e\u003ctd colspan=\"6\"\u003eAntminer\u003c/td\u003e\u003ctd\u003eAvalonMiner\u003c/td\u003e\u003ctd\u003eBitAxe\u003c/td\u003e\u003ctd\u003eNerdAxe\u003c/td\u003e\u003ctd\u003eePIC\u003c/td\u003e\u003ctd\u003eAuradine\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eFirmware\u003c/td\u003e\u003ctd\u003eProtoOS\u003c/td\u003e\u003ctd\u003eStock\u003c/td\u003e\u003ctd\u003eStock\u003c/td\u003e\u003ctd\u003eVNish\u003c/td\u003e\u003ctd\u003eePIC\u003c/td\u003e\u003ctd\u003eBraiins OS\u003c/td\u003e\u003ctd\u003eLuxOS\u003c/td\u003e\u003ctd\u003eMarathon\u003c/td\u003e\u003ctd\u003eStock\u003c/td\u003e\u003ctd\u003eAxeOS\u003c/td\u003e\u003ctd\u003eStock\u003c/td\u003e\u003ctd\u003eStock\u003c/td\u003e\u003ctd\u003eStock\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eTelemetry\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eReboot\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003ePause/Resume\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eEdit Pools\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eFW Update\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003ePower Mode\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eCooling Mode\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eUpdate Password\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eDownload Logs\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003ctd\u003e❌\u003c/td\u003e\u003c/tr\u003e\n\u003ctr align=\"center\"\u003e\u003ctd\u003eBlink LED\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e✅\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003ctd\u003e🟡\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n## Powered by asic-rs\n\nMulti-manufacturer miner support in Proto Fleet is built on top of [asic-rs](https://github.com/256foundation/asic-rs), a Rust library from the [256 Foundation](https://github.com/256foundation) that abstracts discovery, monitoring, and control across ASIC miner vendors and firmwares. It is the reason the 🟡 cells above exist at all: every new vendor or firmware that asic-rs learns to speak is one that Proto Fleet can drive with no extra plugin work.\n\nIf you work on miner firmware or operate a heterogeneous fleet, go give them a star. Upstream contributions to asic-rs flow straight back into Proto Fleet via the [`plugin/asicrs/`](plugin/asicrs/) plugin.\n\n## Local Development\n\n### Prerequisites\n\n- Docker and Docker Compose\n- [Hermit](https://cashapp.github.io/hermit/) (recommended) — activates the full toolchain. For a manual tool setup, see [CONTRIBUTING.md](CONTRIBUTING.md).\n\n### Initial Setup\n\n```bash\nsource ./bin/activate-hermit\njust setup\n```\n\nTo install Git hooks after your toolchain is ready:\n\n```bash\njust install-hooks\n```\n\nFor `lefthook` and Ruff hook prerequisites and `go.work` guidance, see [CONTRIBUTING.md](CONTRIBUTING.md).\n\n### Start Development\n\n```bash\njust dev\n```\n\nThis starts the Go backend with Docker Compose and the Vite dev server for ProtoFleet at http://localhost:5173.\n\n#### LAN access\n\nThe Go backend is already reachable on your LAN at `http://\u003cyour-ip\u003e:4000` because the container publishes `4000:4000` and binds to `0.0.0.0`. The Vite dev server, however, binds to localhost (loopback) by default.\n\nTo expose the client to other devices on your network (e.g. test the UI from a phone), **don't run `just dev`** — it would start the default localhost-bound Vite server. Start the backend and the LAN-bound client separately instead:\n\n```bash\n# Terminal 1 — backend only\ncd server \u0026\u0026 just dev\n\n# Terminal 2 — client bound to all interfaces\ncd client \u0026\u0026 npx vite --mode protoFleet --host 0.0.0.0\n```\n\nThen browse to `http://\u003cyour-ip\u003e:5173/` from any device on the same network. If you run the second command alongside `just dev`, Vite will detect that 5173 is busy and fall back to 5174 while the original localhost-only instance keeps holding 5173, so LAN access still fails.\n\nOnly do this on networks you trust. The dev server serves unminified source and proxies requests to your backend, so anyone reachable on the network can hit both. On macOS, you may also see a firewall prompt the first time Node binds to `0.0.0.0`.\n\n### Protocol Buffer Code Generation\n\nAfter modifying definitions in `proto/`, regenerate generated clients and server code:\n\n```bash\njust gen\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for development workflows and contribution guidelines. Project standards and community expectations are documented in [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md), [GOVERNANCE.md](GOVERNANCE.md), and [SECURITY.md](SECURITY.md).\n\n## License\n\nThis project is licensed under the Apache 2.0 License. See the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblock%2Fproto-fleet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblock%2Fproto-fleet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblock%2Fproto-fleet/lists"}