Skip to content

Release Notes: v0.5.0

Release Date: 2026-08-17

This release polishes the static viewer (viewer/index.html) with a light/dark theme toggle and consistent numeric formatting, fixes a pre-existing broken build in builder/, adds ESLint and Prettier tooling to the builder/ and renderer/ TypeScript workspaces (neither had ever been configured), and resolves every pre-existing "error discard without comment" finding in datasource/ and internal/server/ per the org's error-handling protocol.

Highlights

  • Theme Toggle - Light/dark toggle in the static viewer header, persisted via localStorage and defaulting to the OS's prefers-color-scheme; re-initializes ECharts widgets with the official dark theme
  • Numeric Formatting - Chart tooltips, value-axis labels, and metric tiles now cap numeric display to 2 decimal places, plus a new "currency" metric format
  • Error Handling - All 10 pre-existing "error discard without comment" findings in datasource/ and internal/server/ resolved via proper return/panic handling, not just documented-and-ignored
  • Lint/Format Tooling - builder/ and renderer/ now have ESLint (flat config) and Prettier configured, with every resulting finding fixed
  • Dependency Fix - builder/'s @grokify/echartify import was never declared as a dependency; typecheck/build were broken before this release

What's New

Added

  • Light/dark theme toggle (63e771c) - Header control in the static viewer; toggles the previously-unused [data-theme="dark"] CSS variable block, re-inits ECharts widgets with the dark theme, and makes chart backgrounds transparent so they blend into the surrounding card in either theme
  • Numeric formatting and currency metric format (8a71a1c) - A shared formatMetricNumber helper caps chart tooltips and value-axis labels to 2 decimal places; a new "currency" metric format (previously undocumented-but-unimplemented — only "percent" and "number" were handled)

Fixed

  • Missing @grokify/echartify dependency (6287ef0) - builder/src/types/chartir.ts imports it, but it was never in package.json; typecheck/build were broken before this release
  • builder/ ESLint findings (257d865) - Empty-interface cleanup, two react-hooks/set-state-in-effect fixes (remount-via-key, and switching to useQuery to match existing patterns elsewhere in the codebase), a Fast-Refresh export split, and a hoisted useMemo dependency
  • renderer/ ESLint findings (a1a875c) - Wired up the previously-unused onInteraction prop into UIForgeContextValue, refactored two hook patterns flagged by eslint-plugin-react-hooks v7's newer React-Compiler-oriented rules, removed dead test imports
  • Discarded errors in datasource/manager.go and internal/server/server.go (eea77fc) - Log previously-discarded connection-close and response-write errors instead of silently dropping them
  • Discarded errors in the MySQL/PostgreSQL providers and internal/server/db/db.go (c7ef2dc) - Query() now uses named returns so a deferred rows.Close() failure is actually returned instead of discarded; a db.Close() after a failed ping is joined into the returned error via errors.Join; a strings.Builder write that can never fail now panics instead of silently ignoring its (impossible) error

Documentation

  • Documented the static viewer's theme toggle and numeric formatting in README.md and docs/index.md

Dependencies

  • Pinned authzed/cel-go to v0.20.2 for spicedb v1.56.0 compatibility (2101350) - a prior go get -u had bumped it to v0.30.0, which changed cel.NewStaticOptimizer's signature and broke the build
  • Routine transitive dependency updates via go mod tidy (8e4d264, f744e45)

Internal

  • Added eslint.config.js/.mjs, .prettierrc.json, and .prettierignore to builder/ and renderer/; applied Prettier formatting across both workspaces (whitespace/quote-style only, no behavior change) (e313925)
  • Rebuilt builder/dist (committed for go:embed) and renderer/dist to reflect the dependency fix, lint fixes, and formatting; renderer/dist was also independently stale, missing compiled output for several modules that already existed in src/ (5796c33)
  • Investigated bumping the Go toolchain to 1.26.6 to clear 7 govulncheck-found stdlib CVEs, but reverted to 1.26.5 (1dd32ad): the shared plexusone/.github reusable go-ci.yaml pins GOTOOLCHAIN=local after resolving "1.26.x", so it doesn't auto-upgrade to a newer patch just because go.mod asks for one. The CVEs remain unaddressed pending a fix to the shared workflow or CI's cached Go version catching up.

Breaking Changes

None.

Known Issues

  • cube/ (the Cube.js semantic-layer directory) still has no lint/typecheck/format tooling — it never had any (no devDependencies, no scripts for it), and atrelease's auto-detection flags it as a false positive. Left out of scope for this release; builder/ and renderer/ are unaffected.
  • 7 stdlib CVEs (encoding/xml, encoding/asn1, net/http) fixed in go1.26.6 remain unaddressed — see Internal above.

Installation

go get github.com/plexusone/uiforge@v0.5.0

Migration Guide

From v0.4.0

No breaking changes. If you run builder/'s or renderer/'s npm run lint/npm run format locally for the first time after pulling this release, run npm install first to pick up the new ESLint/Prettier devDependencies.

Full Changelog

See CHANGELOG.md for the complete list of changes.