Repository navigation
Conversation
added 30 commits
September 17, 2026 22:07
Publish Designer flows as runnable apps with manifest-driven blocks, parameters, and job outputs. Render charts with Vega-Lite, Designer-compatible styling and sorting, and block-owned headings. Include portable deployment dependencies and chart regression tests.
Resolve upload storage from each request manifest and refresh viewer configuration before uploads and runs. Reject stale references and discard late upload responses so viewers select fresh files after a switch.
Co-authored-by: Isaac <no-reply@databricks.com>
Require authenticated viewer ownership for run operations, remove automatic Job grants and consumer links, preserve accepted runs across transient errors, and page older history. Pause submissions while published runner configuration is being activated.
Signed-off-by: edward.cheung <edward.cheung@databricks.com>
edcheung1
marked this pull request as ready for review
October 29, 2026 18:33
added 3 commits
October 29, 2026 20:37
Signed-off-by: Edward Cheung <edward.cheung@databricks.com>
Signed-off-by: Edward Cheung <edward.cheung@databricks.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What did you change, and why?
Why: Let authors publish a Lakeflow Designer flow as a Databricks App where users supply inputs, run the flow, and inspect its results. Maintain the shared server runtime as an installable
designer()source plugin in appkit-registry.Change: Adds the complete
appkit-lakeflow-designertemplate: a React/AppKit UI, the installed Designer server plugin, deployment configuration, documentation, and tests. Designer provisions each App with its own Workspace manifest and runner Job. This PR includes the template introduced in #267 and targetsmaindirectly; it does not require that PR to merge first.Published App behavior
Published App server and registry plugin
The Node/AppKit server runs on Databricks Apps compute. One
createApp()registers AppKit'sserver()and the localdesigner()plugin. The plugin owns/api/designerroutes and uses the shared AppKit service client to:designerApp.jsonbeside the bound runner notebook.The runner Job executes the DAG and Spark expressions using its configured run-as identity. The App server calls Databricks APIs as its service principal with explicitly granted permissions; hosting on Databricks supplies no implicit access to engineering infrastructure or other workspaces. App credentials remain on the server. Consumer access to runs and files is scoped to the viewer inside the App; independent Job and UC permissions remain effective outside it.
The 38 installed files in
server/plugins/designermatch the generated item in databricks/appkit-registry#11. Backend implementations and shared-contract tests are maintained there. Browser code imports the plugin's client-safe schemas, run/result types, response parsers, and route helpers. Manifest loading is isolated inside the plugin while preserving refresh, cache, and shutdown behavior. The template commits the installed source and records its originating registry commit in the README. Git tracks the plugin source, andpnpm-lock.yamlpins its npm dependencies. The template uses released AppKit/AppKit UI 0.89.0, pnpm 11.0.8, and Node.js 22.13+, with a frozen lockfile, dependency overrides, and a documented body-parser patch.Publishing and compatibility
appkit addor fetch the registry. This branch builds before the registry PR merges and requires no new SDK release. Subsequent plugin changes are installed into the template, reviewed and committed, then adopted by republishing Apps.edcheung1/app-templates@branch:stack/designer-plugin-templatethrough the existingdatabricks.fe.lakebuilder.designerAppTemplateRefsetting for development, or pin an approved commit/tag. Changing that setting does not update already deployed Apps; they must be republished.CAN_MANAGEand the relevant upload/output volume grants. The runner separately needs its data read/write permissions. Viewers can execute the workflow with the runner's permissions; the matching publisher asks authors to acknowledge that execution model. Security sign-off on that model and the iframe/API boundary remains open. Authored HTML requires trusted publishers and is not a complete data-loss or resource-exhaustion boundary.Example published App
Sales Review Lab (Dogfood access required). These screenshots illustrate the UI using a synthetic demo and an existing successful run; validation of this PR's exact commit is recorded below.
Parameters, run history, and author-provided instructions.
HTML report and regional chart
Interactive table and generated-file selector
How do you know it works?
Current validation at template commit
07d2ee546531a9c0343e443964444b8c6ac4ab12:Additional coverage from the preceding contract cleanup: 134 registry tests and 37 Chrome checks passed at registry
4cffd42/ template326ce11, covering real AppKit routes and SDK HTTP/streaming paths with simulated services, shared contracts, HTML navigation restrictions, republish recovery, and idle/startup reload behavior. Lint at that revision had no errors and the existing TanStack/React Compiler warning; the template does not enable React Compiler.Earlier local integration validation at
75f39a842ae60eef49e8d746fde0b8423d4ecb85: 15 browser e2e scenarios passed with no JavaScript errors through the compiled template, installed plugin, and released SDK transport with simulated Jobs/Workspace/Files. Covered transfers, generated-file selection, disabled groups, history, cancellation/failure, truncation totals, storage changes, restart, viewer isolation, and manifest mismatch. These scenarios were not rerun for the iframe sizing fix.Earlier deployed e2e at
75f39a842ae60eef49e8d746fde0b8423d4ecb85: Published that template commit from the Designer UI to the dedicated staging App. Deployment01f1d3beacef159d9ddbbdf824075f77succeeded and switched traffic. Through real Apps ingress,/api/designer/configreturned manifest v8 andrunnable=true; an explicit Run started Job run 978236073796935, which completed successfully. The App rendered the 12-row table, revenue chart, and HTML report. Reload restored that run and its outputs.This validates publish/build/load/run with the deployed App service principal's Jobs/Workspace access. File transfers, cancellation, conditional groups, and second-viewer isolation were covered locally with simulated services, not separately exercised in the deployed App.