Partner Deployment Guide

Overview
Are you a developer that wants to deploy your app to the Decent Portal? Good! You're in the right place. This guide should have what you need.
Our deployment system was specifically designed for secure, private, local-first web apps following Decent sensibilities. Your app will be available via a fast, global CDN network, mirrored across six continents. (Sorry, Antartica users - it might be slow for you!)
Table of Contents
Configuration Steps
Prerequisites
Before you start, you’ll need:
- A public GitHub repository with a Decent-compatible project (created using
create-decent-app
) - An app name, shared with Decent Apps for provisioning
- A Decent API key
You’ll get your API key and app name after coordinating with someone at Decent Apps. If you're unsure who to contact, email launch@decentapps.net. We will provision your account such that your API key will permit deployment operations for your app.
Keep your Decent API key secure. Never commit the Decent API key to a public repository.
Configuring Your App
- Open a terminal and navigate to your project root (it should contain a
package.json
file). - Run
npm run build
and verify it completes without errors and outputs to./dist
(default behavior forcreate-decent-app
-generated projects). - Run
npm install decent-portal@latest
to install the latest Decent Portal library. - Run
npm run setup-portal-workflows
to generate GitHub workflow files in.github/workflows/
.
After step 4, GitHub will try to deploy your app on each push. These attempts will fail safely until you finish repository configuration.
Configuring Your GitHub Repository
- In the GitHub portal, open your repository and go to Settings (repository-level).
- Under Secrets and Variables > Actions, add a new secret:
- Name:
DECENT_API_KEY
- Value: your Decent API key
- Name:
- Under Secrets and Variables > Variables, add:
- Name:
APP_NAME
- Value: the exact app name used during provisioning
- Name:
Reminder: Keep your API key private. Never commit it, even temporarily.
Using Deployment Workflows
Once configured, you can use three workflows:
- Deploy - deploys your app to a staging URL
- Promote - makes the staged version live at the production URL
- Rollback - reverts production to the previous version
A typical flow is: deploy to staging, test, then promote to production. If an issue arises after promotion, you can roll back to the last known good version.
Staging and production URLs follow these patterns:
- Production:
https://decentapps.net/your-app-name
- Staging:
https://decentapps.net/_your-app-name
Deploy
By default, every git push
to your configured repository deploys your app to a staging URL on the Decent Portal. Deployments take a few seconds to a few minutes, depending on your file count. You can track progress in GitHub under the Actions tab for your app's repository.

Deploying creates a new versioned set of files based on the latest commit on the "Main" branch of your app's repository. The production and staging URLs will always point to one immutable version.
You can also deploy manually via Actions > Deploy to Staging > Run workflow. For a manual deployment, files from the latest commit hash on the "Main" branch will be used.

The staging URL is public—anyone can guess it by adding an underscore before your app name. To avoid this, you can disable automatic deployments by editing .github/workflows/deploy.yml
: remove the push
trigger and leave only workflow_dispatch:
.

Promote
Once your staging deployment is tested, you can promote it to the production URL—i.e., go live.
Promotion is manually triggered: in GitHub, go to Actions > Promote Staging to Production > Run workflow. The process typically completes in under 10 seconds.

Promotion is atomic—the production URL switches entirely to the staged version. Users with open sessions may need to refresh their browsers to see the update.
Rollback
Each promotion saves the previous production version, allowing you to roll back if needed. This is helpful if a problem is discovered after going live.
Rollbacks are manually triggered: in GitHub, go to Actions > Rollback Production > Run workflow. It typically completes in under 10 seconds.

You can only roll back once per promotion. A second rollback attempt (without a new promotion) will fail. Once a new version is promoted, rollback becomes available again.
Preview versus Discoverable
Your app’s staging and production URLs are public, but apps start in a “preview” state—not listed from the Decent Portal homepage.
You're free to share your URLs however you like, including on social media. When you're ready, Decent Apps can review and mark your app as discoverable.
Troubleshooting
We've collected some common troubleshooting situations below. They are all oriented towards actions you can take to resolve problems. But that doesn't mean problems are always your fault or our platform can't be improved. We fully expect to find some bugs or things that could work better. If the troubleshooting help here isn't enough, let's talk further on the Decent App Discord server!
Problems Common to Multiple Workflows
When running a workflow, you see "Local action version does not match latest action version" or similar message.
If you aren't aware of any other problem, this warning is usually safe to ignore. But to address the warning, you can edit your workflow files in .github/workflows
to specify the latest version which was also output in the warning message.
Note that due to GitHub caching, the major version syntax (e.g., "DecentAppsNet/deploy@v1") in the workflow will sometimes reference an older action than the latest. You can force GitHub to use the latest version of an action by editing the workflow to reference a full semantic version (e.g. "DecentAppsNet/deploy@v1.0.12").
When running a workflow, you see an "api-key is required" or "app-name is required" message.
When running a workflow, you see "Status code: 401", "Unauthorized", or similar message.
You've configured your app's repository to specify required inputs, but they aren't matching what has been provisioned for your account. Double-check that the repository secrets/variables are set correctly, and contact Decent Apps if that doesn't resolve the issue.
Deploy Workflow Problems
When running the deploy workflow, you see "Local dist directory missing" or a similar message.
dist
subdirectory from your project root. If you are using a create-decent-app
-generated project, the deploy workflow file (.github/workflows/deploy.yml
) will build your source code to the dist
directory with a call to npm run build
.dist
before the DecentAppsNet/deploy
action begins execution within the GitHub CI environment.dist
directory to be directly committed to your repository. In most cases, you will want the deploy workflow of your project to copy or build files to dist
within the Github CI environment instead.After successfully completing a deployment, you can't see the new version of your app.
Promotion Workflow Problems
After successfully completing a promotion, you can't see the new version of your app.
When running the promotion workflow, you see a "no stage version found" or similar message.
Rollback Workflow Problems
When running the rollback workflow, you see a "no rollback version available" or similar message.
Under the Hood
Curious how it all works? Great. If not, feel free to skip this section—it's just background info for those who like to dig in.
The deployment system has three main parts:
- GitHub workflows - defined in your repository, fully tinkerable
- GitHub actions - open-source logic triggered by workflows. You can fork and modify them, though it’s rarely necessary.
- Decent Partner Service - a closed-source backend that authorizes deployments, scoped to apps tied to your API key. It's closed to mitigate certain security risks.
These components don’t modify your source code. The only file added is a version.txt
in your built output—used to track which version is live.
The workflows and actions run within GitHub’s CI environment, isolated from your local setup. The following sequence diagram illustrates how these pieces fit together:
