How Runtipi works
Understanding how Runtipi works will help you make the most of it and troubleshoot issues when they arise.
The big picture
Runtipi is a layer on top of Docker that simplifies self-hosting. Think of it as the “App Store” experience for your server but instead of apps running on your phone, they run in isolated containers on your server.
Key components
1. Runtipi dashboard
The web interface you interact with. It’s a React application that runs in a Docker container and communicates with the backend to:
- Display available apps
- Show app status (running, stopped, installing)
- Let you configure app settings
- Manage system settings
2. Runtipi CLI
A command-line tool (runtipi-cli) for administrative tasks:
- Starting/stopping Runtipi
- Updating to newer versions
- Managing backups
- Debugging issues
The CLI itself lives in a separate repository, while the running instance is managed by the backend in this codebase.
3. App Store
A repository (separate from Runtipi itself) containing app definitions. Each app has:
config.json: Metadata, requirements, and exposed settingsdocker-compose.yml: Preferred container configuration source withx-runtipimetadata- Additional files: logos, descriptions, documentation
Legacy docker-compose.json app definitions are still supported and converted automatically.
4. Traefik (reverse proxy)
Handles all incoming web traffic and routes it to the right app. It also:
- Generates SSL certificates automatically
- Handles domain routing
- Manages internal networking between containers
5. PostgreSQL database
Stores Runtipi’s configuration:
- User accounts
- App installations and settings
- System configuration
- App states
How app installation works
When you click “Install” on an app, here’s what happens:
- Download: Runtipi pulls the app definition from the configured app store and copies it into the installed apps directory
- Configuration: Runtipi generates the system
.env, then merges your app settings into an app-specificapp.env - Compose generation: A
docker-compose.generated.ymlfile is produced for that app - Container pull: Docker downloads the app’s container image(s)
- Start: The app container starts running
- Network setup: Traefik reads the labels set in the compose file and configures routing
- Health check: Runtipi monitors the app to ensure it started successfully
Data flow
Installing an App
Accessing an app
File Structure
Runtipi stores everything in its installation directory (where you ran the install script):
- runtipi-cli
- .env
- docker-compose.yml
Important: The app-data directory contains all your app data. Back this
up regularly!
What makes Runtipi different?
- No manual networking: Traefik handles all routing automatically
- No YAML editing: Configuration through web UI. Customizations are possible but not required
- Easy management: Start/stop apps with a click even from mobile
- Automatic updates: Apps can be updated with minimal effort
- App ecosystem: Curated apps that work out of the box
- Beginner-friendly: Abstracts docker and networking complexity
Runtipi doesn’t lock you in. All apps are standard Docker containers. You can
export the compose files and run them independently if needed. All the
generated files are stored in the apps/ directory.