{"id":47857946,"url":"https://github.com/danieltamas/run.dev","last_synced_at":"2026-04-03T23:03:05.941Z","repository":{"id":344851341,"uuid":"1183416302","full_name":"danieltamas/run.dev","owner":"danieltamas","description":"Run.dev is an AI-native local development environment built in Rust. It manages all your services from one TUI dashboard — automatic .local domains with HTTPS, SNI-based    reverse proxy, live CPU/memory stats, and Claude Code integration for crash diagnosis and live debugging. One binary. Zero config files.","archived":false,"fork":false,"pushed_at":"2026-03-23T21:58:42.000Z","size":7422,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-24T20:26:11.938Z","etag":null,"topics":["ai","ai-agent","claude","cli","local-first","mamp","nginx","ssl","ssl-certificates"],"latest_commit_sha":null,"homepage":"https://getrun.dev","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danieltamas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2026-03-16T15:30:25.000Z","updated_at":"2026-03-23T21:58:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/danieltamas/run.dev","commit_stats":null,"previous_names":["danieltamas/run.dev"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/danieltamas/run.dev","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danieltamas%2Frun.dev","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danieltamas%2Frun.dev/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danieltamas%2Frun.dev/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danieltamas%2Frun.dev/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danieltamas","download_url":"https://codeload.github.com/danieltamas/run.dev/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danieltamas%2Frun.dev/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31381009,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T21:40:47.592Z","status":"ssl_error","status_checked_at":"2026-04-03T21:40:05.436Z","response_time":107,"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":["ai","ai-agent","claude","cli","local-first","mamp","nginx","ssl","ssl-certificates"],"created_at":"2026-04-03T23:03:05.104Z","updated_at":"2026-04-03T23:03:05.924Z","avatar_url":"https://github.com/danieltamas.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/rust-2021-orange?style=flat-square\u0026logo=rust\" alt=\"Rust 2021\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/version-0.2.8-blue?style=flat-square\" alt=\"Version\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey?style=flat-square\" alt=\"Platform\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-green?style=flat-square\" alt=\"License\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/AI-Claude%20powered-blueviolet?style=flat-square\" alt=\"AI Powered\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003erun.dev\u003c/h1\u003e\n\n\u003ch3 align=\"center\"\u003eAI-native local dev environment\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eOne dashboard. All your services. Zero config files to babysit.\u003c/em\u003e\n\u003c/p\u003e\n\n---\n\n## The Problem\n\nYou're an architect. Or an artisan. Or both. You've got 4 microservices, 2 frontends, a websocket server, and that one Go binary Steve wrote before he left. Every morning you open 6 terminal tabs, type the same commands, forget which port is which, and lose 15 minutes to \"address already in use\" before your first coffee.\n\nMAMP? Nginx configs? Docker Compose YAML files longer than your lease agreement?\n\n**Nah.**\n\n## What Run.dev Does\n\nRun.dev is a single Rust binary that replaces all of that. It gives you:\n\n- **A nice dashboard** — see every project and service at a glance, start/stop with a keystroke\n- **Automatic local domains** — `api.myapp.local`, `frontend.myapp.local`, with real HTTPS\n- **Zero-config SSL** — mkcert-trusted certs, with rcgen fallback. No manual cert management\n- **Reverse proxy** — SNI-based routing with WebSocket support, from pretty URLs to `localhost:whatever`\n- **Process management** — spawn, monitor, restart. CPU and RAM stats per service, live\n- **Smart project scanning** — point it at a folder, it figures out `npm run dev` vs `cargo run` vs `go run .`\n- **AI crash diagnosis** — when something dies, Claude reads the stderr and tells you what went wrong\n- **Personality** — run.dev has moods. When everything works: 😎 *vibing*. When stuff crashes: 💀 *flatlined*\n\n```\n  ██████╗ ██╗   ██╗███╗   ██╗  ██████╗ ███████╗██╗   ██╗\n  ██╔══██╗██║   ██║████╗  ██║  ██╔══██╗██╔════╝██║   ██║     3/4 services  vibing\n  ██████╔╝██║   ██║██╔██╗ ██║  ██║  ██║█████╗  ██║   ██║\n  ██╔══██╗██║   ██║██║╚██╗██║  ██║  ██║██╔══╝  ╚██╗ ██╔╝     [a] add service  [n] new project\n  ██║  ██║╚██████╔╝██║ ╚████║  ██████╔╝███████╗ ╚████╔╝      [s] start  [x] stop  [r] restart\n  ╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═══╝  ╚═════╝ ╚══════╝  ╚═══╝       [/] ask the AI anything\n\n  Daniel Tamas\n  hello@danieltamas.com                                       2 projects  configured  v0.2.8\n\n  projects ────────────────────────────────────────────────────────────────────────\n          service                            url                       local           mem   cpu\n\n  v WAM  2 services\n  | * win.wam.app                          https://win.wam.app       localhost:5111   42M  0.0%\n  | * api.wam.app                          https://api.wam.app       localhost:4000   38M  2.1%\n  v side-project  1 service\n  | x backend       bro, backend is ded. port 3000 is already taken.\n  |                 press [f] to let me fix it\n\n  ────────────────────────────────────────────────────────────────────────────────\n  / ask claude something...\n```\n\n## Install\n\n**One line:**\n\n```bash\ncurl -fsSL https://getrun.dev/install.sh | bash\n```\n\nThe installer shows you exactly what it will change before proceeding:\n\n**What gets installed:**\n- `rundev` binary → `/usr/local/bin/rundev` (+ `run.dev` symlink)\n- `mkcert` for trusted local HTTPS certificates\n- Build tools (gcc, pkg-config, libssl-dev) — only if building from source\n\n**What changes on your system:**\n- `/etc/hosts` — adds entries for your local dev domains\n- `/etc/sudoers.d/rundev` — passwordless sudo for the hosts helper only\n- **macOS:** `/etc/pf.anchors/rundev` + `/etc/pf.conf` — pfctl firewall rules (port 80→1111, 443→1112)\n- **Linux:** iptables NAT rules for port forwarding (80→1111, 443→1112, localhost only)\n- Adds `/usr/local/bin` to your shell PATH (if not already there)\n\nAll changes can be reversed with `rundev uninstall`. If the installer fails partway through, it automatically rolls back everything it changed.\n\nWhen run interactively (`bash install.sh`), you'll be prompted to confirm. When piped (`curl | bash`), it proceeds after showing the summary.\n\n**Or build it yourself:**\n\n```bash\ngit clone https://github.com/danieltamas/run.dev.git\ncd run.dev\nmake install\n```\n\n**Requirements:** Rust toolchain (the installer handles this automatically). No Node. No Python. No Docker.\n\n## Quick Start\n\n```bash\n# Launch the dashboard (both commands work)\nrundev\nrun.dev\n\n# Press [a] to create a project → give it a name → get a .local domain\n# Press [a] again on the project → point it at a folder\n# Run.dev scans it, suggests a start command, picks a port\n# Your service is running. With SSL. On a pretty URL. In 30 seconds.\n```\n\n## How It Works\n\n```\nBrowser                   Run.dev                       Your services\n  │                          │                              │\n  │  https://api.myapp.local │                              │\n  ├─────────────────────────►│  /etc/hosts → 127.0.0.1 + ::1     │\n  │                          │  port 443 → 1112 (pfctl)    │\n  │                          │  TLS + SNI → pick SSL cert   │\n  │                          │  Host header → route lookup  │\n  │                          ├─────────────────────────────►│ localhost:4000\n  │                          │◄─────────────────────────────┤\n  │◄─────────────────────────┤                              │\n  │  200 OK (green padlock)  │                              │\n```\n\nNo Docker network. No Traefik. No nginx.conf. Just a binary that manages your processes and routes your traffic.\n\n## CLI\n\nBoth `rundev` and `run.dev` work as the command name.\n\n```bash\nrundev                    # Open the TUI dashboard\nrundev up [project]       # Start project(s) and open dashboard\nrundev down [project]     # Stop project(s)\nrundev status             # Quick status check (no TUI)\nrundev list               # List all projects and services\nrundev doctor             # Health check — ports, certs, hosts, helper\nrundev clean              # Stop everything, remove /etc/hosts entries\nrundev setup              # Re-install privileged helper + port forwarding\n```\n\n**Flags:**\n\n| Flag | What it does |\n|------|--------------|\n| `--no-proxy` | Skip the reverse proxy |\n| `--no-ssl` | Skip SSL certificate setup |\n| `--no-ai` | Disable Claude integration |\n| `-v` | Verbose/debug output |\n\n## Keyboard Shortcuts\n\n| Key | Action |\n|-----|--------|\n| `j` / `k` | Navigate up/down |\n| `Enter` | Expand/collapse project |\n| `a` | Add project or service |\n| `s` | Start selected service |\n| `x` | Stop selected service |\n| `r` | Restart selected service |\n| `f` | Auto-fix crashed service |\n| `l` | Toggle log panel |\n| `/` | Ask Claude a question |\n| `q` | Quit (services keep running) |\n| `Q` | Quit and stop everything |\n\nMouse works too. Click things. Scroll things. It's 2026.\n\n## Project Detection\n\nPoint run.dev at a folder and it knows what to do:\n\n| It finds | It suggests |\n|----------|-------------|\n| `package.json` | `npm run dev`, `npm start`, etc. |\n| `Cargo.toml` | `cargo run` |\n| `go.mod` | `go run .` |\n| `manage.py` | `python manage.py runserver` |\n| `Gemfile` | `bundle exec rails server` |\n| `Procfile` | Each process line |\n| `docker-compose.yml` | Service commands (runs natively, not in Docker) |\n\nPorts are auto-detected from command flags, `.env` files, `package.json` proxy fields, or framework defaults.\n\n## The Mood System\n\nRun.dev watches all your services and expresses how things are going:\n\n| Mood | Emoji | Meaning |\n|------|-------|---------|\n| Vibing | 😎 | Everything running, no issues |\n| Chill | 😌 | Running, minor warnings |\n| Got the Flu | 🤒 | 1-2 services crashed |\n| Wounded | 🤕 | More than half are down |\n| Flatlined | 💀 | Everything is down |\n| Fixing | 🔧 | Auto-restart in progress |\n\nWhen something crashes, run.dev doesn't just show you an exit code. It reads the stderr, categorizes the error, and gives you a personality-driven message with a suggested fix:\n\n```\n✗ api    bro, api is ded. port 4000 is already taken.\n         i know what's wrong. press [f] to let me fix it\n```\n\nPress `[f]` and it kills the process hogging the port. Press `/` and ask Claude what went wrong.\n\n## AI Integration (Optional)\n\nRun.dev is built to work with [Claude Code](https://docs.anthropic.com/en/docs/claude-code), Anthropic's local CLI agent. When a service crashes, run.dev doesn't just show you the exit code — it sends the stderr to Claude for a real diagnosis. Claude reads the logs, understands the context, and tells you what actually went wrong.\n\n**What you get:**\n\n- **Crash diagnosis** — a service dies, Claude reads the stderr and explains what happened and how to fix it\n- **Live debug sessions** — press `/` in the dashboard, ask Claude anything about your running services. It knows your project structure, your routes, your ports — it answers in context\n- **Auto-fix suggestions** — for common errors (port conflicts, missing modules, connection failures), run.dev suggests a fix. Press `[f]` and it handles it\n\nRun.dev talks to Claude Code — your code and logs never leave your machine.\n\nConfigure it in `~/.config/rundev/config.yaml`:\n\n```yaml\nclaude_proxy: http://localhost:3456/v1\n```\n\nThe AI features are entirely optional. The app works perfectly without them. Disable anytime with `--no-ai` or just don't configure the proxy.\n\n## Architecture\n\nSee [`src/docs/ARCHITECTURE.md`](src/docs/ARCHITECTURE.md) for the full technical deep-dive — module structure, data flow diagrams, key types, and design decisions.\n\n## Per-Service Node Version\n\nIf your services need different Node.js versions, add `node_version` to the service config. Run.dev wraps the start command with `nvm use \u003cversion\u003e` automatically — no manual switching.\n\n```yaml\nservices:\n  backend:\n    path: /Users/dan/code/myapp/backend\n    command: npm run dev\n    port: 3000\n    node_version: \"22.9\"       # uses nvm to switch before running\n  frontend:\n    path: /Users/dan/code/myapp/frontend\n    command: npm run dev\n    port: 5173\n    node_version: \"20\"         # different version, no problem\n```\n\nRequires [nvm](https://github.com/nvm-sh/nvm) installed at `$NVM_DIR` (defaults to `~/.nvm`). If `node_version` is omitted, the command runs with whatever Node is on your PATH.\n\n## Config Files\n\nEverything lives in `~/.config/rundev/` (or `~/Library/Application Support/rundev/` on macOS):\n\n```\n~/.config/rundev/\n├── projects/           # One YAML per project\n│   ├── myapp.yaml\n│   └── side-project.yaml\n├── certs/              # Auto-generated SSL certificates\n│   ├── myapp.local.pem\n│   └── myapp.local-key.pem\n├── config.yaml         # Global settings (Claude proxy, theme)\n└── state.json          # PID persistence for background mode\n```\n\n## FAQ\n\n**Do my services stop when I close run.dev?**\nNo. Press `q` and they keep running in the background. Next time you open run.dev, it reconnects. Press `Q` (capital) to stop everything on exit.\n\n**Does it work with Docker services?**\nRun.dev manages processes directly — it doesn't orchestrate containers. If your service runs with a shell command, run.dev can manage it. If it only runs in Docker, you'd run `docker compose up` as the service command.\n\n**Do I need to trust the self-signed certs?**\nRun.dev uses mkcert to generate locally-trusted certs — green padlock out of the box, no manual trust needed. If mkcert isn't available, it falls back to rcgen self-signed certs (browsers will show a warning you can click through once).\n\n**Does it work with Chrome's DNS-over-HTTPS?**\nChrome with \"Use secure DNS\" enabled bypasses `/etc/hosts` entirely. If your local domains aren't resolving, go to `chrome://settings/security` and disable \"Use secure DNS\". Safari, Firefox, curl, and all other tools work out of the box — run.dev writes both IPv4 and IPv6 entries to prevent Happy Eyeballs from falling back to production addresses.\n\n**What about Windows?**\nNot yet. macOS and Linux only. WSL might work but isn't tested.\n\n## License\n\nMIT License — see [LICENSE](LICENSE) for details.\n\nCopyright (c) 2026 Daniel Tamas \u003chello@danieltamas.com\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eBuilt by \u003ca href=\"mailto:hello@danieltamas.com\"\u003eDaniel Tamas\u003c/a\u003e\u003c/strong\u003e\n  \u003cbr /\u003e\n  \u003cem\u003eBecause life's too short for nginx.conf\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://getrun.dev\"\u003egetrun.dev\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanieltamas%2Frun.dev","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanieltamas%2Frun.dev","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanieltamas%2Frun.dev/lists"}