1-Click Apps run as a managed service inside your pod (their own systemd units), not from
/home/instapod/app. You still get a Web Terminal, SSH, custom domains, and backups like any other pod.Deploying an app
- Dashboard
- API
- Click Create Pod and choose the 1-Click App tab.
- Pick an app (n8n, AutoMem, Vaultwarden, Uptime Kuma, and more).
- Choose a plan. Each app has a minimum plan based on the resources it needs - the wizard preselects it for you.
- Fill in any optional setup fields the app exposes (for example, an API key), then click Deploy.
400 naming the presets it does run on, rather than creating a pod that
would serve a 502 forever. You can leave the preset out entirely and the app’s own is used.
Where the app’s login is
Apps that generate their own credentials at first boot show them on the pod page, under App credentials - the username, the password or admin token, and any setup notes the app ships with, with your pod’s URL filled in. They’re also emailed to you when the pod is ready, but the panel is the copy that can’t be lost: it reads from what was captured at install time, so it still works when the pod is stopped, and a deleted or spam-filtered email is no longer a lockout.Only the pod’s owner can read them. Apps that generate no credentials of their own - Memos,
Excalidraw - show setup notes instead, or nothing at all. If capture failed, the panel says so and
points you at the file on the pod where the app wrote them.
403 to everything until a device has paired. Open the pod’s
Web Terminal and run openmausbot-pair, then open the link it prints on the device you want to use.
Codes are single-use and expire after a few minutes - run the command again for a fresh one. The
panel’s setup notes walk through this, including how to connect Claude Code or Codex as the engine.
Finishing setup after deploy
Some apps can’t be fully configured before they exist. An app that talks to a third party usually needs a callback URL - and that URL contains the pod’s own domain, which isn’t known until the pod is created. For those apps, the pod page shows a setup card listing exactly what the app is asking for: each variable’s name, what it’s for, whether it’s required, and whether it already has a value. Where a variable needs your pod’s address, the description spells the URL out in full so you can paste it straight into the other service. Fill the fields in and save. InstaPods writes the values to the app’s own env file and restarts the app. The card keeps prompting until every required variable has a value.“Required” means required before the app is usable - not required to deploy. You can always create the pod first and finish setup afterwards.
GET response includes complete: true once every required variable is set. Only variables the app declares are accepted - this is a guided form, not a general env editor, and for that you want instapods env set. A variable marked secret is never echoed back; the response only tells you whether it has a value.
Leaving a field blank keeps whatever value is already there, so you can update one variable without resupplying the rest.
Updating an app
When a new version of an app is released, the pod shows an Update Available badge. Updating is one click, and it’s guarded. Before touching anything, InstaPods snapshots the pod. If the update fails, or the app doesn’t come back healthy afterwards, the snapshot is rolled back automatically and the pod is marked Update Rolled Back - you’re left on the version that was working, not on a broken half-upgrade.- Dashboard
- API
Open the pod and click Update on the app card. The status moves through Updating to either the new version or Update Rolled Back, which turns the button into Retry Update. The reason is shown on the card - it quotes the last thing the update printed, so it usually says what went wrong.If you stop or restart the pod in the few seconds after clicking Update, the update doesn’t start at all: the card says so, nothing on the pod was changed, and you can start the pod and click Retry Update.
Some apps need more memory to update than to run - a build step during the upgrade can exceed a small plan. If the pod is too small, the update is refused up front, before the running app is stopped, and tells you which plan it needs.
n8n command still works from the
pod’s shell, for example n8n export:workflow --all --output=/home/instapod/workflows.json.
You can also stop and start a 1-Click App without stopping the whole pod, with POST /api/pods/{name}/apps/{appType}/stop and .../start.
Configuring an app with environment variables
Most 1-Click Apps read their configuration from their own env file (not the preset’s/home/instapod/app/.env). The CLI handles this for you - instapods env set writes to the right file and restarts the app so the change takes effect immediately. No separate reload is needed.
A few apps (n8n, Beszel, Memos, Uptime Kuma, Stirling PDF, Cloud Commander) have no config file of their own. For those the values go to /home/instapod/app/.env, InstaPods puts them in the app’s process environment, and the app itself is restarted - so an n8n setting like N8N_BLOCK_ENV_ACCESS_IN_NODE takes effect the same way.
Two things a save can tell you, in its warnings:
- A variable the app sets itself is not applied. If the app’s own service already fixes a value (n8n’s
N8N_PORT, say), yours is written to the file but not applied, and the save names the key. Overriding it would move the app off the port InstaPods routes to. - Excalidraw does not take environment variables. It is a static bundle served by nginx, with no process to hold an environment. The save still writes the file, and warns that the values will not reach the app.
For custom-code pods (Static, PHP, Node.js, Python, Go),
instapods env set writes to /home/instapod/app/.env, puts the values in your app’s process environment and restarts the app service for you - see Environment Variables for the details and the cases where your app should still load the file itself.Example: AutoMem embeddings and MCP
AutoMem gives your AI assistant persistent memory over MCP, backed by a knowledge graph and a vector database.Choosing an embedding provider
By default AutoMem uses local embeddings (384-dimensional) - no API key required, fully self-contained. For higher-quality semantic search, point it at a remote provider:
Set these at deploy time (in the app’s setup fields or
app_config) and AutoMem provisions its vector store at the matching dimension automatically.