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
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
2
3
4
5
Schema Versioning
- Schema version tracked in
versionfield - 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
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.schememust exist inlicensing.schemes; duplicates per release are rejected billing: recurringrequiresinterval(month|year);intervalon 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
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.