CubeOS is a self-hosted operating system for Raspberry Pi and ARM64 single-board computers. It turns your Pi into a managed server with a web dashboard, one-click app store, built-in DNS filtering, and three network modes -- all controllable from your phone or computer without needing a terminal.
Think of it as what Synology DSM is for NAS devices, but for Raspberry Pi.
| CubeOS | DietPi | Home Assistant | Umbrel | |
|---|---|---|---|---|
| Primary focus | General-purpose server, field deployment | Lightweight Debian | Home automation | Personal server |
| Offline operation | Full offline mode, air-gapped | Needs internet for setup | Needs internet for setup | Needs internet for setup |
| Network modes | 3 modes (OFFLINE, ETH, WiFi) | Standard networking | Standard networking | Standard networking |
| Container engine | Docker Swarm (self-healing) | Docker | Docker / add-ons | Docker |
| WiFi access point | Built-in, always-on | Manual configuration | Not included | Not included |
| Target audience | Self-hosters, field teams, makers | Power users | Smart home users | Bitcoin/self-hosting |
CubeOS stands out with its offline-first design, built-in WiFi access point, and three network modes -- making it uniquely suited for field deployments, expeditions, classrooms, and environments without reliable internet.
Yes. CubeOS is licensed under the Apache License 2.0. The source code is available on GitHub at github.com/cubeos-app.
- Documentation: You're reading it. Start with the Getting Started guide.
- GitHub Issues: Report bugs or request features on the relevant repository at github.com/cubeos-app.
- Troubleshooting: See the Troubleshooting Guide for common issues.
CubeOS supports:
- Raspberry Pi 5 (recommended) -- 4 GB or 8 GB
- Raspberry Pi 4 (64-bit) -- 2 GB, 4 GB, or 8 GB
CubeOS requires a 64-bit (ARM64) processor. Older models (Pi 3, Pi Zero, Pi Zero 2 W) are not supported.
CubeOS is designed and tested for Raspberry Pi, but it should run on other ARM64 single-board computers with compatible hardware (WiFi, Ethernet, USB). Community testing on other boards is welcome -- please report your experience on GitHub.
Yes. Flash the CubeOS image to a USB SSD instead of a microSD card. Raspberry Pi 5 boots from USB by default. For Pi 4, you may need to update the bootloader to enable USB boot first (see the Raspberry Pi documentation).
USB SSDs are faster and more reliable than microSD cards. They are recommended for production deployments.
- 2 GB: CubeOS runs, but you're limited to a few lightweight apps. Use the Lite image.
- 4 GB: Recommended. Runs the full platform plus several apps comfortably.
- 8 GB: Best for AI/ML workloads (Ollama, ChromaDB) or running many apps simultaneously.
CubeOS core services (API, dashboard, DNS, proxy) use approximately 800 MB of RAM at idle.
Yes. CubeOS enables the Raspberry Pi's hardware watchdog with a 15-second timeout. If the system hangs and the watchdog is not pinged within 15 seconds, the Pi reboots automatically.
Yes. OFFLINE mode is a core feature. CubeOS creates a WiFi access point and runs all services locally. You can manage the server, run apps, share files, and use DNS -- all without any internet connection.
The only things that require internet are: installing apps from remote registries, system updates, and NTP time sync.
The default WiFi password during first boot is cubeos1234. You set a new WiFi password during the setup wizard.
CubeOS uses 10.42.24.0/24:
- Gateway:
10.42.24.1 - DHCP range:
10.42.24.10--10.42.24.250 - DNS:
10.42.24.1(Pi-hole)
This subnet was chosen to avoid conflicts with common home networks that use 192.168.x.x or 10.0.0.x.
Yes. Go to Dashboard > Network > WiFi AP settings to change the network name, password, and channel.
CubeOS uses cubeos.cube as the internal domain. All services are accessible via subdomains:
- Dashboard:
cubeos.cube - Pi-hole:
pihole.cubeos.cube - Log Viewer:
logs.cubeos.cube - Installed apps:
appname.cubeos.cube
These domains work only when connected to the CubeOS WiFi network.
Open the dashboard at http://cubeos.cube, navigate to the App Store, find an app, and click Install. The app is deployed as a Docker Swarm service with automatic port allocation, DNS entry, and reverse proxy configuration.
Yes. You can install any Docker image via the API:
curl -X POST http://api.cubeos.cube/api/v1/apps \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "my-app",
"image": "docker-image:tag",
"description": "My custom app"
}'See the Developer Guide for more details on custom app installation.
Yes, if the Docker images are available in the local registry. The Full CubeOS image comes with popular apps pre-loaded in the local registry at localhost:5000. In ONLINE modes, pulled images are also cached locally for future offline use.
Each app gets a subdomain under cubeos.cube. For example, if you install an app called "files", access it at http://files.cubeos.cube. The exact URL is shown on the app's card in the dashboard.
Go to Dashboard > Apps, find the app, and click Uninstall. This removes the Swarm stack, DNS entry, reverse proxy rule, and releases the allocated port.
Go to Dashboard > Settings > Updates. If an update is available, click Update. CubeOS downloads and applies the update, then restarts affected services.
Updates require internet access (ONLINE_ETH or ONLINE_WIFI mode).
CubeOS provides a factory reset option:
- Go to Dashboard > Settings > Factory Reset.
- Confirm the reset.
- CubeOS wipes the database, configuration, and user data.
- On the next boot, the setup wizard runs again as if it were a fresh installation.
Alternatively, flash a fresh CubeOS image to the SD card.
Yes. SSH is available if enabled during image flashing (via Raspberry Pi Imager settings) or if you enable it later from the dashboard.
ssh cubeos@cubeos.cubeThe SSH user is cubeos. If you configured an SSH key during flashing, key authentication is used. Otherwise, use the admin password.
Use Dozzle, the built-in log viewer:
- Dashboard: click the logs icon on any app
- Direct URL: http://logs.cubeos.cube
Dozzle shows real-time logs from all Docker containers.
Go to Dashboard > Settings > Backups > Create Backup. Choose a backup scope (Tier 1 for config only, Tier 2 for app configs, Tier 3 for everything including data) and a destination (local, USB, or network share). See Backup and Restore for full details.
Yes. Go to Dashboard > Settings > Backups > Schedule. Configure the frequency, scope, destination, and retention policy. See Backup and Restore for details.
No. The setup wizard requires you to set your own admin password on first boot. There is no default admin password in production -- you create one during setup.
They can be. CubeOS supports two encryption modes:
- Device mode: Encrypted with a key tied to the Pi's hardware. Automatic, but only restorable on the same Pi.
- Portable mode: Encrypted with a passphrase you provide. Restorable on any Pi.
See Backup and Restore - Encryption for details.
CubeOS uses iptables for NAT and basic firewall rules. In ONLINE modes, only the WiFi subnet can access the Pi's services. External access from the upstream network is blocked by default.
Yes. CubeOS includes built-in WireGuard and OpenVPN clients. Upload your VPN configuration in Dashboard > Network > VPN, then connect. You can also enable Tor routing for specific apps.
- Make sure the SD card was flashed correctly. Try reflashing.
- Use the official power supply. Undervoltage causes boot failures.
- Wait at least 90 seconds. First boot takes longer than subsequent boots.
- Connect an HDMI monitor to see boot messages.
- If the green LED blinks in a pattern, the Pi cannot read the SD card. Try a different card.
There is no password recovery. You have two options:
- Factory reset from the dashboard (if you can still access it).
- Flash a fresh CubeOS image and restore from a backup.
- Check CPU and memory usage in the dashboard. If maxed out, stop some apps.
- On a 2 GB Pi, the system may struggle with many apps running. Consider upgrading to 4 GB.
- A slow SD card degrades performance significantly. Use a Class 10 or better card, or switch to a USB SSD.
- Reboot the Pi: Dashboard > Settings > Reboot.
- Check if the system is online. Image pulls require internet access (unless cached locally).
- View the workflow status in Dashboard > Apps.
- Check logs in Dozzle for error messages.
- If the workflow is stuck, stop the app and try reinstalling.
- This is usually the hardware watchdog doing its job. It reboots the system if it detects a hang.
- Check the power supply. Undervoltage causes instability and watchdog reboots.
- Check temperature. The Pi throttles and may become unstable above 80 degrees C. Ensure adequate cooling.
- Check storage. A full SD card can cause system instability. Free up space or use a larger card.