Skip to content

refactor(shared): remove the legacy @databricks/sdk-experimental SDK - #673

Open
MarioCadenas wants to merge 3 commits into
feat/modular-clifrom
feat/modular-remove-legacy-sdk
Open

MarioCadenas wants to merge 3 commits into
feat/modular-clifrom
feat/modular-remove-legacy-sdk

Conversation

@MarioCadenas

Copy link
Copy Markdown
Collaborator

Summary

Final layer of the modular SDK stack: removes the legacy @databricks/sdk-experimental SDK. Every service already runs on the modular @databricks/sdk-* clients; this deletes the legacy client and drops the dependency.

Changes

  • Removed: legacy.ts, toLegacyWorkspaceClient(), and the facade's servingEndpoints / config / apiClient accessors. Client options moved to workspace-client/options.ts.
  • Last runtime uses moved to the modular client:
    • the persistent cache now hands the modular client to Lakebase;
    • appkit doctor passes the facade to Lakebase instead of a hand-built legacy shape;
    • boot auth errors map the modular SDK's credential errors (isAuthConfigError) to ConfigurationError, replacing the legacy ConfigError;
    • the AbortSignal cancellation bridge no longer needs the SDK's Context class.
  • Replaced: ApiError is AppKit's own class (same fields; instanceof also matches modular SDK errors). Local types replace the legacy serving / sql namespaces for raw JSON.
  • Dependency dropped from shared, appkit, the app template and lockfiles, plus knip, CLAUDE.md, the oxlint boundary message and the testing docs. The API reference is regenerated in its own commit.

Kept on purpose: agents and @databricks/lakebase still accept a caller-supplied legacy-shaped client. That support is structural (no SDK import), and lakebase is published on its own.

Notes

  • @databricks/sdk-experimental@0.15.0 stays in the lockfile as a transitive dependency of @mlflow/core@0.4.0 (optional peer for agent tracing).
  • The template lockfiles still list the legacy SDK under the published appkit@0.88.1 / lakebase@0.6.0 packages; that goes away with the next release and template sync.

Test plan

  • pnpm build, pnpm -r typecheck, pnpm check, pnpm docs:build
  • Unit tests: 5676 passed
  • Deployed e2e app on the new template build

This pull request and its description were written by Isaac.

MarioCadenas and others added 3 commits October 16, 2026 17:24
Every service already ran on the modular @databricks/sdk-* clients; this
drops the legacy client and the dependency.

- Remove legacy.ts, toLegacyWorkspaceClient() and the facade's
  servingEndpoints/config/apiClient accessors; options move to options.ts.
- The persistent cache hands the modular client to Lakebase; doctor does
  the same instead of a hand-built legacy shape.
- ApiError is AppKit's own class (same fields); boot auth errors map the
  modular SDK's credential errors via isAuthConfigError.
- Local types replace the legacy serving/sql namespaces for raw JSON.
- The cancellation bridge no longer needs the SDK's Context class.
- Callers passing their own legacy-shaped client (agents, lakebase) still
  work: that support is structural and needs no SDK.
- Drop the dependency from shared, appkit and the app template.

Co-authored-by: Isaac <no-reply@databricks.com>
Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
…lient

Brings the generated reference in line with the stack: the facade no longer
exposes the legacy accessors, and the files/jobs/agents types now come from
the modular SDK.

Co-authored-by: Isaac <no-reply@databricks.com>
Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
Co-authored-by: Isaac <no-reply@databricks.com>
Signed-off-by: MarioCadenas <MarioCadenas@users.noreply.github.com>
@MarioCadenas
MarioCadenas requested a review from a team as a code owner October 16, 2026 15:27
@MarioCadenas
MarioCadenas requested review from ditadi and removed request for a team October 16, 2026 15:27
@MarioCadenas
MarioCadenas added this pull request to stack #669 October 16, 2026 15:28
@github-actions

Copy link
Copy Markdown
Contributor

📦 Bundle size report

Compared against bundle-size-baseline.json (main).

@databricks/appkit

npm tarball (packed): 1.2 MB (+28 KB) — gzipped download (dist + bin; excludes release-only docs/NOTICE).

