Create Heaven plugins, publish to the marketplace, and keep 80% of every dollar.
Get startedShip a Heaven plugin with manifest, handlers, and templates. Standard (req, res, ctx) signature.
Submit to the marketplace. We review for quality, security, and compliance. Set your own pricing model.
You keep 80% of revenue. We handle billing, metering, and distribution. Monthly payouts.
my-app/ ├── manifest.py # Identity, events, pricing ├── plugin.py # Heaven plugin class ├── handlers/ # (req, res, ctx) handlers ├── templates/ # Jinja2 templates │ └── partials/ # HTMX partials ├── static/ # CSS (no build step) ├── schemas.py # pytastic TypedDict schemas └── events.py # Event listeners
# manifest.py manifest = { "name": "Invoices", "publisher": "acme", "subdomain": "invoices", "version": "1.0.0", "requires": ["core.people"], "events": { "emits": ["ext.acme.invoices.invoice.created"], "listens": ["core.people.member.created"], }, }
# plugin.py from heaven import App app = App() app.GET("/", "handlers.index") app.POST("/invoices", "handlers.create") app.TEMPLATES("templates", relative_to=__file__) class InvoicesPlugin: def install(self, host_app): sub = host_app.subdomain("invoices") sub.mount(app)
core.{app}.{resource}.{action}core.people.member.createdext.{publisher}.{app}.{resource}.{action}ext.acme.invoices.invoice.paidsystem.*system.app.installedmanifest.py and an installable plugin class
ext.{publisher}.{app}.{resource}.{action}
ctx.workspace_id is set by the platform