Releases: lvnacy-notes/tabcandy
Release list
Tab Candy 1.1.0
Tab Candy 1.1.0
Custom Quotes Import/Export
This release ships an augmentation to the custom quotes feature: new import/export functionality provides a backup solution to saved custom quotes.
Attestations
release.yaml was updated to include an attestations job for build artifacts provenance.
Ratchet Threshold Reduction
UI functions increased, causing coverage to decrease, as UI elements are deliberately not tested.
See ARCHIVE/CHANGELOG-2026-09-08-39e8b92.md for details.
Tab Candy 1.0.0
Beautitab → Tab Candy Rebrand & Refactor
Summary
This PR is a ground-up rebuild of Tab Candy (forked from the abandoned Beautitab) into a modern, mobile-safe, tested Obsidian plugin. Every layer of the project — toolchain, data model, runtime APIs, UI architecture, file layout, and CI — was rebuilt from first principles rather than patched incrementally. Nothing user-facing about the plugin's purpose changed; nearly everything about how it's built and maintained did.
What changed
Toolchain & branding — Migrated to pnpm, a modern ESLint flat config, and a unified ES2020 build target. Rebranded as a genuinely new plugin (tabcandy, not an upgrade path from Beautitab) with consistent naming throughout.
Settings & data — Settings are now versioned and validated at load time, so malformed or legacy data can't corrupt state. A typed SettingsStore replaced an untyped, actually-broken pub/sub implementation.
Mobile support — This was the core motivator. All fs/path/Electron-dependent features (background sync, image loading) were rebuilt on vault-relative APIs, making the plugin fully functional on mobile for the first time. Manually verified working on-device.
Obsidian API compliance — Migrated to ItemView, replaced blanket "hijack every new tab" behavior with an explicit command plus an opt-in convenience toggle, and isolated all private/internal API access (bookmarks, commands, internal plugins) behind guarded adapters that fail closed instead of throwing.
UI architecture — The React layer was restructured into hooks and presentational components with a real separation of concerns, and the whole source tree was consolidated from a scattered set of folders into a single coherent src/.
Type safety — A dedicated hardening pass eliminated remaining any/unknown usage and consolidated all types into one source of truth.
Testing & CI — Added a Vitest suite (~200+ tests) covering settings normalization, backgrounds, bookmarks, commands, and view lifecycle, with a coverage ratchet that prevents regression. PR-gated CI and a release workflow were built from scratch.
Feature changes — Two long-broken integrations (Unsplash-based seasonal backgrounds, the Quotable quotes API) were removed outright rather than left silently non-functional, since neither had a working, maintainable replacement.
Bugs fixed along the way
Several real, pre-existing bugs surfaced during the rebuild: a broken Observable unsubscribe, mistyped settings callbacks, a bookmarks-render crash on folder bookmarks, a stale Sass import silently blocking every production build, and a tab-focus bug where hijacked tabs misdirected file navigation.
Verification
typecheck, lint, test, and build are all clean. Manual mobile verification is complete. Remaining pre-publish items (community plugin listing requirements, final README polish) are tracked separately and are not blockers for this PR.