Publish to the marketplace
Themes, icon packs, button packs, plugins, and map templates — community-published, sandbox-loaded, revenue-shared. Authors keep 70% of paid sales.
Submission API is live
The web submission form lands in the next push. Until then, asset authors can post against the internal API directly — manifest URL, manifest hash, bundle URL, bundle hash, declared capabilities. Reach out on Discord for the auth handshake.
POST /api/internal/marketplace-assets
{
"authorUserId": "<your users.id>",
"slug": "neon-cyberpunk-icons",
"kind": "icon_pack", // 'theme' | 'icon_pack' | 'button_pack' | 'plugin' | 'map_template'
"title": "Neon Cyberpunk Icons",
"description": "Replaces the default marker pin icons with neon-glow variants.",
"manifestUrl": "https://cdn.example.com/icons/neon/manifest.json",
"manifestHash": "sha256-…",
"bundleUrl": "https://cdn.example.com/icons/neon/bundle.tar.gz",
"bundleHash": "sha256-…",
"capabilities": { "renderMarkerIcons": true },
"priceCents": 0,
"version": "1.0.0"
}Manifest + capabilities
- · Manifest is a signed JSON file declaring the asset's runtime capabilities.
- · The runtime gates network / storage / DOM mutation access against the declared list.
- · Bundle is the asset payload (icons, CSS, JS) — verified against the bundle hash on load.
- · No internal code is exposed; plugins call into a frozen API surface.
Revenue + payouts
- · Free assets are free forever. Authors are credited but don't earn from installs.
- · Paid assets default to a 70/30 author/us split.
- · Author payouts go through Stripe Connect once you've passed $50 lifetime earnings.
- · Refunds within 7 days of purchase, deducted from your share.