Zero-Config Principle
Philosophy
Whenever a value can be derived automatically, derive it.
Only ask the developer for information that genuinely cannot be inferred.
Auto-Derived Values
| Value | Source |
|---|---|
| Repository owner | Git remote origin / GitHub API |
| Repository name | Git remote origin / GitHub API |
| Repository URL | Git remote origin |
| Git provider | Git remote hostname |
| Current commit | git rev-parse HEAD |
| Releases | Git tags matching v* |
| Default branch | git symbolic-ref refs/remotes/origin/HEAD |
| Package name | package.json / Cargo.toml / pyproject.toml |
| Listing endpoint | /listing (convention) |
What You Still Configure
Only configure what cannot be derived:
yaml
# reposell.yml - minimal required
version: 1
product:
name: "My Product" # Required for listing
description: "Description" # Required for listing
category: "developer-tools" # Optional
tags: ["cli", "typescript"] # Optional
pricing:
amount: 5000 # In minor units (cents)
currency: "USD"
model: "one_time" # one_time | subscription | pay_what_you_want
releases:
mode: "all" # "selected" | "all"
selected: [] # Only if mode: "selected"
payment:
provider: "stripe" # Only "stripe" currently
listing:
enabled: false # Enable /listing
auto_register: true # Auto-register on release
git:
provider: "github" # Auto-detected from remote
signing:
# Keys NEVER in config - use env/keychain
# Private key: REPOSELL_SIGNING_KEY (env var or keychain)
# Public key: committed to config/reposell/verification-key.pub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
What You Never Configure
โ Never in config:
- Private keys (use env/keychain)
- Stripe secret keys (GitHub Actions secrets)
- Webhook secrets (not used - no webhooks)
- GitHub tokens (CI provides
GITHUB_TOKEN) - Repository metadata (auto-derived)
- Release lists (auto-detected from tags)
Environment Variables
For local development only (.env.example) โ optional, used solely by the terminal dashboard and sell sync; checkout itself needs no keys:
bash
# .env (gitignored)
STRIPE_SECRET_KEY=sk_test_...
REPOSELL_SIGNING_KEY=base64_key # Or use OS keychain
1
2
3
2
3
GitHub Actions Secrets
Required secrets in repository settings:
| Secret | Required | Description |
|---|---|---|
STRIPE_SECRET_KEY | Optional | Local tooling only (dashboard, sell sync) โ checkout uses Payment Links |
REPOSELL_SIGNING_KEY | Yes | Base64 Ed25519 private key |
GITHUB_TOKEN | Auto | Provided by GitHub Actions |
Configuration Precedence
- Defaults (zero-config derivation)
- reposell.yml (explicit config)
- Environment variables (overrides)
- CLI flags (highest priority)
Configuration File Discovery
Commands look for config in order:
--configflagREPOSELL_CONFIGenv varreposell.ymlin current directoryreposell.ymlin parent directories.reposell.ymlin home directory
Validation
bash
# Validate config
reposell doctor
# Auto-fix safe issues
reposell doctor --fix
1
2
3
4
5
2
3
4
5
Configuration Schema
Full JSON Schema: https://reposell.dev/schemas/reposell-config-v1.json
Validate with:
bash
npx ajv validate -s schema.json -d reposell.yml
1