ReferenceConfiguration

Configuration

RAT is configured through a combination of a YAML configuration file (rat.yaml), environment variables, and Docker Compose settings. This page covers every configuration option across all services.


rat.yaml

The rat.yaml file is the primary configuration file for the ratd platform service. It defines plugin configurations, feature flags, and platform-level settings. The file location is controlled by the RAT_CONFIG environment variable (default: rat.yaml in the working directory).

rat.yaml
# RAT Platform Configuration
# This file configures plugins and platform behavior.
 
# Plugin configuration — Pro Edition only
plugins: []
  # - name: auth-keycloak
  #   path: /plugins/auth-keycloak
  #   config:
  #     issuer_url: https://keycloak.example.com/realms/rat
  #     client_id: rat-platform
  #     audience: rat-api
 
  # - name: acl
  #   path: /plugins/acl
  #   config:
  #     default_policy: deny
  #     admin_users:
  #       - admin@example.com

Plugin Configuration Fields

Each plugin entry in the plugins array supports these fields:

FieldTypeRequiredDescription
namestringYesUnique plugin identifier (e.g., auth-keycloak, acl)
pathstringYesFilesystem path to the plugin binary
configobjectNoPlugin-specific configuration (passed as-is to the plugin)

In the Community Edition, the plugins array is empty. Plugins are a Pro Edition feature. The rat.yaml file is still loaded — it just has no plugin entries.

Path Resolution

Paths in rat.yaml are resolved relative to the rat.yaml file location. If RAT_CONFIG=/etc/rat/rat.yaml and a plugin path is ./plugins/auth, it resolves to /etc/rat/plugins/auth.


Environment Variables

RAT services are configured primarily through environment variables. Each service has its own set of variables. In Docker Compose, these are set in the environment section of each service.

ratd (Go Platform)

The ratd service is the central API server, scheduler, and plugin host.

Server

VariableDefaultDescription
RAT_LISTEN_ADDR127.0.0.1:8080Address and port the HTTP server binds to
PORTAlternative to RAT_LISTEN_ADDR (sets port only, binds to 0.0.0.0)
CORS_ORIGINShttp://localhost:3000Comma-separated list of allowed CORS origins
RATE_LIMIT50Maximum requests per second per client. Set to "0" to disable
RAT_CONFIGrat.yamlPath to the rat.yaml configuration file
EDITIONcommunityPlatform edition (community or pro)

Authentication

VariableDefaultDescription
RAT_API_KEYStatic API key for simple auth. When set, all requests must include Authorization: Bearer <key>
RAT_LICENSE_KEYPro Edition license key for plugin activation

Database

VariableDefaultDescription
DATABASE_URLPostgreSQL connection string. Format: postgres://user:password@host:port/dbname?sslmode=disable

S3 (MinIO)

VariableDefaultDescription
S3_ENDPOINTMinIO/S3 endpoint (e.g., minio:9000)
S3_ACCESS_KEYS3 access key ID
S3_SECRET_KEYS3 secret access key
S3_BUCKETratS3 bucket name for all data storage
S3_USE_SSLfalseEnable TLS for S3 connections
S3_METADATA_TIMEOUT10sTimeout for S3 metadata operations (list, head)
S3_DATA_TIMEOUT60sTimeout for S3 data operations (get, put)

Service Discovery

