- Tsarr is a TypeScript SDK and CLI for the Servarr ecosystem and its neighbours: Radarr, Sonarr, Lidarr, Readarr, Prowlarr, Bazarr, qBittorrent, Seerr (Jellyseerr/Overseerr), and Jellyfin.
- The published package targets Node.js (
>=24.15.0), while Bun is used for local development, build, generation, and tests. - This repo already ships generated clients, handwritten wrappers, a CLI, packaging assets, and user-facing docs. Do not treat core features as "future work".
README.mdfor product overview, install paths, and developer commands.docs/cli.mdfor CLI behavior and supported command patterns.docs/usage.mdfor SDK usage examples.docs/distribution.mdandpackaging/for release and packaging workflows.
bun install- install dependenciesbun test- run testsbun run build- regenerate clients/types and build the packagebun run generate- regenerate all OpenAPI-derived clientsbun run refresh:specs- refresh local OpenAPI specsbun run typecheck- run TypeScript checksbun run lint- run Biome checksbun run cli -- --help- inspect the CLI locally
src/cli/- CLI entrypoint, shared command framework, output formatting, config, promptssrc/clients/- handwritten service wrappers exposed as public SDK entrypointssrc/generated/- generated OpenAPI clients and types for each servicesrc/core/- shared config validation, error types, and HTTP helpersscripts/- code generation, spec refresh, type export, and packaging automationspecs/- local OpenAPI inputs used by generationtests/- unit, CLI, and integration coverageexamples/- runnable SDK examples
- Generated code lives under
src/generated/. Prefer changing generator inputs or scripts over editing generated files by hand. - Client generation uses
@hey-api/openapi-ts, notswagger-typescript-api. scripts/generate.tsincludes Bazarr-specific spec normalization. Preserve that behavior when touching generation.- If you change API surface area, keep generated code, handwritten wrappers, exports, and docs aligned.
- Most product logic changes belong in
src/cli/,src/clients/,src/core/, orscripts/. - Keep CLI docs and smoke tests in sync when you add or rename commands.
- Treat
README.mdanddocs/as user-facing sources of truth. Keep this file short and operational. - There is no development server in this repo. The
devscript runs the library entrypoint and is not an app server workflow.
- Use Biome for formatting and linting.
- Prefer adding or updating tests when changing command definitions, output behavior, config handling, or client wrappers.
- Preserve modular exports for per-service imports such as
tsarr/radarrandtsarr/radarr/types.