Runnah

Table of Contents

1. Overview

Runnah is Flatpak for containerized applications.

The Runnah Shell is a CLI program that allows non-technical users to run containerized applications. Flatpaks have brought sandboxing and other related capabilities to mainstream application consumers, previously reserved for more complex system configurations. However, they are tailored to desktop applications and target the Linux desktop market. Due to the limitations of their design, Flatpaks exclude the vast number of the so called "server apps". These are applications that have multiple components and normally require complex deployments and hosting platforms - making them an exclusivity of software developers and power users.

Using open source container technologies that are readily available in most systems today, Runnah endeavors to make "server apps" available to everyday, non-technical people - with the click of a button. Example use cases are, running:

  • LinkWarden or Wiki JS as local apps for personal use.
  • NextCloud or Jellyfin on your LAN for your family.
  • Fediverse Mastodon or Stalwart publicly or in a VPN for your team.

2. Core principles and objectives

2.1. Ideological objectives

Sovereignty and decentralization
Runnah helps the public to take a step away from large tech monopolies and closer to the Fediverse and alternative decentralized architectures and strategies. It also promotes data ownership at the personal and community level.
Privacy and security
All applications provided by the official Runnah Hub will be packaged with data privacy and security in mind, first. No tracking, no cloud IDs, zero calls back home.
Technology commons and libre software
The purpose of the Runnah Shell is to empower individuals and groups of people. It will therefore always be libre software, free to use and modify.
Resiliency
By allowing non-technical users to run advanced server applications in any device and in different networking configurations - including local networks, Runnah can contribute to the public's resiliency in situations such as natural disasters, lack of connectivity, censorship etc.
Sustainability and accessibility
Runnah can make self-hosting accessible to individuals and groups that might not have that ability otherwise. For example, somebody might not have the funds to pay a large sum per year for a dedicated server, or even access to a central electrical grid or internet connection, but with, for example, solar power, a cheap device and a local network could provide software for the needs of a small neighborhoud or community.

2.2. Technical architecture objectives

Simplicity
One of the main objectives of Runnah is to make running containerized applications a breeze for non-technical users. This is reflected in several architectural decisions, such as exposing all runtime settings as simple as a set of key/value pairs that anybody can configure, given basic documentation.
Flexibility
Users should be able to easily personalize their use of each application without restrictions. This should apply to all application runtime settings such as file system and other permissions, capabilities, networking etc. so that the applications can be run in different ways depending on the intended purpose e.g. run it just as a local application, expose it to your LAN, or publicly to the internet or in a VPN.
Portability
Runnah should be available on as many operating systems and devices as possible. It should be installable on all Linux, BSD, MacOS and Windows systems, and in theory even on Android. It is not intended only for use in home servers; users should be able to run it anywhere, even on mobile devices. Initial efforts focus on Linux and BSD systems though. Support for proprietary systems will be left for the community, as deman arises.

3. A note on the contents of this page

The Runnah Shell is currently undergoing a major rewrite in Rust - see the history and development section. The contents of this page reflect the new intended design and not an existing implementation. Many of the concepts and examples already work in the Bash version of Runnah - which is no longer officially supported.

4. Features

4.1. Application templates

Runnah supports application templates. An application provider can define multiple templates for the same application. For example:

stalwart/personal
A small mail server for personal use with minimizing complexity and resource consumption in mind e.g. using RocksDB for all stores.
stalwart/team
A full mail server for more users configured with advanced functionality in mind e.g. using FoundationDB as the main data store, Redis as the cache store, and Elastic Search as the search engine.
wiki.js/mobile
A minimal installation of Wiki JS for personal use on mobile devices. That is, optimized for lower disk space, CPU and memory constraints, background jobs disabled etc.
wiki.js/team
A full installation of Wiki JS intended to run as a server for the frontend app, which is accessible to multiple users via a VPN.

4.2. Multiple instances of each application

