domino-extensions
Build and operate Domino UI Extensions (mount a published Domino App at a Domino UI mount point with page context). Covers extension_manifest.json, the official installer versus the manual Extensions API, App publish and identity requirements, auth and host rules for Extension backends, and the /api/extensions/beta routes. Use when creating an Extension, wiring mount points, publishing an Extension App from a project, pointing an Extension at a new App version, or automating the Extension install lifecycle. Not for generic App deployment alone (see domino-apps) or SPA scaffolding (see domino-ui-bootstrap).
- License 许可
- MIT
- 最近更新
- 2026-11-14
- Stars
- ★ 5
- Forks
- 4
01 前言 Front Matter
- name
- domino-extensions
- description
- Build and operate Domino UI Extensions (mount a published Domino App at a Domino UI mount point with page context). Covers extension_manifest.json, the official installer versus the manual Extensions API, App publish and identity requirements, auth and host rules for Extension backends, and the /api/extensions/beta routes. Use when creating an Extension, wiring mount points, publishing an Extension App from a project, pointing an Extension at a new App version, or automating the Extension install lifecycle. Not for generic App deployment alone (see domino-apps) or SPA scaffolding (see domino-ui-bootstrap).
- compatibility
- Domino 6.3 and Domino Cloud. Requires DOMINO_API_HOST; in a run use DOMINO_API_PROXY, outside a run a Personal Access Token or service account token. Creating an Extension needs admin permissions; publishing its App with extended identity propagation needs a SysAdmin or CloudAdmin.
02 资源文件 2
- 参考文档API-EXTENSIONS.md10.9 KB
- 参考文档MANIFEST.md3.1 KB
03 SKILL.md 正文
Domino Extensions
Applies to Domino 6.3 and Domino Cloud.
An Extension surfaces a published App at a Domino UI mount point (Project sidebar, Dataset details page, Dataset file three-dot menu, Model details page, Admin panel). Domino opens the App in a new tab and passes the originating page's context as query parameters. One App can back several Extensions; pointing an Extension at a newer App version is an admin configuration change, not a rebuild.
When to use other skills
| Goal | Skill |
|---|---|
Vite/React design system, @dominodatalab/extensions-tools, proxy-safe URLs |
domino-ui-bootstrap |
app.sh, ports, prefixes, App publish chain (/api/apps/v1), CI |
domino-apps, domino-apps/API-APPS.md |
| Authentication, hosts, pagination and errors for any Domino API call | domino-api-intro |
| Governance from an Extension backend | domino-governance |
Docs: https://docs.domino.ai/cloud/platform-capabilities/features/extensions (overview), https://docs.domino.ai/cloud/platform-capabilities/features/extensions/create-manage-extensions (build your own), https://docs.domino.ai/cloud/platform-capabilities/features/extensions/install-domino-official-extensions (official catalog). The same pages exist under /6.3/.
Requirements on the App
- Extended identity propagation enabled ("Allow App to act for viewers in Domino" on the Access & sharing step;
content.extendedIdentityPropagationToAppsEnabled: trueon the App version over the API). Only a SysAdmin or CloudAdmin can publish an App with it on; without it the App cannot back an Extension (POST /api/extensions/beta/extensionsreturns 400). The deployment needsSecureIdentityPropagationToAppsEnabledandcom.cerebro.domino.apps.extendedIdentityPropagationToAppsEnabled, both on by default on Cloud and 6.3. Once enabled on an App it cannot be disabled. - A framework that reads proxied HTTP headers: Flask and Dash do by default; Shiny needs Shiny Server Pro. The per-request viewer token arrives in the
Authorizationheader after the viewer consents. - Published and viewable: an Extension inherits the App's access controls; users without view access see it listed and are prompted to request access.
- Domino's App guidelines: call Domino APIs from backend code only (never from frontend JavaScript), authenticate with the per-request bearer from
Authorization(never an API key), keep the App stateless or protect cached data like its source, declare dependencies in the Compute Environment's Dockerfile.
Mount points and context
uiMountPointTypeConfigs key |
Where | Query parameters passed to / |
|---|---|---|
projectSidebar |
Project navigation sidebar | projectId |
dataset |
Dataset details page | datasetId |
datasetFileContext |
Three-dot menu of a file in a Dataset | datasetId, datasetSnapshotId, filePath |
modelDetails |
Model details page | modelId, modelVersionId |
adminPanel |
New page in the Admin panel | none |
netAppVolume, netAppVolumeFileContext |
NetApp Volume pages (API only) | netAppVolumeId, netAppVolumeSnapshotId, filePath |
urlConfig.contextualQueryParams accepts only the spec enum (the eight names above), and the App receives exactly what the config lists. The file parameter is filePath, not datasetFilePath. Read the parameters on the App's root route, validate the ones you need and return a clear 400 when they are missing, and call Domino with the forwarded Authorization header. A worked Flask example and the exact config shapes are in API-EXTENSIONS.md.
Create an Extension (custom App)
- Build and preview the App in a workspace (App Preview), then Publish App as a SysAdmin or CloudAdmin with extended identity propagation on. Over the API: domino-apps/API-APPS.md.
- Create the Extension from the App's three-dot menu (Create Extension) or Admin panel > Extensions > Create Extension: pick the App version and add one or more mount points. Needs admin permissions (a 403 means they are missing; see API-EXTENSIONS.md). Over the API:
POST /api/extensions/beta/extensionswithname,enabled,appId,appVersionId(a version with extended identity propagation on) anduiMountPointTypeConfigs; all five are required,descriptionis optional. Body and the other routes: API-EXTENSIONS.md. - Manage from Admin panel > Extensions: toggle enabled, Manage Extension > Edit to change mount points or the App version, Delete to soft-delete. Publishing a new App version does not move the Extension; edit it in the UI or
PATCHappVersionIdover the API.
Official Extensions (manifest-driven)
Domino-built Extensions are installed, upgraded and uninstalled from Admin panel > Extensions > Manage Domino-official Extensions; the installer reads extension_manifest.json (manifestSchemaVersion: 1, sections project, app, extension) from a GitHub release and creates the Project, Compute Environment, App and Extension itself. Do not edit those managed entities by hand. Manifest fields, lifecycle rules and the install routes: MANIFEST.md.
Auth and hosts in Extension backends
| Call | Credential and base |
|---|---|
| Platform API as the viewer | Forward the request's Authorization header unchanged to $DOMINO_API_HOST/api/...; answer 401 when it is missing. Consent expires (8 hours by default, up to 30 days) |
| Platform API as the publisher | $DOMINO_API_PROXY/api/... with no header, or a bearer from $DOMINO_API_PROXY/access-token |
Governance /api/governance/v1/* |
Base URL per the domino-governance skill; bearer PAT or service account, never an API key |
| Model inference | The url from the endpoint record, not a hand-built host |
| Automation outside any run | Public deployment URL plus PAT or service account token |
Until a viewer consents, Domino redirects every request, JSON included, to /app-consent. The bearer is the viewer's own credential: take the viewer from its preferred_username claim, never domino-username (not sent here; clients can forge it); never log or store the token, never call without it ($DOMINO_API_HOST runs header-less calls as the publisher). No browser links from DOMINO_API_HOST or DOMINO_USER_HOST; put the public URL in a project environment variable. Slash, routes, scripts: API-EXTENSIONS.md.
Reference files
- API-EXTENSIONS.md:
/api/extensions/betaroutes, create body, mount config shapes, Flask context example, patch and delete. - MANIFEST.md:
extension_manifest.jsonfields, official install lifecycle and routes.
04 同仓库更多 Skills
tags-and-properties
Manage Domino tags and properties via the Tags (Taxonomy) API at /api/taxonomy/v1. Covers namespaces and tags (create, list, update, deprecate, delete; tag entities such as projects, models, datasets, apps, project templates, NetApp volumes, environments; query by tag; autocomplete; merge; CSV import/export) and properties (typed metadata fields - text, number, date, boolean, url, user, organization, select, multi_select - with per-entity values, groups and versioned entities like model_version/app_version). Use when organizing entities with tags, building hierarchical namespaces, defining typed metadata fields, setting property values, finding entities by tag, bulk-tagging during onboarding, or migrating a taxonomy across environments.
netapp-volumes
Work with Domino Volumes for NetApp ONTAP (NetApp Volumes) - shared, multi-terabyte storage with near-instant snapshots. Covers creating volumes, attaching them to projects, mount paths (/mnt/netapp-volumes/ or /domino/netapp-volumes/), snapshots and tags, roles, deletion, mounting volumes in jobs, and the NetApp Volumes REST API (/remotefs/v1). Use when managing large-scale shared data, taking fast no-copy snapshots, or integrating NetApp ONTAP storage with Domino.
domino-workspaces
Work with Domino Workspaces - interactive sessions running Jupyter, JupyterLab, VS Code or RStudio on a hardware tier with a compute environment. Covers launching and configuring a Workspace, what persists across stop and resume, file paths and syncing for DFS and Git-based Projects, package and home-directory persistence, SSH access from a local IDE, the Workspace API routes, and troubleshooting. Use when setting up or debugging an interactive development session in Domino.
domino-ui-bootstrap
Bootstrap or retrofit a Vite + React 18 + TypeScript project so it uses the Domino design system (`@dominodatalab/extensions-tools`). Scoped to a **fully standalone SPA frontend for a Domino application or extension**, not snippets, library additions, or work inside an existing Domino monorepo package. Use whenever the user wants to create, scaffold, refactor, retrofit, or set up such an SPA (a React app, web app, frontend, UI, or extension) that should "look like Domino", use Domino components, follow the Domino design system, or integrate with the Domino platform, including when they mention DominoThemeProviderDecorator, extensions-tools, or base-components without saying "Domino". Also use to make an existing standalone React/Vite project "Domino-styled" or add Domino theming. Handles React 18 / react-router 5 pinning, Storybook MCP registration, theme provider wiring, and build verification.
domino-trace-setup
Set up GenAI tracing for an LLM or agent application in Domino by checking the Domino SDK and MLflow requirements (the DSE needs nothing installed), then adding a tracing_setup.py helper, span evaluators, a config.yaml, and @add_tracing / DominoAgentContext wiring. Use when the user asks to add tracing, observability, or evaluation to an agent or LLM app running on Domino.
domino-rust-apps
Build a Rust web app (axum) in Domino and ship it as a Domino App that starts from a prebuilt binary. Covers installing a pinned Rust toolchain into a Compute Environment with rustup, Cargo project defaults (edition 2024, rust-toolchain.toml, Cargo.lock, Clippy pedantic, rustfmt, cargo-nextest, cargo-deny), rust-analyzer for the IDE and coding agents, check hooks, calling Domino as the viewer with extended identity propagation, dev and release build profiles, keeping target/ out of Git and Domino storage, and an app.sh that runs the binary in App Preview and deployments without compiling. Use when the user wants a Rust app, API, dashboard or Proa site on Domino, a performance-sensitive or correctness-critical App, or asks to set up Rust, cargo, Clippy, nextest or rust-analyzer in a Domino Workspace or environment.