@databricks/appkit-ui 0.10.0 → 0.11.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.
Files changed (205) hide show
  1. package/CLAUDE.md +7 -0
  2. package/dist/cli/commands/plugin/sync/sync.js +6 -3
  3. package/dist/cli/commands/plugin/sync/sync.js.map +1 -1
  4. package/dist/cli/index.d.ts +1 -1
  5. package/dist/cli/index.js +1 -0
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/react/charts/area/index.d.ts +2 -2
  8. package/dist/react/charts/bar/index.d.ts +2 -2
  9. package/dist/react/charts/base.d.ts +2 -2
  10. package/dist/react/charts/create-chart.d.ts +2 -2
  11. package/dist/react/charts/heatmap/index.d.ts +2 -2
  12. package/dist/react/charts/line/index.d.ts +2 -2
  13. package/dist/react/charts/pie/index.d.ts +3 -3
  14. package/dist/react/charts/radar/index.d.ts +2 -2
  15. package/dist/react/charts/scatter/index.d.ts +2 -2
  16. package/dist/react/charts/wrapper.d.ts +2 -2
  17. package/dist/react/table/data-table.d.ts +2 -2
  18. package/dist/react/table/data-table.d.ts.map +1 -1
  19. package/dist/react/ui/calendar.d.ts +3 -3
  20. package/dist/react/ui/card.d.ts +8 -8
  21. package/dist/react/ui/carousel.d.ts +6 -6
  22. package/dist/react/ui/chart.d.ts +5 -5
  23. package/dist/react/ui/checkbox.d.ts +2 -2
  24. package/dist/react/ui/collapsible.d.ts +4 -4
  25. package/dist/react/ui/command.d.ts +10 -10
  26. package/dist/react/ui/context-menu.d.ts +16 -16
  27. package/dist/react/ui/dialog.d.ts +11 -11
  28. package/dist/react/ui/drawer.d.ts +11 -11
  29. package/dist/react/ui/dropdown-menu.d.ts +16 -16
  30. package/dist/react/ui/empty.d.ts +7 -7
  31. package/dist/react/ui/field.d.ts +11 -11
  32. package/dist/react/ui/form.d.ts +7 -7
  33. package/dist/react/ui/hover-card.d.ts +4 -4
  34. package/dist/react/ui/input-group.d.ts +7 -7
  35. package/dist/react/ui/input-otp.d.ts +5 -5
  36. package/dist/react/ui/input.d.ts +2 -2
  37. package/dist/react/ui/item.d.ts +11 -11
  38. package/dist/react/ui/kbd.d.ts +3 -3
  39. package/dist/react/ui/label.d.ts +2 -2
  40. package/dist/react/ui/menubar.d.ts +17 -17
  41. package/dist/react/ui/navigation-menu.d.ts +9 -9
  42. package/dist/react/ui/pagination.d.ts +8 -8
  43. package/dist/react/ui/popover.d.ts +5 -5
  44. package/dist/react/ui/progress.d.ts +2 -2
  45. package/dist/react/ui/radio-group.d.ts +3 -3
  46. package/dist/react/ui/resizable.d.ts +4 -4
  47. package/dist/react/ui/scroll-area.d.ts +3 -3
  48. package/dist/react/ui/select.d.ts +11 -11
  49. package/dist/react/ui/separator.d.ts +2 -2
  50. package/dist/react/ui/sheet.d.ts +9 -9
  51. package/dist/react/ui/sidebar.d.ts +24 -24
  52. package/dist/react/ui/skeleton.d.ts +2 -2
  53. package/dist/react/ui/slider.d.ts +2 -2
  54. package/dist/react/ui/sonner.d.ts +2 -2
  55. package/dist/react/ui/spinner.d.ts +2 -2
  56. package/dist/react/ui/switch.d.ts +2 -2
  57. package/dist/react/ui/table.d.ts +9 -9
  58. package/dist/react/ui/tabs.d.ts +5 -5
  59. package/dist/react/ui/textarea.d.ts +2 -2
  60. package/dist/react/ui/toggle-group.d.ts +3 -3
  61. package/dist/react/ui/toggle.d.ts +2 -2
  62. package/dist/schemas/plugin-manifest.schema.json +4 -0
  63. package/dist/schemas/template-plugins.schema.json +4 -0
  64. package/docs/docs/api/appkit/Class.AppKitError/index.html +3 -3
  65. package/docs/docs/api/appkit/Class.AuthenticationError/index.html +3 -3
  66. package/docs/docs/api/appkit/Class.ConfigurationError/index.html +3 -3
  67. package/docs/docs/api/appkit/Class.ConnectionError/index.html +3 -3
  68. package/docs/docs/api/appkit/Class.ExecutionError/index.html +3 -3
  69. package/docs/docs/api/appkit/Class.InitializationError/index.html +3 -3
  70. package/docs/docs/api/appkit/Class.Plugin/index.html +3 -3
  71. package/docs/docs/api/appkit/Class.ResourceRegistry/index.html +3 -3
  72. package/docs/docs/api/appkit/Class.ServerError/index.html +3 -3
  73. package/docs/docs/api/appkit/Class.TunnelError/index.html +3 -3
  74. package/docs/docs/api/appkit/Class.ValidationError/index.html +3 -3
  75. package/docs/docs/api/appkit/Enumeration.RequestedClaimsPermissionSet/index.html +3 -3
  76. package/docs/docs/api/appkit/Enumeration.ResourceType/index.html +3 -3
  77. package/docs/docs/api/appkit/Function.appKitTypesPlugin/index.html +3 -3
  78. package/docs/docs/api/appkit/Function.createApp/index.html +3 -3
  79. package/docs/docs/api/appkit/Function.createLakebasePool/index.html +3 -3
  80. package/docs/docs/api/appkit/Function.generateDatabaseCredential/index.html +3 -3
  81. package/docs/docs/api/appkit/Function.getExecutionContext/index.html +3 -3
  82. package/docs/docs/api/appkit/Function.getLakebaseOrmConfig/index.html +3 -3
  83. package/docs/docs/api/appkit/Function.getLakebasePgConfig/index.html +3 -3
  84. package/docs/docs/api/appkit/Function.getPluginManifest/index.html +3 -3
  85. package/docs/docs/api/appkit/Function.getResourceRequirements/index.html +3 -3
  86. package/docs/docs/api/appkit/Function.getUsernameWithApiLookup/index.html +3 -3
  87. package/docs/docs/api/appkit/Function.getWorkspaceClient/index.html +3 -3
  88. package/docs/docs/api/appkit/Function.isSQLTypeMarker/index.html +3 -3
  89. package/docs/docs/api/appkit/Interface.BasePluginConfig/index.html +3 -3
  90. package/docs/docs/api/appkit/Interface.CacheConfig/index.html +3 -3
  91. package/docs/docs/api/appkit/Interface.DatabaseCredential/index.html +3 -3
  92. package/docs/docs/api/appkit/Interface.GenerateDatabaseCredentialRequest/index.html +3 -3
  93. package/docs/docs/api/appkit/Interface.ITelemetry/index.html +3 -3
  94. package/docs/docs/api/appkit/Interface.LakebasePoolConfig/index.html +3 -3
  95. package/docs/docs/api/appkit/Interface.PluginManifest/index.html +3 -3
  96. package/docs/docs/api/appkit/Interface.RequestedClaims/index.html +3 -3
  97. package/docs/docs/api/appkit/Interface.RequestedResource/index.html +3 -3
  98. package/docs/docs/api/appkit/Interface.ResourceEntry/index.html +3 -3
  99. package/docs/docs/api/appkit/Interface.ResourceFieldEntry/index.html +3 -3
  100. package/docs/docs/api/appkit/Interface.ResourceRequirement/index.html +3 -3
  101. package/docs/docs/api/appkit/Interface.StreamExecutionSettings/index.html +3 -3
  102. package/docs/docs/api/appkit/Interface.TelemetryConfig/index.html +3 -3
  103. package/docs/docs/api/appkit/Interface.ValidationResult/index.html +3 -3
  104. package/docs/docs/api/appkit/TypeAlias.ConfigSchema/index.html +3 -3
  105. package/docs/docs/api/appkit/TypeAlias.IAppRouter/index.html +3 -3
  106. package/docs/docs/api/appkit/TypeAlias.ResourcePermission/index.html +3 -3
  107. package/docs/docs/api/appkit/TypeAlias.ToPlugin/index.html +3 -3
  108. package/docs/docs/api/appkit/Variable.sql/index.html +3 -3
  109. package/docs/docs/api/appkit/index.html +3 -3
  110. package/docs/docs/api/appkit-ui/data/AreaChart/index.html +3 -3
  111. package/docs/docs/api/appkit-ui/data/BarChart/index.html +3 -3
  112. package/docs/docs/api/appkit-ui/data/DataTable/index.html +3 -3
  113. package/docs/docs/api/appkit-ui/data/DonutChart/index.html +3 -3
  114. package/docs/docs/api/appkit-ui/data/HeatmapChart/index.html +3 -3
  115. package/docs/docs/api/appkit-ui/data/LineChart/index.html +3 -3
  116. package/docs/docs/api/appkit-ui/data/PieChart/index.html +3 -3
  117. package/docs/docs/api/appkit-ui/data/RadarChart/index.html +3 -3
  118. package/docs/docs/api/appkit-ui/data/ScatterChart/index.html +3 -3
  119. package/docs/docs/api/appkit-ui/index.html +3 -3
  120. package/docs/docs/api/appkit-ui/styling/index.html +3 -3
  121. package/docs/docs/api/appkit-ui/ui/Accordion/index.html +3 -3
  122. package/docs/docs/api/appkit-ui/ui/Alert/index.html +3 -3
  123. package/docs/docs/api/appkit-ui/ui/AlertDialog/index.html +3 -3
  124. package/docs/docs/api/appkit-ui/ui/AspectRatio/index.html +3 -3
  125. package/docs/docs/api/appkit-ui/ui/Avatar/index.html +3 -3
  126. package/docs/docs/api/appkit-ui/ui/Badge/index.html +3 -3
  127. package/docs/docs/api/appkit-ui/ui/Breadcrumb/index.html +3 -3
  128. package/docs/docs/api/appkit-ui/ui/Button/index.html +3 -3
  129. package/docs/docs/api/appkit-ui/ui/ButtonGroup/index.html +3 -3
  130. package/docs/docs/api/appkit-ui/ui/Calendar/index.html +3 -3
  131. package/docs/docs/api/appkit-ui/ui/Card/index.html +3 -3
  132. package/docs/docs/api/appkit-ui/ui/Carousel/index.html +3 -3
  133. package/docs/docs/api/appkit-ui/ui/ChartContainer/index.html +3 -3
  134. package/docs/docs/api/appkit-ui/ui/Checkbox/index.html +3 -3
  135. package/docs/docs/api/appkit-ui/ui/Collapsible/index.html +3 -3
  136. package/docs/docs/api/appkit-ui/ui/Command/index.html +3 -3
  137. package/docs/docs/api/appkit-ui/ui/ContextMenu/index.html +3 -3
  138. package/docs/docs/api/appkit-ui/ui/Dialog/index.html +3 -3
  139. package/docs/docs/api/appkit-ui/ui/Drawer/index.html +3 -3
  140. package/docs/docs/api/appkit-ui/ui/DropdownMenu/index.html +3 -3
  141. package/docs/docs/api/appkit-ui/ui/Empty/index.html +3 -3
  142. package/docs/docs/api/appkit-ui/ui/Field/index.html +3 -3
  143. package/docs/docs/api/appkit-ui/ui/FormControl/index.html +3 -3
  144. package/docs/docs/api/appkit-ui/ui/HoverCard/index.html +3 -3
  145. package/docs/docs/api/appkit-ui/ui/Input/index.html +3 -3
  146. package/docs/docs/api/appkit-ui/ui/InputGroup/index.html +3 -3
  147. package/docs/docs/api/appkit-ui/ui/InputOTP/index.html +3 -3
  148. package/docs/docs/api/appkit-ui/ui/Item/index.html +3 -3
  149. package/docs/docs/api/appkit-ui/ui/Kbd/index.html +3 -3
  150. package/docs/docs/api/appkit-ui/ui/Label/index.html +3 -3
  151. package/docs/docs/api/appkit-ui/ui/Menubar/index.html +3 -3
  152. package/docs/docs/api/appkit-ui/ui/NavigationMenu/index.html +3 -3
  153. package/docs/docs/api/appkit-ui/ui/Pagination/index.html +3 -3
  154. package/docs/docs/api/appkit-ui/ui/Popover/index.html +3 -3
  155. package/docs/docs/api/appkit-ui/ui/Progress/index.html +3 -3
  156. package/docs/docs/api/appkit-ui/ui/RadioGroup/index.html +3 -3
  157. package/docs/docs/api/appkit-ui/ui/ResizableHandle/index.html +3 -3
  158. package/docs/docs/api/appkit-ui/ui/ScrollArea/index.html +3 -3
  159. package/docs/docs/api/appkit-ui/ui/Select/index.html +3 -3
  160. package/docs/docs/api/appkit-ui/ui/Separator/index.html +3 -3
  161. package/docs/docs/api/appkit-ui/ui/Sheet/index.html +3 -3
  162. package/docs/docs/api/appkit-ui/ui/Sidebar/index.html +3 -3
  163. package/docs/docs/api/appkit-ui/ui/Skeleton/index.html +3 -3
  164. package/docs/docs/api/appkit-ui/ui/Slider/index.html +3 -3
  165. package/docs/docs/api/appkit-ui/ui/Spinner/index.html +3 -3
  166. package/docs/docs/api/appkit-ui/ui/Switch/index.html +3 -3
  167. package/docs/docs/api/appkit-ui/ui/Table/index.html +3 -3
  168. package/docs/docs/api/appkit-ui/ui/Tabs/index.html +3 -3
  169. package/docs/docs/api/appkit-ui/ui/Textarea/index.html +3 -3
  170. package/docs/docs/api/appkit-ui/ui/Toaster/index.html +3 -3
  171. package/docs/docs/api/appkit-ui/ui/Toggle/index.html +3 -3
  172. package/docs/docs/api/appkit-ui/ui/ToggleGroup/index.html +3 -3
  173. package/docs/docs/api/appkit-ui/ui/Tooltip/index.html +3 -3
  174. package/docs/docs/api/index.html +3 -3
  175. package/docs/docs/app-management/index.html +4 -4
  176. package/docs/docs/architecture/index.html +6 -6
  177. package/docs/docs/category/development/index.html +3 -3
  178. package/docs/docs/configuration/index.html +4 -4
  179. package/docs/docs/core-principles/index.html +3 -3
  180. package/docs/docs/development/ai-assisted-development/index.html +3 -3
  181. package/docs/docs/development/index.html +3 -3
  182. package/docs/docs/development/llm-guide/index.html +3 -3
  183. package/docs/docs/development/local-development/index.html +3 -3
  184. package/docs/docs/development/project-setup/index.html +4 -4
  185. package/docs/docs/development/remote-bridge/index.html +3 -3
  186. package/docs/docs/development/type-generation/index.html +4 -4
  187. package/docs/docs/index.html +3 -3
  188. package/docs/docs/plugins/analytics/index.html +53 -0
  189. package/docs/docs/plugins/analytics.md +66 -0
  190. package/docs/docs/plugins/caching/index.html +23 -0
  191. package/docs/docs/plugins/caching.md +33 -0
  192. package/docs/docs/plugins/custom-plugins/index.html +49 -0
  193. package/docs/docs/plugins/custom-plugins.md +161 -0
  194. package/docs/docs/plugins/execution-context/index.html +40 -0
  195. package/docs/docs/plugins/execution-context.md +45 -0
  196. package/docs/docs/plugins/index.html +6 -173
  197. package/docs/docs/plugins/lakebase/index.html +62 -0
  198. package/docs/docs/plugins/lakebase.md +179 -0
  199. package/docs/docs/plugins/plugin-management/index.html +44 -0
  200. package/docs/docs/plugins/plugin-management.md +88 -0
  201. package/docs/docs/plugins/server/index.html +45 -0
  202. package/docs/docs/plugins/server.md +78 -0
  203. package/docs/docs/plugins.md +0 -481
  204. package/llms.txt +7 -0
  205. package/package.json +1 -1
