Configuration Types
Dynamic Configuration
YAML files that update without restart
Static Configuration
Environment variables requiring restart
Dynamic Configuration
Dynamic configuration uses YAML files in your config directory (default:/data/config in Docker). Changes to these files are automatically detected and applied without restarting the container.
| File | Purpose | Reference |
|---|---|---|
lists.yaml | Define which packages to track | Lists Guide |
providers.yaml | Configure provider defaults and options | Providers Guide |
general.yaml | General application settings | General Settings |
ui.yaml | UI customization options | UI Customization |
File Watching
The config system uses chokidar to monitor file changes:- Automatic reload - Changes detected and applied in real-time
- Debounced processing - Multiple rapid changes are batched
- Stream-based updates - Connected clients receive updates via SSE
- Polling mode - Available for Docker/network filesystems
If file watching doesn’t work in your environment (common in Docker on macOS or network filesystems), enable polling mode:
Static Configuration
Static configuration uses environment variables and requires a container restart to change. These control server behavior, caching, and system-level settings.Common Environment Variables
Common Environment Variables
| Variable | Type | Default | Description |
|---|---|---|---|
SERVER_CONFIG_DIR | string | config | Config files directory (relative or absolute) |
SERVER_CONFIG_WATCH_POLLING | boolean | false | Use polling for file watching |
SERVER_PACKAGES_FETCH_CONCURRENCY | integer | 10 | Max parallel package fetches |
SERVER_PACKAGES_CACHE_TTL | integer | 10800 | Cache TTL in seconds (3 hours) |
SERVER_PACKAGES_CACHE_DISABLED | boolean | false | Disable package caching |
Graceful Degradation
Shipped’s config system is designed to never crash the app due to user configuration errors:Parse Errors
Defaults are used and errors are logged. Previous config is retained on reload failures.
Invalid Items
Invalid packages or settings are skipped with warnings. The rest of the config remains functional.
Validation and Warnings
Configuration is validated at multiple levels:- YAML parsing - Syntax errors are caught and logged
- Effect Schema validation - Runtime type checking with detailed errors
- Provider validation - Package-specific validation against provider schemas
- View construction - Final validation before use in the application
IDE Support
Shipped generates JSON schemas for all config files to provide IDE autocompletion and validation.- VSCode
- Available Schemas
Add the schema reference to the top of your YAML files:
lists.yaml
Real-Time Updates
By default, Shipped streams configuration changes to all connected clients using Server-Sent Events (SSE) via ORPC.How It Works
- File Change - chokidar detects a change in a config file
- Validation - Config is parsed and validated with Effect Schema
- SubscriptionRef Update - Server updates its reactive configuration reference
- SSE Broadcast - Change is streamed to all connected clients
- Client Update - Clients receive and apply the new configuration
- UI Refresh - UI updates automatically without page reload
Configuration Flow
Next Steps
Lists Configuration
Define which packages to track
Providers Configuration
Configure provider-specific options
General Settings
Application-wide settings
UI Customization
Customize the user interface