Skip to main content
Use ThinkPlatform-client 0.6.134 with an authenticated saved profile for the intended organization and project. Hosted Apps and source builds must be enabled and configured by your deployment administrator. You need permission to publish to the project and use its Registry and build infrastructure. This guide publishes a small new app; do not reuse an existing app ID without reviewing its current release.

Prepare a small application

Create an app-example directory containing these two files. This example serves a static page and requests no Table or Lakehouse access.
index.html
Dockerfile
The app listens on loopback port 8080 inside its container; the ThinkPlatform authentication sidecar provides browser access. Source publication builds a Linux amd64 image remotely, so an Agent Workspace does not need a local Docker daemon. Test the page locally before uploading your source.

Create the companion Dynamic UI

The publication API requires a companion HTML Dynamic UI in the same project. Save this as companion-ui.json:
Record the returned uiId as UI_ID. The companion identifies the app’s project resource; the container serves the actual UI.

Publish and inspect

Generate one request UUID and save it with your publication inputs. In Bash:
On PowerShell, assign the UUID with $REQUEST_UUID = [guid]::NewGuid().ToString() and pass $UI_ID and $REQUEST_UUID in the same command. Set UI_ID to your actual returned value first. Inspect readiness, release and URL. The default wait is 300 seconds; a timeout does not prove that publication failed. Retain the request UUID, source and options, inspect the recorded state, and resume the same operation when appropriate. Do not repeatedly submit new request IDs while an earlier result is uncertain.
Use --image instead of --source for an authorized Registry image with an immutable @sha256: digest. Source upload is limited to 50 MiB compressed. The CLI does not interpret .dockerignore: within Git it uses tracked and nonignored untracked files, plus built-in exclusions. Review tracked inputs and use .gitignore for local-only files. Outside Git, prepare a dedicated source directory. Exclude credentials, profiles and unrelated data yourself.Use repeated --table-read or --table-write options for exact Table IDs, --lakehouse-read for delegated Lakehouse reads, and --project-permission only for an accepted read permission shown in help. Publication permissions, the current user’s permissions and resource scope all apply. The app must use the request-bound SDK; do not put a personal token in the image. Keep --legacy-table only for existing apps that require that separate bridge.--wait 0 submits one step without polling. Other values range from 0 to 1800 seconds. Keep the same request ID and inputs when resuming; an explicitly terminal failure requires diagnosis rather than an automatic resubmission loop.

Open it from Canvas

Save app-page.json with the stable app ID:
Open /canvas/PAGE_ID on your ThinkPlatform host, replacing PAGE_ID with the returned page ID. Check that Inspection app appears. If permissions were requested, review the consent before continuing. A successful CLI publication alone does not verify another person’s access or an app’s data writes; test the intended action and read its stored result back.

Update or stop an app

Read the current release first:
For an update, generate a new request UUID and publish with --replaces set to the exact previous release. Retain that release and the new UUID on retries. Use --replaces-stopped only if that exact previous release is stopped. Inspect tp apps publish --help for --replace-current and the full update options. To stop a release you own and intend to retire:
Set RELEASE to the inspected release ID. Stopping unpublishes the release and stops its runtime; preserve shared Tables, files and Canvas pages unless you intend to remove those separately.