VariableDefaultDescription
RUNNER_ADDRRunner gRPC address (e.g., http://runner:50052)
RATQ_ADDRQuery service gRPC address (e.g., http://ratq:50051)
NESSIE_URLNessie REST catalog URL (e.g., http://nessie:19120/api/v1)

Scheduler

VariableDefaultDescription
SCHEDULER_ENABLEDtrueEnable the built-in cron scheduler. Set to false to disable scheduling entirely

TLS

VariableDefaultDescription
TLS_CERT_FILEPath to TLS certificate file for HTTPS
TLS_KEY_FILEPath to TLS private key file for HTTPS
GRPC_TLS_CAPath to CA certificate for verifying gRPC client connections to runner/ratq

runner (Python Pipeline Executor)

The runner service executes pipelines, writes to Iceberg, and runs quality tests.

S3 (MinIO)

VariableDefaultDescription
S3_ENDPOINTminio:9000MinIO/S3 endpoint
S3_ACCESS_KEYS3 access key ID
S3_SECRET_KEYS3 secret access key
S3_BUCKETratS3 bucket name
S3_USE_SSLfalseEnable TLS for S3 connections
S3_SESSION_TOKENOptional session token for temporary S3 credentials
S3_REGIONus-east-1S3 region (required by some S3-compatible stores)

DuckDB

VariableDefaultDescription
DUCKDB_MEMORY_LIMIT2GBMaximum memory DuckDB can use per connection
DUCKDB_THREADS4Number of CPU threads DuckDB uses for query execution

Nessie

VariableDefaultDescription
NESSIE_URLhttp://nessie:19120/api/v1Nessie REST catalog endpoint

gRPC

VariableDefaultDescription
GRPC_PORT50052Port the gRPC server listens on
GRPC_TLS_CERTPath to TLS certificate for gRPC server
GRPC_TLS_KEYPath to TLS private key for gRPC server

Execution

VariableDefaultDescription
RUN_TTL_SECONDS3600Time-to-live for completed run state (seconds). After this, the run is cleaned up
RUNNER_MAX_CONCURRENT10Maximum number of pipelines executing simultaneously
RUNNER_MAX_WORKERS10Maximum worker threads in the execution pool
RUNNER_STATE_DIR/tmp/rat-runner-stateDirectory for temporary run state files
RATD_CALLBACK_URLURL for push-based status callbacks to ratd (e.g., http://ratd:8080)

ratq (Python Query Service)

The ratq service handles interactive DuckDB queries (read-only) and schema introspection.

S3 (MinIO)

Same as the runner service:

VariableDefaultDescription
S3_ENDPOINTminio:9000MinIO/S3 endpoint
S3_ACCESS_KEYS3 access key ID
S3_SECRET_KEYS3 secret access key
S3_BUCKETratS3 bucket name
S3_USE_SSLfalseEnable TLS for S3 connections
S3_REGIONus-east-1S3 region

DuckDB

VariableDefaultDescription
DUCKDB_MEMORY_LIMIT2GBMaximum memory DuckDB can use per connection
DUCKDB_THREADS4Number of CPU threads DuckDB uses for query execution

Nessie

VariableDefaultDescription
NESSIE_URLhttp://nessie:19120/api/v1Nessie REST catalog endpoint

gRPC

VariableDefaultDescription
GRPC_PORT50051Port the gRPC server listens on
GRPC_TLS_CERTPath to TLS certificate for gRPC server
GRPC_TLS_KEYPath to TLS private key for gRPC server

portal (Next.js Web IDE)

The portal is the web-based user interface for RAT.

VariableDefaultDescription
NEXT_PUBLIC_API_URLhttp://localhost:8080Public API URL used by the browser (client-side requests)
API_URLhttp://ratd:8080Internal API URL used by Next.js server-side rendering
⚠️

NEXT_PUBLIC_API_URL is embedded at build time for Next.js client components. If you change this value, you must rebuild the portal image. API_URL is read at runtime and can be changed without rebuilding.


Docker Compose Configuration

The default Docker Compose file is located at infra/docker-compose.yml. It defines all 7 services plus the minio-init bootstrap container.

Shared Configuration Anchors

The compose file uses YAML anchors to avoid repeating S3 credentials:

infra/docker-compose.yml
x-s3-credentials: &s3-credentials
  S3_ENDPOINT: minio:9000
  S3_ACCESS_KEY: ${S3_ACCESS_KEY:-minioadmin}
  S3_SECRET_KEY: ${S3_SECRET_KEY:-minioadmin}
  S3_BUCKET: rat
  S3_USE_SSL: "false"
  S3_REGION: us-east-1
 
x-logging: &default-logging
  driver: json-file
  options:
    max-size: "10m"
    max-file: "3"

Overriding Defaults

Environment variables in docker-compose.yml use the ${VAR:-default} syntax. You can override them in three ways:

Terminal
# Export variables before running compose
export S3_ACCESS_KEY=my-production-key
export S3_SECRET_KEY=my-production-secret
export POSTGRES_USER=ratprod
export POSTGRES_PASSWORD=strong-password-here
make up

The .env file at infra/.env is gitignored. Use infra/.env.example as a template for production deployments.

Resource Limits

Each service has CPU and memory limits defined in the compose file:

ServiceMemory LimitCPU LimitNotes
ratd512 MB1.0Lightweight Go binary
ratq1 GB1.0DuckDB needs memory for queries
runner2 GB2.0Largest — DuckDB + PyArrow + Iceberg writes
portal512 MB1.0Next.js standalone server
postgres1 GB1.0Database engine
minio1 GB1.0Object storage
nessie512 MB1.0Quarkus-based catalog
minio-init256 MB0.5Bootstrap only — exits after setup

Networks

NetworkNameServicesPurpose
frontendrat_frontendportal, ratdBrowser-accessible services
backendinfra_defaultall servicesInternal service communication

Volumes

VolumeServiceMount PointPurpose
postgres_datapostgres/var/lib/postgresql/dataDatabase persistence
minio_dataminio/dataObject storage persistence

Default Values Summary

Here is a quick reference of all default values across the platform:

VariableDefaultService
RAT_LISTEN_ADDR127.0.0.1:8080ratd
CORS_ORIGINShttp://localhost:3000ratd
RATE_LIMIT50 req/sratd
SCHEDULER_ENABLEDtrueratd
S3_BUCKETratall
S3_USE_SSLfalseall
S3_REGIONus-east-1runner, ratq
S3_METADATA_TIMEOUT10sratd
S3_DATA_TIMEOUT60sratd
DUCKDB_MEMORY_LIMIT2GBrunner, ratq
DUCKDB_THREADS4runner, ratq
GRPC_PORT50051 (ratq), 50052 (runner)ratq, runner
RUN_TTL_SECONDS3600runner
RUNNER_MAX_CONCURRENT10runner
RUNNER_MAX_WORKERS10runner
RUNNER_STATE_DIR/tmp/rat-runner-staterunner
NEXT_PUBLIC_API_URLhttp://localhost:8080portal
API_URLhttp://ratd:8080portal
POSTGRES_USERratpostgres
POSTGRES_PASSWORDratpostgres