{"id":30947752,"url":"https://github.com/robbeverhelst/tsarr","last_synced_at":"2026-04-01T17:10:46.962Z","repository":{"id":312722504,"uuid":"1048370055","full_name":"robbeverhelst/Tsarr","owner":"robbeverhelst","description":"Type-safe TypeScript SDK for Servarr APIs (Radarr, Sonarr, Lidarr, Readarr, Prowlarr).","archived":false,"fork":false,"pushed_at":"2026-03-03T05:51:05.000Z","size":1704,"stargazers_count":15,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-03T09:27:58.298Z","etag":null,"topics":["bun","lidarr","prowlarr","radarr","readarr","sdk","servarr","softwarr","sonarr","typescript"],"latest_commit_sha":null,"homepage":"https://robbeverhelst.github.io/Tsarr/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robbeverhelst.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":null,"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},"funding":{"buy_me_a_coffee":"robbeverhec"}},"created_at":"2025-09-01T10:40:33.000Z","updated_at":"2026-03-03T05:50:41.000Z","dependencies_parsed_at":"2026-01-27T13:01:14.420Z","dependency_job_id":null,"html_url":"https://github.com/robbeverhelst/Tsarr","commit_stats":null,"previous_names":["robbeverhelst/tsarr"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/robbeverhelst/Tsarr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbeverhelst%2FTsarr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbeverhelst%2FTsarr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbeverhelst%2FTsarr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbeverhelst%2FTsarr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robbeverhelst","download_url":"https://codeload.github.com/robbeverhelst/Tsarr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbeverhelst%2FTsarr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30109154,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T03:40:26.266Z","status":"ssl_error","status_checked_at":"2026-03-05T03:39:15.902Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["bun","lidarr","prowlarr","radarr","readarr","sdk","servarr","softwarr","sonarr","typescript"],"created_at":"2025-09-11T02:00:59.557Z","updated_at":"2026-04-01T17:10:46.955Z","avatar_url":"https://github.com/robbeverhelst.png","language":"TypeScript","funding_links":["https://buymeacoffee.com/robbeverhec"],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"./docs/logo.png\" alt=\"Tsarr Logo\" width=\"40\" height=\"40\" style=\"vertical-align: middle; margin-right: 8px;\"\u003e Tsarr\n\n*TypeScript-arr (pronounced \"Tsar\" /tsɑr/ - a Slavic king/emperor)*\n\n[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=flat-square\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/Node.js-339933?style=flat-square\u0026logo=node.js\u0026logoColor=white)](https://nodejs.org/)\n[![npm](https://img.shields.io/npm/v/tsarr?style=flat-square)](https://www.npmjs.com/package/tsarr)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n[![CI](https://github.com/robbeverhelst/Tsarr/workflows/CI/badge.svg)](https://github.com/robbeverhelst/Tsarr/actions)\n\n**A Radarr CLI, Sonarr CLI, and type-safe TypeScript SDK for the entire Servarr ecosystem.**\n\nTsarr is a unified command-line tool and TypeScript SDK for managing Radarr, Sonarr, Lidarr, Readarr, Prowlarr, and Bazarr. Auto-generated from official OpenAPI specs, it gives you type-safe API clients and a powerful CLI to manage your entire *arr media stack from code or the terminal.\n\n## Why Tsarr?\n\n- **The only type-safe TypeScript client** for all Servarr apps in one package\n- **Always up-to-date** — generated from official Swagger/OpenAPI specs, not manually maintained\n- **CLI + SDK** — use it as a standalone Radarr/Sonarr CLI tool or import it as a library in your code\n- **Zero dependencies for binaries** — standalone binaries for every platform, or run via Node.js/Bun\n- **Built for automation** — JSON output, scripting-friendly, perfect for cron jobs and CI/CD pipelines\n\n## Features\n\n- 🛡️ **Type-safe** - Generated from official Swagger/OpenAPI specs\n- ⚡ **Universal** - Works with Node.js, Bun, and as standalone binaries\n- 📦 **Modular** - Separate clients for each Servarr app\n- 💻 **CLI included** - Manage all Servarr apps from the terminal\n- 🚀 **Multi-platform** - Available via npm, Homebrew, Docker, Scoop, Chocolatey, AUR, Nix, and pre-built binaries\n\n## Supported Servarr Apps\n\n- **Radarr** - Movie collection manager\n- **Sonarr** - TV series collection manager\n- **Lidarr** - Music collection manager\n- **Readarr** - Book collection manager\n- **Prowlarr** - Indexer manager\n- **Bazarr** - Subtitle manager\n\n## Installation\n\n### npm / Node.js\n\n```bash\n# As a dependency (SDK)\nnpm install tsarr\n\n# As a global CLI\nnpm install -g tsarr\n\n# Or run directly without installing\nnpx tsarr doctor\n```\n\n### Bun\n\n```bash\nbun add tsarr\nbun add -g tsarr\nbunx tsarr doctor\n```\n\n### Homebrew (macOS / Linux)\n\n```bash\nbrew install robbeverhelst/tsarr/tsarr\n```\n\n### OpenClaw / ClawHub\n\nInstall the published OpenClaw skill to manage your Servarr stack through TsArr:\n\n```bash\nopenclaw clawhub install tsarr\n# or with the registry CLI\nclawhub install tsarr\n```\n\n### Pre-built Binaries\n\nDownload standalone binaries from [GitHub Releases](https://github.com/robbeverhelst/tsarr/releases) — no runtime needed:\n\n| Platform | Download |\n|---|---|\n| macOS (Apple Silicon) | `tsarr-darwin-arm64` |\n| macOS (Intel) | `tsarr-darwin-x64` |\n| Linux (x64) | `tsarr-linux-x64` |\n| Linux (arm64) | `tsarr-linux-arm64` |\n| Windows (x64) | `tsarr-windows-x64.exe` |\n\n```bash\n# Example: Linux x64\ncurl -L https://github.com/robbeverhelst/tsarr/releases/latest/download/tsarr-linux-x64 -o tsarr\nchmod +x tsarr\nsudo mv tsarr /usr/local/bin/\n```\n\n### Docker\n\n```bash\ndocker run --rm ghcr.io/robbeverhelst/tsarr doctor\ndocker run --rm -v ~/.config/tsarr:/root/.config/tsarr ghcr.io/robbeverhelst/tsarr radarr movie list\n```\n\n### Scoop (Windows)\n\n\u003e **Note:** Requires adding the tsarr bucket first.\n\n```powershell\nscoop bucket add tsarr https://github.com/robbeverhelst/scoop-tsarr\nscoop install tsarr\n```\n\n### Chocolatey (Windows)\n\n\u003e **Note:** Chocolatey packaging is prepared but may still be pending moderation. See [docs/distribution.md](./docs/distribution.md).\n\n```powershell\nchoco install tsarr\n```\n\n### AUR (Arch Linux)\n\n```bash\nyay -S tsarr-bin\n```\n\n### Nix\n\nInstall the repo flake directly:\n\n```bash\nnix profile install github:robbeverhelst/tsarr?dir=packaging/nix\n# or run it without installing\nnix run github:robbeverhelst/tsarr?dir=packaging/nix -- doctor\n```\n\nThe committed flake under [`packaging/nix/flake.nix`](./packaging/nix/flake.nix) tracks the latest published release. Shared `nixpkgs` distribution still requires a maintainer submission. See [docs/distribution.md](./docs/distribution.md) for the full distribution flow.\n\n## CLI\n\n### Setup\n\n```bash\n# Interactive setup wizard\ntsarr config init\n\n# Or configure manually\ntsarr config set services.radarr.baseUrl http://localhost:7878\ntsarr config set services.radarr.apiKey your-api-key\n\n# Or use environment variables\nexport TSARR_RADARR_URL=http://localhost:7878\nexport TSARR_RADARR_API_KEY=your-api-key\n```\n\nConfig is stored in `~/.config/tsarr/config.json` (global) or `.tsarr.json` (local project). Environment variables take priority over config files.\n\n### Usage\n\n```bash\ntsarr \u003cservice\u003e \u003cresource\u003e \u003caction\u003e [options]\n\n# Examples\ntsarr radarr movie list\ntsarr radarr movie search --term \"Interstellar\"\ntsarr sonarr series list\ntsarr prowlarr indexer list\ntsarr lidarr artist search --term \"Radiohead\"\n\n# Output formats\ntsarr radarr movie list --table    # Table (default in terminal)\ntsarr radarr movie list --json     # JSON (default when piped)\ntsarr radarr movie list --quiet    # IDs only\n\n# Diagnostics\ntsarr doctor                       # Test all configured connections\n\n# Shell completions\ntsarr completions bash \u003e\u003e ~/.bashrc\ntsarr completions zsh \u003e\u003e ~/.zshrc\ntsarr completions fish \u003e ~/.config/fish/completions/tsarr.fish\n```\n\n### Available Commands\n\n| Service | Resources |\n|---------|-----------|\n| `radarr` | movie, profile, tag, queue, rootfolder, system, history, customformat |\n| `sonarr` | series, episode, profile, tag, rootfolder, system |\n| `lidarr` | artist, album, profile, tag, rootfolder, system |\n| `readarr` | author, book, profile, tag, rootfolder, system |\n| `prowlarr` | indexer, search, app, tag, system |\n| `bazarr` | series, movie, episode, provider, language, system |\n\nSee the [CLI Guide](./docs/cli.md) for full documentation including all commands, scripting examples, and shell completions.\n\n## SDK\n\n### Quick Start\n\n```typescript\nimport { RadarrClient, SonarrClient, LidarrClient } from 'tsarr';\n\nconst radarr = new RadarrClient({\n  baseUrl: 'http://localhost:7878',\n  apiKey: 'your-api-key'\n});\n\n// Type-safe API calls\nconst movies = await radarr.getMovies();\nconst status = await radarr.getSystemStatus();\n```\n\n### Modular Imports\n\n```typescript\n// Import only what you need\nimport { RadarrClient } from 'tsarr/radarr';\nimport { SonarrClient } from 'tsarr/sonarr';\nimport type { MovieResource } from 'tsarr/radarr/types';\n```\n\n## Development\n\nInstall dependencies:\n\n```bash\nbun install\n```\n\nRun development server:\n\n```bash\nbun run dev\n```\n\nBuild the project:\n\n```bash\nbun run build\n```\n\nLint and format:\n\n```bash\nbun run lint\nbun run format\n```\n\n## 📖 Documentation\n\n- [CLI Guide](./docs/cli.md) - Complete CLI documentation with all commands and scripting examples\n- [SDK Usage Guide](./docs/usage.md) - SDK usage documentation with examples\n- [API Documentation](https://robbeverhelst.github.io/Tsarr/) - Auto-generated TypeScript API docs\n- [Examples](./docs/examples.md) - Real-world automation examples\n- [Examples Directory](./examples/) - Runnable example scripts\n\n## Use Cases\n\nPerfect for building:\n- **Automation scripts** - Bulk movie imports, library maintenance, and media organization\n- **Management tools** - Custom dashboards, backup utilities, and monitoring scripts  \n- **Integration scripts** - Connect Servarr apps with other services and workflows\n- **CLI usage** - Manage your media servers directly from the terminal\n\n## Alternatives\n\nLooking for a Radarr CLI or Sonarr API client? Here's how Tsarr compares:\n\n| Feature | Tsarr | Manual API calls |\n|---------|-------|-----------------|\n| Type safety | ✅ Full TypeScript types | ❌ None |\n| All *arr apps | ✅ 6 apps in one package | ⚠️ DIY per app |\n| CLI included | ✅ Built-in | ❌ No |\n| Auto-generated | ✅ From official specs | ❌ Manual |\n| Runtime | Node.js / Bun / standalone | curl |\n| Package managers | npm, Homebrew, Docker, AUR, Nix, Scoop | N/A |\n\n## Contributing\n\nThis project uses:\n- [Bun](https://bun.sh) as the JavaScript runtime\n- [Biome](https://biomejs.dev) for linting and formatting\n- [@hey-api/openapi-ts](https://github.com/hey-api/openapi-ts) for code generation\n- [Renovate](https://renovatebot.com) for dependency updates\n\n## License\n\nMIT - see [LICENSE](LICENSE) file for details.\n\n---\n\n\u003csub\u003e**Search terms:** radarr cli · sonarr cli · lidarr cli · readarr cli · prowlarr cli · bazarr cli · servarr api client · arr typescript · selfhosted media automation\u003c/sub\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbeverhelst%2Ftsarr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobbeverhelst%2Ftsarr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbeverhelst%2Ftsarr/lists"}