ScripTreeApps / Developer Portal

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:

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>.git

Use 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.3

The 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:

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:

  1. Checks out your code
  2. Detects your toolchain (Node, Python, Rust, etc.)
  3. Runs tests and linting
  4. Builds your app
  5. Packages a .scriptree bundle (a ZIP with your manifest, code, and assets)
  6. Uploads the bundle to a quarantine storage bucket
  7. Scans your LICENSE.md and BUNDLED.md files

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:

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:

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:

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.