@@ -0,0 +1,88 @@
1
+ # Plugin management
2
+
3
+ AppKit includes a CLI for managing plugins. All commands are available under `npx @databricks/appkit plugin`.
4
+
5
+ ## Create a plugin[​](#create-a-plugin "Direct link to Create a plugin")
6
+
7
+ Scaffold a new plugin interactively:
8
+
9
+ ```bash
10
+ npx @databricks/appkit plugin create
11
+
12
+ ```
13
+
14
+ The wizard walks you through:
15
+
16
+ * **Placement**: In your repository (e.g. `plugins/my-plugin`) or as a standalone package
17
+ * **Metadata**: Name, display name, description
18
+ * **Resources**: Which Databricks resources the plugin needs (SQL Warehouse, Secret, etc.) and whether each is required or optional
19
+ * **Optional fields**: Author, version, license
20
+
21
+ The command generates a complete plugin scaffold with `manifest.json`, TypeScript class, and barrel exports — ready to register in your app.
22
+
23
+ ## Sync plugin manifests[​](#sync-plugin-manifests "Direct link to Sync plugin manifests")
24
+
25
+ Scan your project for plugins and generate `appkit.plugins.json`:
26
+
27
+ ```bash
28
+ npx @databricks/appkit plugin sync --write
29
+
30
+ ```
31
+
32
+ This discovers plugin manifests from installed packages and local imports, then writes a consolidated manifest used by deployment tooling. Plugins referenced in your `createApp({ plugins: [...] })` call are automatically marked as required.
33
+
34
+ Use the `--silent` flag in build hooks to suppress output:
35
+
36
+ ```json
37
+ {
38
+ "scripts": {
39
+ "sync": "appkit plugin sync --write --silent",
40
+ "predev": "npm run sync",
41
+ "prebuild": "npm run sync"
42
+ }
43
+ }
44
+
45
+ ```
46
+
47
+ ## Validate manifests[​](#validate-manifests "Direct link to Validate manifests")
48
+
49
+ Check plugin manifests against the JSON schema:
50
+
51
+ ```bash
52
+ # Validate manifest.json in the current directory
53
+ npx @databricks/appkit plugin validate
54
+
55
+ # Validate specific files or directories
56
+ npx @databricks/appkit plugin validate plugins/my-plugin appkit.plugins.json
57
+
58
+ ```
59
+
60
+ The validator auto-detects whether a file is a plugin manifest or a template manifest (from `$schema`) and reports errors with humanized paths and expected values.
61
+
62
+ ## List plugins[​](#list-plugins "Direct link to List plugins")
63
+
64
+ View registered plugins from `appkit.plugins.json` or scan a directory:
65
+
66
+ ```bash
67
+ # From appkit.plugins.json (default)
68
+ npx @databricks/appkit plugin list
69
+
70
+ # Scan a directory for plugin folders
71
+ npx @databricks/appkit plugin list --dir plugins/
72
+
73
+ # JSON output for scripting
74
+ npx @databricks/appkit plugin list --json
75
+
76
+ ```
77
+
78
+ ## Add a resource to a plugin[​](#add-a-resource-to-a-plugin "Direct link to Add a resource to a plugin")
79
+
80
+ Interactively add a new resource requirement to an existing plugin manifest:
81
+
82
+ ```bash
83
+ npx @databricks/appkit plugin add-resource
84
+
85
+ # Or specify the plugin directory
86
+ npx @databricks/appkit plugin add-resource --path plugins/my-plugin
87
+
88
+ ```
@@ -0,0 +1,45 @@
1
+ <!doctype html>
2
+ <html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-plugins/server" data-has-hydrated="false">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="generator" content="Docusaurus v3.9.2">
6
+ <title data-rh="true">Server plugin | AppKit</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://databricks.github.io/appkit/docs/plugins/server"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="keywords" content="Databricks Apps, Node.js, React.js, SDK, TypeScript, SQL, Databricks, AI, full-stack, development"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Server plugin | AppKit"><meta data-rh="true" name="description" content="Provides HTTP server capabilities with development and production modes."><meta data-rh="true" property="og:description" content="Provides HTTP server capabilities with development and production modes."><link data-rh="true" rel="icon" href="/appkit/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://databricks.github.io/appkit/docs/plugins/server"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/plugins/server" hreflang="en"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/plugins/server" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Plugins","item":"https://databricks.github.io/appkit/docs/plugins/"},{"@type":"ListItem","position":2,"name":"Server plugin","item":"https://databricks.github.io/appkit/docs/plugins/server"}]}</script><link rel="stylesheet" href="/appkit/assets/css/styles.36a38b99.css">
7
+ <script src="/appkit/assets/js/runtime~main.d646887d.js" defer="defer"></script>
8
+ <script src="/appkit/assets/js/main.83fa168f.js" defer="defer"></script>
9
+ </head>
10
+ <body class="navigation-with-keyboard">
11
+ <svg style="display: none;"><defs>
12
+ <symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
13
+ </defs></svg>
14
+ <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus"><link rel="preload" as="image" href="/appkit/img/logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_R3I2" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="theme-announcement-bar announcementBar_Upl7" style="background-color:#f0f0f0;color:#000000" role="banner"><div class="announcementBarPlaceholder_Lvio"></div><div class="content_vq0X announcementBarContent_FIMQ">⚠️ AppKit is in an early development phase and is subject to change without notice. <strong>DO NOT</strong> use in production environments.</div><button type="button" aria-label="Close" class="clean-btn close closeButton_J8WU announcementBarClose_jD94"><svg viewBox="0 0 15 15" width="14" height="14"><g stroke="currentColor" stroke-width="3.1"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></button></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/appkit/"><div class="navbar__logo"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--light_BgK8"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--dark_RKPt"></div><b class="navbar__title text--truncate">AppKit</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/appkit/docs/">Documentation</a><a class="navbar__item navbar__link" href="/appkit/contributing">Contributing</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_eFYw colorModeToggle_EPbi"><button class="clean-btn toggleButton_HRKp toggleButtonDisabled_bICu" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO lightToggleIcon_vxPA"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO darkToggleIcon_PZNO"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO systemToggleIcon_A7x6"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_cVhq"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper__Y_W"><div class="docsWrapper_cIfN"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_xQFv" type="button"></button><div class="docRoot_FHtD"><aside class="theme-doc-sidebar-container docSidebarContainer_dvCd"><div class="sidebarViewport_GeRf"><div class="sidebar_T8N1"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_uyE9 menuWithAnnouncementBar_Bucd"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/"><span title="Getting started" class="linkLabel_hZzm">Getting started</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/app-management"><span title="App management" class="linkLabel_hZzm">App management</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist menu__link--active" href="/appkit/docs/plugins/"><span title="Plugins" class="categoryLinkLabel_ShmP">Plugins</span></a><button aria-label="Collapse sidebar category &#x27;Plugins&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/appkit/docs/plugins/server"><span title="Server plugin" class="linkLabel_hZzm">Server plugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/plugins/analytics"><span title="Analytics plugin" class="linkLabel_hZzm">Analytics plugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/plugins/lakebase"><span title="Lakebase plugin" class="linkLabel_hZzm">Lakebase plugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/plugins/execution-context"><span title="Execution context" class="linkLabel_hZzm">Execution context</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/plugins/plugin-management"><span title="Plugin management" class="linkLabel_hZzm">Plugin management</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/plugins/custom-plugins"><span title="Creating custom plugins" class="linkLabel_hZzm">Creating custom plugins</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/plugins/caching"><span title="Caching" class="linkLabel_hZzm">Caching</span></a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/architecture"><span title="Architecture" class="linkLabel_hZzm">Architecture</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/configuration"><span title="Configuration" class="linkLabel_hZzm">Configuration</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" href="/appkit/docs/category/development"><span title="Development" class="categoryLinkLabel_ShmP">Development</span></a><button aria-label="Collapse sidebar category &#x27;Development&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/local-development"><span title="Local development" class="linkLabel_hZzm">Local development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/ai-assisted-development"><span title="AI-Assisted development" class="linkLabel_hZzm">AI-Assisted development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/"><span title="Development" class="linkLabel_hZzm">Development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/remote-bridge"><span title="Remote Bridge" class="linkLabel_hZzm">Remote Bridge</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/project-setup"><span title="Project setup" class="linkLabel_hZzm">Project setup</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/type-generation"><span title="Type generation" class="linkLabel_hZzm">Type generation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/llm-guide"><span title="LLM Guide" class="linkLabel_hZzm">LLM Guide</span></a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/core-principles"><span title="Core principles" class="linkLabel_hZzm">Core principles</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" href="/appkit/docs/api/"><span title="API reference" class="categoryLinkLabel_ShmP">API reference</span></a><button aria-label="Expand sidebar category &#x27;API reference&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li></ul></nav></div></div></aside><main class="docMainContainer_P5br"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_poBZ"><div class="docItemContainer_TdBg"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_bEIa" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/appkit/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_sma7"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/appkit/docs/plugins/"><span>Plugins</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">Server plugin</span></li></ul></nav><div class="tocCollapsible_gJxE theme-doc-toc-mobile tocMobile_ZHYV"><button type="button" class="clean-btn tocCollapsibleButton_uxuR">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Server plugin</h1></header>
15
+ <p>Provides HTTP server capabilities with development and production modes.</p>
16
+ <p><strong>Key features:</strong></p>
17
+ <ul>
18
+ <li class="">Express server for REST APIs</li>
19
+ <li class="">Vite dev server with hot module reload</li>
20
+ <li class="">Static file serving for production</li>
21
+ <li class="">Remote tunneling to deployed backends</li>
22
+ </ul>
23
+ <p>The Server plugin uses the deferred initialization phase to access routes from other plugins.</p>
24
+ <h2 class="anchor anchorTargetStickyNavbar_scV4" id="what-it-does">What it does<a href="#what-it-does" class="hash-link" aria-label="Direct link to What it does" title="Direct link to What it does" translate="no">​</a></h2>
25
+ <ul>
26
+ <li class="">Starts an Express server (default <code>host=0.0.0.0</code>, <code>port=8000</code>)</li>
27
+ <li class="">Mounts plugin routes under <code>/api/&lt;pluginName&gt;/...</code></li>
28
+ <li class="">Adds <code>/health</code> endpoint (returns <code>{ status: &quot;ok&quot; }</code>)</li>
29
+ <li class="">Serves frontend:<!-- -->
30
+ <ul>
31
+ <li class=""><strong>Development</strong> (<code>NODE_ENV=development</code>): runs a Vite dev server in middleware mode</li>
32
+ <li class=""><strong>Production</strong>: auto-detects static frontend directory (checks <code>dist</code>, <code>client/dist</code>, <code>build</code>, <code>public</code>, <code>out</code>)</li>
33
+ </ul>
34
+ </li>
35
+ </ul>
36
+ <h2 class="anchor anchorTargetStickyNavbar_scV4" id="minimal-server-example">Minimal server example<a href="#minimal-server-example" class="hash-link" aria-label="Direct link to Minimal server example" title="Direct link to Minimal server example" translate="no">​</a></h2>
37
+ <p>The smallest valid AppKit server:</p>
38
+ <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token comment" style="color:rgb(0, 128, 0)">// server/index.ts</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token keyword" style="color:rgb(0, 0, 255)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"> createApp</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> server </span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">&quot;@databricks/appkit&quot;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token keyword" style="color:rgb(0, 0, 255)">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(0, 0, 255)">createApp</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> plugins</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">[</span><span class="token function" style="color:rgb(0, 0, 255)">server</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">]</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
39
+ <h2 class="anchor anchorTargetStickyNavbar_scV4" id="manual-server-start-example">Manual server start example<a href="#manual-server-start-example" class="hash-link" aria-label="Direct link to Manual server start example" title="Direct link to Manual server start example" translate="no">​</a></h2>
40
+ <p>When you need to extend Express with custom routes:</p>
41
+ <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token keyword" style="color:rgb(0, 0, 255)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"> createApp</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> server </span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">&quot;@databricks/appkit&quot;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token keyword" style="color:rgb(0, 0, 255)">const</span><span class="token plain"> appkit </span><span class="token operator" style="color:rgb(0, 0, 0)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(0, 0, 255)">createApp</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> plugins</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">[</span><span class="token function" style="color:rgb(0, 0, 255)">server</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"> autoStart</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">]</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain">appkit</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">server</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">extend</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">app</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> app</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">get</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token string" style="color:rgb(163, 21, 21)">&quot;/custom&quot;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token plain">_req</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">=&gt;</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">json</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"> ok</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token keyword" style="color:rgb(0, 0, 255)">await</span><span class="token plain"> appkit</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">server</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">start</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
42
+ <h2 class="anchor anchorTargetStickyNavbar_scV4" id="configuration-options">Configuration options<a href="#configuration-options" class="hash-link" aria-label="Direct link to Configuration options" title="Direct link to Configuration options" translate="no">​</a></h2>
43
+ <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token keyword" style="color:rgb(0, 0, 255)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"> createApp</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> server </span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">&quot;@databricks/appkit&quot;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token keyword" style="color:rgb(0, 0, 255)">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(0, 0, 255)">createApp</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> plugins</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token function" style="color:rgb(0, 0, 255)">server</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> port</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(9, 134, 88)">8000</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(0, 128, 0)">// default: Number(process.env.DATABRICKS_APP_PORT) || 8000</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> host</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">&quot;0.0.0.0&quot;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(0, 128, 0)">// default: process.env.FLASK_RUN_HOST || &quot;0.0.0.0&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> autoStart</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(0, 128, 0)">// default: true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> staticPath</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">&quot;dist&quot;</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(0, 128, 0)">// optional: force a specific static directory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(4, 81, 165)">]</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_Z6Q_"><a href="https://github.com/databricks/appkit/edit/main/docs/docs/plugins/server.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_kMm5" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_mnLK"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/appkit/docs/plugins/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Plugins</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/appkit/docs/plugins/analytics"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Analytics plugin</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_xfIk thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#what-it-does" class="table-of-contents__link toc-highlight">What it does</a></li><li><a href="#minimal-server-example" class="table-of-contents__link toc-highlight">Minimal server example</a></li><li><a href="#manual-server-start-example" class="table-of-contents__link toc-highlight">Manual server start example</a></li><li><a href="#configuration-options" class="table-of-contents__link toc-highlight">Configuration options</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/api/">API reference</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/contributing">Contributing</a></li><li class="footer__item"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://docs.databricks.com/aws/en/dev-tools/databricks-apps/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks Apps docs<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/databricks/cli" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks CLI<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 Databricks, Inc.</div></div></div></footer></div>
44
+ </body>
45
+ </html>
@@ -0,0 +1,78 @@
1
+ # Server plugin
2
+
3
+ Provides HTTP server capabilities with development and production modes.
4
+
5
+ **Key features:**
6
+
7
+ * Express server for REST APIs
8
+ * Vite dev server with hot module reload
9
+ * Static file serving for production
10
+ * Remote tunneling to deployed backends
11
+
12
+ The Server plugin uses the deferred initialization phase to access routes from other plugins.
13
+
14
+ ## What it does[​](#what-it-does "Direct link to What it does")
15
+
16
+ * Starts an Express server (default `host=0.0.0.0`, `port=8000`)
17
+
18
+ * Mounts plugin routes under `/api/<pluginName>/...`
19
+
20
+ * Adds `/health` endpoint (returns `{ status: "ok" }`)
21
+
22
+ * Serves frontend:
23
+
24
+ <!-- -->
25
+
26
+ * **Development** (`NODE_ENV=development`): runs a Vite dev server in middleware mode
27
+ * **Production**: auto-detects static frontend directory (checks `dist`, `client/dist`, `build`, `public`, `out`)
28
+
29
+ ## Minimal server example[​](#minimal-server-example "Direct link to Minimal server example")
30
+
31
+ The smallest valid AppKit server:
32
+
33
+ ```ts
34
+ // server/index.ts
35
+ import { createApp, server } from "@databricks/appkit";
36
+
37
+ await createApp({
38
+ plugins: [server()],
39
+ });
40
+
41
+ ```
42
+
43
+ ## Manual server start example[​](#manual-server-start-example "Direct link to Manual server start example")
44
+
45
+ When you need to extend Express with custom routes:
46
+
47
+ ```ts
48
+ import { createApp, server } from "@databricks/appkit";
49
+
50
+ const appkit = await createApp({
51
+ plugins: [server({ autoStart: false })],
52
+ });
53
+
54
+ appkit.server.extend((app) => {
55
+ app.get("/custom", (_req, res) => res.json({ ok: true }));
56
+ });
57
+
58
+ await appkit.server.start();
59
+
60
+ ```
61
+
62
+ ## Configuration options[​](#configuration-options "Direct link to Configuration options")
63
+
64
+ ```ts
65
+ import { createApp, server } from "@databricks/appkit";
66
+
67
+ await createApp({
68
+ plugins: [
69
+ server({
70
+ port: 8000, // default: Number(process.env.DATABRICKS_APP_PORT) || 8000
71
+ host: "0.0.0.0", // default: process.env.FLASK_RUN_HOST || "0.0.0.0"
72
+ autoStart: true, // default: true
73
+ staticPath: "dist", // optional: force a specific static directory
74
+ }),
75
+ ],
76
+ });
77
+
78
+ ```