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:
"$OPENCLOUD_CLI" --cli-versionDo not start live onboarding until this command works.
2. Onboard the user and project
"$OPENCLOUD_CLI" onboard \
--email "$USER_EMAIL" \
--name "$PROJECT_NAME" \
--visibility privateOpenCloud 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:
"$OPENCLOUD_CLI" onboard-completeThe CLI stores the app credential in an ignored mode-0600 session file. Do not print or commit it.
3. Discover the assigned app
"$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
"$OPENCLOUD_CLI" init "$APP_DIR" \
--version 2026.07.28-1Add a non-empty frontend/index.html immediately, then validate:
"$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:
runtime:
javascriptSdk:
version: 0.2.2Every app exposes deployment-specific runtime configuration and that pinned SDK module:
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:
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:
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
"$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
- Iterate through development sessions.
- Learn the platform model.
- Add Auth-aware UI and RLS data.
- Read the JavaScript SDK reference.
- Add a complete verification contract.