Skip to content

Quickstart

This path produces a real deployable app and exercises the exact JavaScript SDK served by its OpenCloud origin.

1. Install the CLI

Install and checksum-verify the pinned public CLI release by following the CLI reference. It sets OPENCLOUD_CLI to the isolated executable:

bash
"$OPENCLOUD_CLI" --cli-version

Do not start live onboarding until this command works.

2. Onboard the user and project

bash
"$OPENCLOUD_CLI" onboard \
  --email "$USER_EMAIL" \
  --name "$PROJECT_NAME" \
  --visibility private

OpenCloud generates a readable HTTPS address from the title plus a random suffix. New users can proceed immediately, create more apps with the same provisional grant, and confirm their email within 24 hours. Existing users confirm the emailed request first, then the agent runs:

bash
"$OPENCLOUD_CLI" onboard-complete

The CLI stores the app credential in an ignored mode-0600 session file. Do not print or commit it.

3. Discover the assigned app

bash
"$OPENCLOUD_CLI" app list
"$OPENCLOUD_CLI" app get "$APP_ID"

Preserve each returned appUrl; it is the canonical public origin. A provisional account grant may list and create multiple apps during its 24-hour verification window.

4. Create the bundle

bash
"$OPENCLOUD_CLI" init "$APP_DIR" \
  --version 2026.07.28-1

Add a non-empty frontend/index.html immediately, then validate:

bash
"$OPENCLOUD_CLI" artifact-check "$APP_DIR" \
  --expect-app-id "$APP_ID" \
  --max-files 4

"$OPENCLOUD_CLI" validate "$APP_DIR"

5. Initialize the exact SDK

Every deployment records an exact SDK version in opencloud.yaml:

yaml
runtime:
  javascriptSdk:
    version: 0.2.2

Every app exposes deployment-specific runtime configuration and that pinned SDK module:

js
const runtime = await fetch("/_opencloud/config").then((response) =>
  response.json(),
);
const { createOpenCloudClient } = await import(runtime.javascriptSdk.module);

const opencloud = createOpenCloudClient();
const config = await opencloud.config();
const session = await opencloud.session();

Importing the deployment's exact path directly is also valid:

js
import { createOpenCloudClient } from "/_opencloud/sdk/js/v0.2.2/index.js";

Prefer runtime discovery in templates and generators. OpenCloud derives it from the active deployment, so publishing a newer SDK cannot move an existing app.

6. Make a first data request

Create an RLS-protected table in an ordered migration, then:

js
const response = await opencloud.rest.request(
  "items?select=id,title,created_at&order=created_at.desc",
);
if (!response.ok) throw new Error(await response.text());
const items = await response.json();

7. Develop, promote, and verify

bash
"$OPENCLOUD_CLI" app dev start "$APP_DIR"
# make and sync further changes as needed
"$OPENCLOUD_CLI" app dev sync "$APP_DIR"
"$OPENCLOUD_CLI" app dev verify "$APP_DIR"

"$OPENCLOUD_CLI" app dev promote "$APP_DIR" \
  --idempotency-key "$UNIQUE_KEY"

The development capability URL uses an isolated schema and cannot access production data or secrets. Functions remain dormant until the CLI or a deliberate preview action invokes them. Promotion deploys only the exact revision covered by the verification receipt, follows the durable operation, runs production verification, prints the live URL, and stops dev. Read the development guide.

Do not call a deployment successful until app dev promote reports the live production URL. Verification runs durably on OpenCloud and covers the active release, exact runtime metadata, deployment-pinned SDK, HTTPS health, Chromium, and the app-declared interaction contract.

Next

Self-hosted infrastructure for agent-built applications.