{"id":37736535,"url":"https://github.com/make87/m87","last_synced_at":"2026-02-26T11:05:30.357Z","repository":{"id":329264863,"uuid":"1080403818","full_name":"make87/m87","owner":"make87","description":"m87 is make87's command line and device runtime for connecting to, debugging, and deploying software to distributed hardware fleets — all over a single outbound connection and without VPNs or inbound firewall rules.","archived":false,"fork":false,"pushed_at":"2026-01-19T23:38:17.000Z","size":896,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-20T06:43:50.608Z","etag":null,"topics":["device-management","docker","edge-ai","edge-computing","fleet-management","iot","jetson","remote-access","robotics"],"latest_commit_sha":null,"homepage":"https://www.make87.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/make87.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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}},"created_at":"2025-10-21T10:17:52.000Z","updated_at":"2026-01-19T23:25:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/make87/m87","commit_stats":null,"previous_names":["make87/make87","make87/m87"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/make87/m87","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/make87%2Fm87","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/make87%2Fm87/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/make87%2Fm87/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/make87%2Fm87/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/make87","download_url":"https://codeload.github.com/make87/m87/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/make87%2Fm87/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28776614,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T09:42:00.929Z","status":"ssl_error","status_checked_at":"2026-01-26T09:42:00.591Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["device-management","docker","edge-ai","edge-computing","fleet-management","iot","jetson","remote-access","robotics"],"created_at":"2026-01-16T14:00:59.332Z","updated_at":"2026-01-26T11:10:04.559Z","avatar_url":"https://github.com/make87.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# m87\n\n**Secure, outbound-only access to physical devices — with a native-feeling development, debugging, and software deployment experience.**\n\n**m87 is make87's command line and device runtime** for connecting to, debugging, and deploying software to distributed hardware fleets — all over a single outbound connection and without VPNs or inbound firewall rules.\n\nIn this repo:\n- **`m87` command** = what you type in your terminal\n- **m87 runtime** = the on-device process that maintains the outbound connection and executes actions\n\n---\n\n## 🚀 Quick Start (Try in 5 minutes)\n\n### 1. Install the m87 command line\n\nInstall the `m87` command on your **developer machine**. (You'll run the m87 runtime on the edge device in step 3.)\n\n#### ⚡ One-liner (recommended)\n\nInstalls the latest version to `$HOME/.local/bin`:\n\n```bash\ncurl -fsSL https://get.make87.com | sh\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eOther install options\u003c/summary\u003e\n\n**From releases**\n\nDownload a pre-built binary from the [releases page](https://github.com/make87/m87/releases) and place it in your `$PATH` (e.g., `$HOME/.local/bin` or `/usr/local/bin`).\n\n**From source**\n\nBuild the binary and move it to a location in your `$PATH`:\n\n```bash\ngit clone https://github.com/make87/m87.git\ncd make87\ncargo build --release\ncp target/release/m87 $HOME/.local/bin/\n```\n\n**Via Docker (no local install)**\n\nRun m87 from a container without installing anything locally. Useful for CI pipelines or keeping your system clean.\n\n```bash\n# Build the image\ngit clone https://github.com/make87/m87.git\ncd make87\ndocker build -f m87-client/Dockerfile -t m87 .\n\n# Run commands (config persists in ~/.config/m87)\ndocker run -it --rm \\\n  --user \"$(id -u):$(id -g)\" \\\n  -v \"$HOME/.config/m87:/.config/m87\" \\\n  -e HOME=/ \\\n  m87 login\n```\n\nFor convenience, add an alias to your shell rc:\n\n```bash\nalias m87='docker run -it --rm --user \"$(id -u):$(id -g)\" -v \"$HOME/.config/m87:/.config/m87\" -e HOME=/ m87'\n```\n\n\u003c/details\u003e\n\n### 2. Set up your developer machine\n\nLogin to create your account (opens browser for OAuth):\n\n```bash\nm87 login\n```\n\n### 3. Set up the edge device\n\nOn the edge device, start the **m87 runtime** (the on-device process):\n\n```bash\nm87 runtime run --email you@example.com\n```\n\nThis registers the device (printing a request ID) and waits for approval. Once approved, the runtime starts automatically.\n\n### 4. Approve the device\n\nOn your developer machine, approve the pending device:\n\n```bash\nm87 devices approve \u003crequest-id\u003e\n```\n\n*(You can also approve via the web UI.)*\n\nOnce approved, you can interact with your device:\n\n```bash\nm87 devices list\nm87 \u003cdevice\u003e shell\nm87 \u003cdevice\u003e docker ps\n```\n\nNow you're connected — no inbound access, no firewall rules, and no VPN required.\n\n👀 Try this next:\n\n* forward a local port to a remote service\n* run an IDE remote development session\n\n---\n\n## ✨ What Makes m87 Different\n\nm87 isn't *just* remote access — it's designed so **working with real devices feels like local development and deployment**:\n\n* **Outbound-only access:** works behind NATs / firewalls without opening inbound ports.\n* **Native dev experience:** shell, port/sockets forwarding, logs, and live debugging feel like you're working locally.\n* **Deployment-ready:** one command line that transitions from access to orchestrating software deployments across fleets.\n\nIf you've ever SSH'd into an embedded device only to run into network traps or scaling pain, m87 makes those workflows easy and repeatable.\n\n---\n\n## 🧱 Core Concepts\n\n### 🛠 Development \u0026 Debugging\n\nUse native OS tools and IDEs as if the device were local:\n\n```bash\n# Run shell\nm87 \u003cdevice\u003e shell\n\n# Forward a port for a debugging server\nm87 \u003cdevice\u003e forward 8080:localhost:3000\n```\n\n### 📦 Software Deployment\n\nDeploy containers and services using familiar commands:\n\n```bash\nm87 \u003cdevice\u003e docker compose up -d\n```\n\n(*More deployment commands and flags coming soon.*)\n\n---\n\n## 📚 Detailed Docs\n\nFull documentation, examples, and tutorials are available here:\n[m87-client/](./m87-client/)\n\n---\n\n## 🧪 Building from Source\n\nRequires:\n\n* Rust 1.85+\n* Git\n\n```bash\ngit clone https://github.com/make87/m87.git\ncd make87\ncargo build --release\n```\n\n---\n\n## 🤝 Contributing\n\nContributions, bug reports, and feedback are welcome! Whether you're a tinkerer, an early adopter, or looking to integrate m87 into your stack:\n\n1. Open issues for ideas and bugs\n2. Submit PRs — we review quickly\n\nLet's build a better developer experience for physical systems.\n\n---\n\n## 📜 License\n\n* [m87-client](./m87-client/), [m87-shared](./m87-shared/): **Apache-2.0**\n* [m87-server](./m87-server/): **AGPL-3.0-or-later**\n\n---\n\n## ⭐ If This Excites You\n\nGive the repo a ⭐ and share your feedback — every star helps drive adoption and signals to others that this tool is worth exploring.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmake87%2Fm87","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmake87%2Fm87","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmake87%2Fm87/lists"}