# One-click apps with `aral`

    aral app catalog   # slugs: wordpress, n8n, ghost, metabase, gitea, mattermost, vaultwarden, nodered, planka, directus, jitsi-meet, docker...
    aral app install --template n8n --name my-n8n --plan dev --region hel1
    aral app list      # poll status: configuring -> ready
    aral app get <id>  # includes the public URL (<name>-xxxx.vm.aralcloud.uz) and initial credentials
    aral app rename <id> --name new-name
    aral app delete <id>
    aral app domains <id>                                  # verified + force_https per domain
    aral app add-domain <id> n8n.example.uz                # redirects plain HTTP to HTTPS
    aral app add-domain <id> legacy.example.uz --no-force-https
    aral app verify-domain <id> n8n.example.uz             # re-check the ownership proof
    aral app domain-https <id> n8n.example.uz off          # on|off, takes effect in seconds
    aral app delete-domain <id> n8n.example.uz             # name or the id `domains` prints

An app is a VM + managed install; provisioning takes several minutes. `get`
carries everything needed to hand the app to a human (URL, admin user,
generated password).

A custom domain is served through the shared edge: CNAME it to
`edge.aralcloud.uz` (an apex needs A/AAAA records instead). An unproven
domain's row in `aral -o json app domains <id>` carries its `verify_record`
(TXT); publish it, then `verify-domain`. "Always HTTPS" (308 of plain HTTP,
ACME challenges exempt) is per domain and on by default for every newly
added domain.
