Simplifyd CloudSimplifyd Cloud

Deploy button

Add a Deploy to Simplifyd button to a GitHub README so anyone can run your project on Simplifyd Cloud.

A Deploy to Simplifyd button sends whoever clicks it to the dashboard with your repository's stack ready to deploy. They choose a workspace and project, fill in any settings you ask for, and the services are created for them.

Deploy to Simplifyd

Adding the button

  1. Add a simplifyd.json to the root of your repository (see below).
  2. Add this to your README.md, with your repository's URL:
[![Deploy to Simplifyd](https://simplifyd.com/deploy-button.svg)](https://console.cloud.simplifyd.com/deploy?repo=https://github.com/OWNER/REPO)

The repository must be public. To point at a branch, a tag, or a directory other than the root, use its GitHub URL:

Link torepo=
The default branchhttps://github.com/OWNER/REPO
A tag or branchhttps://github.com/OWNER/REPO/tree/v1.2.0
A directory in ithttps://github.com/OWNER/REPO/tree/main/deploy

A branch whose name contains a / cannot be named this way. Link to a tag instead.

simplifyd.json

simplifyd.json describes your stack in the same form as a template: a list of services with their images, sizes, variables, public ports, files and storage.

{
  "name": "Acme",
  "description": "The Acme app and its database.",
  "services": [
    {
      "key": "db",
      "type": "postgres",
      "postgres": { "storage_gb": 5 }
    },
    {
      "key": "web",
      "type": "docker",
      "vcpus": 1,
      "memory": 512,
      "docker": { "image": "ghcr.io/acme/app", "tag": "1.4.0" },
      "variables": [
        { "name": "DATABASE_URL", "value": "${{db.DATABASE_URL}}" },
        { "name": "SESSION_SECRET", "value": "${{secret(32)}}" },
        { "name": "STRIPE_KEY", "value": "", "description": "Your Stripe secret key." }
      ],
      "ingress": [{ "port": 8080, "protocol": "HTTP" }],
      "configs": [
        { "name": "nginx", "content": "@file:deploy/nginx.conf", "mount_path": "/etc/nginx/nginx.conf" }
      ]
    }
  ]
}
  • Services can be docker, postgres or email. Each needs a key, which names the service and is how other services refer to it.
  • Images must be public, such as on GitHub Container Registry or Docker Hub. Registry credentials are refused. Simplifyd does not build your repository yet, so publish an image and name it here.
  • Variables can reference other services, such as ${{db.DATABASE_URL}}, and generate secrets that are unique to each deploy, such as ${{secret(32)}}. Every reference must name a variable that will exist.
  • Settings to ask for: leave a variable's value empty and the person deploying is asked for it, with your description as help. Add "optional": true if it can be left empty.
  • Files: a config's content can be @file: and a path, relative to simplifyd.json, to mount a file from the repository.
  • name is optional and defaults to the repository's name.

Unknown fields are an error, so a misspelt setting is reported rather than ignored.

What the person deploying sees

The deploy page shows your repository, every service it will create with its size, and the settings you ask for. Nothing is created until they click Deploy. Services are then created in the project they chose and start when they deploy them from the canvas.

If simplifyd.json changes between when they open the page and when they click Deploy, the deploy is refused and they are asked to review it again.

Never put a real secret in simplifyd.json: your repository is public. Leave the value empty so it is asked for, or generate it with ${{secret(32)}}.