@databricks/appkit-ui 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +4 -3
- package/dist/react/charts/area/index.d.ts +2 -2
- package/dist/react/charts/bar/index.d.ts +2 -2
- package/dist/react/charts/base.d.ts +2 -2
- package/dist/react/charts/base.d.ts.map +1 -1
- package/dist/react/charts/create-chart.d.ts +2 -2
- package/dist/react/charts/create-chart.d.ts.map +1 -1
- package/dist/react/charts/heatmap/index.d.ts +2 -2
- package/dist/react/charts/line/index.d.ts +2 -2
- package/dist/react/charts/options.d.ts.map +1 -1
- package/dist/react/charts/pie/index.d.ts +3 -3
- package/dist/react/charts/radar/index.d.ts +2 -2
- package/dist/react/charts/scatter/index.d.ts +2 -2
- package/dist/react/charts/wrapper.d.ts +2 -2
- package/dist/react/ui/accordion.d.ts +5 -5
- package/dist/react/ui/alert-dialog.d.ts +12 -12
- package/dist/react/ui/alert.d.ts +4 -4
- package/dist/react/ui/aspect-ratio.d.ts +2 -2
- package/dist/react/ui/avatar.d.ts +4 -4
- package/dist/react/ui/badge.d.ts +4 -4
- package/dist/react/ui/breadcrumb.d.ts +8 -8
- package/dist/react/ui/button-group.d.ts +6 -6
- package/dist/react/ui/button.d.ts +4 -4
- package/dist/react/ui/calendar.d.ts +3 -3
- package/dist/react/ui/card.d.ts +8 -8
- package/dist/react/ui/carousel.d.ts +6 -6
- package/dist/react/ui/chart.d.ts +5 -5
- package/dist/react/ui/checkbox.d.ts +2 -2
- package/dist/react/ui/collapsible.d.ts +4 -4
- package/dist/react/ui/command.d.ts +10 -10
- package/dist/react/ui/context-menu.d.ts +16 -16
- package/dist/react/ui/dialog.d.ts +11 -11
- package/dist/react/ui/dialog.d.ts.map +1 -1
- package/dist/react/ui/drawer.d.ts +11 -11
- package/dist/react/ui/drawer.d.ts.map +1 -1
- package/dist/react/ui/dropdown-menu.d.ts +16 -16
- package/dist/react/ui/empty.d.ts +7 -7
- package/dist/react/ui/field.d.ts +11 -11
- package/dist/react/ui/form.d.ts +7 -7
- package/dist/react/ui/hover-card.d.ts +4 -4
- package/dist/react/ui/input-group.d.ts +7 -7
- package/dist/react/ui/input-otp.d.ts +5 -5
- package/dist/react/ui/input.d.ts +2 -2
- package/dist/react/ui/item.d.ts +11 -11
- package/dist/react/ui/kbd.d.ts +3 -3
- package/dist/react/ui/label.d.ts +2 -2
- package/dist/react/ui/menubar.d.ts +17 -17
- package/dist/react/ui/navigation-menu.d.ts +9 -9
- package/dist/react/ui/pagination.d.ts +8 -8
- package/dist/react/ui/popover.d.ts +5 -5
- package/dist/react/ui/progress.d.ts +2 -2
- package/dist/react/ui/radio-group.d.ts +3 -3
- package/dist/react/ui/resizable.d.ts +4 -4
- package/dist/react/ui/scroll-area.d.ts +3 -3
- package/dist/react/ui/select.d.ts +11 -11
- package/dist/react/ui/separator.d.ts +2 -2
- package/dist/react/ui/sheet.d.ts +9 -9
- package/dist/react/ui/sidebar.d.ts +41 -24
- package/dist/react/ui/sidebar.d.ts.map +1 -1
- package/dist/react/ui/sidebar.js.map +1 -1
- package/dist/react/ui/skeleton.d.ts +2 -2
- package/dist/react/ui/slider.d.ts +2 -2
- package/dist/react/ui/sonner.d.ts +2 -2
- package/dist/react/ui/spinner.d.ts +2 -2
- package/dist/react/ui/switch.d.ts +2 -2
- package/dist/react/ui/table.d.ts +9 -9
- package/dist/react/ui/tabs.d.ts +5 -5
- package/dist/react/ui/textarea.d.ts +2 -2
- package/dist/react/ui/toggle-group.d.ts +3 -3
- package/dist/react/ui/toggle.d.ts +2 -2
- package/dist/react/ui/tooltip.d.ts +5 -5
- package/dist/react/ui/tooltip.d.ts.map +1 -1
- package/docs/api/appkit/Class.Plugin.md +20 -0
- package/docs/api/appkit/Function.createApp.md +29 -0
- package/docs/api/appkit-ui/ui/Sidebar.md +304 -37
- package/docs/app-management.md +1 -1
- package/docs/development/ai-assisted-development.md +63 -3
- package/docs/development/llm-guide.md +1 -1
- package/docs/development/local-development.md +2 -2
- package/docs/development/project-setup.md +8 -8
- package/docs/development/remote-bridge.md +1 -1
- package/docs/development/type-generation.md +1 -1
- package/docs/development.md +3 -3
- package/docs/plugins/analytics.md +104 -1
- package/docs/plugins/genie.md +162 -0
- package/docs/plugins/server.md +1 -1
- package/docs/plugins.md +2 -1
- package/docs.md +32 -1
- package/llms.txt +4 -3
- package/package.json +1 -1
|
@@ -21,11 +21,18 @@ await createApp({
|
|
|
21
21
|
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## Query files[](#query-files "Direct link to Query files")
|
|
25
25
|
|
|
26
26
|
* Put `.sql` files in `config/queries/`
|
|
27
27
|
* Query key is the filename without `.sql` (e.g. `spend_summary.sql` → `"spend_summary"`)
|
|
28
28
|
|
|
29
|
+
### Execution context[](#execution-context "Direct link to Execution context")
|
|
30
|
+
|
|
31
|
+
* `queryKey.sql` executes as **service principal** (shared cache)
|
|
32
|
+
* `queryKey.obo.sql` executes as **user** (OBO = on-behalf-of, per-user cache)
|
|
33
|
+
|
|
34
|
+
The execution context is determined by the SQL file name, not by the hook call.
|
|
35
|
+
|
|
29
36
|
## SQL parameters[](#sql-parameters "Direct link to SQL parameters")
|
|
30
37
|
|
|
31
38
|
Use `:paramName` placeholders and optionally annotate parameter types using SQL comments:
|
|
@@ -64,3 +71,99 @@ The analytics plugin exposes these endpoints (mounted under `/api/analytics`):
|
|
|
64
71
|
|
|
65
72
|
* `format: "JSON"` (default) returns JSON rows
|
|
66
73
|
* `format: "ARROW"` returns an Arrow "statement\_id" payload over SSE, then the client fetches binary Arrow from `/api/analytics/arrow-result/:jobId`
|
|
74
|
+
|
|
75
|
+
## Frontend usage[](#frontend-usage "Direct link to Frontend usage")
|
|
76
|
+
|
|
77
|
+
### useAnalyticsQuery[](#useanalyticsquery "Direct link to useAnalyticsQuery")
|
|
78
|
+
|
|
79
|
+
React hook that subscribes to an analytics query over SSE and returns its latest result.
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
import { useAnalyticsQuery } from "@databricks/appkit-ui/react";
|
|
83
|
+
|
|
84
|
+
const { data, loading, error } = useAnalyticsQuery(queryKey, parameters, options);
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Return type:**
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
{
|
|
92
|
+
data: T | null; // query result (typed array for JSON, TypedArrowTable for ARROW)
|
|
93
|
+
loading: boolean; // true while the query is executing
|
|
94
|
+
error: string | null; // error message, or null on success
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Options:**
|
|
100
|
+
|
|
101
|
+
| Option | Type | Default | Description |
|
|
102
|
+
| ------------------- | ------------------- | -------- | --------------------------------------- |
|
|
103
|
+
| `format` | `"JSON" \| "ARROW"` | `"JSON"` | Response format |
|
|
104
|
+
| `maxParametersSize` | `number` | `102400` | Max serialized parameters size in bytes |
|
|
105
|
+
| `autoStart` | `boolean` | `true` | Start query on mount |
|
|
106
|
+
|
|
107
|
+
**Example with loading/error/empty handling:**
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
import { useAnalyticsQuery } from "@databricks/appkit-ui/react";
|
|
111
|
+
import { sql } from "@databricks/appkit-ui/js";
|
|
112
|
+
import { Skeleton } from "@databricks/appkit-ui";
|
|
113
|
+
|
|
114
|
+
function SpendTable() {
|
|
115
|
+
const params = useMemo(() => ({
|
|
116
|
+
startDate: sql.date("2025-01-01"),
|
|
117
|
+
endDate: sql.date("2025-12-31"),
|
|
118
|
+
}), []);
|
|
119
|
+
|
|
120
|
+
const { data, loading, error } = useAnalyticsQuery("spend_summary", params);
|
|
121
|
+
|
|
122
|
+
if (loading) return <Skeleton className="h-32 w-full" />;
|
|
123
|
+
if (error) return <div className="text-destructive">{error}</div>;
|
|
124
|
+
if (!data?.length) return <div className="text-muted-foreground">No results</div>;
|
|
125
|
+
|
|
126
|
+
return (
|
|
127
|
+
<ul>
|
|
128
|
+
{data.map((row) => (
|
|
129
|
+
<li key={row.id}>{row.name}: ${row.cost_usd}</li>
|
|
130
|
+
))}
|
|
131
|
+
</ul>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Type-safe queries[](#type-safe-queries "Direct link to Type-safe queries")
|
|
138
|
+
|
|
139
|
+
Augment the `QueryRegistry` interface to get full type inference on parameters and results:
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
// config/appKitTypes.d.ts
|
|
143
|
+
declare module "@databricks/appkit-ui/react" {
|
|
144
|
+
interface QueryRegistry {
|
|
145
|
+
spend_summary: {
|
|
146
|
+
name: "spend_summary";
|
|
147
|
+
parameters: { startDate: string; endDate: string };
|
|
148
|
+
result: Array<{ id: string; name: string; cost_usd: number }>;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
See [Type generation](./docs/development/type-generation.md) for automatic generation from SQL files.
|
|
156
|
+
|
|
157
|
+
### Memoization[](#memoization "Direct link to Memoization")
|
|
158
|
+
|
|
159
|
+
**Always wrap parameters in `useMemo`** to avoid refetch loops. The hook re-executes whenever the parameters reference changes:
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
// Good
|
|
163
|
+
const params = useMemo(() => ({ status: sql.string("active") }), []);
|
|
164
|
+
const { data } = useAnalyticsQuery("users", params);
|
|
165
|
+
|
|
166
|
+
// Bad - creates a new object every render, causing infinite refetches
|
|
167
|
+
const { data } = useAnalyticsQuery("users", { status: sql.string("active") });
|
|
168
|
+
|
|
169
|
+
```
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Genie plugin
|
|
2
|
+
|
|
3
|
+
Integrates [Databricks AI/BI Genie](https://docs.databricks.com/en/genie/index.html) spaces into your AppKit application, enabling natural language data queries via a conversational interface.
|
|
4
|
+
|
|
5
|
+
**Key features:**
|
|
6
|
+
|
|
7
|
+
* Named space aliases for multiple Genie spaces
|
|
8
|
+
* SSE streaming with real-time status updates
|
|
9
|
+
* Conversation history replay with automatic reconnection
|
|
10
|
+
* Query result attachment fetching
|
|
11
|
+
* On-behalf-of (OBO) user execution
|
|
12
|
+
|
|
13
|
+
## Basic usage[](#basic-usage "Direct link to Basic usage")
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { createApp, genie, server } from "@databricks/appkit";
|
|
17
|
+
|
|
18
|
+
await createApp({
|
|
19
|
+
plugins: [
|
|
20
|
+
server(),
|
|
21
|
+
genie(),
|
|
22
|
+
],
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Configuration options[](#configuration-options "Direct link to Configuration options")
|
|
28
|
+
|
|
29
|
+
| Option | Type | Default | Description |
|
|
30
|
+
| --------- | ------------------------ | ---------------------------------------- | ------------------------------------------------ |
|
|
31
|
+
| `spaces` | `Record<string, string>` | `{ default: DATABRICKS_GENIE_SPACE_ID }` | Map of alias names to Genie Space IDs |
|
|
32
|
+
| `timeout` | `number` | `120000` | Polling timeout in ms. Set to `0` for indefinite |
|
|
33
|
+
|
|
34
|
+
### Space aliases[](#space-aliases "Direct link to Space aliases")
|
|
35
|
+
|
|
36
|
+
Space aliases let you reference multiple Genie spaces by name. The alias is used in API routes and the frontend `<GenieChat>` component:
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
genie({
|
|
40
|
+
spaces: {
|
|
41
|
+
sales: "01ABCDEF12345678",
|
|
42
|
+
support: "01GHIJKL87654321",
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
If you omit `spaces`, the plugin reads `DATABRICKS_GENIE_SPACE_ID` from the environment and registers it under the `default` alias.
|
|
49
|
+
|
|
50
|
+
## Environment variables[](#environment-variables "Direct link to Environment variables")
|
|
51
|
+
|
|
52
|
+
| Variable | Description |
|
|
53
|
+
| --------------------------- | ------------------------------------------------------------- |
|
|
54
|
+
| `DATABRICKS_GENIE_SPACE_ID` | Default Genie Space ID (used when `spaces` config is omitted) |
|
|
55
|
+
|
|
56
|
+
## HTTP endpoints[](#http-endpoints "Direct link to HTTP endpoints")
|
|
57
|
+
|
|
58
|
+
The genie plugin exposes these endpoints (mounted under `/api/genie`):
|
|
59
|
+
|
|
60
|
+
* `POST /api/genie/:alias/messages` — Send a message to a Genie space (SSE stream)
|
|
61
|
+
* `GET /api/genie/:alias/conversations/:conversationId` — Replay conversation history (SSE stream)
|
|
62
|
+
|
|
63
|
+
### Send a message[](#send-a-message "Direct link to Send a message")
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
POST /api/genie/:alias/messages
|
|
67
|
+
Content-Type: application/json
|
|
68
|
+
|
|
69
|
+
{
|
|
70
|
+
"content": "What were total sales last quarter?",
|
|
71
|
+
"conversationId": "optional-existing-conversation-id"
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The response is an SSE stream that emits these event types:
|
|
77
|
+
|
|
78
|
+
| Event type | Description |
|
|
79
|
+
| ---------------- | --------------------------------------------------------------- |
|
|
80
|
+
| `message_start` | Conversation and message IDs assigned |
|
|
81
|
+
| `status` | Processing status updates (e.g. `ASKING_AI`, `EXECUTING_QUERY`) |
|
|
82
|
+
| `message_result` | Final message with text and query attachments |
|
|
83
|
+
| `query_result` | Tabular data for a query attachment |
|
|
84
|
+
| `error` | Error details |
|
|
85
|
+
|
|
86
|
+
### Get conversation history[](#get-conversation-history "Direct link to Get conversation history")
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
GET /api/genie/:alias/conversations/:conversationId
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Returns an SSE stream of `message_result` and `query_result` events for all messages in the conversation.
|
|
94
|
+
|
|
95
|
+
## Programmatic access[](#programmatic-access "Direct link to Programmatic access")
|
|
96
|
+
|
|
97
|
+
The plugin exports `sendMessage` and `getConversation` for server-side use:
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
const AppKit = await createApp({
|
|
101
|
+
plugins: [server(), genie({ spaces: { demo: "space-id" } })],
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Stream events
|
|
105
|
+
for await (const event of AppKit.genie.sendMessage("demo", "Show revenue by region")) {
|
|
106
|
+
console.log(event.type, event);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Fetch full conversation
|
|
110
|
+
const history = await AppKit.genie.getConversation("demo", "conversation-id");
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Frontend components[](#frontend-components "Direct link to Frontend components")
|
|
115
|
+
|
|
116
|
+
The `@databricks/appkit-ui` package provides ready-to-use React components for Genie:
|
|
117
|
+
|
|
118
|
+
### GenieChat[](#geniechat "Direct link to GenieChat")
|
|
119
|
+
|
|
120
|
+
A full-featured chat interface that handles streaming, history, and reconnection:
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
import { GenieChat } from "@databricks/appkit-ui/react";
|
|
124
|
+
|
|
125
|
+
function GeniePage() {
|
|
126
|
+
return (
|
|
127
|
+
<div style={{ height: 600 }}>
|
|
128
|
+
<GenieChat alias="demo" />
|
|
129
|
+
</div>
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
The `alias` prop must match a key in the `spaces` configuration on the server.
|
|
136
|
+
|
|
137
|
+
### useGenieChat hook[](#usegeniechat-hook "Direct link to useGenieChat hook")
|
|
138
|
+
|
|
139
|
+
For custom chat UIs, use the `useGenieChat` hook directly:
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
import { useGenieChat } from "@databricks/appkit-ui/react";
|
|
143
|
+
|
|
144
|
+
function CustomChat() {
|
|
145
|
+
const { messages, status, sendMessage, reset } = useGenieChat({
|
|
146
|
+
alias: "demo",
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<>
|
|
151
|
+
{messages.map((msg) => (
|
|
152
|
+
<div key={msg.id}>{msg.content}</div>
|
|
153
|
+
))}
|
|
154
|
+
<button onClick={() => sendMessage("Show top customers")}>Ask</button>
|
|
155
|
+
<button onClick={reset}>New conversation</button>
|
|
156
|
+
</>
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
See the [GenieChat](./docs/api/appkit-ui/genie/GenieChat.md) component reference for the full props API.
|
package/docs/plugins/server.md
CHANGED
package/docs/plugins.md
CHANGED
|
@@ -9,12 +9,13 @@ For complete API documentation, see the [`Plugin`](./docs/api/appkit/Class.Plugi
|
|
|
9
9
|
Configure plugins when creating your AppKit instance:
|
|
10
10
|
|
|
11
11
|
```typescript
|
|
12
|
-
import { createApp, server, analytics } from "@databricks/appkit";
|
|
12
|
+
import { createApp, server, analytics, genie } from "@databricks/appkit";
|
|
13
13
|
|
|
14
14
|
const AppKit = await createApp({
|
|
15
15
|
plugins: [
|
|
16
16
|
server({ port: 8000 }),
|
|
17
17
|
analytics(),
|
|
18
|
+
genie(),
|
|
18
19
|
],
|
|
19
20
|
});
|
|
20
21
|
|
package/docs.md
CHANGED
|
@@ -21,7 +21,38 @@ AppKit simplifies building data applications on Databricks by providing:
|
|
|
21
21
|
* [Node.js](https://nodejs.org) v22+ environment with `npm`
|
|
22
22
|
* Databricks CLI (v0.287.0 or higher): install and configure it according to the [official tutorial](https://docs.databricks.com/aws/en/dev-tools/cli/tutorial).
|
|
23
23
|
|
|
24
|
-
## Quick start[](#quick-start "Direct link to Quick start")
|
|
24
|
+
## Quick start options[](#quick-start-options "Direct link to Quick start options")
|
|
25
|
+
|
|
26
|
+
There are two ways to get started with AppKit:
|
|
27
|
+
|
|
28
|
+
* **AI-assisted** (recommended): Use an AI coding assistant with Agent Skills to explore data, run CLI commands, and scaffold your app interactively.
|
|
29
|
+
* **Manual**: Use the Databricks CLI directly to create, bootstrap, and deploy your app.
|
|
30
|
+
|
|
31
|
+
Choose the path that best fits your workflow; both approaches produce the same kind of AppKit-based Databricks application.
|
|
32
|
+
|
|
33
|
+
## AI-first quick start[](#ai-first-quick-start "Direct link to AI-first quick start")
|
|
34
|
+
|
|
35
|
+
Databricks AppKit is designed to work with AI coding assistants through Agent Skills.
|
|
36
|
+
|
|
37
|
+
Install Agent Skills and configure it for use with your preferred AI assistant:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
databricks experimental aitools skills install
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Once configured for your development environment, you can use your AI assistant to create and deploy new Databricks applications, as well as to iteratively evolve your app's codebase.
|
|
45
|
+
|
|
46
|
+
Just prompt your AI assistant to create a new Databricks app, such as:
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
Create a new Databricks app that displays a dashboard of the nyc taxi trips dataset.
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
To learn more about the Agent Skills, see the [AI-assisted development](./docs/development/ai-assisted-development.md) documentation.
|
|
54
|
+
|
|
55
|
+
## Manual quick start[](#manual-quick-start "Direct link to Manual quick start")
|
|
25
56
|
|
|
26
57
|
Learn how to create and deploy a sample Databricks application that uses AppKit with the Databricks CLI.
|
|
27
58
|
|
package/llms.txt
CHANGED
|
@@ -26,14 +26,14 @@ npx @databricks/appkit docs <query>
|
|
|
26
26
|
- [Architecture](./docs/architecture.md): AppKit follows a plugin-based architecture designed for building production-ready Databricks applications. This document provides a high-level overview of the system components and their interactions.
|
|
27
27
|
- [Configuration](./docs/configuration.md): This guide covers environment variables and configuration options for AppKit applications.
|
|
28
28
|
- [Core principles](./docs/core-principles.md): Learn about the fundamental concepts and principles behind AppKit.
|
|
29
|
-
- [Development](./docs/development.md): AppKit provides multiple development workflows to suit different needs: local development with hot reload, AI-assisted development with
|
|
29
|
+
- [Development](./docs/development.md): AppKit provides multiple development workflows to suit different needs: local development with hot reload, AI-assisted development with Agent Skills, and remote tunneling to deployed backends.
|
|
30
30
|
- [Plugins](./docs/plugins.md): Plugins are modular extensions that add capabilities to your AppKit application. They follow a defined lifecycle and have access to shared services like caching, telemetry, and streaming.
|
|
31
31
|
|
|
32
32
|
## Development
|
|
33
33
|
|
|
34
|
-
- [AI-Assisted development](./docs/development/ai-assisted-development.md): AppKit
|
|
34
|
+
- [AI-Assisted development](./docs/development/ai-assisted-development.md): AppKit integrates with AI coding assistants through the Agent Skills.
|
|
35
35
|
- [LLM Guide](./docs/development/llm-guide.md): This document provides prescriptive guidance for AI coding assistants generating code with Databricks AppKit. It is intentionally opinionated to ensure consistent, production-ready code generation.
|
|
36
|
-
- [Local development](./docs/development/local-development.md): Once your app is bootstrapped according to the
|
|
36
|
+
- [Local development](./docs/development/local-development.md): Once your app is bootstrapped according to the Manual quick start guide, you can start the development server with hot reload for both UI and backend code.
|
|
37
37
|
- [Project setup](./docs/development/project-setup.md): This guide covers the recommended project structure and scaffolding for AppKit applications.
|
|
38
38
|
- [Remote Bridge](./docs/development/remote-bridge.md): Remote bridge allows you to develop against a deployed backend while keeping your UI and queries local. This is useful for testing against production data or debugging deployed backend code without redeploying your app.
|
|
39
39
|
- [Type generation](./docs/development/type-generation.md): AppKit can automatically generate TypeScript types for your SQL queries, providing end-to-end type safety from database to UI.
|
|
@@ -44,6 +44,7 @@ npx @databricks/appkit docs <query>
|
|
|
44
44
|
- [Caching](./docs/plugins/caching.md): AppKit provides both global and plugin-level caching capabilities.
|
|
45
45
|
- [Creating custom plugins](./docs/plugins/custom-plugins.md): If you need custom API routes or background logic, implement an AppKit plugin. The fastest way is to use the CLI:
|
|
46
46
|
- [Execution context](./docs/plugins/execution-context.md): AppKit manages Databricks authentication via two contexts:
|
|
47
|
+
- [Genie plugin](./docs/plugins/genie.md): Integrates Databricks AI/BI Genie spaces into your AppKit application, enabling natural language data queries via a conversational interface.
|
|
47
48
|
- [Lakebase plugin](./docs/plugins/lakebase.md): Currently, the Lakebase plugin currently requires a one-time manual setup to connect your Databricks App with your Lakebase database. An automated setup process is planned for an upcoming future release.
|
|
48
49
|
- [Plugin management](./docs/plugins/plugin-management.md): AppKit includes a CLI for managing plugins. All commands are available under npx @databricks/appkit plugin.
|
|
49
50
|
- [Server plugin](./docs/plugins/server.md): Provides HTTP server capabilities with development and production modes.
|