Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions appkit-all-in-one/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@ build/
.smoke-test/
test-results/
playwright-report/

# Auto-generated types (endpoint-specific, varies per developer)
shared/appkit-types/serving.d.ts
2 changes: 1 addition & 1 deletion appkit-all-in-one/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ This project uses Databricks AppKit packages. For AI assistant guidance on using
For enhanced AI assistance with Databricks CLI operations, authentication, data exploration, and app development, install the Databricks skills:

```bash
databricks experimental aitools skills install
databricks aitools install
```
<!-- appkit-instructions-end -->
4 changes: 2 additions & 2 deletions appkit-all-in-one/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# appkit-all-in-one

A Databricks App powered by [AppKit](https://databricks.github.io/appkit/), featuring React, TypeScript, and Tailwind CSS.
A Databricks App powered by [AppKit](https://www.databricks.com/devhub/docs/appkit/v0/), featuring React, TypeScript, and Tailwind CSS.

**Enabled plugins:**
- **Analytics** -- SQL query execution against Databricks SQL Warehouses
Expand Down Expand Up @@ -34,7 +34,7 @@ DATABRICKS_APP_PORT=8000

#### Lakebase Configuration

The Lakebase plugin requires additional environment variables for PostgreSQL connectivity. To learn how to configure the Lakebase plugin, see the [Lakebase plugin documentation](https://databricks.github.io/appkit/docs/plugins/lakebase).
The Lakebase plugin requires additional environment variables for PostgreSQL connectivity. To learn how to configure the Lakebase plugin, see the [Lakebase plugin documentation](https://www.databricks.com/devhub/docs/appkit/v0/plugins/lakebase).

### CLI Authentication

Expand Down
246 changes: 232 additions & 14 deletions appkit-all-in-one/appkit.plugins.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,33 @@
{
"$schema": "https://databricks.github.io/appkit/schemas/template-plugins.schema.json",
"version": "1.0",
"version": "2.0",
"plugins": {
"agents": {
"name": "agents",
"displayName": "Agents Plugin",
"description": "AI agents driven by markdown configs or code, with auto-tool-discovery from registered plugins",
"package": "@databricks/appkit",
"resources": {
"required": [],
"optional": [
{
"type": "serving_endpoint",
"alias": "Default LLM for agents",
"resourceKey": "agents-serving-endpoint",
"description": "Default streaming-capable LLM endpoint for agents that don't pin their own model",
"permission": "CAN_QUERY",
"fields": {
"name": {
"env": "DATABRICKS_SERVING_ENDPOINT_NAME",
"description": "Default LLM serving endpoint name",
"origin": "user"
}
}
}
]
},
"stability": "beta"
},
"analytics": {
"name": "analytics",
"displayName": "Analytics Plugin",
Expand All @@ -18,13 +44,28 @@
"fields": {
"id": {
"env": "DATABRICKS_WAREHOUSE_ID",
"description": "SQL Warehouse ID"
"description": "SQL Warehouse ID",
"discovery": {
"type": "kind",
"resourceKind": "warehouse"
},
"origin": "user"
}
}
}
],
"optional": []
},
"scaffolding": {
"rules": {
"must": [
"Before init, ensure the SQL Warehouse passed via --set analytics.sql-warehouse.id is running"
],
"should": [
"After init, ensure config/queries/ has at least one .sql file before running npm run typegen"
]
}
},
"requiredByTemplate": true
},
"files": {
Expand All @@ -43,13 +84,26 @@
"fields": {
"path": {
"env": "DATABRICKS_VOLUME_FILES",
"description": "Volume path for file storage (e.g. /Volumes/catalog/schema/volume_name)"
"description": "Volume path for file storage (e.g. /Volumes/catalog/schema/volume_name)",
"discovery": {
"type": "kind",
"resourceKind": "volume",
"select": "full_name"
},
"origin": "user"
}
}
}
],
"optional": []
},
"scaffolding": {
"rules": {
"must": [
"Before init, verify your Unity Catalog volume exists and you have WRITE_VOLUME permission"
]
}
},
"requiredByTemplate": true
},
"genie": {
Expand All @@ -68,15 +122,56 @@
"fields": {
"id": {
"env": "DATABRICKS_GENIE_SPACE_ID",
"description": "Default Genie Space ID"
"description": "Default Genie Space ID",
"discovery": {
"type": "kind",
"resourceKind": "genie_space"
},
"origin": "user"
},
"name": {
"description": "Genie Space display name",
"origin": "user"
}
}
}
],
"optional": []
},
"scaffolding": {
"rules": {
"must": [
"After init, configure the 'spaces' map in plugin config with alias-to-Space-ID mappings"
]
}
},
"requiredByTemplate": true
},
"jobs": {
"name": "jobs",
"displayName": "Jobs Plugin",
"description": "Manage Databricks Lakeflow Jobs.",
"package": "@databricks/appkit",
"resources": {
"required": [
{
"type": "job",
"alias": "Job",
"resourceKey": "job",
"description": "A Databricks job to trigger and monitor",
"permission": "CAN_MANAGE_RUN",
"fields": {
"id": {
"env": "DATABRICKS_JOB_ID",
"description": "Numeric Databricks job ID. Find it in the Jobs UI or via `databricks jobs list`.",
"origin": "user"
}
}
}
],
"optional": []
}
},
"lakebase": {
"name": "lakebase",
"displayName": "Lakebase",
Expand All @@ -91,56 +186,95 @@
"description": "Lakebase Postgres database for persistent storage",
"permission": "CAN_CONNECT_AND_CREATE",
"fields": {
"project": {
"description": "Full Lakebase Postgres project resource name. Obtain by running `databricks postgres list-projects`, select the desired item from the output array and use its .name value.",
"examples": [
"projects/{project-id}"
],
"discovery": {
"type": "kind",
"resourceKind": "postgres_project",
"select": "name"
},
"origin": "user"
},
"branch": {
"description": "Full Lakebase Postgres branch resource name. Obtain by running `databricks postgres list-branches projects/{project-id}`, select the desired item from the output array and use its .name value.",
"description": "Full Lakebase Postgres branch resource name. Obtain by running `databricks postgres list-branches {project-name}`, select the desired item from the output array and use its .name value. Requires the project resource name.",
"examples": [
"projects/{project-id}/branches/{branch-id}"
]
],
"discovery": {
"type": "kind",
"resourceKind": "postgres_branch",
"select": "name",
"dependsOn": "project"
},
"origin": "user"
},
"database": {
"description": "Full Lakebase Postgres database resource name. Obtain by running `databricks postgres list-databases {branch-name}`, select the desired item from the output array and use its .name value. Requires the branch resource name.",
"examples": [
"projects/{project-id}/branches/{branch-id}/databases/{database-id}"
]
],
"discovery": {
"type": "kind",
"resourceKind": "postgres_database",
"select": "name",
"dependsOn": "branch"
},
"origin": "user"
},
"host": {
"env": "PGHOST",
"description": "Postgres host for local development. Auto-injected by the platform at deploy time.",
"localOnly": true,
"resolve": "postgres:host",
"description": "Postgres host for local development. Auto-injected by the platform at deploy time."
"origin": "platform"
},
"databaseName": {
"env": "PGDATABASE",
"description": "Postgres database name for local development. Auto-injected by the platform at deploy time.",
"localOnly": true,
"resolve": "postgres:databaseName",
"description": "Postgres database name for local development. Auto-injected by the platform at deploy time."
"origin": "platform"
},
"endpointPath": {
"env": "LAKEBASE_ENDPOINT",
"bundleIgnore": true,
"resolve": "postgres:endpointPath",
"description": "Lakebase endpoint resource name. Auto-injected at runtime via app.yaml valueFrom: postgres. For local development, obtain by running `databricks postgres list-endpoints {branch-name}`, select the desired item from the output array and use its .name value.",
"bundleIgnore": true,
"examples": [
"projects/{project-id}/branches/{branch-id}/endpoints/{endpoint-id}"
]
],
"resolve": "postgres:endpointPath",
"origin": "cli"
},
"port": {
"env": "PGPORT",
"description": "Postgres port. Auto-injected by the platform at deploy time.",
"localOnly": true,
"value": "5432",
"description": "Postgres port. Auto-injected by the platform at deploy time."
"origin": "platform"
},
"sslmode": {
"env": "PGSSLMODE",
"description": "Postgres SSL mode. Auto-injected by the platform at deploy time.",
"localOnly": true,
"value": "require",
"description": "Postgres SSL mode. Auto-injected by the platform at deploy time."
"origin": "platform"
}
}
}
],
"optional": []
},
"scaffolding": {
"rules": {
"should": [
"After init, run any database migrations for your chosen ORM before first request",
"After init, verify Lakebase connectivity with 'psql $PGHOST -c \"select 1\"'"
]
}
},
"requiredByTemplate": true
},
"server": {
Expand All @@ -153,6 +287,90 @@
"optional": []
},
"requiredByTemplate": true
},
"serving": {
"name": "serving",
"displayName": "Model Serving Plugin",
"description": "Authenticated proxy to Databricks Model Serving endpoints",
"package": "@databricks/appkit",
"resources": {
"required": [
{
"type": "serving_endpoint",
"alias": "Serving Endpoint",
"resourceKey": "serving-endpoint",
"description": "Model Serving endpoint for inference",
"permission": "CAN_QUERY",
"fields": {
"name": {
"env": "DATABRICKS_SERVING_ENDPOINT_NAME",
"description": "Serving endpoint name",
"origin": "user"
}
}
}
],
"optional": []
}
}
},
"scaffolding": {
"command": "databricks apps init",
"flags": {
"--name": {
"description": "Project name — sets {{.projectName}} in package.json, databricks.yml, and .env. Required for non-interactive scaffolding.",
"required": true,
"pattern": "^[a-z][a-z0-9-]*$"
},
"--template": {
"description": "Template path (local directory or GitHub URL)",
"required": false
},
"--version": {
"description": "AppKit version to use; defaults to auto-detected",
"required": false
},
"--features": {
"description": "Plugins to enable (comma-separated, no spaces; must match keys in this manifest's plugins map)",
"required": false,
"pattern": "^[a-zA-Z0-9_-]+(,[a-zA-Z0-9_-]+)*$"
},
"--set": {
"description": "Set resource values (format: plugin.resourceKey.field=value, repeatable)",
"required": false
},
"--output-dir": {
"description": "Directory to write the project to",
"required": false
},
"--description": {
"description": "App description",
"required": false
},
"--run": {
"description": "Run the app after creation (none, dev, dev-remote)",
"required": false
},
"--auto-approve": {
"description": "Pass as a bare flag (no value) to skip prompts for optional resources. Not recommended for agent-driven init — conflicts with the 'ask user when in doubt' rule.",
"required": false
},
"--profile": {
"description": "Databricks CLI profile to use for authentication (global flag)",
"required": false
}
},
"rules": {
"must": [
"Keep all secrets and credentials only in app.yaml, databricks.yml, and/or .env"
],
"should": [
"ask user when in doubt of resource to use for plugin"
],
"never": [
"guess resources when multiple or no options are available",
"embed secrets in files that will go to the client-bundle"
]
}
}
}
Loading