Deployment platform for teams to deploy internal tools. Deploy web apps declaratively, on a single-node or on Kubernetes, with OIDC/SAML auth and RBAC.
966
stars
1,835
commits
Go
primary language
Sep 3, 2026
updated
Open-source, self-hosted GitOps platform for deploying web apps and internal tools to Docker or Kubernetes. Declarative deployments, SSO, RBAC, database service bindings, SQLite backups to S3 and scale-to-zero.
OpenRun is an Apache-2.0 licensed open source, self-hosted GitOps platform for deploying web apps and internal tools. Run the single binary on one server with Docker/Podman, or deploy apps onto a Kubernetes cluster with the same declarative config. OpenRun provides declarative GitOps based blue-green deployment, OAuth/OIDC/SAML access controls, RBAC, audit logs, TLS certs and secrets management. Apps are deployed directly from the git repo, no build server required. OpenRun scales idle apps down to zero and supports atomic updates across multiple apps.
Some of the unique features of OpenRun are:
This repo hosts the source code for OpenRun. The source for the documentation site openrun.dev is in the docs folder. App specifications, which are templates to create apps, are defined in the appspecs repo. Sample apps are in the apps repo.
OpenRun supports three ways of managing apps, which can be mixed freely:
openrun sync schedule sets up a background sync which creates new apps and updates existing apps as the config and code change in Git. This is the recommended mode for teams; every change is version controlled and staged deployments and atomic updates apply across apps. See declarative app management.openrun app create, openrun app update and related commands manage individual apps directly. Useful for trying things out and for scripting. See the quick start.The main differences are:
- OpenRun is declarative. After initial OpenRun setup, all operations including creating new apps and updating config for existing apps can be done by updating a config file in Git. With most other solutions, app creation/update is done manually through CLI or UI; only app source code updates can be done through Git.
- OpenRun can deploy apps on a single machine with Docker/Podman or it can deploy apps onto a Kubernetes cluster. Most other solutions do not support deployment to Kubernetes.
- OpenRun is implemented as a web server, it does not depend on an external web server like Nginx/Traefik. This simplifies end-user usage and allows OpenRun to implement features like scale down to zero (for app containers) and OAuth/SAML/Cert based auth with RBAC.
- OpenRun provides database service bindings, provisioning isolated database accounts per app, and managed SQLite with Litestream replication to S3.
- OpenRun supports features like staged deployment and automatic dev env setup which are not available in other solutions.
Imperative CLI or UI operations are easy to start with, but they make it difficult to track changes and rollback updates. With a declarative config, all changes are version controlled. It is easy to create a new environment, since everything is in Git. If multiple folks are making config changes in a team, declarative systems are easier to manage.
Declarative configuration is what makes Kubernetes and Terraform useful. OpenRun brings declarative configuration to web app deployment. Instead of writing pages of YAML, each app is a couple of lines of config. For example, see utils.star.
OpenRun can deploy any web app which runs in a single container, with optional sidecar containers for background workers and companion services. OpenRun supports AppSpecs which allow zero-config deployment of frameworks like Streamlit/Gradio/FastHTML/NiceGUI/Shiny/Reflex based apps. For frameworks which have an AppSpec, no Dockerfile is required, no code changes are required in the app source code. For frameworks which do not have an AppSpec defined, a Dockerfile needs to be present in the app source repo.
OpenRun does NOT support apps which require multiple containers using Docker Compose. External services are accessed through a service binding, which is a more flexible and operationally convenient approach to provisioning services.
Yes, deployment of internal tools by teams is a target use case. Features which are built for this use case include:
- Declarative Config: Manage apps declaratively in git, allowing teams to follow regular SDLC for config
- OAuth/OIDC/SAML with RBAC: Manage who can access which app using RBAC
- Service Bindings: Configure a database once and safely provision it across apps, each app getting its own isolated account
- Audit Logs: All operations and API calls are automatically logged in the audit trail
OpenRun can be deployed on a single node easily (Linux, Windows or macOS), using a SQLite database for storing metadata. Docker/Podman is the only dependency.
OpenRun can also be deployed on Kubernetes using a Helm chart. On Kubernetes, OpenRun replaces a build system like Jenkins, CD with ArgoCD and an IDP like BackStage. Apps deployed using OpenRun are deployed as Kubernetes services, with OpenRun running as the api server/request router.
On a single node, the OpenRun server manages app containers through Docker or Podman, with metadata stored in SQLite (or an external Postgres database).
On Kubernetes, OpenRun runs as the api server and request router, creating Kubernetes services for apps and building images through kaniko.
Service bindings automatically provision isolated database access for apps. Teams configure a managed or self-hosted database once, with its backups, monitoring and capacity management, and safely share that installation across multiple apps. Apps never see the administrator credentials of any bound service.
openrun provider install. Provider-backed bindings use the same workflow as the built-in types.OpenRun has built-in Litestream support for SQLite. App SQLite databases are continuously replicated to AWS S3 or S3-compatible object storage such as Cloudflare R2, MinIO and SeaweedFS, and are automatically restored before the app starts if the local volume is lost.
OpenRun can be used to:
OpenRun supports the following:
OpenRun also supports building hypermedia based apps: lightweight backend-driven HTML apps with no build step, running in a security sandbox with allowlist based permissions.
The feature roadmap for OpenRun is:
OpenRun manages TLS certs using LetsEncrypt for prod environments. For dev environments, OpenRun uses mkcert for local certs. Installing OpenRun using brew will automatically install mkcert.
For container based apps, Docker or Podman or Orbstack should be installed and running on the machine. OpenRun automatically detects the container manager to use.
To install on OSX/Linux, run
curl -sSL https://openrun.dev/install.sh | sh
Start a new terminal (to get the updated env) and run openrun server start to start the OpenRun service.
To install using brew, run
brew tap openrundev/homebrew-openrun
brew install openrun
brew services start openrun
To install on Windows, run
winget install OpenRunDev.OpenRun
or use the install script:
powershell -Command "irm https://openrun.dev/install.ps1 | iex"
Start a new command window (to get the updated env) and run openrun server start to start the OpenRun service. On the first start, OpenRun generates an admin password and prints it; note it down.
See kubernetes docs for details on installing on Kubernetes using Helm chart and Terraform based infra setup.
Once OpenRun server is running, to install apps declaratively, open a new window and run
openrun apply --approve github.com/openrundev/openrun/examples/utils.star
To schedule a background sync, which automatically applies the latest app config, run
openrun sync schedule --approve --promote github.com/openrundev/openrun/examples/utils.star
To install apps using the CLI (imperative mode), run
openrun app create --approve github.com/openrundev/apps/system/list_files /files
openrun app create --approve github.com/openrundev/apps/system/disk_usage /disk_usage
openrun app create --approve github.com/openrundev/apps/utils/bookmarks /book
Open https://localhost:25223 to see the app listing. The disk usage app is available at https://localhost:25223/disk_usage (port 25222 for HTTP). The bookmark manager is available at https://localhost:25223/book, the list files app is available at https://localhost:25223/files.
To install the management console app, see console install.
See installation for install info. See config options for configuration options. To enable Let's Encrypt certificates, see Automatic SSL.
The release binaries are also available at releases. See install from source to build from source.
To install a containerized app, ensure either Docker or Podman is running and run
openrun app create --spec python-streamlit --branch master --approve github.com/streamlit/streamlit-example /streamlit
If the source repo has a Dockerfile or Containerfile, run
openrun app create --spec container --approve <source_path> /myapp
to install the app.
To install a release build, follow steps in the installation docs.
To install from source:
# Ensure go is in the $PATH
mkdir $HOME/openrun_source && cd $HOME/openrun_source
git clone -b main https://github.com/openrundev/openrun && cd openrun
export OPENRUN_HOME=$HOME/clhome && mkdir -p $OPENRUN_HOME/config
go build -o $OPENRUN_HOME/openrun ./cmd/openrun/
To use the openrun service, you need an initial config file with the service password and a work directory. The below instructions assume you are using $HOME/openrun/openrun.toml as the config file and $HOME/openrun as the work directory location.
cd $OPENRUN_HOME
git clone -C config https://github.com/openrundev/appspecs
$OPENRUN_HOME/openrun password > $OPENRUN_HOME/openrun.toml
$OPENRUN_HOME/openrun server start
The service will be started on https://localhost:25223 by default (HTTP port 25222).
OpenRun docs are at https://openrun.dev/docs/. For doc bugs, raise a GitHub issue in the docs repo.
Please use Github Discussions for discussing OpenRun related topics. Please use the bug tracker for bug reports and feature requests. The OpenRun Discord community is another option.
PRs welcome for bug fixes and enhancements. For application behavior related fixes, refer the app unit test cases. Those tests run as part of regular unit tests go test ./.... For API related changes, OpenRun uses the commander-cli library for automated CLI tests. To run the CLI tests, run gmake test from the openrun home directory.
1,802 commits
33 commits
Go
93.9%
Shell
1.5%
HCL
1.2%
Deployment platform for teams to deploy internal tools. Deploy web apps declaratively, on a single-node or on Kubernetes, with OIDC/SAML auth and RBAC.
966
stars
1,835
commits
Go
primary language
Sep 3, 2026
updated
Open-source, self-hosted GitOps platform for deploying web apps and internal tools to Docker or Kubernetes. Declarative deployments, SSO, RBAC, database service bindings, SQLite backups to S3 and scale-to-zero.
OpenRun is an Apache-2.0 licensed open source, self-hosted GitOps platform for deploying web apps and internal tools. Run the single binary on one server with Docker/Podman, or deploy apps onto a Kubernetes cluster with the same declarative config. OpenRun provides declarative GitOps based blue-green deployment, OAuth/OIDC/SAML access controls, RBAC, audit logs, TLS certs and secrets management. Apps are deployed directly from the git repo, no build server required. OpenRun scales idle apps down to zero and supports atomic updates across multiple apps.
Some of the unique features of OpenRun are:
This repo hosts the source code for OpenRun. The source for the documentation site openrun.dev is in the docs folder. App specifications, which are templates to create apps, are defined in the appspecs repo. Sample apps are in the apps repo.
OpenRun supports three ways of managing apps, which can be mixed freely:
openrun sync schedule sets up a background sync which creates new apps and updates existing apps as the config and code change in Git. This is the recommended mode for teams; every change is version controlled and staged deployments and atomic updates apply across apps. See declarative app management.openrun app create, openrun app update and related commands manage individual apps directly. Useful for trying things out and for scripting. See the quick start.The main differences are:
- OpenRun is declarative. After initial OpenRun setup, all operations including creating new apps and updating config for existing apps can be done by updating a config file in Git. With most other solutions, app creation/update is done manually through CLI or UI; only app source code updates can be done through Git.
- OpenRun can deploy apps on a single machine with Docker/Podman or it can deploy apps onto a Kubernetes cluster. Most other solutions do not support deployment to Kubernetes.
- OpenRun is implemented as a web server, it does not depend on an external web server like Nginx/Traefik. This simplifies end-user usage and allows OpenRun to implement features like scale down to zero (for app containers) and OAuth/SAML/Cert based auth with RBAC.
- OpenRun provides database service bindings, provisioning isolated database accounts per app, and managed SQLite with Litestream replication to S3.
- OpenRun supports features like staged deployment and automatic dev env setup which are not available in other solutions.
Imperative CLI or UI operations are easy to start with, but they make it difficult to track changes and rollback updates. With a declarative config, all changes are version controlled. It is easy to create a new environment, since everything is in Git. If multiple folks are making config changes in a team, declarative systems are easier to manage.
Declarative configuration is what makes Kubernetes and Terraform useful. OpenRun brings declarative configuration to web app deployment. Instead of writing pages of YAML, each app is a couple of lines of config. For example, see utils.star.
OpenRun can deploy any web app which runs in a single container, with optional sidecar containers for background workers and companion services. OpenRun supports AppSpecs which allow zero-config deployment of frameworks like Streamlit/Gradio/FastHTML/NiceGUI/Shiny/Reflex based apps. For frameworks which have an AppSpec, no Dockerfile is required, no code changes are required in the app source code. For frameworks which do not have an AppSpec defined, a Dockerfile needs to be present in the app source repo.
OpenRun does NOT support apps which require multiple containers using Docker Compose. External services are accessed through a service binding, which is a more flexible and operationally convenient approach to provisioning services.
Yes, deployment of internal tools by teams is a target use case. Features which are built for this use case include:
- Declarative Config: Manage apps declaratively in git, allowing teams to follow regular SDLC for config
- OAuth/OIDC/SAML with RBAC: Manage who can access which app using RBAC
- Service Bindings: Configure a database once and safely provision it across apps, each app getting its own isolated account
- Audit Logs: All operations and API calls are automatically logged in the audit trail
OpenRun can be deployed on a single node easily (Linux, Windows or macOS), using a SQLite database for storing metadata. Docker/Podman is the only dependency.
OpenRun can also be deployed on Kubernetes using a Helm chart. On Kubernetes, OpenRun replaces a build system like Jenkins, CD with ArgoCD and an IDP like BackStage. Apps deployed using OpenRun are deployed as Kubernetes services, with OpenRun running as the api server/request router.
On a single node, the OpenRun server manages app containers through Docker or Podman, with metadata stored in SQLite (or an external Postgres database).
On Kubernetes, OpenRun runs as the api server and request router, creating Kubernetes services for apps and building images through kaniko.
Service bindings automatically provision isolated database access for apps. Teams configure a managed or self-hosted database once, with its backups, monitoring and capacity management, and safely share that installation across multiple apps. Apps never see the administrator credentials of any bound service.
openrun provider install. Provider-backed bindings use the same workflow as the built-in types.OpenRun has built-in Litestream support for SQLite. App SQLite databases are continuously replicated to AWS S3 or S3-compatible object storage such as Cloudflare R2, MinIO and SeaweedFS, and are automatically restored before the app starts if the local volume is lost.
OpenRun can be used to:
OpenRun supports the following:
OpenRun also supports building hypermedia based apps: lightweight backend-driven HTML apps with no build step, running in a security sandbox with allowlist based permissions.
The feature roadmap for OpenRun is:
OpenRun manages TLS certs using LetsEncrypt for prod environments. For dev environments, OpenRun uses mkcert for local certs. Installing OpenRun using brew will automatically install mkcert.
For container based apps, Docker or Podman or Orbstack should be installed and running on the machine. OpenRun automatically detects the container manager to use.
To install on OSX/Linux, run
curl -sSL https://openrun.dev/install.sh | sh
Start a new terminal (to get the updated env) and run openrun server start to start the OpenRun service.
To install using brew, run
brew tap openrundev/homebrew-openrun
brew install openrun
brew services start openrun
To install on Windows, run
winget install OpenRunDev.OpenRun
or use the install script:
powershell -Command "irm https://openrun.dev/install.ps1 | iex"
Start a new command window (to get the updated env) and run openrun server start to start the OpenRun service. On the first start, OpenRun generates an admin password and prints it; note it down.
See kubernetes docs for details on installing on Kubernetes using Helm chart and Terraform based infra setup.
Once OpenRun server is running, to install apps declaratively, open a new window and run
openrun apply --approve github.com/openrundev/openrun/examples/utils.star
To schedule a background sync, which automatically applies the latest app config, run
openrun sync schedule --approve --promote github.com/openrundev/openrun/examples/utils.star
To install apps using the CLI (imperative mode), run
openrun app create --approve github.com/openrundev/apps/system/list_files /files
openrun app create --approve github.com/openrundev/apps/system/disk_usage /disk_usage
openrun app create --approve github.com/openrundev/apps/utils/bookmarks /book
Open https://localhost:25223 to see the app listing. The disk usage app is available at https://localhost:25223/disk_usage (port 25222 for HTTP). The bookmark manager is available at https://localhost:25223/book, the list files app is available at https://localhost:25223/files.
To install the management console app, see console install.
See installation for install info. See config options for configuration options. To enable Let's Encrypt certificates, see Automatic SSL.
The release binaries are also available at releases. See install from source to build from source.
To install a containerized app, ensure either Docker or Podman is running and run
openrun app create --spec python-streamlit --branch master --approve github.com/streamlit/streamlit-example /streamlit
If the source repo has a Dockerfile or Containerfile, run
openrun app create --spec container --approve <source_path> /myapp
to install the app.
To install a release build, follow steps in the installation docs.
To install from source:
# Ensure go is in the $PATH
mkdir $HOME/openrun_source && cd $HOME/openrun_source
git clone -b main https://github.com/openrundev/openrun && cd openrun
export OPENRUN_HOME=$HOME/clhome && mkdir -p $OPENRUN_HOME/config
go build -o $OPENRUN_HOME/openrun ./cmd/openrun/
To use the openrun service, you need an initial config file with the service password and a work directory. The below instructions assume you are using $HOME/openrun/openrun.toml as the config file and $HOME/openrun as the work directory location.
cd $OPENRUN_HOME
git clone -C config https://github.com/openrundev/appspecs
$OPENRUN_HOME/openrun password > $OPENRUN_HOME/openrun.toml
$OPENRUN_HOME/openrun server start
The service will be started on https://localhost:25223 by default (HTTP port 25222).
OpenRun docs are at https://openrun.dev/docs/. For doc bugs, raise a GitHub issue in the docs repo.
Please use Github Discussions for discussing OpenRun related topics. Please use the bug tracker for bug reports and feature requests. The OpenRun Discord community is another option.
PRs welcome for bug fixes and enhancements. For application behavior related fixes, refer the app unit test cases. Those tests run as part of regular unit tests go test ./.... For API related changes, OpenRun uses the commander-cli library for automated CLI tests. To run the CLI tests, run gmake test from the openrun home directory.
1,802 commits
33 commits
Go
93.9%
Shell
1.5%
HCL
1.2%