Create Your First Product
Creating a product involves four steps:
- Create the product
- Push your Docker image
- Create a version with install configuration
- Link a Stripe product for payments
Create the product
From your dashboard, go to Products and click Add Product.
- Name — The display name customers will see (e.g., "Bugflow")
- URL — A unique slug for this product (e.g.,
bugflow→shpcr.io/your-team/bugflow) - Logo — Optional product icon
You can also add optional support links:
- Support email
- Documentation URL
- GitHub repository
- Discord server
- Community forum
Push your Docker image
Before creating a version, push your Docker image to the Self-Host Pro registry.
Generate registry credentials
- Go to your product's Images tab
- Click Generate Access Token
- Save the username (your email) and token — the token is only shown once
Push your image
# Log in to the registry
docker login shpcr.io -u [email protected] -p your-token
# Tag your image
docker tag my-app:latest shpcr.io/your-team/your-product:latest
# Push
docker push shpcr.io/your-team/your-product:latest
After pushing, your image appears in the Images tab with the push timestamp.
1.0.0, 1.0, latest). This lets customers pin to specific versions or follow the latest release.Create a version
Versions define how your software gets installed. Go to your product's Versions tab and click Add Version.
Basic details
- Name — Version display name (e.g., "Version 1.0")
- Slug — URL-safe identifier (e.g.,
v1or1.0.0)
System requirements
Set minimum requirements for customer servers:
- CPU cores — Minimum CPU cores required
- Memory — Minimum RAM in GB
- Disk space — Minimum free disk space in GB
The install script checks these before proceeding.
Docker configuration
- Default image — Select which pushed image tag to install by default
- Docker Compose file — Your
docker-compose.ymlcontent
Example compose file:
services:
app:
image: shpcr.io/your-team/your-product:latest
ports:
- "8080:8080"
environment:
- APP_URL=${APP_URL}
restart: unless-stopped
Installation options
- Start application after install — Automatically run
docker compose up -dafter setup - Prompt for install hostname — Ask customers for their domain/IP during install (sets
APP_URLandAPP_DOMAINenvironment variables)
Configuration files (optional)
Add files that should be created in the project directory during install:
- Name — Filename (e.g.,
.env,traefik.yml) - Contents — File contents
- Permissions — chmod value (e.g.,
600for sensitive files) - Owner — UID and GID for file ownership
- Prompt to edit — Let customers edit this file during install
Initialize commands (optional)
Commands to run after containers start (e.g., database migrations):
docker compose run --rm app php artisan migrate --force
docker compose run --rm app php artisan db:seed --force
Commands run in order. Installation fails if any command exits with an error.
Link a Stripe product
To sell this version, link it to a Stripe product.
In Stripe
- Go to your Stripe Dashboard
- Create a product with your desired pricing (one-time or subscription)
- Copy the product ID (starts with
prod_)
In Self-Host Pro
- Edit your version
- Under Purchase Access, click Add Marketplace Product
- Select your connected Stripe account
- Choose the Stripe product
- Set access duration:
- Indefinite — Customer has permanent access
- Expires after X days — Access revoked after the specified period (useful for subscriptions)
Test the flow
Before going live:
- Use Stripe test mode to create a test product
- Make a test purchase
- Check that you receive access and can generate an install script
- Run the install script on a test server
- Verify everything works
When ready, switch to Stripe live mode and update your marketplace product link.