Running multiple instances of the same application is a breeze with Runnah. Just run the runnah create command with a different instance ID than the existing installation, or add it to a different group.

This allows, for example, running an instance of LibreWolf to use specifically for internet banking, and another one for all your social media activities. Essentially, Firefox containers applied to the browser of your choice without installing an add on, and with the ability to run it with a different profile, theme and preferences for each instance.

4.3. Application groups

Runnah provides an additional organizational level for grouping together applications. For example, a user can have a set of applications installed in a personal group, another set installed in a family group configured to be available on the LAN, and another in a work group configured to be accessible to a team of co-workers from anywhere via a VPN.

4.4. Sandboxing and advanced networking

Runnah uses Podman, an open source container runtime. It is a drop-in replacement for Docker. It supports Pods, making it a lightweight alternative to Kubernetes and related, cloud-focused technologies. Runnah contains each application to its own pod by default, providing filesystem and network isolation from other applications - unless specifically requested otherwise by the user.

4.5. Backup and restore operations

Using Restic, Runnah supports automatically backing up and restoring all persistent application data with minimal configuration required from the user i.e. destination storage. Restic gives easy access to encryption, deduplication, support for multiple local and remote storage types, and other advanced features for power users.

4.6. Runtime context switching

Runnah supports defining different runtime contexts for an application. Contexts are sets of runtime settings that determine how the application is run. For example, which folders and files it has access to, whether it is allowed to reach out to the internet or to communicate with other apps, etc. The same application can be run in different contexts as desired. For example, the default context might deny internet access to an application, but in a particular instance the application can be run in a context that allows internet access in order to execute a specific task.

4.7. Environment variables

All Runnah settings that provide the application context and determine various runtime options are configured as environment variables, taking advantage of their simplicity, flexibility and portability. Being simple key/value pairs - instead of structured Docker/Podman Compose YAML files or complex Kubernetes Helm Charts, they:

  • make application packaging simpler for developers.
  • make configuration approachable to non-technical users.
  • make it easy to expose a user interface for editing.
  • support different ways of defining and overriding the environment.

5. Examples

Here are some examples of using the Runnah Shell. Please note that development of the Rust version of the Runnah Shell is currently in its initial steps. The examples reflect the latest intended design, and they are meant to give an idea of how Runnah works. It is not meant to be complete or accurate at this point; such documentation will be provided as the implementation advances. Many of the examples can be run (in some cases with alternative syntax) with the Bash version of Runnah - which is no longer officially supported.

5.1. Install and run an application

# Shortcut.
$ runnah new nextcloud

# Individual commands.
$ runnah create nextcloud
$ runnah build
$ runnah install
$ runnah up

5.2. Update to the latest version

# Shortcut.
$ runnah upgrade

# Take a backup before updating.
$ runnah upgrade --backup

# Individual commands.
$ runnah down
# runnah backup
$ runnah template-update
$ runnah build
$ runnah update
$ runnah up

5.3. Customize settings and secrets

Almost everything in Runnah is managed via enironment variables, making most customizations as simple as editing key/value pairs.

5.3.1. Settings provided by the application

Set the password for the root user account.

# ~/.runnah/nextcloud/nextcloud.env
ADMIN_PASSWORD=my-unique-admin-password

Or, make the variable available to the environment in the way most appropriate for your use case:

$ RUNNAH_NEXTCLOUD_ADMIN_PASSWORD=my-unique-admin-password runnah up

5.3.2. Settings provided by Runnah

Restrict the application to its own internal network i.e. prohibit it from accessing the internet or any other applications.

# ~/.runnah/nextcloud/runnah.env
NETWORKS=_

Or, allow internet access for executing a specific task once e.g. allow the application to download the latest version of an LLM, while internet access is denied at all other times.

$ RUNNAH_NETWORKS=internet runnah execute update-model

5.4. Backup and restore

5.4.1. Execute backup and restore operations

Take a backup of all persistent application state and restore when needed.

# Take a backup.
$ runnah backup

