Skip to content

feat(themes): add installable theme packages - #793

Merged
debba merged 8 commits into
mainfrom
feat/791-installable-theme-packages
Sep 22, 2026
Merged

debba merged 8 commits into
mainfrom
feat/791-installable-theme-packages

Conversation

@debba

@debba debba commented Sep 19, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Adds installable, declarative theme packages so users can browse, install, preview and manage application and SQL editor themes. The 12 built-in themes remain available offline, and existing personal themes and exports retain their original sources.

Refs #791.

Changes

  • Unifies theme selection and management in Appearance, with preview/apply/cancel, personal copies, editing, import/export and missing-selection diagnostics. Saved selections survive temporarily unavailable packages and are restored when available again.
  • Integrates themes into Plugins with type filters, registry installation and updates, local package discovery, enable/disable controls and direct removal. Theme removal reuses the plugin confirmation dialog, explains that all variants are affected, and handles pending operations, errors and refresh failures.
  • Adds versioned theme schemas, shared legacy/v1 rendering, independent application/editor selections and portable snapshots that preserve exact editor definitions. Updates application controls and dialogs to respect theme colors and fixes Monaco transparency defaults.
  • Implements native package validation and lifecycle handling: bounded ZIP inspection, path and payload validation, private staging, locks, atomic replacement, rollback, cancellation and explicit recovery. Theme packages contain declarative data and are excluded from executable driver activation.
  • Organizes installed packages by kind, preserves discovery of legacy driver layouts, and binds theme updates to their package and registry identity. Includes theme deep links and bounded README previews with explicit screenshot links.
  • Supports local VS Code JSON/JSONC imports with conversion diagnostics and explicit mode selection. Adds the tabularis-theme CLI for offline scaffolding, validation and deterministic ZIP packaging, plus an author guide and generated draft-release workflow.
  • Adds translations across 11 locales and regression coverage for rendering compatibility, selection persistence, package operations, registry behavior and author workflows.

Validation

At the current head, 268e0b25:

  • 70 targeted tests passed across Plugins, shared confirmation dialogs, Settings, Connections and NotebookView, including theme and driver removal.
  • pnpm exec tsc -b passed.
  • ESLint passed for the modified removal components; git diff --check passed.

The earlier full frontend, native, compatibility and author-tooling runs, including ignored tests and baseline Rust formatting/Clippy findings, are documented in the implementation verification report. These results describe that implementation snapshot; current CI results are shown in the PR checks.

Release follow-up

  • Complete packaged Linux, macOS and Windows GUI checks, including native file dialogs and affected editor surfaces, using the manual test plan.
  • Assign the first supporting application/tooling versions and public schema hosting before publishing packages. Fixture version numbers are not compatibility guarantees.
  • Verify older-client profiles and legacy registry/install routes before enabling theme distribution. The old-provider replay demonstrates that an older client can overwrite an unavailable saved selection; downgrade protection or profile isolation remains necessary.
  • Validate registry rollout/rollback and complete the original-theme and imported-theme publication journeys described in the author guide.

@github-actions

github-actions Bot commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Preview build

The preview build of commit 268e0b2 failed (skipped). See the workflow run for logs.

Preserve offline builtins and historical sources, add host-owned theme catalog and atomic declarative package lifecycle, explicit preview/management and VS Code import, and offline author tooling. Include compatibility, security, real SDK fixture and author journey evidence; document remaining platform and rollout gates.
Retain the reviewed feature tree and the original PR's three CI-only commits without carrying forward their obsolete issue-791 verification workflow/helper. No feature source changes in this ancestry merge.
@NewtTheWolf

Copy link
Copy Markdown
Collaborator

Registry-side preparation is now in place on registry.tabularis.dev (Tabularium 0.14.1).

Prepared

  • Created the theme kind with its own replacement extension schema, copied exactly from public/schemas/theme-registry-extensions-v1.json at this PR commit 0baea94bdbcc43dd97706997a56ae06a91ad0d69.
  • Required theme_schema_version: 1 and theme_variants (1–32 entries), with the PR’s variant id/name/file constraints.
  • Added an authoring example and preparation/release-gate notes. The example deliberately leaves the first supporting runtime as a placeholder, not an invented compatibility promise.
  • Existing driver-kind and global extension configurations were preserved.

Live kind manifest schema: https://registry.tabularis.dev/manifest.schema.json?kind=theme
Validation API: POST https://registry.tabularis.dev/api/manifest/validate/ with { "text": "<manifest JSON>", "kind": "theme" }.

Verified

A validation-only fixture passes both the live registry validator and this PR’s closed theme-package schema. Live checks reject schema version 2, missing/empty variants, traversal paths, reserved variant IDs and a driver executable. Existing driver manifests still validate. No theme package was submitted, installed or downloaded, and no tracked counter request was made.

Boundaries still relevant to this PR

  • The public theme catalogue page is disabled. This only hides that page: creating a kind makes it discoverable/validatable and is not an admission lock.
  • The registry core still treats min_runtime_version as optional, whereas the host package schema requires it. Full package/ZIP validation and the release/admission gates in this PR remain necessary.
  • Although Tabularium 0.14 supports separate id/display name, this PR’s current closed theme-package v1 contract still uses name as the slug and rejects id. The configured example follows that existing contract; the formats must be aligned explicitly before adopting display names in theme packages.
  • No first supporting runtime version, platform acceptance or older-profile/downgrade safety has been claimed. This PR remains unmerged.

The independent Tabularium download-count/statistics fix and Vercel cache fix were also merged via TabularisDB/tabularium#13 and deployed in v0.14.1.

Organize theme and driver packages by kind with legacy discovery fallback.\nConsolidate theme selection and management, refine dialogs, and theme primary controls.\nFix Monaco transparency defaults and bundle theme schemas under src.
@debba debba changed the title feat: installable theme packages (WIP, #791) feat(themes): add installable theme packages Sep 21, 2026
@debba
debba marked this pull request as ready for review September 21, 2026 13:57
@debba
debba merged commit cc327c5 into main Sep 22, 2026
2 of 4 checks 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.

2 participants