Stormkit is a free, open source build & deployment project written in Go and released under a custom open-source licence. It has 260 GitHub stars, 15 forks and 13 open issues, and was last pushed 39 hours ago. On this registry it ranks #58 of 59 tracked projects in Build & Deployment, with 5 head-to-head comparisons available. It gained 3 stars over the last 6 tracked days.

What is Stormkit?

Stormkit is a self-hostable deployment platform for modern web applications, presented as an open alternative to Vercel and Netlify and aimed at developers and teams who want automated CI/CD, per-branch previews and custom domains on infrastructure they own.

What it is

Stormkit is a platform as a service for deploying modern web applications, written in Go and listed under Developer Tools / Build & Deployment. It installs on a server you control and then behaves like a hosted deployment platform: a git push triggers a deployment, each branch gets a preview URL, and custom domains are provisioned with automatic TLS. The project describes itself as a self-hostable alternative to Vercel and Netlify.

The problem it solves is that teams want managed-vendor conveniences without handing over their infrastructure, and without assembling separate services for the pieces an application needs. Stormkit bundles a PostgreSQL database attached to each environment, end-user authentication, a transactional mailer, scheduled jobs and analytics into one platform running on infrastructure the team owns. Runtimes come from mise, covering Node.js, Go, Python, Ruby and anything else it supports, with system packages from a flake.nix and a start command that runs a long-lived server in any language.

Key capabilities

  • Deployment from git push, the dashboard UI, a zip upload or the API, with a preview URL per branch, environments carrying their own configuration, and status checks before publishing.
  • Runtimes from mise, including Node.js, Go, Python and Ruby, with system packages from a flake.nix and a start command for long-lived servers in any supported language.
  • PostgreSQL attached to an environment, with migrations run on deploy.
  • Stormkit Auth for end users: email and password, magic links, Google and X, with sessions handled for you.
  • A transactional mailer wired to your SMTP provider, periodic triggers for scheduled jobs without a separate cron box, and server-side analytics that do not depend on client-side tracking.
  • An OAuth 2.1 server that lets an app you host act as an authorization server, so MCP clients such as Claude and ChatGPT connect as your end users rather than through a shared token.
  • An MCP interface exposing the whole platform, so an agent can provision a server, deploy, publish and read logs; the wider set also includes volumes, serverless API routes and SSR, redirects and path rewrites, custom headers, snippet injection, Auth Wall, and teams and roles.

Who uses it and how

  • Teams leaving a managed deployment vendor while keeping per-branch preview deployments, environment-specific configuration and custom domains with automatic TLS.
  • Applications that need a database, authentication, email, scheduled jobs and analytics together rather than from five separate providers.
  • Agent-driven workflows, where the --agent install provisions the instance, creates the owner account and mints an MCP-ready API key from an SSH key, and hosted apps serve as OAuth 2.1 authorization servers for MCP clients.
  • Polyglot front-end and back-end teams, as indicated by topics covering Next.js, React, Node.js, Go, Docker, CI/CD and DevOps.
  • Self-hosting operators running the Docker images alongside PostgreSQL and Redis on their own hardware.

Getting started

Install by running the script at https://www.stormkit.io/install.sh as curl -sSL https://www.stormkit.io/install.sh | sh, or use the hands-off agent variant with sh -s -- --agent. Alternatively run the images ghcr.io/stormkit-io/workerserver:latest and ghcr.io/stormkit-io/hosting:latest, with a PostgreSQL database and a Redis instance required alongside them.

How it compares

Vercel and Netlify are managed services operated by their vendors, while Stormkit is built to run on infrastructure its owner controls, which places the database, Stormkit Auth, the OAuth 2.1 server and long-lived application runtimes in the self-hosted deployment rather than in a vendor account. Stormkit Cloud does exist as a managed tier covering deployments, previews, domains, mailer, triggers and analytics, so the contrast is between a hosted tier of the same product and the full platform run yourself. Licensing differs too: Stormkit is open core, with the Community Edition in src/ce under AGPL-3.0 and Enterprise Edition components in src/ee commercially licensed, rather than a single proprietary service agreement.

When to use it — and when not to

Self-hosting means operating a PostgreSQL database and a Redis instance beside the worker and hosting images, and supplying an SMTP provider for the transactional mailer, so teams unwilling to run a database and a cache should not take that path. The licence deserves review before adoption, because GitHub reports the repository as NOASSERTION while the README describes an AGPL-3.0 and commercial split. Adoption signals are modest at 260 stars, 15 forks and 13 open issues, so it suits teams comfortable evaluating and operating a young platform.

project readme (upstream, from github) — read inline

Stormkit

Deploy your app and get the pieces it needs — a Postgres database, end-user authentication, a transactional mailer, scheduled jobs and analytics — on infrastructure you own.

curl -sSL https://www.stormkit.io/install.sh | sh

That is a working Stormkit on your own server: git push to deploy, a preview URL per branch, custom domains with automatic TLS.

Stormkit

What you get

Deployments Git push, UI, zip upload or API. A preview URL per branch, environments with their own config, status checks before publishing
Any language Runtimes come from mise — Node.js, Go, Python, Ruby and anything else it supports. System packages from a flake.nix. A start command runs a long-lived server in any language
Database PostgreSQL attached to an environment, with migrations run on deploy
Authentication Stormkit Auth for your end users — email and password, magic links, Google and X — with sessions handled for you
Email A transactional mailer wired to your SMTP provider
Scheduled jobs Periodic triggers, without a separate cron box
Analytics Server-side analytics that do not depend on client-side tracking
Also Volumes, serverless API routes and SSR, redirects and rewrites, custom headers, snippet injection, Auth Wall, teams and roles

Let an agent run it

Stormkit exposes the whole platform over MCP, so a coding agent can provision a server, deploy, publish and read the logs when something breaks — without you opening the dashboard.

curl -sSL https://www.stormkit.io/install.sh | sh -s -- --agent

The --agent install is hands-off: give it an SSH key and it provisions the instance, creates the owner account and mints an MCP-ready API key.

Your app can be on the other side of that too. The OAuth 2.1 server turns an app you host into an authorization server, so MCP clients like Claude and ChatGPT connect to it as your end users rather than through a shared token.

Cloud or self-hosted

Stormkit Cloud is the managed option — deployments, previews, domains, mailer, triggers and analytics, with nothing to operate.

Self-hosted runs on your own infrastructure and is where the full platform lives: the database, Stormkit Auth, the OAuth 2.1 server and long-lived application runtimes are self-hosted only. Docker images:

ghcr.io/stormkit-io/workerserver:latest
ghcr.io/stormkit-io/hosting:latest

A PostgreSQL database and a Redis instance are required alongside them. See the self-hosting guide.

Documentation

www.stormkit.io/docs — or read it in this repo under docs/.

License

Open core. The Community Edition in src/ce/ is AGPL-3.0. Enterprise Edition components in src/ee/ are commercially licensed. See LICENSE.

Contributing

Bug reports and pull requests are welcome. See CONTRIBUTING.md and the local development setup below.

Local Development

To run Stormkit locally:

Prerequisites

  • Go 1.21+
  • Node.js 22+
  • PostgreSQL 14+
  • Redis 7+
  • Mise
  • Docker

You can install go and node using Mise, which is a polyglot tool version manager.

# Trust the dependencies specified in `mise.toml` and install them
mise trust && mise install

Running the services

# Clone the repository
git clone https://github.com/stormkit-io/stormkit-io.git
cd stormkit-io

# Start all services (includes database setup and migrations)
make dev

After starting the services:

  • The landing page will be available at https://localhost:5500
  • The application will be available at https://localhost:5400
  • The API will be available at http://api.localhost:8888

Project Structure

stormkit-io/
├── src/
│   ├── ce/                   # Community Edition (AGPL-3.0)
│   │   ├── api/              # REST API server
│   │   ├── hosting/          # Hosting service
│   │   ├── runner/           # Build and deployment runner
│   │   └── workerserver/     # Background job processing
│   ├── ee/                   # Enterprise Edition (Commercial)
│   │   ├── api/              # Enterprise API features
│   │   ├── hosting/          # Enterprise hosting features
│   │   └── workerserver/     # Enterprise background services
│   ├── lib/                  # Shared libraries and utilities
│   ├── migrations/           # Database migrations
│   ├── mocks/                # Test mocks and fixtures
│   └── ui/                   # Frontend React
│   └── www/                  # Landing page React
├── scripts/                  # Build and deployment scripts

Component Overview

  • Community Edition (src/ce/): Open source components under AGPL-3.0
  • Enterprise Edition (src/ee/): Commercial features requiring a license
  • Shared Libraries (src/lib/): Common utilities used by both editions
  • Frontend (src/ui/): React-based web interface

Testing

Tests require PostgreSQL with a test database named sktest and Redis to be running.

Setup

# Start services
docker compose up -d db redis

# Create test database
docker compose exec db createdb -U ${POSTGRES_USER} sktest

Running Tests

# Run backend and frontend tests
make test

# Run only backend tests
make test-be

# Run only frontend tests
make test-fe

Generating mocks

When adding or changing interfaces under src/lib (or other packages) we generate testify mocks using mockery so tests can inject fakes.

Recommended command (run from the repository root):

# generate mocks for all interfaces in the repo that require the alibaba and imageopt build tags
mockery --case=underscore --dir ./ --tags=alibaba,imageopt --all --output=./src/mocks

Notes:

  • You can run mockery via go run if you don't want to install the binary globally:
go run github.com/vektra/mockery/v2@latest --case=underscore --dir ./ --tags=alibaba,imageopt --all --output=./src/mocks
  • If you need expecter helpers for testify, add --with-expecter to the command.
  • Use --case=underscore to match repository naming conventions for generated files.
  • After regenerating mocks, run gofmt/go vet and go test ./... and commit the updated files under src/mocks.

Troubleshooting

For detailed troubleshooting steps, see our dedicated troubleshooting guide.

Frequently asked questions

Is Stormkit free to use?

Stormkit is open source. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does Stormkit do?

Deploy web apps with automated CI/CD and full infrastructure control

What is Stormkit written in?

Stormkit is primarily written in Go. Its source is publicly available at https://github.com/stormkit-io/stormkit-io, and it has 260 GitHub stars.