{"id":30368406,"url":"https://github.com/openrundev/openrun","last_synced_at":"2026-04-04T02:03:37.693Z","repository":{"id":157751543,"uuid":"627567877","full_name":"openrundev/openrun","owner":"openrundev","description":"Open source alternative to Google Cloud Run and AWS App Runner. Easily deploy web apps declaratively.","archived":false,"fork":false,"pushed_at":"2026-01-22T22:12:30.000Z","size":13139,"stargazers_count":720,"open_issues_count":0,"forks_count":18,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-23T15:35:19.991Z","etag":null,"topics":["application-server","appserver","containers","devops-tools","docker","golang","htmx","internal-tools","low-code-platform","self-hosted","starlark"],"latest_commit_sha":null,"homepage":"https://openrun.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openrundev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-04-13T18:29:51.000Z","updated_at":"2026-01-22T22:12:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"c552ade6-96d7-4257-b9e9-d7c7954d61da","html_url":"https://github.com/openrundev/openrun","commit_stats":null,"previous_names":["openrundev/openrun"],"tags_count":146,"template":false,"template_full_name":null,"purl":"pkg:github/openrundev/openrun","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openrundev%2Fopenrun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openrundev%2Fopenrun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openrundev%2Fopenrun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openrundev%2Fopenrun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openrundev","download_url":"https://codeload.github.com/openrundev/openrun/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openrundev%2Fopenrun/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28853194,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["application-server","appserver","containers","devops-tools","docker","golang","htmx","internal-tools","low-code-platform","self-hosted","starlark"],"created_at":"2025-08-20T01:02:42.750Z","updated_at":"2026-04-04T02:03:37.663Z","avatar_url":"https://github.com/openrundev.png","language":"Go","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://openrun.dev/openrun.png\" alt=\"OpenRun-logo\" width=\"300\" height=\"250\"/\u003e\n\n  \u003cp align=\"center\"\u003eApp deployment simplified. Open source alternative to Google Cloud Run and AWS App Runner. Easily deploy internal tools, on a single node with Docker/Podman or onto a Kubernetes cluster.\u003c/p\u003e\n\u003c/p\u003e\n\n\u003cp\u003e\n  \u003ca href=\"https://github.com/openrundev/openrun/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/openrundev/openrun\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/openrundev/openrun/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release/openrundev/openrun.svg?color=00C200\" alt=\"Latest Release\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/openrundev/openrun/actions\"\u003e\u003cimg src=\"https://github.com/openrundev/openrun/workflows/CI/badge.svg\" alt=\"Build Status\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://app.codecov.io/github/openrundev/openrun\"\u003e\u003cimg src=\"https://img.shields.io/codecov/c/github/openrundev/openrun\" alt=\"Code Coverage\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/openrundev/openrun\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/openrundev/openrun\" alt=\"Go Report Card\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://landscape.cncf.io/?item=app-definition-and-development--application-definition-image-build--openrun\"\u003e\u003cimg src=\"https://img.shields.io/badge/CNCF-0086FF\" alt=\"Listed in CNCF landscape\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.bestpractices.dev/projects/11301\"\u003e\u003cimg src=\"https://www.bestpractices.dev/projects/11301/badge\"\u003e\u003c/a\u003e\n  \u003c!--a href=\"https://github.com/avelino/awesome-go\"\u003e\u003cimg src=\"https://awesome.re/mentioned-badge.svg\" alt=\"Mentioned in Awesome Go\"\u003e\u003c/a--\u003e\n  \u003cimg src=\"https://img.shields.io/github/downloads/openrundev/openrun/total.svg\" alt=\"downloads\"/\u003e\n\u003c/p\u003e\n\n### Menu\n\n- [Overview](#overview)\n- [FAQ](#faq)\n- [Features](#features)\n- [Roadmap](#roadmap)\n- [Setup](#setup)\n- [Documentation](#documentation)\n- [Getting help](#getting-help)\n- [Contributing](#contributing)\n\n## Overview\n\nOpenRun is an Apache-2.0 licensed open source web app deployment platform, with a focus on deploying internal tools. OpenRun makes it easy to **declaratively** deploy containerized web apps. OpenRun can deploy apps on a single-node or onto a Kubernetes cluster. OpenRun provides declarative GitOps based blue-green deployment, OAuth/OIDC/SAML access controls, TLS certs \u0026 secrets management. OpenRun is built for teams to easily deploy internal tools, with full RBAC support. OpenRun apps are deployed directly from the git repo, no build server required. OpenRun scales idles apps down to zero and supports atomic updates across multiple apps.\n\nSome of the unique features of OpenRun are:\n\n- Create and manage apps declaratively, through GitOps\n- Easily upgrade from single-node to Kubernetes, with no config changes required\n- Domain based or path based routing, with auto-TLS\n- OAuth/OpenID/SAML/Cert based auth\n- RBAC for admin operation and for app access\n- Scales idle apps down to zero\n- Staged deployment, for code and config changes\n- Atomic (all or nothing) updates across apps\n\nThis repo hosts the source code for OpenRun. The source for the documentation site [openrun.dev](https://openrun.dev) is in the docs folder. App specifications, which are templates to create apps, are defined in the [appspecs](https://github.com/openrundev/appspecs) repo. Sample apps are in the [apps](https://github.com/openrundev/apps) repo.\n\n\u003cimg alt=\"OpenRun intro gif\" src=\"https://openrun.dev/intro_dark_small.gif\"/\u003e\n\n## FAQ\n\n\u003cdetails open\u003e\n  \u003csummary\u003e\u003cb\u003eHow does OpenRun compare to other deployment solutions like Coolify/Dokku/CapRover etc?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e The main differences are:\n\u003e\n\u003e - OpenRun is declarative. After initial OpenRun setup. Instead of using CLI commands or UI operations, all operations including creating new app and updating config for existing apps can be doing by updating a config file in Git. With most other solution, app creation/update is done manually through CLI or UI. Only app source code update can be done through Git.\n\u003e - 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.\n\u003e - OpenRun is implemented as a web server, it does not depend on 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.\n\u003e - OpenRun supports features like staged deployment and automatic dev env setup which are not available in other solutions.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eWhy is declarative configuration useful?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e Imperative CLI or UI operation 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.\n\u003e\n\u003e 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 specified as a couple of lines of Starlark (python-like) config. For example, see [utils.star](https://github.com/openrundev/openrun/blob/main/examples/utils.star).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eWhat types of apps can be deployed with OpenRun?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e OpenRun can deploy any web app which runs in a single container. OpenRun supports [AppSpecs](https://openrun.dev/docs/container/overview/#app-specs) which allow zero-config deployment of frameworks like Streamlit/Gradio/FastHTML/NiceGUI/Shiny/Reflex based apps. For frameworks which have a 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.\n\u003e\n\u003e OpenRun does NOT support apps which require multiple containers using Docker Compose. The target use case is internal tools talking to existing API endpoints and web apps where the database is externally managed.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eDoes OpenRun support deployment of internal tools by teams?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e Yes, deployment of internal tools by teams is a target [use case](https://openrun.dev/docs/use-cases/team/). Features which are built for this use case include:\n\u003e\n\u003e - **Declarative Config**: Manage apps by [declaratively](https://openrun.dev/docs/applications/overview/#declarative-app-management) in git, allowing team to do follow regular SDLC for config\n\u003e - **OAuth/OIDC/SAML with RBAC**: Manage who can access which app using [RBAC](https://openrun.dev/docs/configuration/rbac/)\n\u003e - **Audit Logs**: All operations and API calls are automatically logged in [audit trail](https://openrun.dev/docs/applications/audit/)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eHow is OpenRun deployed?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e OpenRun can be deployed on a single node easily (Linux, Windows or OSX), using a SQLite database for storing metadata. Docker/Podman is the only dependency. OpenRun can be deployed across multiple machines, using an external Postgres database for storing metadata.\n\u003e\n\u003e OpenRun can also be deployed on Kubernetes using a Helm chart. On Kubernetes, OpenRun will avoid the need to setup 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.\n\n\u003c/details\u003e\n\n## Architecture Overview\n\n### Single-Node Architecture\n\n```mermaid\narchitecture-beta\n    service client(internet)[Client]\n\n    group host(server)[Node]\n    service openrun(server)[OpenRun Server] in host\n    service sqlite(database)[SQLite Metadata] in host\n\n    group cm(server)[Docker or Podman] in host\n    junction split in cm\n    service app1(server)[App1] in cm\n    service app2(server)[App2] in cm\n\n    client:R --\u003e L:openrun\n    openrun:B --\u003e T:sqlite\n    openrun:R -- L:split\n    split:T --\u003e B:app1\n    split:B --\u003e T:app2\n```\n\n### Kubernetes Architecture\n\n```mermaid\narchitecture-beta\n    service client(internet)[Client]\n    service postgres(database)[Postgres Metadata]\n    service registry(server)[Container Registry]\n\n    group k8s(server)[Kubernetes]\n    service openrun(server)[OpenRun] in k8s\n\n    group apps(server)[Deployed Apps] in k8s\n    junction split in apps\n    service app1(server)[App1] in apps\n    service app2(server)[App2] in apps\n\n    client:R --\u003e L:openrun\n    postgres:R \u003c-- T:openrun\n    registry:R \u003c-- B:openrun\n\n    openrun:R -- L:split\n    split:T --\u003e B:app1\n    split:B --\u003e T:app2\n```\n\n## Features\n\nOpenRun can be used to:\n\n- Deploy [containerized applications](https://openrun.dev/docs/container/overview/), OpenRun will build and manage the container lifecycle\n- Automatically generate a form based UI for backend [actions](https://openrun.dev/docs/actions/)\n- Add OAuth/OIDC/SAML based [auth](https://openrun.dev/docs/configuration/authentication/) and [RBAC](https://openrun.dev/docs/configuration/rbac/) for app access\n\nOpenRun supports the following for all apps:\n\n- [Declarative](https://openrun.dev/docs/applications/overview/#declarative-app-management) app deployment\n- Atomic updates (all or none) across [multiple apps](https://openrun.dev/docs/applications/overview/#glob-pattern)\n- [Staging mode](https://openrun.dev/docs/applications/lifecycle/#staging-apps) for app updates, to verify whether code and config changes work on prod before making them live.\n- [Preview app](https://openrun.dev/docs/applications/lifecycle/#preview-apps) creation support, for trying out code changes.\n- Support for [github integration](https://openrun.dev/docs/configuration/security/#private-repository-access), apps being directly deployed from github code.\n- [Automatic SSL](https://openrun.dev/docs/configuration/networking/#enable-automatic-signed-certificate) certificate creation based on [certmagic](https://github.com/caddyserver/certmagic).\n- OAuth/OIDC/SAML based [authentication](https://openrun.dev/docs/configuration/authentication/#oauth-authentication)\n- Support for domain based and path based [routing](https://openrun.dev/docs/applications/routing/#request-routing) at the app level.\n- Integration with [secrets managers](https://openrun.dev/docs/configuration/secrets/), to securely access secrets.\n\nFor containerized apps, OpenRun supports:\n\n- Managing [image builds](https://openrun.dev/docs/quickstart/#containerized-applications), in dev and prod mode\n- Passing [parameters](https://openrun.dev/docs/develop/#app-parameters) for the container\n- Building apps from [spec](https://openrun.dev/docs/develop/#building-apps-from-spec), no code changes required in repo for [supported frameworks](https://github.com/openrundev/appspecs) (Flask, Streamlit and repos having a Dockerfile)\n- Support for [pausing](https://openrun.dev/docs/container/config/) app containers which are idle\n\nFor building Hypermedia based apps, OpenRun supports:\n\n- Automatic [error handling support](https://openrun.dev/docs/plugins/overview/#automatic-error-handling)\n- Automatic creation of ECMAScript modules using [esbuild](https://esbuild.github.io/) for dependencies.\n- Support for [TailwindCSS](https://tailwindcss.com/) and [DaisyUI](https://daisyui.com/) watcher integration.\n- Backend app code runs in a [security sandbox](https://openrun.dev/docs/applications/appsecurity/#security-model), with allowlist based permissions.\n- [No build step](https://openrun.dev/docs/develop/#app-lifecycle), the development artifacts are ready for production use.\n- Support for application data persistence using SQLite\n- Virtual filesystem with [content hash based file names](https://openrun.dev/docs/develop/templates/#static-function) backed by SQLite database, enabling aggressive static content caching.\n- Brotli compression for static artifacts, HTTP early hints support for performance.\n\n## Roadmap\n\nThe feature roadmap for OpenRun is:\n\n- Adding more app specs, to support additional frameworks out of the box.\n- Support for app scaling on Kubernetes based on concurrent APIs. Scaling based on CPU/memory metrics is supported right now.\n- Support for server level plugin permissions allowlist. Currently, every plugin call has to be explicitly approved at the app level.\n- Support for using same container image for stage and prod app, when possible.\n- Support for verified promote mode, where health checks are done on stage app before promote is done.\n\n## Setup\n\n### Certs and Default password\n\nOpenRun manages TLS cert using LetsEncrypt for prod environments. For dev environment, OpenRun uses [mkcert](https://github.com/FiloSottile/mkcert) for local certs. Installing OpenRun using brew will automatically install mkcert.\n\nFor container based apps, Docker or Podman or Orbstack should be installed and running on the machine. OpenRun automatically detects the container manager to use.\n\n### Install OpenRun On OSX/Linux\n\nTo install on OSX/Linux, run\n\n```shell\ncurl -sSL https://openrun.dev/install.sh | sh\n```\n\nStart a new terminal (to get the updated env) and run `openrun server start` to start the OpenRun service.\n\n### Brew Install\n\nTo install using brew, run\n\n```\nbrew tap openrundev/homebrew-openrun\nbrew install openrun\nbrew services start openrun\n```\n\n### Install On Windows\n\nTo install on Windows, run\n\n```\npowershell -Command \"iwr https://openrun.dev/install.ps1 -useb | iex\"\n```\n\nStart a new command window (to get the updated env) and run `openrun server start` to start the OpenRun service.\n\n### Kubernetes Install\n\nSee [kubernetes docs](https://openrun.dev/docs/container/kubernetes/) for details on installing on Kubernetes using Helm chart and Terraform based infra setup.\n\n### Install Apps\n\nOnce OpenRun server is running, to install apps declaratively, open a new window and run\n\n```\nopenrun apply --approve github.com/openrundev/openrun/examples/utils.star\n```\n\nTo schedule a background sync, which automatically applies the latest app config, run\n\n```\nopenrun sync schedule --approve --promote github.com/openrundev/openrun/examples/utils.star\n```\n\nTo install apps using the CLI (imperative mode), run\n\n```\nopenrun app create --approve github.com/openrundev/apps/system/list_files /files\nopenrun app create --approve github.com/openrundev/apps/system/disk_usage /disk_usage\nopenrun app create --approve github.com/openrundev/apps/utils/bookmarks /book\n```\n\nOpen 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.\n\nSee [installation]({{\u003c ref \"installation\" \u003e}}) for details. See [config options]({{\u003c ref \"configuration\" \u003e}}) for configuration options. To enable Let's Encrypt certificates, see [Automatic SSL]({{\u003c ref \"configuration/networking/#enable-automatic-signed-certificate\" \u003e}}).\n\nThe release binaries are also available at [releases](https://github.com/openrundev/openrun/releases). See [install from source]({{\u003c ref \"installation/#install-from-source\" \u003e}}) to build from source.\n\nTo install a containerized app, ensure either Docker or Podman is running and run\n\n```\nopenrun app create --spec python-streamlit --branch master --approve github.com/streamlit/streamlit-example /streamlit\n```\n\nIf the source repo has a `Dockerfile` or `Containerfile`, run\n\n```\nopenrun app create --spec container --approve \u003csource_path\u003e /myapp\n```\n\nto install the app.\n\n### Build from source\n\nTo install a release build, follow steps in the [installation docs](https://openrun.dev/docs/installation/#install-release-build).\n\nTo install from source:\n\n- Ensure that a recent version of [Go](https://go.dev/doc/install) is available, version 1.21.0 or newer\n- Checkout the OpenRun repo, cd to the checked out folder\n- Build the openrun binary and place in desired location, like $HOME\n\n```shell\n# Ensure go is in the $PATH\nmkdir $HOME/openrun_source \u0026\u0026 cd $HOME/openrun_source\ngit clone -b main https://github.com/openrundev/openrun \u0026\u0026 cd openrun\nexport OPENRUN_HOME=$HOME/clhome \u0026\u0026 mkdir -p $OPENRUN_HOME/config\ngo build -o $OPENRUN_HOME/openrun ./cmd/openrun/\n```\n\n### Initial Configuration For Source Install\n\nTo 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/clhome/openrun.toml as the config file and $HOME/clhome as the work directory location.\n\n- Create the clhome directory\n- Create the openrun.toml file, and create a randomly generate password for the **admin** user account\n\n```shell\ncd $OPENRUN_HOME\ngit clone -C config https://github.com/openrundev/appspecs\n$OPENRUN_HOME/openrun password \u003e $OPENRUN_HOME/openrun.toml\n$OPENRUN_HOME/openrun server start\n```\n\nThe service will be started on [https://localhost:25223](https://127.0.0.1:25223) by default (HTTP port 25222).\n\n## Documentation\n\nOpenRun docs are at https://openrun.dev/docs/. For doc bugs, raise a GitHub issue in the [docs](https://github.com/openrundev/docs) repo.\n\n## Getting help\n\nPlease use [Github Discussions](https://github.com/openrundev/openrun/discussions) for discussing OpenRun related topics. Please use the bug tracker for bug reports and feature requests. The [OpenRun Discord](https://discord.gg/t2P8pJFsd7) community is another option.\n\n## Contributing\n\nPRs welcome for bug fixes and enhancements. For application behavior related fixes, refer the [app unit test cases](https://github.com/openrundev/openrun/tree/main/internal/app/tests). Those test run as part of regular unit tests `go test ./...`. For API related changes, OpenRun uses the [commander-cli](https://github.com/commander-cli/commander) library for [automated CLI tests](https://github.com/openrundev/openrun/tree/main/tests). To run the CLI test, run `gmake test` from the openrun home directory.\n","funding_links":[],"categories":["Server Applications","Users","服务器应用程序"],"sub_categories":["HTTP Clients","HTTP客户端"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenrundev%2Fopenrun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenrundev%2Fopenrun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenrundev%2Fopenrun/lists"}