{"id":34938649,"url":"https://github.com/gruntwork-io/runbooks","last_synced_at":"2026-02-19T10:06:18.472Z","repository":{"id":318821791,"uuid":"1060409634","full_name":"gruntwork-io/runbooks","owner":"gruntwork-io","description":"Runbooks enables infrastructure experts to scale their expertise.","archived":false,"fork":false,"pushed_at":"2026-02-13T09:38:21.000Z","size":110000,"stargazers_count":6,"open_issues_count":3,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-13T12:41:27.989Z","etag":null,"topics":["devops","platform-engineering"],"latest_commit_sha":null,"homepage":"https://runbooks.gruntwork.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gruntwork-io.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":".github/CODEOWNERS","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-19T21:37:09.000Z","updated_at":"2026-02-12T19:14:51.000Z","dependencies_parsed_at":"2025-10-16T11:26:12.338Z","dependency_job_id":"7b0bf189-0882-4e40-84af-96f991120e74","html_url":"https://github.com/gruntwork-io/runbooks","commit_stats":null,"previous_names":["gruntwork-io/runbooks"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/gruntwork-io/runbooks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gruntwork-io%2Frunbooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gruntwork-io%2Frunbooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gruntwork-io%2Frunbooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gruntwork-io%2Frunbooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gruntwork-io","download_url":"https://codeload.github.com/gruntwork-io/runbooks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gruntwork-io%2Frunbooks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29609531,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T06:47:36.664Z","status":"ssl_error","status_checked_at":"2026-02-19T06:45:47.551Z","response_time":117,"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":["devops","platform-engineering"],"created_at":"2025-12-26T18:46:09.796Z","updated_at":"2026-02-19T10:06:18.467Z","avatar_url":"https://github.com/gruntwork-io.png","language":"Go","readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://runbooks.gruntwork.io\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./web/public/runbooks-logo-light-color.svg\" height=\"80\"\u003e\n      \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"./web/public/runbooks-logo-dark-color.svg\" height=\"80\"\u003e\n      \u003cimg alt=\"Gruntwork Runbooks\" src=\"./web/public/runbooks-logo-dark-color.svg\" height=\"80\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cem\u003eRunbooks enables infrastructure experts to scale their expertise.\u003c/em\u003e\u003c/p\u003e\n\nRunbooks are interactive markdown documents that enable subject matter experts to capture their knowledge and expertise in a way that is easy for others to understand and use.\n\nFor additional information on Runbooks, or to see it in action, check out the [Runbooks docs](https://runbooks.gruntwork.io).\n\n## Project status\n\n\u003e [!NOTE]\n\u003e As of December 2025, Runbooks was written by a single author and has not yet had a thorough peer review. GitHub issues identifying issues and pull requests fixing them are welcome!\n\n## Security concerns\n\nRunbooks is designed to streamline the code generation and commands you might otherwise run on your local computer. This has important security implications you should be aware of prior to running Runbooks.\n\n### Command execution\n\nRunbooks executes commands directly on your local computer with the full set of environment variables present when you launched the `runbooks` binary. For this reason, it is imperative that you **only open Runbooks you trust.** The Runbooks you open contain arbitrary scripts, and while the Runbooks tool always exposes every last line of code that will be executed, it's easy for long scripts to obscure what they're doing.\n\nIf you do not trust a Runbook file or you're not sure about the author or origin, do not open the Runbook.\n\n### Protections against arbitrary command execution\n\nRunbooks executes commands when the Runbooks frontend makes API calls the Runbooks backend. Runbooks takes various [security measures](http://runbooks.gruntwork.io/security/execution-model/) to make sure that only commands and scripts that are part of the Runbook can be executed via this API, however there are some modes where these restrictions are relaxed in favor of more convenience. Read the docs to understand the security posture in more depth.\n\n## Building\n\nThis project uses [Task](https://taskfile.dev/) as a task runner. Install it first:\n\n```bash\n# macOS\nbrew install go-task\n\n# Or see https://taskfile.dev/installation/ for other methods\n```\n\nThen build the complete binary:\n\n```bash\ntask build\n```\n\nThis will:\n1. Build the frontend (`web/dist`)\n2. Embed the frontend into the Go binary\n3. Output a self-contained `runbooks` binary\n\nOther useful tasks:\n\n```bash\ntask --list     # List all available tasks\ntask clean      # Remove build artifacts\n```\n\n## Development\n\n1. Install prerequisites:\n   - [Bun](https://bun.sh/docs/installation) - JavaScript runtime and package manager\n   - [Go](https://go.dev/doc/install) - Go compiler\n   - [Task](https://taskfile.dev/installation/) - Task runner\n   - [prek](https://prek.j178.dev/) - Pre-commit hook manager (optional, for contributors)\n\n1. Git clone this repo and `cd` to the repo dir.\n\n1. Set up pre-commit hooks (recommended):\n\n   ```bash\n   prek install\n   ```\n\n   This installs git hooks that automatically run spellcheck on documentation before each commit. If you don't have prek installed, you can install it via:\n\n   ```bash\n   # macOS/Linux\n   brew install prek\n\n   # Or via the standalone installer\n   curl --proto '=https' --tlsv1.2 -LsSf https://github.com/j178/prek/releases/latest/download/prek-installer.sh | sh\n\n   # Or via bun/npm\n   bun install -g @j178/prek\n   ```\n\n1. Start the backend and frontend dev servers in separate terminals:\n\n   ```bash\n   # Terminal 1: Backend API server\n   task dev:backend RUNBOOK_PATH=testdata/my-first-runbook\n\n   # Terminal 2: Frontend dev server (Vite with hot reload)\n   task dev:frontend\n   ```\n\nNow you can make changes to the React code in `/web` or to the backend in the applicable `.go` files! The frontend will hot-reload automatically. For Go changes, restart the `dev:backend` task.\n\n### Adding shadcn/ui components\n\nThis project uses [shadcn/ui](https://ui.shadcn.com/) for unstyled components to make use of battle-tested, accessible components. To add a new component, look it up in the shadcn/ui docs, and then use:\n\n```bash\nbunx shadcn@latest add \u003ccomponent_name\u003e\n```\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgruntwork-io%2Frunbooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgruntwork-io%2Frunbooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgruntwork-io%2Frunbooks/lists"}