Skip to content
On this page

Configuration Schema

JSON Schema

The complete JSON Schema for reposell.yml is available at: https://reposell.dev/schemas/reposell-config-v1.json

Schema Structure

json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "reposell Configuration",
  "type": "object",
  "required": ["version"],
  "properties": {
    "version": { "type": "integer", "const": 1 },
    "product": { "$ref": "#/$defs/product" },
    "pricing": { "$ref": "#/$defs/pricing" },
    "releases": { "$ref": "#/$defs/releases" },
    "payment": { "$ref": "#/$defs/payment" },
    "listing": { "$ref": "#/$defs/listing" },
    "git": { "$ref": "#/$defs/git" },
    "signing": { "$ref": "#/$defs/signing" },
    "ci": { "$ref": "#/$defs/ci" },
    "overrides": { "$ref": "#/$defs/overrides" }
  },
  "$defs": {
    "product": {
      "type": "object",
      "required": ["name", "description"],
      "properties": {
        "name": { "type": "string", "minLength": 1 },
        "description": { "type": "string", "minLength": 1 },
        "category": { "type": "string", "default": "uncategorized" },
        "tags": { "type": "array", "items": { "type": "string" }, "default": [] }
      }
    },
    "pricing": {
      "type": "object",
      "required": ["amount", "currency", "model"],
      "properties": {
        "amount": { "type": "integer", "minimum": 0 },
        "currency": { "type": "string", "pattern": "^[A-Z]{3}$", "default": "USD" },
        "model": { "type": "string", "enum": ["one_time", "subscription", "pay_what_you_want"], "default": "one_time" }
      }
    },
    "releases": {
      "type": "object",
      "required": ["mode"],
      "properties": {
        "mode": { "type": "string", "enum": ["selected", "all"], "default": "all" },
        "selected": { "type": "array", "items": { "type": "string" }, "default": [] }
      }
    },
    "payment": {
      "type": "object",
      "required": ["provider"],
      "properties": {
        "provider": { "type": "string", "default": "stripe" }
      }
    },
    "listing": {
      "type": "object",
      "properties": {
        "enabled": { "type": "boolean", "default": false },
        "auto_register": { "type": "boolean", "default": true },
        "endpoint": { "type": "string" }
      }
    },
    "git": {
      "type": "object",
      "required": ["provider"],
      "properties": {
        "provider": { "type": "string", "enum": ["github", "gitlab", "bitbucket", "gitea", "forgejo"], "default": "github" },
        "owner": { "type": "string" },
        "repository": { "type": "string" }
      }
    },
    "signing": {
      "type": "object",
      "properties": {
        "key_id": { "type": "string" },
        "algorithm": { "type": "string", "const": "Ed25519" }
      }
    },
    "ci": {
      "type": "object",
      "properties": {
        "generate_workflows": { "type": "boolean", "default": true },
        "workflows": { "type": "array", "items": { "type": "string" }, "default": ["reposell.yml", "reposell-release.yml"] }
      }
    },
    "overrides": {
      "type": "object",
      "properties": {
        "repository_url": { "type": "string", "format": "uri" },
        "listing_endpoint": { "type": "string", "format": "uri" }
      }
    }
  }
}
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

Validation

bash
# Install ajv-cli
npm install -g ajv-cli

# Validate
npx ajv validate -s https://reposell.dev/schemas/reposell-config-v1.json -d reposell.yml
1
2
3
4
5

Schema Versioning

  • Schema version tracked in version field
  • Breaking changes = new schema version
  • Old schemas maintained for compatibility
  • Migration guide provided for upgrades

Licensing & Offers (current)

The commercial model is scheme-based: reusable license schemes are bound per release through offers, each carrying its own pricing and Stripe Payment Link (one-time or recurring).

yaml
licensing:
  policy:
    profile: source-available-commercial   # 15 profiles, or custom
    spdx: LicenseRef-reposell-RSL-1.0      # SPDX expression
    overrides:                             # any right, validated value
      ai_training: allowed-with-authorization
  schemes:
    standard:
      name: Standard
      billing: one-time          # one-time | recurring
      template: rsl-1.0          # license instrument issued at checkout
    team:
      name: Team
      billing: one-time
      seats: 10
    pro-monthly:
      name: Pro
      billing: recurring         # recurring requires interval
      interval: month            # month | year

releases:
  definitions:
    v1.2.0:
      status: published
      offers:                    # one offer per scheme; own link each
        - scheme: standard
          pricing: { amount: 29, currency: USD }
          payment:
            provider: stripe
            payment_link: https://buy.stripe.com/...
            payment_link_id: plink_...   # enables deep verification
        - scheme: pro-monthly
          pricing: { amount: 9, currency: USD }
          payment: { provider: stripe, payment_link: https://buy.stripe.com/... }
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
33
34

Rules enforced by the validator and the publication gates:

  • every offer.scheme must exist in licensing.schemes; duplicates per release are rejected
  • billing: recurring requires interval (month | year); interval on one-time schemes is an error
  • every offer independently passes the price/currency/provider/link gates — one bad offer blocks the release
  • deep Stripe verification checks amount, currency and billing mode (a recurring scheme must point at a recurring price with the declared interval)
  • the license policy sha256 (from reposell license compose) is bound into every signed release manifest

Reciprocity Program

Seller-configured, buyer-enforced: the program binds forks created from purchases of this package (never the seller's own revenue unless apply_to_own_use: true).

yaml
reciprocity:
  enabled: true
  apply_to_own_use: false
  threshold: { amount: 2000000, currency: USD, period: annual }
  contribution: { rate: 2, basis: revenue }
  recipients:
    - { recipient: original_repository, share: 50 }
    - { recipient: dependencies, share: 30 }
    - { recipient: contributors, share: 10 }
    - { recipient: reposell, share: 10 }
1
2
3
4
5
6
7
8
9
10

Rules: shares total exactly 100; known recipients; rate 0-100; sell sync writes REPOSELL-RECIPROCITY.json into every purchased fork. See the Reciprocy guide.

Made with ☕ and 🎧 by a solo developer from the Dominican Republic.

theme byReactBits