# Restore the latest or a specific backup/application version.
$ runnah restore
$ runnah restore --snapshot 918d61dc --version 32.0.8

# Runnah can revert to the last snapshot taken while running a specific
# application version.
$ runnah restore --version 32.0.8

  The application will be reverted to the latest backup taken while running
  version 32.0.8. Any data generated after that will be lost. Are you sure you
  want to proceed? [y/N]

5.4.2. Customize the backup location

Configure a backup location for the specific application, different to the global default.

# ~/.config/runnah/locations.env
EXTERNAL_STORAGE=/run/media/user/ExternalDisk

# ~/.runnah/nextcloud/runnah.env
BACKUP_DESTINATION=@external-storage/Backups/NextCloud

5.5. Running multiple instances of an application

You may want to run a "light" packaged version of Nextcloud for your personal use running locally, and the default version exposed via a VPN for your family or team.

# ~/.runnah/nextcloud/runnah.env
TEMPLATE=nextcloud/light
NETWORKS=_
# ~/.runnah/nextcloud-team/runnah.env
TEMPLATE=nextcloud
VPNS=team_vpn

6. Components

6.1. Runnah Shell

Runnah Shell is the CLI application that runs all operations, such as installing and running an application, taking backups etc. It is where most of the development focuses on.

6.2. Runnah Hub

The Runnah Hub is the official collection of application templates, kind of an app store.

7. History and current development

Runnah started as a collection of bash scripts tailored mostly to software developers. It functioned as a playground for testing ideas in complex software development and self-hosting scenarios. As the design and ideas stabilised and the concept proved itself, an effort was started to refactor the scripts improving the code quality and making them POSIX-compliant for maximum portability.

However, some of the intended advantages of a shell-based solution would only reach a subset of professional developers. As the objective of the project became to reach non-technical users, it made more sense to write the core shell application in a more appropriate, structured and reliable language: Rust - giving us access to better tooling and a larger community as well.

8. Comparison to other solutions

The following projects have, to our knowledge, somewhat similar objectives. In our view though, they have an architecture that is not conducive to serve the target audience that Runnah has, and/or is not designed to promote the core objectives that Runnah has:

  • Simplicity - operate without technical knowledge.
  • Flexibility - override any configuration and runtime settings.
  • Portability - install on any device, even mobile.

Runnah, takes a quite different approach in a number of architectural and design choices, and that makes it unique when compared to other known solutions.

8.1. Flatpak

Flatpak is a great solution for sandboxing and distributing "desktop applications". The Flatpak model has in some ways influenced the direction that Runnah intends to go in its next sptes.

Flatpak is not designed for running "server applications" with multiple components isolated in containers yet communicating with each other. That is, you cannot run a NextCloud frontend (browser or electron-based application), the backend PHP application and a Solr search engine, in a Flatpak. You also cannot expose them as a service to your LAN or VPN, nor does it support any of the features outlined in the Features section (and more) due to the limitations of its design, objectives, and technologies used.

8.2. Olares

Olares is a collection of open source programs bundled together to create an operating system ready to install for self-hosting. It is a great project and it has some similarities in its objectives with Runnah. However, its target audience is the enterprise and buyers of machines with their operating system pre-installed.

This is reflected by the fact that they use a very complex architecture and advanced components that are tailored to complex deployments e.g. Kubernetes, Helm Charts etc. To run their CLI you are required to have Node installed on your device, which is also required to meet quite significant resource specifications.

It also seems to come with strings attached: Olares ID i.e. you have to register with their cloud services, and it is developed and advertised as AI-native - which is a direction that Runnah has intentionally avoided (see section on large language models).

