App Store
The Cloud OS App Store ships with 115+ pre-built application templates embedded directly in the binary. You can browse, search, install, configure, update, and remove self-hosted applications without writing any Docker Compose files.
Browsing Apps
Open the App Store from the sidebar under Apps > Store. The store supports two view modes:
- Grid view — icon cards showing the app name, category, and a short description
- List view — a compact table format with more detail per row
Categories
Apps are organized into categories:
| Category | Examples |
|---|---|
| Databases | PostgreSQL, MySQL, Redis, MongoDB |
| Monitoring | Grafana, Prometheus, Uptime Kuma |
| Development | Gitea, Code-Server |
| Media | Jellyfin, Navidrome, Audiobookshelf, Immich |
| Communication | Matrix/Synapse, Mattermost |
| Cloud & Files | Nextcloud, Syncthing, FileBrowser |
| Productivity | Vikunja, Outline, WikiJS, BookStack |
| Security | Vaultwarden, AdGuard Home, Pi-hole |
| Home Automation | Home Assistant, Node-RED |
| AI & ML | Ollama, Open WebUI |
| Business | ERPNext, Invoice Ninja |
| Mailu | |
| VPN & Network | WireGuard, Pritunl |
Use the category filter sidebar to narrow results, or type in the search bar for fuzzy matching across app names, descriptions, and tags.
Installing an App
- Find the app and click its card to open the detail page
- Review the description, version, resource requirements, and dependencies
- Click Install
- Fill in the configuration form (admin username, password, and app-specific settings)
- Click Confirm to start the installation
Behind the scenes, Cloud OS:
- Resolves your configuration against template defaults
- Generates a
docker-compose.ymlin the app data directory - Creates an isolated Docker network for the app
- Pulls all required Docker images
- Starts the containers with
docker compose up -d - Registers the app in the database and sets up a reverse proxy route
For required password fields left blank during install, Cloud OS automatically generates a secure 24-character random password. You can view it later on the app configuration page.
Dependency Management
Some templates declare dependencies on other apps. For example, an app that requires PostgreSQL will prompt you to install PostgreSQL first if it is not already running. Cloud OS handles dependency resolution and ensures prerequisites are started before the dependent app.
Example: Installing Nextcloud
- Open Apps > Store and search for “Nextcloud”
- Click the Nextcloud card
- Review requirements: minimum 512 MB RAM, 2 GB disk
- Click Install
- Set an admin username and password
- Click Confirm
- Wait for the image pull and container startup (typically 1-2 minutes)
- Once installed, access Nextcloud at the assigned domain shown in your app list
Managing Installed Apps
Navigate to Apps > Installed to see all your running applications. Each app shows:
- Name and icon
- Status (running, stopped, or error)
- Version
- Assigned domain
- Resource usage (CPU, RAM)
App Detail Page
Click any installed app to access its management page with tabs:
- Overview — status, domain, resource usage, and quick action buttons
- Logs — real-time log streaming and historical log search
- Config — view and edit environment variables and settings
- Stats — per-app resource monitoring charts (CPU, RAM, network, disk I/O)
Quick Actions
From any app detail page or the installed apps list, you can:
- Start / Stop / Restart the app
- Update to the latest template version (if available)
- Uninstall the app (removes containers and optionally volumes)
Uninstalling an app will permanently delete its containers. You will be asked whether to also remove data volumes. Create a backup first if you need the data.
Updating Apps
Cloud OS checks for updated template versions. When a newer version is available, a badge appears next to the app in your installed list.
- Individual update — click Update on the app detail page
- Bulk update — go to Apps > Updates and click Update All to upgrade all outdated apps sequentially
- Version pinning — lock an app to its current version to prevent updates
App Template Format
Each template is a YAML file that defines Docker services, volumes, user inputs, and resource requirements. Here is a simplified example:
name: redis
display_name: Redis
version: "7.4.1"
category: databases
description: "In-memory data store for caching and messaging"
icon: redis.svg
website: https://redis.io
tags: [database, cache, in-memory, key-value]
services:
redis:
image: redis:7-alpine
ports:
- "9025:6379"
volumes:
- data:/data
environment:
REDIS_PASSWORD: "${REDIS_PASSWORD}"
volumes:
data: {}
user_inputs:
- key: REDIS_PASSWORD
label: "Redis Password"
type: password
required: false
requirements:
min_ram: 64
min_disk: 256
architecture: [amd64, arm64]Template Structure
| Field | Description |
|---|---|
name | Internal identifier for the app |
display_name | Human-readable name shown in the store |
version | App version string |
category | Category for store filtering |
services | Docker Compose service definitions |
volumes | Named volumes for persistent data |
user_inputs | Configuration fields presented to the user during install |
requirements | Minimum RAM, disk, and supported architectures |
Offline Support
All 115+ templates are embedded in the Cloud OS binary via Go go:embed. The App Store works entirely offline — no internet connection is required to browse or configure apps. Internet is only needed to pull Docker images during installation.
Troubleshooting
App install fails with “image pull error”
The server needs internet access to pull Docker images. Check your server DNS and outbound connectivity:
docker pull hello-worldIf this fails, resolve your network or firewall configuration first.
App shows “error” status after install
Check the app logs for details:
- Go to Apps > Installed and click the affected app
- Open the Logs tab
- Look for error messages during container startup
Common causes include insufficient memory, port conflicts, or missing environment variables.
Port conflict during install
Each template assigns a unique host port. If you have other services running on the same port, the install will fail. Stop the conflicting service or edit the app configuration to use a different port.