Publish to Marketplace
Fork your finished app and publish it to the public Fireberry marketplace
Marketplace Apps
The fireberry marketplace commands publish apps to the public Fireberry marketplace, where any organization can find and install them. This is a separate track from the private-app flow (create → push → deploy → install), which publishes only to your own organization.
The expected flow
You don't start a marketplace app from scratch. Develop your private app first, and once you're satisfied with it, fork it and publish the fork:
cd my-app # 1. your finished private app
fireberry marketplace clone /Users/me/apps/my-app-market # 2. fork → new app id
cd /Users/me/apps/my-app-market # 3. publish from the clone
fireberry marketplace deployCloning is a one-time step per marketplace app; after that you publish updates with marketplace deploy from the cloned folder.
Two different apps, two different manifestsThe clone is not another version of your private app — it's a separate entity with its own
app.idand its own component IDs. Deploying to the marketplace never converts, moves, or promotes the private app.So you maintain two
manifest.ymlfiles in two folders: one for the private app, one for the marketplace app. Runpush,deploy,install, anddebugin the private folder, andmarketplace deployin the clone — every command acts on the manifest in the current directory. Code changes must be applied and published in each folder separately.
fireberry marketplace clone
Copies the current app into a new folder with a fresh identity, so the copy is an independent app rather than a duplicate of the same one. App and component IDs must be unique across Fireberry, so a plain cp -r would leave you with two folders claiming to be the same app — this is the safe way to fork one.
fireberry marketplace clone [dest-folder]| Argument | Description | Required |
|---|---|---|
dest-folder | Full path to the destination folder — must be outside the current app directory | No (will prompt if omitted) |
Requirements: Must be run inside an app directory — it reads manifest.yml from the current directory. No token is needed; clone makes no API calls, so the new app doesn't exist server-side until you deploy it.
What it does:
- Copies everything from the app folder, skipping
node_modulesand the destination itself. - Rewrites the destination's
manifest.ymlwith a new app UUID and a new UUID for every component.
Everything else carries over unchanged — app name, description, icon, and each component's title, path, type, and settings.
It refuses to run if the destination equals the source, exists as a non-directory, or exists and is non-empty.
Pass a full path — a bare folder name will failThe destination is resolved relative to the current directory, which is your app folder — so a bare name like
market-applands inside the app you're cloning, and an app can't be copied into itself:$ pwd /Users/me/fireberry/version-test/sara-version-test $ fireberry marketplace clone ? Destination folder: market-app ✖ Failed to clone app into "market-app" Error: Cannot copy '/Users/me/fireberry/version-test/sara-version-test' to a subdirectory of itself, '/Users/me/fireberry/version-test/sara-version-test/market-app'.Pass the full path to a folder outside the app instead:
fireberry marketplace clone /Users/me/fireberry/version-test/market-app
node_modulesis the only exclusion
.git,.envfiles, and builtdist/output are all copied — check the clone for secrets before sharing it. Component titles are copied too; only IDs change, so rename them in the new manifest if you want them distinguishable.
fireberry marketplace deploy
Publishes the current app's built components to the public Fireberry marketplace.
fireberry marketplace deploycd /Users/me/apps/my-app-market # the cloned app, not the private one
fireberry marketplace deployRequirements: a token from fireberry init, a manifest.yml in the working directory, and components already built — each entry's path must point at existing build output.
What it does:
- Loads
manifest.yml, and validates and readsapp.iconif it's set. - Validates every component and packages each build as
tar.gz— checks that eachpathexists, that all component IDs are unique, and that each type has its required settings. - Prints a per-component summary (title, ID, size in KB), then
POSTs to/services/developer/app/marketplace/deploywith{ components, manifest, icon }.
Required settings by component type:
| Type | Required settings |
|---|---|
record | iconName (string), iconColor (string), objectType (number), height — one of S, M, L, XL |
side-menu | iconName (string), width — one of S, M, L |
global-menu | displayName (iconName is optional) |
Icon rules (when app.icon is set): must be .svg/.png/.jpg/.jpeg, non-empty, and ≤ 500 KB. Its size is reported on success.
Run this from the cloned folder
marketplace deploypublishes whatever app the current directory'smanifest.ymldescribes. Run it inside your private app folder and you publish your private app's identity to the public marketplace.
An app with no components is an error, not a graceful skip — validation fails with No components found in manifest and the deploy aborts. The same applies to push.
push vs. deploy vs. marketplace deploy
These three commands sound similar and are the easiest place to go wrong:
| Command | Endpoint | Payload | Purpose |
|---|---|---|---|
push | /push | components + manifest + icon | Upload components to your own organization while developing |
deploy | /deploy | { appId } only | Publish your private app (Draft → Live) |
marketplace deploy | /marketplace/deploy | components + manifest + icon | Publish to the public marketplace |
marketplace deploy and push send identical payloads — they differ only in destination endpoint, and therefore in which app the payload lands on. Since each reads the manifest.yml in the current directory, running the right command from the wrong folder publishes the wrong app. Confirm which folder you're in before deploying: the private app is updated with push + deploy, and the clone with marketplace deploy.
Troubleshooting
| Error | Solution |
|---|---|
| "Unauthorized user" | Re-authenticate: fireberry init |
| "Manifest not found" | Run marketplace deploy from the cloned app's root folder |
| Destination is not empty | marketplace clone requires a new or empty folder |
| Icon rejected | Use .svg/.png/.jpg/.jpeg, non-empty, under 500 KB |
| "No components found in manifest" | An empty components: array is an error — add and build a component first |
Next Steps
- CLI — Full command reference and the
manifest.ymlschema - Local Development — Master the debug workflow
- Component Types — Understand component configurations
Updated about 16 hours ago