It may be an option for the small/medium enterprise that requires more reliability (and when they don't mind being restricted to the particular operating system and cloud provider), but it is unnecessary complicated for the non-technical audience that Runnah is designed for.

As a user:

  • I want to deploy a simple Wiki JS or LinkWarden application without needing to deploy Node and a Kubernetes cluster - and be tied to commercial support when things go wrong.
  • I want minimal resource consumption by the container orchestration system so that I can have more resources for my applications to run - especially on low-spec devices including mobile.

As a developer:

  • I want a simple way to package my applications without having to understand Helm Charts.
  • I want the ability to install on any device/operating system without having to spend countless hours trying to understand the Olares architecture and individual components - only to risk regressions in the next update on unsupported systems.

8.3. Self Privacy

Self Privacy is a NixOS configuration/installer for self-hosting on the cloud, coupled with a management application. It is restricted to a specific operating system (with its strengths and weaknesses), it runs on the cloud with support for limited number of hosting providers, and it only provides a few server applications. Runnah is designed from the ground up to provide full freedom: install on any operating system, run on any device, at home or on the cloud, and it can run any application that runs in containers - which is the majority of all server applications out there. Runnah can be used for self-hosting locally or publicly, or just to run applications for personal use - like Flatpak does.

8.4. UmbrelOS

UmbrelOS is a couple of frontend apps written in TypeScript packaged as an operating system. Its backend is really just Docker Compose. These mean that you cannot easily install it in your system - you rather have to install their operating system, and it does not provide the additional layers and operations that the Runnah Shell does - as described in the Features and CLI Reference section, and more.

8.5. Docker/Podman Compose, Lando, DDEV, devshell, Development Containers, Helm Charts etc.

These are tools tailored mostly to software developers, so that they can define the application templates and runtime settings. Runnah provides the extra layers required to reach non-technical users. Support for a format like Docker Compose or even Helm Charts could be added to Runnah to facilitate more complex applications and setups. That is, they have different objectives, they operate at different levels, and they could work hand-in-hand.

However, after years of using Runnah for professional software development and self-hosting, no significant limitations have been reached yet, and such integrations are currently not the priority. The environment variable-based system that Runnah uses needs to be in the core of the mechanism to achieve the design objectives of simplicity, flexibility and portability.

9. Large language models

Our approach when it comes to "artificial intelligence" is that anybody should be able to run LLMs and related applications locally with Runnah. Using container technologies and the Runnah packaging format, they are no different than other applications really. However, special support for LLMs and agents will not be baked in into the Runnah Shell. That can be done in a separate repository as a plugin or application template.

10. CLI Reference

Most commands support a service multi-value option for applying the relevant action to one or more services, defaulting to all services defined by the application.

More options are available for each command than the ones listed here, and more commands are available to advanced users.

Command Description Arguments Options Notes
list Lists applications and/or services   status Whether to list installed applications, available, or both.  
create Initializes a local application from a template template version The version of the template to install, defaults to the latest  
build Builds or downloads container images      
install Runs installation tasks     For example, initialize a database. Includes option to install as a systemd service so that a mail server, for example, starts automatically on startup.
start Starts services, networks and VPNs      
stop Stops services, networks and VPNs     Supports default stop-mode and application-specific override, with either stopping the containers or removing them to release disk space.
upgrade Updates the application to the latest versions     Downloads the latest version of the template, rebuilds images and runs updates tasks.
remove Removes service containers and/or volumes   volume Remove persistent volumes as well, defaults to none Releases disk space, containers are rebuilt or downloaded again next time that the application is run.
uninstall Uninstalls the application     Stops the application, removes containers and volumes, removes the local application manifest.
backup Takes a backup of persistent volumes   volume The specific volume to backup, defaults to all Backs up persistent volumes, locally or in remote storage, based on global settings with support for application-specific overrides.
restore Restores persistent volumes   snapshot The ID of the snapshot to restore, defaults to the latest Restores persistent volumes from backups.
remote Manages remote template providers      

11. Source code

12. Call for funding

Runnah is currently looking for funding for the rewrite of the Runnah Shell in Rust.

Date: 2026-07-20 Mon 00:00

Author: Dimitris Bozelos

Created: 2026-07-31 Fri 22:18