Skip to content

feat: add beta Designer App runtime plugin - #696

Closed
edcheung1 wants to merge 1 commit into
databricks:mainfrom
edcheung1:edcheung1/designer-plugin
Closed

edcheung1 wants to merge 1 commit into
databricks:mainfrom
edcheung1:edcheung1/designer-plugin

Conversation

@edcheung1

@edcheung1 edcheung1 commented Oct 28, 2026 •

Copy link
Copy Markdown

Superseded by databricks/appkit-registry#11. The Designer runtime now ships as registry-installed source using released AppKit 0.89.0 public APIs. The consuming template is databricks/app-templates#296. A real Designer publish/build/run passed with that implementation; an SDK plugin release is no longer needed.


What did you change, and why?

Published Designer Apps currently carry their server implementation in the app template. Moving that runtime into AppKit lets templates use a small bootstrap and receive shared runtime fixes through a pinned SDK upgrade.

Adds the beta designer() plugin, extracted from app-templates PR267 at commit 2243222ae8bc486a4cc2c7bd07851f0d27ea4ff0:

import { createApp, server } from '@databricks/appkit';
import { designer } from '@databricks/appkit/beta';

await createApp({ plugins: [server(), designer()] });
  • Owns manifest loading, runner revision checks, Job submission/status/cancellation/history, notebook result decoding, and parameter/output file transfers. Preserves /api/designer, manifest v8, response shapes, viewer authorization, disabled-group handling, and the publisher's Job permission.
  • Uses the App service-principal client and private Files connector adapters. Replaces nested createApp() calls and process-wide volume environment mutations with explicit per-request storage scopes. Caches belong to the plugin instance and are cleared on shutdown.
  • Exports browser-safe schemas/types/helpers through @databricks/appkit/beta/designer. React rendering, tables/charts, HTML sandboxing, and browser recovery stay in the template.
  • Documents source linking/watch mode, packaged-template testing, and the release sequence. No new dependencies or flags. No publisher/codegen changes.

Most added code is extracted runtime/shared code and migrated regression tests. This PR does not switch the production template to an unpublished AppKit version. Follow-up sequence: AppKit release → template dependency and bootstrap migration → publisher template revision → App redeployment.

How do you know it works?

  • Full Vitest suite: 6,006 passed, 1 skipped, including 95 Designer tests. Real AppKit HTTP tests cover viewer isolation, cached results, idempotent submission, compressed JSON, history pagination, manifest invalidation, lifecycle isolation, streamed uploads/downloads, and republished storage. Decoder tests preserve disabled groups, table counts, HTML, file receipts, and guardrails.
  • pnpm build, pnpm docs:build, pnpm -r typecheck, lint/format and package export checks passed. Docs reports an existing broken telemetry anchor outside this change.
  • Linked AppKit into the migrated template: source watch restarted the server after a plugin edit; client/server build passed.
  • Installed the distribution tarball into the migrated template and built client/server. 15 browser E2E scenarios passed against simulated Databricks services: input uploads and repeated downloads, generated-file selection/downloads, table/chart/interactive HTML rendering, conditional groups, history, cancellation/failure handling, exact truncation totals, republished storage, server restart, viewer isolation, and manifest mismatch. No JavaScript errors.
  • The same local packaged-plugin server also passed 5 checks against a real staging workspace using CLI OAuth: manifest discovery, Job submission, successful execution and notebook decoding, table/chart/HTML rendering, and reload recovery. The real result contained 12 table rows, and the HTML report toggle worked. No JavaScript errors. The plugin has not yet been deployed to Databricks Apps; cloud build and App service-principal permissions still need deployment validation.

The pre-commit Knip check reports the same unused packages/appkit/bin/appkit.js and root esbuild, ora, zod dependencies on unchanged main. New unused exports were fixed; the remaining baseline-only findings were verified using a clean archive of main. The hook was skipped for the commit after the checks above passed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant