@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.
- package/CLAUDE.md +7 -0
- package/dist/cli/commands/plugin/sync/sync.js +6 -3
- package/dist/cli/commands/plugin/sync/sync.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- 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/create-chart.d.ts +2 -2
- package/dist/react/charts/heatmap/index.d.ts +2 -2
- package/dist/react/charts/line/index.d.ts +2 -2
- 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/table/data-table.d.ts +2 -2
- package/dist/react/table/data-table.d.ts.map +1 -1
- 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/drawer.d.ts +11 -11
- 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 +24 -24
- 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/schemas/plugin-manifest.schema.json +4 -0
- package/dist/schemas/template-plugins.schema.json +4 -0
- package/docs/docs/api/appkit/Class.AppKitError/index.html +3 -3
- package/docs/docs/api/appkit/Class.AuthenticationError/index.html +3 -3
- package/docs/docs/api/appkit/Class.ConfigurationError/index.html +3 -3
- package/docs/docs/api/appkit/Class.ConnectionError/index.html +3 -3
- package/docs/docs/api/appkit/Class.ExecutionError/index.html +3 -3
- package/docs/docs/api/appkit/Class.InitializationError/index.html +3 -3
- package/docs/docs/api/appkit/Class.Plugin/index.html +3 -3
- package/docs/docs/api/appkit/Class.ResourceRegistry/index.html +3 -3
- package/docs/docs/api/appkit/Class.ServerError/index.html +3 -3
- package/docs/docs/api/appkit/Class.TunnelError/index.html +3 -3
- package/docs/docs/api/appkit/Class.ValidationError/index.html +3 -3
- package/docs/docs/api/appkit/Enumeration.RequestedClaimsPermissionSet/index.html +3 -3
- package/docs/docs/api/appkit/Enumeration.ResourceType/index.html +3 -3
- package/docs/docs/api/appkit/Function.appKitTypesPlugin/index.html +3 -3
- package/docs/docs/api/appkit/Function.createApp/index.html +3 -3
- package/docs/docs/api/appkit/Function.createLakebasePool/index.html +3 -3
- package/docs/docs/api/appkit/Function.generateDatabaseCredential/index.html +3 -3
- package/docs/docs/api/appkit/Function.getExecutionContext/index.html +3 -3
- package/docs/docs/api/appkit/Function.getLakebaseOrmConfig/index.html +3 -3
- package/docs/docs/api/appkit/Function.getLakebasePgConfig/index.html +3 -3
- package/docs/docs/api/appkit/Function.getPluginManifest/index.html +3 -3
- package/docs/docs/api/appkit/Function.getResourceRequirements/index.html +3 -3
- package/docs/docs/api/appkit/Function.getUsernameWithApiLookup/index.html +3 -3
- package/docs/docs/api/appkit/Function.getWorkspaceClient/index.html +3 -3
- package/docs/docs/api/appkit/Function.isSQLTypeMarker/index.html +3 -3
- package/docs/docs/api/appkit/Interface.BasePluginConfig/index.html +3 -3
- package/docs/docs/api/appkit/Interface.CacheConfig/index.html +3 -3
- package/docs/docs/api/appkit/Interface.DatabaseCredential/index.html +3 -3
- package/docs/docs/api/appkit/Interface.GenerateDatabaseCredentialRequest/index.html +3 -3
- package/docs/docs/api/appkit/Interface.ITelemetry/index.html +3 -3
- package/docs/docs/api/appkit/Interface.LakebasePoolConfig/index.html +3 -3
- package/docs/docs/api/appkit/Interface.PluginManifest/index.html +3 -3
- package/docs/docs/api/appkit/Interface.RequestedClaims/index.html +3 -3
- package/docs/docs/api/appkit/Interface.RequestedResource/index.html +3 -3
- package/docs/docs/api/appkit/Interface.ResourceEntry/index.html +3 -3
- package/docs/docs/api/appkit/Interface.ResourceFieldEntry/index.html +3 -3
- package/docs/docs/api/appkit/Interface.ResourceRequirement/index.html +3 -3
- package/docs/docs/api/appkit/Interface.StreamExecutionSettings/index.html +3 -3
- package/docs/docs/api/appkit/Interface.TelemetryConfig/index.html +3 -3
- package/docs/docs/api/appkit/Interface.ValidationResult/index.html +3 -3
- package/docs/docs/api/appkit/TypeAlias.ConfigSchema/index.html +3 -3
- package/docs/docs/api/appkit/TypeAlias.IAppRouter/index.html +3 -3
- package/docs/docs/api/appkit/TypeAlias.ResourcePermission/index.html +3 -3
- package/docs/docs/api/appkit/TypeAlias.ToPlugin/index.html +3 -3
- package/docs/docs/api/appkit/Variable.sql/index.html +3 -3
- package/docs/docs/api/appkit/index.html +3 -3
- package/docs/docs/api/appkit-ui/data/AreaChart/index.html +3 -3
- package/docs/docs/api/appkit-ui/data/BarChart/index.html +3 -3
- package/docs/docs/api/appkit-ui/data/DataTable/index.html +3 -3
- package/docs/docs/api/appkit-ui/data/DonutChart/index.html +3 -3
- package/docs/docs/api/appkit-ui/data/HeatmapChart/index.html +3 -3
- package/docs/docs/api/appkit-ui/data/LineChart/index.html +3 -3
- package/docs/docs/api/appkit-ui/data/PieChart/index.html +3 -3
- package/docs/docs/api/appkit-ui/data/RadarChart/index.html +3 -3
- package/docs/docs/api/appkit-ui/data/ScatterChart/index.html +3 -3
- package/docs/docs/api/appkit-ui/index.html +3 -3
- package/docs/docs/api/appkit-ui/styling/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Accordion/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Alert/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/AlertDialog/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/AspectRatio/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Avatar/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Badge/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Breadcrumb/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Button/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/ButtonGroup/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Calendar/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Card/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Carousel/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/ChartContainer/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Checkbox/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Collapsible/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Command/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/ContextMenu/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Dialog/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Drawer/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/DropdownMenu/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Empty/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Field/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/FormControl/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/HoverCard/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Input/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/InputGroup/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/InputOTP/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Item/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Kbd/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Label/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Menubar/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/NavigationMenu/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Pagination/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Popover/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Progress/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/RadioGroup/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/ResizableHandle/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/ScrollArea/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Select/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Separator/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Sheet/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Sidebar/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Skeleton/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Slider/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Spinner/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Switch/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Table/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Tabs/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Textarea/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Toaster/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Toggle/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/ToggleGroup/index.html +3 -3
- package/docs/docs/api/appkit-ui/ui/Tooltip/index.html +3 -3
- package/docs/docs/api/index.html +3 -3
- package/docs/docs/app-management/index.html +4 -4
- package/docs/docs/architecture/index.html +6 -6
- package/docs/docs/category/development/index.html +3 -3
- package/docs/docs/configuration/index.html +4 -4
- package/docs/docs/core-principles/index.html +3 -3
- package/docs/docs/development/ai-assisted-development/index.html +3 -3
- package/docs/docs/development/index.html +3 -3
- package/docs/docs/development/llm-guide/index.html +3 -3
- package/docs/docs/development/local-development/index.html +3 -3
- package/docs/docs/development/project-setup/index.html +4 -4
- package/docs/docs/development/remote-bridge/index.html +3 -3
- package/docs/docs/development/type-generation/index.html +4 -4
- package/docs/docs/index.html +3 -3
- package/docs/docs/plugins/analytics/index.html +53 -0
- package/docs/docs/plugins/analytics.md +66 -0
- package/docs/docs/plugins/caching/index.html +23 -0
- package/docs/docs/plugins/caching.md +33 -0
- package/docs/docs/plugins/custom-plugins/index.html +49 -0
- package/docs/docs/plugins/custom-plugins.md +161 -0
- package/docs/docs/plugins/execution-context/index.html +40 -0
- package/docs/docs/plugins/execution-context.md +45 -0
- package/docs/docs/plugins/index.html +6 -173
- package/docs/docs/plugins/lakebase/index.html +62 -0
- package/docs/docs/plugins/lakebase.md +179 -0
- package/docs/docs/plugins/plugin-management/index.html +44 -0
- package/docs/docs/plugins/plugin-management.md +88 -0
- package/docs/docs/plugins/server/index.html +45 -0
- package/docs/docs/plugins/server.md +78 -0
- package/docs/docs/plugins.md +0 -481
- package/llms.txt +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1,62 @@
|
|
|
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/lakebase" 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">Lakebase 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/lakebase"><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="Lakebase plugin | AppKit"><meta data-rh="true" name="description" content="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."><meta data-rh="true" property="og:description" content="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."><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/lakebase"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/plugins/lakebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/plugins/lakebase" 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":"Lakebase plugin","item":"https://databricks.github.io/appkit/docs/plugins/lakebase"}]}</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 'Plugins'" 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/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 menu__link--active" aria-current="page" 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 'Development'" 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 'API reference'" 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">Lakebase 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>Lakebase plugin</h1></header>
|
|
15
|
+
<div class="theme-admonition theme-admonition-info admonition_mylv alert alert--info"><div class="admonitionHeading_EXDp"><span class="admonitionIcon_a6gq"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_mPbZ"><p>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.</p></div></div>
|
|
16
|
+
<p>Provides a PostgreSQL connection pool for Databricks Lakebase Autoscaling with automatic OAuth token refresh.</p>
|
|
17
|
+
<p><strong>Key features:</strong></p>
|
|
18
|
+
<ul>
|
|
19
|
+
<li class="">Standard <code>pg.Pool</code> compatible with any PostgreSQL library or ORM</li>
|
|
20
|
+
<li class="">Automatic OAuth token refresh (1-hour tokens, 2-minute refresh buffer)</li>
|
|
21
|
+
<li class="">Token caching to minimize API calls</li>
|
|
22
|
+
<li class="">Built-in OpenTelemetry instrumentation (query duration, pool connections, token refresh)</li>
|
|
23
|
+
</ul>
|
|
24
|
+
<h2 class="anchor anchorTargetStickyNavbar_scV4" id="setting-up-lakebase">Setting up Lakebase<a href="#setting-up-lakebase" class="hash-link" aria-label="Direct link to Setting up Lakebase" title="Direct link to Setting up Lakebase" translate="no"></a></h2>
|
|
25
|
+
<p>Before using the plugin, you need to connect your Databricks App's service principal to your Lakebase database.</p>
|
|
26
|
+
<h3 class="anchor anchorTargetStickyNavbar_scV4" id="1-find-your-apps-service-principal">1. Find your app's service principal<a href="#1-find-your-apps-service-principal" class="hash-link" aria-label="Direct link to 1. Find your app's service principal" title="Direct link to 1. Find your app's service principal" translate="no"></a></h3>
|
|
27
|
+
<p>Create a Databricks App from the UI (<code>Compute > Apps > Create App > Create a custom app</code>). Navigate to the <strong>Environment</strong> tab and note the <code>DATABRICKS_CLIENT_ID</code> value — this is the service principal that will connect to your Lakebase database.</p>
|
|
28
|
+
<p><img decoding="async" loading="lazy" alt="App environment tab" src="/appkit/assets/images/step-1-073320f925a3961838afa0842c727307.png" width="804" height="404" class="img_1rA8"></p>
|
|
29
|
+
<h3 class="anchor anchorTargetStickyNavbar_scV4" id="2-find-your-project-id-and-branch-id">2. Find your Project ID and Branch ID<a href="#2-find-your-project-id-and-branch-id" class="hash-link" aria-label="Direct link to 2. Find your Project ID and Branch ID" title="Direct link to 2. Find your Project ID and Branch ID" translate="no"></a></h3>
|
|
30
|
+
<p>Create a new Lakebase Postgres Autoscaling project. Navigate to your Lakebase project's branch details and switch to the <strong>Compute</strong> tab. Note the <strong>Project ID</strong> and <strong>Branch ID</strong> from the URL.</p>
|
|
31
|
+
<p><img decoding="async" loading="lazy" alt="Branch details" src="/appkit/assets/images/step-2-25954a56aecd4dafe4966f7cecc6e8f4.png" width="1028" height="466" class="img_1rA8"></p>
|
|
32
|
+
<h3 class="anchor anchorTargetStickyNavbar_scV4" id="3-find-your-endpoint">3. Find your endpoint<a href="#3-find-your-endpoint" class="hash-link" aria-label="Direct link to 3. Find your endpoint" title="Direct link to 3. Find your endpoint" translate="no"></a></h3>
|
|
33
|
+
<p>Use the Databricks CLI to list endpoints for the branch. Note the <code>name</code> field from the output — this is your <code>LAKEBASE_ENDPOINT</code> value.</p>
|
|
34
|
+
<div class="language-bash codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-bash codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">databricks postgres list-endpoints projects/{project-id}/branches/{branch-id}</span><br></span></code></pre></div></div>
|
|
35
|
+
<p>Example output:</p>
|
|
36
|
+
<div class="language-json codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-json codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><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 plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token property">"create_time"</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)">"2026-02-19T12:13:02Z"</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 property">"name"</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)">"projects/{project-id}/branches/{branch-id}/endpoints/primary"</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 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><br></span></code></pre></div></div>
|
|
37
|
+
<h3 class="anchor anchorTargetStickyNavbar_scV4" id="4-get-connection-parameters">4. Get connection parameters<a href="#4-get-connection-parameters" class="hash-link" aria-label="Direct link to 4. Get connection parameters" title="Direct link to 4. Get connection parameters" translate="no"></a></h3>
|
|
38
|
+
<p>Click the <strong>Connect</strong> button on your Lakebase branch and copy the <code>PGHOST</code> and <code>PGDATABASE</code> values for later.</p>
|
|
39
|
+
<p><img decoding="async" loading="lazy" alt="Connect dialog" src="/appkit/assets/images/step-4-78b906d125c2c130f6e14984a9f89a62.png" width="845" height="623" class="img_1rA8"></p>
|
|
40
|
+
<h3 class="anchor anchorTargetStickyNavbar_scV4" id="5-grant-access-to-the-service-principal">5. Grant access to the service principal<a href="#5-grant-access-to-the-service-principal" class="hash-link" aria-label="Direct link to 5. Grant access to the service principal" title="Direct link to 5. Grant access to the service principal" translate="no"></a></h3>
|
|
41
|
+
<p>Navigate to the <strong>SQL Editor</strong> tab on your Lakebase branch. Run the following SQL against the <code>databricks_postgres</code> database, replacing <code><DATABRICKS_CLIENT_ID></code> with the value from step 1 everywhere it appears:</p>
|
|
42
|
+
<div class="language-sql codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-sql 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)">-- 1. Create the extension and role</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)">CREATE</span><span class="token plain"> EXTENSION </span><span class="token keyword" style="color:rgb(0, 0, 255)">IF</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">NOT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">EXISTS</span><span class="token plain"> databricks_auth</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 keyword" style="color:rgb(0, 0, 255)">SELECT</span><span class="token plain"> databricks_create_role</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token string" style="color:rgb(163, 21, 21)">'<DATABRICKS_CLIENT_ID>'</span><span class="token punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">'SERVICE_PRINCIPAL'</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 comment" style="color:rgb(0, 128, 0)">-- 2. Basic connection & usage</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)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">CONNECT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">DATABASE</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"databricks_postgres"</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</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 keyword" style="color:rgb(0, 0, 255)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">SCHEMA</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</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 comment" style="color:rgb(0, 128, 0)">-- 3. Grant on existing objects</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)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">PRIVILEGES</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">TABLES</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">IN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">SCHEMA</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</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 keyword" style="color:rgb(0, 0, 255)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">PRIVILEGES</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> SEQUENCES </span><span class="token operator" style="color:rgb(0, 0, 0)">IN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">SCHEMA</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</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 keyword" style="color:rgb(0, 0, 255)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">PRIVILEGES</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> FUNCTIONS </span><span class="token operator" style="color:rgb(0, 0, 0)">IN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">SCHEMA</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</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 keyword" style="color:rgb(0, 0, 255)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">PRIVILEGES</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> PROCEDURES </span><span class="token operator" style="color:rgb(0, 0, 0)">IN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">SCHEMA</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">public</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</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 comment" style="color:rgb(0, 128, 0)">-- 4. Grant on future objects</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token comment" style="color:rgb(0, 128, 0)">-- NOTE: This applies to objects created by the user running this script.</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)">ALTER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">DEFAULT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">PRIVILEGES</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">IN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">SCHEMA</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">public</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)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">TABLES</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</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 keyword" style="color:rgb(0, 0, 255)">ALTER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">DEFAULT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">PRIVILEGES</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">IN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">SCHEMA</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">public</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)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> SEQUENCES </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</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 keyword" style="color:rgb(0, 0, 255)">ALTER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">DEFAULT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">PRIVILEGES</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">IN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">SCHEMA</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">public</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)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> FUNCTIONS </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</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 keyword" style="color:rgb(0, 0, 255)">ALTER</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">DEFAULT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">PRIVILEGES</span><span class="token plain"> </span><span class="token operator" style="color:rgb(0, 0, 0)">IN</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">SCHEMA</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">public</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)">GRANT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ALL</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(0, 0, 255)">ON</span><span class="token plain"> ROUTINES </span><span class="token keyword" style="color:rgb(0, 0, 255)">TO</span><span class="token plain"> </span><span class="token string" style="color:rgb(163, 21, 21)">"<DATABRICKS_CLIENT_ID>"</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
|
|
43
|
+
<p><img decoding="async" loading="lazy" alt="SQL Editor" src="/appkit/assets/images/step-5-38bdf3e3ac8aadf2c0cd57aa5f0ba090.png" width="1074" height="618" class="img_1rA8"></p>
|
|
44
|
+
<h3 class="anchor anchorTargetStickyNavbar_scV4" id="6-verify-the-role">6. Verify the role<a href="#6-verify-the-role" class="hash-link" aria-label="Direct link to 6. Verify the role" title="Direct link to 6. Verify the role" translate="no"></a></h3>
|
|
45
|
+
<p>Navigate to the <strong>Roles & Databases</strong> tab and confirm the role is visible. You may need to fully refresh the page.</p>
|
|
46
|
+
<p><img decoding="async" loading="lazy" alt="Roles &amp; Databases tab" src="/appkit/assets/images/step-6-edbb462e89a66c46d58424768c163e4e.png" width="1258" height="522" class="img_1rA8"></p>
|
|
47
|
+
<h2 class="anchor anchorTargetStickyNavbar_scV4" id="basic-usage">Basic usage<a href="#basic-usage" class="hash-link" aria-label="Direct link to Basic usage" title="Direct link to Basic usage" translate="no"></a></h2>
|
|
48
|
+
<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"> lakebase</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)">"@databricks/appkit"</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 plain"> </span><span class="token function" style="color:rgb(0, 0, 255)">lakebase</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>
|
|
49
|
+
<h2 class="anchor anchorTargetStickyNavbar_scV4" id="environment-variables">Environment variables<a href="#environment-variables" class="hash-link" aria-label="Direct link to Environment variables" title="Direct link to Environment variables" translate="no"></a></h2>
|
|
50
|
+
<p>The required environment variables:</p>
|
|
51
|
+
<table><thead><tr><th>Variable</th><th>Description</th></tr></thead><tbody><tr><td><code>PGHOST</code></td><td>Lakebase host</td></tr><tr><td><code>PGDATABASE</code></td><td>Database name</td></tr><tr><td><code>LAKEBASE_ENDPOINT</code></td><td>Endpoint resource path (e.g. <code>projects/.../branches/.../endpoints/...</code>)</td></tr><tr><td><code>PGSSLMODE</code></td><td>TLS mode — set to <code>require</code></td></tr></tbody></table>
|
|
52
|
+
<p>Ensure that those environment variables are set both for local development (<code>.env</code> file) and for deployment (<code>app.yaml</code> file):</p>
|
|
53
|
+
<div class="language-yaml codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-yaml codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token key atrule">env</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 plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(4, 81, 165)">:</span><span class="token plain"> LAKEBASE_ENDPOINT</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(4, 81, 165)">:</span><span class="token plain"> projects/</span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain">project</span><span class="token punctuation" style="color:rgb(4, 81, 165)">-</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token plain">/branches/</span><span class="token punctuation" style="color:rgb(4, 81, 165)">{</span><span class="token plain">branch</span><span class="token punctuation" style="color:rgb(4, 81, 165)">-</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(4, 81, 165)">}</span><span class="token plain">/endpoints/primary</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 plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(4, 81, 165)">:</span><span class="token plain"> PGHOST</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token key atrule">value</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">your</span><span class="token punctuation" style="color:rgb(4, 81, 165)">-</span><span class="token plain">lakebase</span><span class="token punctuation" style="color:rgb(4, 81, 165)">-</span><span class="token plain">host</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 plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(4, 81, 165)">:</span><span class="token plain"> PGDATABASE</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(4, 81, 165)">:</span><span class="token plain"> databricks_postgres</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 plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(4, 81, 165)">:</span><span class="token plain"> PGSSLMODE</span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(4, 81, 165)">:</span><span class="token plain"> require</span><br></span></code></pre></div></div>
|
|
54
|
+
<p>For the full configuration reference (SSL, pool size, timeouts, logging, ORM examples), see the <a href="https://github.com/databricks/appkit/blob/main/packages/lakebase/README.md" target="_blank" rel="noopener noreferrer" class=""><code>@databricks/lakebase</code> README</a>.</p>
|
|
55
|
+
<h2 class="anchor anchorTargetStickyNavbar_scV4" id="accessing-the-pool">Accessing the pool<a href="#accessing-the-pool" class="hash-link" aria-label="Direct link to Accessing the pool" title="Direct link to Accessing the pool" translate="no"></a></h2>
|
|
56
|
+
<p>After initialization, access Lakebase through the <code>AppKit.lakebase</code> object:</p>
|
|
57
|
+
<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)">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 punctuation" style="color:rgb(4, 81, 165)">,</span><span class="token plain"> </span><span class="token function" style="color:rgb(0, 0, 255)">lakebase</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 comment" style="color:rgb(0, 128, 0)">// Direct query (parameterized)</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)">const</span><span class="token plain"> result </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"> AppKit</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">lakebase</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">query</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 string" style="color:rgb(163, 21, 21)">"SELECT * FROM orders WHERE user_id = $1"</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 plain">userId</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" style="display:inline-block"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"></span><span class="token comment" style="color:rgb(0, 128, 0)">// Raw pg.Pool (for ORMs or advanced usage)</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)">const</span><span class="token plain"> pool </span><span class="token operator" style="color:rgb(0, 0, 0)">=</span><span class="token plain"> AppKit</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">lakebase</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">pool</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 comment" style="color:rgb(0, 128, 0)">// ORM-ready config objects</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)">const</span><span class="token plain"> ormConfig </span><span class="token operator" style="color:rgb(0, 0, 0)">=</span><span class="token plain"> AppKit</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">lakebase</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">getOrmConfig</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><span class="token comment" style="color:rgb(0, 128, 0)">// { host, port, database, ... }</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)">const</span><span class="token plain"> pgConfig </span><span class="token operator" style="color:rgb(0, 0, 0)">=</span><span class="token plain"> AppKit</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token plain">lakebase</span><span class="token punctuation" style="color:rgb(4, 81, 165)">.</span><span class="token function" style="color:rgb(0, 0, 255)">getPgConfig</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><span class="token comment" style="color:rgb(0, 128, 0)">// pg.PoolConfig</span><br></span></code></pre></div></div>
|
|
58
|
+
<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>
|
|
59
|
+
<p>Pass a <code>pool</code> object to override any defaults:</p>
|
|
60
|
+
<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)">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)">lakebase</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"> pool</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"> max</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)">10</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)">// Max pool connections (default: 10)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> connectionTimeoutMillis</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)">5000</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)">// Connection timeout ms (default: 10000)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#000000"><span class="token plain"> idleTimeoutMillis</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)">30000</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)">// Idle connection timeout ms (default: 30000)</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><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/lakebase.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/analytics"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Analytics plugin</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/appkit/docs/plugins/execution-context"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Execution context</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="#setting-up-lakebase" class="table-of-contents__link toc-highlight">Setting up Lakebase</a><ul><li><a href="#1-find-your-apps-service-principal" class="table-of-contents__link toc-highlight">1. Find your app's service principal</a></li><li><a href="#2-find-your-project-id-and-branch-id" class="table-of-contents__link toc-highlight">2. Find your Project ID and Branch ID</a></li><li><a href="#3-find-your-endpoint" class="table-of-contents__link toc-highlight">3. Find your endpoint</a></li><li><a href="#4-get-connection-parameters" class="table-of-contents__link toc-highlight">4. Get connection parameters</a></li><li><a href="#5-grant-access-to-the-service-principal" class="table-of-contents__link toc-highlight">5. Grant access to the service principal</a></li><li><a href="#6-verify-the-role" class="table-of-contents__link toc-highlight">6. Verify the role</a></li></ul></li><li><a href="#basic-usage" class="table-of-contents__link toc-highlight">Basic usage</a></li><li><a href="#environment-variables" class="table-of-contents__link toc-highlight">Environment variables</a></li><li><a href="#accessing-the-pool" class="table-of-contents__link toc-highlight">Accessing the pool</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>
|
|
61
|
+
</body>
|
|
62
|
+
</html>
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Lakebase plugin
|
|
2
|
+
|
|
3
|
+
info
|
|
4
|
+
|
|
5
|
+
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.
|
|
6
|
+
|
|
7
|
+
Provides a PostgreSQL connection pool for Databricks Lakebase Autoscaling with automatic OAuth token refresh.
|
|
8
|
+
|
|
9
|
+
**Key features:**
|
|
10
|
+
|
|
11
|
+
* Standard `pg.Pool` compatible with any PostgreSQL library or ORM
|
|
12
|
+
* Automatic OAuth token refresh (1-hour tokens, 2-minute refresh buffer)
|
|
13
|
+
* Token caching to minimize API calls
|
|
14
|
+
* Built-in OpenTelemetry instrumentation (query duration, pool connections, token refresh)
|
|
15
|
+
|
|
16
|
+
## Setting up Lakebase[](#setting-up-lakebase "Direct link to Setting up Lakebase")
|
|
17
|
+
|
|
18
|
+
Before using the plugin, you need to connect your Databricks App's service principal to your Lakebase database.
|
|
19
|
+
|
|
20
|
+
### 1. Find your app's service principal[](#1-find-your-apps-service-principal "Direct link to 1. Find your app's service principal")
|
|
21
|
+
|
|
22
|
+
Create a Databricks App from the UI (`Compute > Apps > Create App > Create a custom app`). Navigate to the **Environment** tab and note the `DATABRICKS_CLIENT_ID` value — this is the service principal that will connect to your Lakebase database.
|
|
23
|
+
|
|
24
|
+

