Skip to content

Blueprints

Blueprints are pre-built application stacks that you can install with a single command. Each blueprint includes everything needed for a working deployment: the application, database, storage, and configuration.

Browsing blueprints

bash
kip blueprint list
  NAME                 VERSION  DESCRIPTION
  ghost                1.0      Ghost publishing platform with MySQL database
  gitea                1.0      Gitea self-hosted Git service with PostgreSQL
  plausible            1.0      Plausible Analytics, privacy-friendly web analytics with PostgreSQL
  wordpress            1.0      WordPress blog with MySQL database and persistent uploads

Blueprint details

View what a blueprint will create and its configurable parameters:

bash
kip blueprint info wordpress
  wordpress (v1.0)
  WordPress blog with MySQL database and persistent uploads

  Parameters:
    projectName          Project name (required)
    environment          Target environment (e.g. test, prod)
    storageSize          Storage size for uploads [default: 5Gi]
    dbStorage            Database storage size [default: 5Gi]

  Install:
    kip blueprint install wordpress --set projectName=my-project

Installing a blueprint

Install directly to your cluster:

bash
kip blueprint install wordpress --set projectName=my-blog
  ✔  Namespace my-blog created

  Installing wordpress into my-blog...
    ✔  App/wordpress created
    ✔  Service/db created
    ✔  Volume/uploads created

  ✔  wordpress installed (3 resources)

With custom parameters

Override any parameter with --set:

bash
kip blueprint install wordpress \
  --set projectName=company-blog \
  --set storageSize=20Gi \
  --set dbStorage=10Gi \
  --environment prod

Into a specific environment

bash
kip blueprint install ghost \
  --set projectName=my-site \
  --set domain=https://blog.example.com \
  --environment prod

Generating a manifest

Generate a skipper.yaml file that you can review and customise before applying, instead of installing directly:

bash
kip init --blueprint wordpress --set projectName=my-blog
  ✔  Generated skipper.yaml from wordpress blueprint
     Edit it, then run: kip apply -f skipper.yaml

This creates a standard skipper.yaml file, not a special blueprint format, just a regular manifest. Edit it to add routes, environment variables, resource profiles, or any other configuration. Then apply:

bash
kip apply -f skipper.yaml

Available blueprints

WordPress

Full WordPress installation with MySQL database and persistent upload storage.

ComponentDetails
Appwordpress:6-apache on port 80
DatabaseMySQL with configurable storage
StoragePersistent volume for wp-content/uploads
Service bindingMySQL credentials injected via WORDPRESS_DB_ prefix

Ghost

Ghost publishing platform with MySQL backend.

ComponentDetails
Appghost:5-alpine on port 2368
DatabaseMySQL with configurable storage
Parametersdomain: the public URL for Ghost

Gitea

Self-hosted Git service with PostgreSQL and persistent repository storage.

ComponentDetails
Appgitea/gitea:1.22-rootless on port 3000
DatabasePostgreSQL with configurable storage
StoragePersistent volume for Git repositories

Plausible Analytics

Privacy-friendly web analytics.

ComponentDetails
Appghcr.io/plausible/community-edition:v2.1 on port 8000
DatabasePostgreSQL with configurable storage
ParametersbaseUrl (required): the public URL for analytics

Medusa

Open source e-commerce platform (Shopify alternative).

ComponentDetails
Appmedusajs/medusa:latest on port 9000
DatabasePostgreSQL with configurable storage
CacheRedis

n8n

Workflow automation platform (Zapier alternative).

ComponentDetails
Appn8nio/n8n:latest on port 5678
DatabasePostgreSQL with configurable storage

Uptime Kuma

Monitoring and status page. No database required. Data stored on a persistent volume.

ComponentDetails
Applouislam/uptime-kuma:1 on port 3001
StoragePersistent volume for monitoring data

Outline

Team wiki and knowledge base.

ComponentDetails
Appoutlinewiki/outline:latest on port 3000
DatabasePostgreSQL with configurable storage
CacheRedis
StorageMinIO for file attachments
Parametersdomain (required): the public URL

Cal.com

Open source scheduling platform (Calendly alternative).

ComponentDetails
Appcalcom/cal.com:latest on port 3000
DatabasePostgreSQL with configurable storage
Parametersdomain (required): the public URL

Invoice Ninja

Invoicing and billing platform.

ComponentDetails
Appinvoiceninja/invoiceninja:5 on port 9000
DatabaseMySQL with configurable storage
StoragePersistent volume for documents
Parametersdomain (required): the public URL

Mattermost

Team messaging platform (Slack alternative).

ComponentDetails
Appmattermost/mattermost-team-edition:latest on port 8065
DatabasePostgreSQL (10Gi default)
StoragePersistent volume for uploads and attachments
Parametersdomain (required): the public URL

Rocket.Chat

Team communication platform.

ComponentDetails
Approcket.chat:latest on port 3000
DatabaseMongoDB (10Gi default)
Parametersdomain (required): the public URL

How blueprints work

A blueprint is a skipper.yaml template with Go template placeholders. When you install a blueprint, Skipper:

  1. Loads the template from the built-in registry
  2. Applies your parameter values (with defaults for optional ones)
  3. Renders the template to a standard Skipper manifest
  4. Creates the namespace if needed
  5. Applies all resources to the cluster

The rendered output is identical to a hand-written skipper.yaml, with no special tracking or metadata. You can export it later with kip export and manage it via GitOps like any other manifest.

Creating custom blueprints

A blueprint file contains two YAML documents separated by ---:

  1. Metadata: name, description, version, parameters
  2. Template: a skipper.yaml with Go template placeholders (e.g. .projectName)

The file has two YAML documents separated by ---. The first document defines the metadata and parameters. The second document is the manifest template using Go text/template syntax. Placeholders like .projectName and .replicas are replaced with parameter values at render time.

After rendering with --set projectName=acme --set replicas=3, the template produces:

yaml
project: acme

apps:
  api:
    image: registry.example.com/api:latest
    port: 8080
    replicas: 3

services:
  db:
    type: postgres
    storage: 5Gi

All parameter values are strings. Use quotes in the template for numeric fields that YAML might interpret differently.

Parameters use Go text/template syntax. All parameter values are strings. Use quotes in the template for numeric fields that YAML might interpret differently.

Released under the Apache 2.0 License.