Deploy a Marketplace app in one click
Pick a curated community app like WordPress or n8n and deploy it in one click — the platform creates and links its managed database, attaches storage, and brings it up on a public URL.
The Marketplace is a curated catalogue of popular community apps — WordPress, n8n, Uptime Kuma, and more — that you deploy in one click. You pick the app and name it; the platform composes everything else: the container app itself, a managed database when the app needs one, persistent app storage where the app keeps files, the service link, and a public URL with managed TLS.
What "curated" means
Every Marketplace app runs a static image the platform pins to a recent stable version:
- Images come only from official Docker images, vendor-verified publishers, or images the platform builds itself.
- Every image reference is immutable — pinned to an exact digest and security-scanned before it enters the catalogue and before any change to it.
- The platform ships version updates as catalogue updates: a new pinned version applies to new deployments. A running app is never auto-updated behind your back.
Each card in the Marketplace shows the exact pinned version it deploys.
Deploy an app
*.alawadi.cloud subdomain with managed TLS. If a database was created, its connection details are shown once on the success screen — the app itself is already wired to it, so there is nothing to copy in by hand.The pinned-image model: no deploy surface, by design
The image is locked
A Marketplace app has no Deploy tab and no image controls. You cannot
push a new image to it, change its tag, roll it back, or deploy to it from
GitHub Actions or your private registry. Any deploy attempt — portal, API,
or CI — is rejected with 409 MARKETPLACE_IMAGE_LOCKED.
This is what keeps the catalogue safe: the image that runs is always the exact digest the platform curated, scanned, and pinned. Everything else behaves like a normal container app:
- Environment variables, live logs, metrics, and restart/stop/start all work as usual.
- Scaling: stateless apps (Umami, Metabase) can scale out and use autoscaling. Apps with app storage run as a single instance.
- Custom domains and connected services work as usual.
App storage
Where an app needs disk — WordPress files and plugins, n8n workflow data, Gitea repositories — the platform attaches persistent app storage automatically at deploy time, at the path the app expects. Apps with storage run as a single instance. Stateless apps keep all their state in their managed PostgreSQL instead.
Launch catalogue
| App | What it is | Managed database | App storage |
|---|---|---|---|
| WordPress | CMS and site builder | MySQL — created and linked automatically | Yes — site files |
| n8n | Workflow automation | — | Yes — workflows and credentials |
| Uptime Kuma | Uptime monitoring | — | Yes — monitor data |
| Vaultwarden | Password manager (Bitwarden-compatible) | — | Yes — vault data |
| Umami | Web analytics | PostgreSQL — created and linked automatically | — (stateless) |
| Metabase | BI and dashboards | PostgreSQL — created and linked automatically | — (stateless) |
| Gitea | Git hosting | — | Yes — repositories |
A tile marked coming soon cannot be deployed yet — the deploy action stays disabled until the app is available.
Per-app notes
- WordPress runs a hardened, platform-built image derived from the official WordPress image, so it runs without root privileges under the standard app runtime. It is stock WordPress — you install plugins and themes from the WordPress admin as usual.
- Vaultwarden: the server admin panel (
/admin) is disabled by default — the safe default. Bitwarden apps and browser extensions connect normally. - n8n: the encryption key that protects stored credentials is generated for you at deploy time.
- Uptime Kuma and Gitea keep their data on app storage; Gitea runs the official rootless image.
- Umami and Metabase run stateless against their managed PostgreSQL: all data lives in the database.
Advanced: the API path
Two endpoints back the Marketplace. List the catalogue:
curl https://api.alawadi.cloud/v1/marketplace/apps \
-H "Authorization: Bearer $TOKEN"Each entry carries the app slug, its name and description in English and
Arabic, the category, the pinned version and image, the port,
requires_db (mysql, postgres, or empty), the storage size, the resource
preset, and its status (available or coming_soon).
Deploy an app into a project:
curl -X POST https://api.alawadi.cloud/v1/projects/$PROJECT_ID/marketplace/n8n \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "my-blog", "display_name": "My Blog" }'The 201 response returns the new container and — when the app required a
database — a database object with its show-once connection block.
Errors
| Code | Status | Meaning |
|---|---|---|
MARKETPLACE_APP_UNKNOWN | 404 | The slug is not in the catalogue. |
MARKETPLACE_APP_UNAVAILABLE | 409 | The app is coming_soon and cannot be deployed yet. |
MARKETPLACE_IMAGE_LOCKED | 409 | A deploy was attempted on a Marketplace app. The pinned image cannot be changed. |
MARKETPLACE_DISABLED | 403 | The Marketplace is disabled on the platform. |
See Error codes for the general error shape.