dist raw gzip
JS (runtime) 1.3 MB (+28 KB) 457 KB (+10 KB)
Type declarations 464 KB (+8.0 KB) 168 KB (+2.8 KB)
Source maps 2.5 MB (+57 KB) 855 KB (+18 KB)
Other 11 KB 3.7 KB
Total 4.2 MB (+93 KB) 1.4 MB (+30 KB)
Per-entry composition (own code — deps external (as shipped))
Entry Initial (gz) Lazy (gz) Total (gz) node_modules (min) Own code (min)
. 106 KB (+3.9 KB) 2.5 KB 108 KB (+3.9 KB) external 343 KB (+12 KB)
./beta 102 KB (+3.8 KB) 487 B (+2 B) 103 KB (+3.8 KB) external 308 KB (+11 KB)
./testing 45 KB (+3.1 KB) 32 KB (+1 B) 77 KB (+3.1 KB) external 223 KB (+8.7 KB)
./tsdown 520 B 0 B 520 B external 813 B
./type-generator 26 KB (+2.8 KB) 0 B 26 KB (+2.8 KB) external 74 KB (+7.9 KB)

Chunks:

Entry Chunk Load Size (gz)
. index.js initial 101 KB
. utils.js initial 4.6 KB
. remote-tunnel-manager.js lazy 2.5 KB
./beta beta.js initial 82 KB
./beta modular.js initial 6.0 KB
./beta stream-manager.js initial 5.9 KB
./beta service-context.js initial 4.2 KB
./beta databricks.js initial 3.3 KB
./beta client.js initial 649 B
./beta index.js initial 20 B
./beta supervisor-api.js lazy 193 B
./beta databricks.js lazy 179 B
./beta index.js lazy 115 B
./testing manifest.js initial 32 KB
./testing index.js initial 10 KB
./testing wide-event-emitter.js initial 2.9 KB
./testing index.js lazy 28 KB
./testing remote-tunnel-manager.js lazy 2.5 KB
./testing utils.js lazy 1.8 KB
./tsdown index.js initial 520 B
./type-generator index.js initial 26 KB

@databricks/appkit-ui

npm tarball (packed): 397 KB (+497 B) — gzipped download (dist + bin; excludes release-only docs/NOTICE).

dist raw gzip
JS (runtime) 429 KB (+235 B) 147 KB (+108 B)
Type declarations 267 KB (+983 B) 98 KB (+225 B)
Source maps 853 KB (+314 B) 286 KB (+143 B)
CSS 16 KB 3.2 KB
Total 1.5 MB (+1.5 KB) 534 KB (+476 B)
Per-entry composition (consumer bundle — deps bundled, peerDeps external)
Entry Initial (gz) Lazy (gz) Total (gz) node_modules (min) Own code (min)
./js 5.3 KB 49 KB 55 KB 208 KB 14 KB
./js/beta 2.1 KB 0 B 2.1 KB 0 B 5.0 KB
./react 433 KB (+12 B) 49 KB 481 KB (+12 B) 1.3 MB 177 KB (+41 B)
./react/beta 4.9 KB 0 B 4.9 KB 0 B 12 KB

Chunks:

Entry Chunk Load Size (gz)
./js index.js initial 5.2 KB
./js chunk initial 120 B
./js apache-arrow lazy 49 KB
./js/beta beta.js initial 2.1 KB
./react index.js initial 431 KB
./react tslib initial 2.1 KB
./react apache-arrow lazy 49 KB
./react/beta beta.js initial 4.9 KB

@github-actions

Copy link
Copy Markdown
Contributor

🤖 AppKit PR bot

🔬 Run evals

Start an eval for this PR from the evals-monitor app: Go to Evals Monitor →

📦 Try this PR's app template

Scaffolds a new app from this PR's SDK build. Run it in any folder (requires the GitHub CLI — gh auth login — and the Databricks CLI):

gh run download 38924102701 -R databricks/appkit -n appkit-template-0.88.1-pr.a7503ac-feat-modular-remove-legacy-sdk-673 -D appkit-pr-673 \
  && unzip -o "appkit-pr-673/appkit-template-0.88.1-pr.a7503ac-feat-modular-remove-legacy-sdk-673.zip" -d "appkit-pr-673" \
  && databricks apps init --template "appkit-pr-673"

The template pins @databricks/appkit and @databricks/appkit-ui to tarballs built from this branch, so the scaffolded app runs against this PR's code.

This branch has not been deployed

No deployments
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