Publishing Your App to ${brand.name}
This guide walks you through the complete lifecycle of publishing a app on ${brand.name}, from writing your code to your app appearing on the storefront.
Before you start
You'll need:
- A ${brand.name} developer account (linked to a Gitea organization)
- A repository with your app source code and a
manifest.jsonfile - License metadata files (
LICENSE.mdandBUNDLED.md) at your repo root
Step 1: Write your code and push to Gitea
Create your app in a Gitea repository at:
https://${brand.primary_domain}/_git/<your-org>/<your-repo>.gitUse standard semantic versioning for releases. When you're ready to publish a version, create a Git tag:
git tag v1.2.3 git push origin v1.2.3The platform's CI runner watches for tags matching the pattern v*and automatically starts a build.
Step 2: Define your license metadata
Every app must clearly declare what the buyer is purchasing and what bundled software is included under separate (often open-source) licenses. You do this with two files at your repository root:
LICENSE.md — What you're selling
This file describes the license terms for your own code and scripts. Buyers will see this on your app's detail page before they purchase.
Option A: Standard open-source license
If you're using a common open-source license (MIT, Apache-2.0, GPL-3.0, etc.), start with an SPDX license identifier heading, followed by the license text:
# MIT MIT License Copyright (c) 2026 Your Company Permission is hereby granted... (license text follows)Option B: Custom proprietary terms
If you're selling proprietary work, use a heading that says so:
# Custom All rights reserved. This software is proprietary... (your custom license text follows)BUNDLED.md — Open-source components
If your app includes or interacts with open-source software, list each bundled component here. Use this simple YAML-ish format:
# Bundled software - name: FreeCAD version: 0.21.2 license: LGPL-2.1 license_url: https://www.gnu.org/licenses/lgpl-2.1.html source_url: https://www.freecad.org/ - name: ImageMagick version: 7.1.0 license: Apache-2.0 source_url: https://imagemagick.org/Fields:
name— the component name (required)version— the version you're bundling (recommended)license— SPDX license identifier (required)license_url— link to the license text (optional but encouraged)source_url— link to the project page or repo (optional)
Do NOT include this file if your app bundles no third-party software.
Step 3: CI builds your bundle
When you push the tag, ${brand.name}'s CI runner automatically:
- Checks out your code
- Detects your toolchain (Node, Python, Rust, etc.)
- Runs tests and linting
- Builds your app
- Packages a
.scriptreebundle (a ZIP with your manifest, code, and assets) - Uploads the bundle to a quarantine storage bucket
- Scans your
LICENSE.mdandBUNDLED.mdfiles
The scan auto-fills your license disclosure form with the values from your files. If files are missing or unparseable, the form defaults to manual entry.
Step 4: Review and confirm your license disclosure
After the CI build completes, log into your developer portal and navigate to your listing. You'll see a License tab with a form showing:
- Section 1 — What you're paying for: your license terms, scope, and license type
- Section 2 — Bundled software: a list of open-source components
Review each field. If the scan auto-detected a value, you'll see an Auto-detected badge. Edit anything that's wrong and click Confirm Disclosure when you're satisfied.
Your listing cannot go live until you confirm the disclosure. This is a one-time step per version.
Step 5: Operator signs your bundle
Once you've confirmed the disclosure, an operator on the ${brand.name} team reviews your bundle for safety and signs it cryptographically. This step ensures the bundle hasn't been tampered with since upload.
You'll receive an email notification when signing completes.
Step 6: Listing auto-promotes and goes live
After the operator signs, your listing automatically becomes visible on the storefront. Your app now appears in the appropriate tier (Main, Free, or The Museum) based on the pricing tier you selected.
Buyers will see your license disclosure before they purchase, ensuring transparency about what they're buying and what open-source software is bundled.
What buyers see: the "What you're paying for" panel
On your app's detail page, buyers see a panel summarizing your license disclosure:
- Your license type (e.g., "MIT" or "Custom")
- Your scope (e.g., "scriptree files only" or "scriptree + scripts")
- A count of bundled open-source components with an expandable list of each
This panel appears above the Buy button so buyers make an informed decision before purchasing.
Troubleshooting
My BUNDLED.md file didn't parse
The scanner detected your BUNDLED.md but couldn't parse it. Common causes:
- Using tabs instead of spaces for indentation (must be spaces)
- Field names with hyphens instead of underscores (e.g.,
license-url→ should belicense_url)
Edit the form directly to add/correct the entries. The platform will use your form input for the disclosure.
The scan found LICENSE.md but it's showing blank
The scanner couldn't detect an SPDX license identifier in your file's heading. Edit the form's "License type" dropdown to select the correct license, or choose "Custom" if you have proprietary terms.
I need to update the license disclosure after publishing
Push a new version tag (e.g., v1.2.4) with updated LICENSE.mdand/or BUNDLED.md files. The CI runner will build and scan the new version, and you'll review and confirm the disclosure again before the new version goes live.
For advanced users: API-based bundle upload
If you're building a custom CI integration and don't want to rely on the platform's built-in CI runner, see the Producer Bundles API reference. It documents the upload-init and finalize endpoints you can call directly to mint upload URLs and complete uploads.
Questions?
If you run into issues, contact our support team. We're here to help.