org.projectfile.funding
Unified funding configuration: GitHub Sponsors / Patreon / Ko-fi / etc. provider fields for FUNDING.yml generation, plus payment channels, plans, and annual history for fundingjson.org. Entity info is auto-resolved from people and organizations arrays; override with entity-type / entity-role when needed.
- Namespace:
org.projectfile.funding - Owner: projectfile.org (community-maintained)
- Status: proposed
Illustrative fragment — not a complete projectfile document. Consumers MUST round-trip unknown namespaces even when no shape is published.
---# SPDX-FileCopyrightText: 2026 Damián Búho <damian.buho@proton.me>## SPDX-License-Identifier: CC-BY-4.0# SPDX-License-Identifier: MIT
# Shape: org.projectfile.funding extension namespace# Illustrative fragment — not a complete projectfile document.# See registry.yaml for ownership and status.## Unified funding configuration shared by all funding-related bridges:# - FUNDING.yml (GitHub) — uses provider fields only# - funding.json (fundingjson.org) — uses channels, plans, history# - package.json / composer.json funding — uses provider fields only## Entity info is auto-resolved from [[people]] / [[organizations]] with# maintainer/owner roles and email. Override with entity-type / entity-role# when the auto-detected values don't match.
org: projectfile: funding: # --- GitHub FUNDING.yml provider fields --- github: ["octocat"] # OPTIONAL list of GitHub Sponsors handles patreon: username # OPTIONAL ko-fi: username # OPTIONAL liberapay: username # OPTIONAL tidelift: npm-package # OPTIONAL community-bridge: project # OPTIONAL issuehunt: username # OPTIONAL open-collective: slug # OPTIONAL lfx-crowdfunding: slug # OPTIONAL polar: username # OPTIONAL buy-me-a-coffee: username # OPTIONAL thanks-dev: username # OPTIONAL custom: ["https://..."] # OPTIONAL list of URLs path: ".github/FUNDING.yml" # OPTIONAL on-disk override for FUNDING.yml
# --- Entity overrides (fundingjson bridge) --- entity-type: organisation # OPTIONAL individual|group|organisation|other entity-role: owner # OPTIONAL owner|steward|maintainer|contributor|other
# --- Payment channels (fundingjson bridge) --- channels: - guid: stripe # REQUIRED unique ID, lowercase-alphanumeric-dashes type: payment-provider # REQUIRED bank|payment-provider|cheque|cash|other address: "https://buy.stripe.com/..." # OPTIONAL payment address or URL description: "Stripe checkout" # OPTIONAL - guid: github-sponsors type: payment-provider address: "https://github.com/sponsors/example"
# --- Funding plans (fundingjson bridge) --- plans: - guid: monthly-sponsor # REQUIRED unique ID status: active # REQUIRED active|inactive name: "Monthly Sponsorship" # REQUIRED description: "Support ongoing development" # OPTIONAL amount: 10.0 # REQUIRED 0 = any amount currency: USD # REQUIRED ISO 4217 frequency: monthly # REQUIRED one-time|weekly|fortnightly|monthly|yearly|other channels: [stripe, github-sponsors] # REQUIRED channel GUIDs - guid: one-time status: active name: "One-time Donation" amount: 0 currency: USD frequency: one-time channels: [stripe]
# --- Funding history (fundingjson bridge, optional) --- history: - year: 2025 # REQUIRED income: 1200.0 # OPTIONAL expenses: 800.0 # OPTIONAL taxes: 200.0 # OPTIONAL currency: USD # REQUIRED description: "First year" # OPTIONAL[org.projectfile.funding]github = [ "octocat" ]patreon = "username"ko-fi = "username"liberapay = "username"tidelift = "npm-package"community-bridge = "project"issuehunt = "username"open-collective = "slug"lfx-crowdfunding = "slug"polar = "username"buy-me-a-coffee = "username"thanks-dev = "username"custom = [ "https://..." ]path = ".github/FUNDING.yml"entity-type = "organisation"entity-role = "owner"
[[org.projectfile.funding.channels]]guid = "stripe"type = "payment-provider"address = "https://buy.stripe.com/..."description = "Stripe checkout"
[[org.projectfile.funding.channels]]guid = "github-sponsors"type = "payment-provider"address = "https://github.com/sponsors/example"
[[org.projectfile.funding.plans]]guid = "monthly-sponsor"status = "active"name = "Monthly Sponsorship"description = "Support ongoing development"amount = 10currency = "USD"frequency = "monthly"channels = [ "stripe", "github-sponsors" ]
[[org.projectfile.funding.plans]]guid = "one-time"status = "active"name = "One-time Donation"amount = 0currency = "USD"frequency = "one-time"channels = [ "stripe" ]
[[org.projectfile.funding.history]]year = 2025income = 1200expenses = 800taxes = 200currency = "USD"description = "First year"{ "org": { "projectfile": { "funding": { "github": [ "octocat" ], "patreon": "username", "ko-fi": "username", "liberapay": "username", "tidelift": "npm-package", "community-bridge": "project", "issuehunt": "username", "open-collective": "slug", "lfx-crowdfunding": "slug", "polar": "username", "buy-me-a-coffee": "username", "thanks-dev": "username", "custom": [ "https://..." ], "path": ".github/FUNDING.yml", "entity-type": "organisation", "entity-role": "owner", "channels": [ { "guid": "stripe", "type": "payment-provider", "address": "https://buy.stripe.com/...", "description": "Stripe checkout" }, { "guid": "github-sponsors", "type": "payment-provider", "address": "https://github.com/sponsors/example" } ], "plans": [ { "guid": "monthly-sponsor", "status": "active", "name": "Monthly Sponsorship", "description": "Support ongoing development", "amount": 10, "currency": "USD", "frequency": "monthly", "channels": [ "stripe", "github-sponsors" ] }, { "guid": "one-time", "status": "active", "name": "One-time Donation", "amount": 0, "currency": "USD", "frequency": "one-time", "channels": [ "stripe" ] } ], "history": [ { "year": 2025, "income": 1200, "expenses": 800, "taxes": 200, "currency": "USD", "description": "First year" } ] } } }}