|
|
25
|
+
|
|
26
|
+
### 2. Find your Project ID and Branch ID[](#2-find-your-project-id-and-branch-id "Direct link to 2. Find your Project ID and Branch ID")
|
|
27
|
+
|
|
28
|
+
Create a new Lakebase Postgres Autoscaling project. Navigate to your Lakebase project's branch details and switch to the **Compute** tab. Note the **Project ID** and **Branch ID** from the URL.
|
|
29
|
+
|
|
30
|
+

|
|
31
|
+
|
|
32
|
+
### 3. Find your endpoint[](#3-find-your-endpoint "Direct link to 3. Find your endpoint")
|
|
33
|
+
|
|
34
|
+
Use the Databricks CLI to list endpoints for the branch. Note the `name` field from the output — this is your `LAKEBASE_ENDPOINT` value.
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
databricks postgres list-endpoints projects/{project-id}/branches/{branch-id}
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Example output:
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
[
|
|
45
|
+
{
|
|
46
|
+
"create_time": "2026-02-19T12:13:02Z",
|
|
47
|
+
"name": "projects/{project-id}/branches/{branch-id}/endpoints/primary"
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 4. Get connection parameters[](#4-get-connection-parameters "Direct link to 4. Get connection parameters")
|
|
54
|
+
|
|
55
|
+
Click the **Connect** button on your Lakebase branch and copy the `PGHOST` and `PGDATABASE` values for later.
|
|
56
|
+
|
|
57
|
+

|
|
58
|
+
|
|
59
|
+
### 5. Grant access to the service principal[](#5-grant-access-to-the-service-principal "Direct link to 5. Grant access to the service principal")
|
|
60
|
+
|
|
61
|
+
Navigate to the **SQL Editor** tab on your Lakebase branch. Run the following SQL against the `databricks_postgres` database, replacing `<DATABRICKS_CLIENT_ID>` with the value from step 1 everywhere it appears:
|
|
62
|
+
|
|
63
|
+
```sql
|
|
64
|
+
-- 1. Create the extension and role
|
|
65
|
+
CREATE EXTENSION IF NOT EXISTS databricks_auth;
|
|
66
|
+
SELECT databricks_create_role('<DATABRICKS_CLIENT_ID>', 'SERVICE_PRINCIPAL');
|
|
67
|
+
|
|
68
|
+
-- 2. Basic connection & usage
|
|
69
|
+
GRANT CONNECT ON DATABASE "databricks_postgres" TO "<DATABRICKS_CLIENT_ID>";
|
|
70
|
+
GRANT ALL ON SCHEMA public TO "<DATABRICKS_CLIENT_ID>";
|
|
71
|
+
|
|
72
|
+
-- 3. Grant on existing objects
|
|
73
|
+
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "<DATABRICKS_CLIENT_ID>";
|
|
74
|
+
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO "<DATABRICKS_CLIENT_ID>";
|
|
75
|
+
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO "<DATABRICKS_CLIENT_ID>";
|
|
76
|
+
GRANT ALL PRIVILEGES ON ALL PROCEDURES IN SCHEMA public TO "<DATABRICKS_CLIENT_ID>";
|
|
77
|
+
|
|
78
|
+
-- 4. Grant on future objects
|
|
79
|
+
-- NOTE: This applies to objects created by the user running this script.
|
|
80
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
81
|
+
GRANT ALL ON TABLES TO "<DATABRICKS_CLIENT_ID>";
|
|
82
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
83
|
+
GRANT ALL ON SEQUENCES TO "<DATABRICKS_CLIENT_ID>";
|
|
84
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
85
|
+
GRANT ALL ON FUNCTIONS TO "<DATABRICKS_CLIENT_ID>";
|
|
86
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
87
|
+
GRANT ALL ON ROUTINES TO "<DATABRICKS_CLIENT_ID>";
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+

|
|
92
|
+
|
|
93
|
+
### 6. Verify the role[](#6-verify-the-role "Direct link to 6. Verify the role")
|
|
94
|
+
|
|
95
|
+
Navigate to the **Roles & Databases** tab and confirm the role is visible. You may need to fully refresh the page.
|
|
96
|
+
|
|
97
|
+

|
|
98
|
+
|
|
99
|
+
## Basic usage[](#basic-usage "Direct link to Basic usage")
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import { createApp, lakebase, server } from "@databricks/appkit";
|
|
103
|
+
|
|
104
|
+
await createApp({
|
|
105
|
+
plugins: [server(), lakebase()],
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Environment variables[](#environment-variables "Direct link to Environment variables")
|
|
111
|
+
|
|
112
|
+
The required environment variables:
|
|
113
|
+
|
|
114
|
+
| Variable | Description |
|
|
115
|
+
| ------------------- | ----------------------------------------------------------------------- |
|
|
116
|
+
| `PGHOST` | Lakebase host |
|
|
117
|
+
| `PGDATABASE` | Database name |
|
|
118
|
+
| `LAKEBASE_ENDPOINT` | Endpoint resource path (e.g. `projects/.../branches/.../endpoints/...`) |
|
|
119
|
+
| `PGSSLMODE` | TLS mode — set to `require` |
|
|
120
|
+
|
|
121
|
+
Ensure that those environment variables are set both for local development (`.env` file) and for deployment (`app.yaml` file):
|
|
122
|
+
|
|
123
|
+
```yaml
|
|
124
|
+
env:
|
|
125
|
+
- name: LAKEBASE_ENDPOINT
|
|
126
|
+
value: projects/{project-id}/branches/{branch-id}/endpoints/primary
|
|
127
|
+
- name: PGHOST
|
|
128
|
+
value: {your-lakebase-host}
|
|
129
|
+
- name: PGDATABASE
|
|
130
|
+
value: databricks_postgres
|
|
131
|
+
- name: PGSSLMODE
|
|
132
|
+
value: require
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
For the full configuration reference (SSL, pool size, timeouts, logging, ORM examples), see the [`@databricks/lakebase` README](https://github.com/databricks/appkit/blob/main/packages/lakebase/README.md).
|
|
137
|
+
|
|
138
|
+
## Accessing the pool[](#accessing-the-pool "Direct link to Accessing the pool")
|
|
139
|
+
|
|
140
|
+
After initialization, access Lakebase through the `AppKit.lakebase` object:
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
const AppKit = await createApp({
|
|
144
|
+
plugins: [server(), lakebase()],
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Direct query (parameterized)
|
|
148
|
+
const result = await AppKit.lakebase.query(
|
|
149
|
+
"SELECT * FROM orders WHERE user_id = $1",
|
|
150
|
+
[userId],
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
// Raw pg.Pool (for ORMs or advanced usage)
|
|
154
|
+
const pool = AppKit.lakebase.pool;
|
|
155
|
+
|
|
156
|
+
// ORM-ready config objects
|
|
157
|
+
const ormConfig = AppKit.lakebase.getOrmConfig(); // { host, port, database, ... }
|
|
158
|
+
const pgConfig = AppKit.lakebase.getPgConfig(); // pg.PoolConfig
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Configuration options[](#configuration-options "Direct link to Configuration options")
|
|
163
|
+
|
|
164
|
+
Pass a `pool` object to override any defaults:
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
await createApp({
|
|
168
|
+
plugins: [
|
|
169
|
+
lakebase({
|
|
170
|
+
pool: {
|
|
171
|
+
max: 10, // Max pool connections (default: 10)
|
|
172
|
+
connectionTimeoutMillis: 5000, // Connection timeout ms (default: 10000)
|
|
173
|
+
idleTimeoutMillis: 30000, // Idle connection timeout ms (default: 30000)
|
|
174
|
+
},
|
|
175
|
+
}),
|
|
176
|
+
],
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
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/plugin-management" 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">Plugin management | 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/plugin-management"><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="Plugin management | AppKit"><meta data-rh="true" name="description" content="AppKit includes a CLI for managing plugins. All commands are available under npx @databricks/appkit plugin."><meta data-rh="true" property="og:description" content="AppKit includes a CLI for managing plugins. All commands are available under npx @databricks/appkit plugin."><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/plugin-management"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/plugins/plugin-management" hreflang="en"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/plugins/plugin-management" 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":"Plugin management","item":"https://databricks.github.io/appkit/docs/plugins/plugin-management"}]}</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 'Plugins'" 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/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 menu__link--active" aria-current="page" 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 'Development'" 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 'API reference'" 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">Plugin management</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>Plugin management</h1></header>
|
|
15
|
+
<p>AppKit includes a CLI for managing plugins. All commands are available under <code>npx @databricks/appkit plugin</code>.</p>
|
|
16
|
+
<h2 class="anchor anchorTargetStickyNavbar_scV4" id="create-a-plugin">Create a plugin<a href="#create-a-plugin" class="hash-link" aria-label="Direct link to Create a plugin" title="Direct link to Create a plugin" translate="no"></a></h2>
|
|
17
|
+
<p>Scaffold a new plugin interactively:</p>
|
|
18
|
+
<div class="language-bash codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-bash codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">npx @databricks/appkit plugin create</span><br></span></code></pre></div></div>
|
|
19
|
+
<p>The wizard walks you through:</p>
|
|
20
|
+
<ul>
|
|
21
|
+
<li class=""><strong>Placement</strong>: In your repository (e.g. <code>plugins/my-plugin</code>) or as a standalone package</li>
|
|
22
|
+
<li class=""><strong>Metadata</strong>: Name, display name, description</li>
|
|
23
|
+
<li class=""><strong>Resources</strong>: Which Databricks resources the plugin needs (SQL Warehouse, Secret, etc.) and whether each is required or optional</li>
|
|
24
|
+
<li class=""><strong>Optional fields</strong>: Author, version, license</li>
|
|
25
|
+
</ul>
|
|
26
|
+
<p>The command generates a complete plugin scaffold with <code>manifest.json</code>, TypeScript class, and barrel exports — ready to register in your app.</p>
|
|
27
|
+
<h2 class="anchor anchorTargetStickyNavbar_scV4" id="sync-plugin-manifests">Sync plugin manifests<a href="#sync-plugin-manifests" class="hash-link" aria-label="Direct link to Sync plugin manifests" title="Direct link to Sync plugin manifests" translate="no"></a></h2>
|
|
28
|
+
<p>Scan your project for plugins and generate <code>appkit.plugins.json</code>:</p>
|
|
29
|
+
<div class="language-bash codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-bash codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">npx @databricks/appkit plugin sync --write</span><br></span></code></pre></div></div>
|
|
30
|
+
<p>This discovers plugin manifests from installed packages and local imports, then writes a consolidated manifest used by deployment tooling. Plugins referenced in your <code>createApp({ plugins: [...] })</code> call are automatically marked as required.</p>
|
|
31
|
+
<p>Use the <code>--silent</code> flag in build hooks to suppress output:</p>
|
|
32
|
+
<div class="language-json codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-json codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><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 property">"scripts"</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 property">"sync"</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)">"appkit plugin sync --write --silent"</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 property">"predev"</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)">"npm run sync"</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 property">"prebuild"</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)">"npm run sync"</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 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><br></span></code></pre></div></div>
|
|
33
|
+
<h2 class="anchor anchorTargetStickyNavbar_scV4" id="validate-manifests">Validate manifests<a href="#validate-manifests" class="hash-link" aria-label="Direct link to Validate manifests" title="Direct link to Validate manifests" translate="no"></a></h2>
|
|
34
|
+
<p>Check plugin manifests against the JSON schema:</p>
|
|
35
|
+
<div class="language-bash codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-bash codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain"># Validate manifest.json in the current directory</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">npx @databricks/appkit plugin validate</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"># Validate specific files or directories</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">npx @databricks/appkit plugin validate plugins/my-plugin appkit.plugins.json</span><br></span></code></pre></div></div>
|
|
36
|
+
<p>The validator auto-detects whether a file is a plugin manifest or a template manifest (from <code>$schema</code>) and reports errors with humanized paths and expected values.</p>
|
|
37
|
+
<h2 class="anchor anchorTargetStickyNavbar_scV4" id="list-plugins">List plugins<a href="#list-plugins" class="hash-link" aria-label="Direct link to List plugins" title="Direct link to List plugins" translate="no"></a></h2>
|
|
38
|
+
<p>View registered plugins from <code>appkit.plugins.json</code> or scan a directory:</p>
|
|
39
|
+
<div class="language-bash codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-bash codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain"># From appkit.plugins.json (default)</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">npx @databricks/appkit plugin list</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"># Scan a directory for plugin folders</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">npx @databricks/appkit plugin list --dir plugins/</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"># JSON output for scripting</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">npx @databricks/appkit plugin list --json</span><br></span></code></pre></div></div>
|
|
40
|
+
<h2 class="anchor anchorTargetStickyNavbar_scV4" id="add-a-resource-to-a-plugin">Add a resource to a plugin<a href="#add-a-resource-to-a-plugin" class="hash-link" aria-label="Direct link to Add a resource to a plugin" title="Direct link to Add a resource to a plugin" translate="no"></a></h2>
|
|
41
|
+
<p>Interactively add a new resource requirement to an existing plugin manifest:</p>
|
|
42
|
+
<div class="language-bash codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-bash codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token plain">npx @databricks/appkit plugin add-resource</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"># Or specify the plugin directory</span><br></span><span class="token-line" style="color:#000000"><span class="token plain">npx @databricks/appkit plugin add-resource --path plugins/my-plugin</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/plugin-management.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/execution-context"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Execution context</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/appkit/docs/plugins/custom-plugins"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Creating custom plugins</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="#create-a-plugin" class="table-of-contents__link toc-highlight">Create a plugin</a></li><li><a href="#sync-plugin-manifests" class="table-of-contents__link toc-highlight">Sync plugin manifests</a></li><li><a href="#validate-manifests" class="table-of-contents__link toc-highlight">Validate manifests</a></li><li><a href="#list-plugins" class="table-of-contents__link toc-highlight">List plugins</a></li><li><a href="#add-a-resource-to-a-plugin" class="table-of-contents__link toc-highlight">Add a resource to a plugin</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>
|
|
43
|
+
</body>
|
|
44
|
+
</html>
|