Repository navigation
WideMark v1.2.0
Added
- Added native Chrome localization for English, Spanish, German, French,
Simplified Chinese, Traditional Chinese, Japanese, Korean, Turkish, and Vietnamese. - Added automated locale/placeholder/Manifest-length validation and localized
number and plural formatting.
Changed
- Folder style metadata remains a simple Chrome Sync list and follows folders
across normal rename and move operations. - Disclosed clearly in the UI, privacy policy, and store copy that folder style
metadata is synchronized by Chrome Sync and is not received by developer servers. - CI now builds and inspects the packaged extension. The release workflow checks
package/Manifest/tag versions, uses least privilege and a protected environment,
serializes deployments, and pins Actions to full commit SHAs. - Raised the minimum Chrome version to 116 to match the side-panel shortcut API.
Fixed
- Empty-folder cleanup now atomically refuses to delete folders that gained content.
- Bookmark writes and cleanup jobs are serialized across extension panels with the
Web Locks API; scans cancel cleanly when their view unmounts. - Collapsed folder descendants are no longer mounted, large folders are no longer
clipped, and tree/menu/dialog keyboard focus and ARIA behavior were improved. - Settings and folder-style reloads no longer allow older asynchronous reads to
overwrite newer local or cross-window changes.
Internal
- Rewrote the UI on React 19 + Zustand, bundled by Vite with
@crxjs/vite-plugin(replacing the vanilla-DOM controllers and the
tsc-only build). Bookmark logic stays framework-agnostic insrc/lib/and
is unit-tested independently. Tests run on Vitest (happy-dom). The shipped
bundle carries no source maps. No user-facing behavior change intended. - Migrated the source from vanilla ES5-style UMD scripts to TypeScript. Modules
are bundled intobuild/by Vite, whiletscperforms strict type checking.
Type checking runs understrict,
noUncheckedIndexedAccess, and thenoUnused*/noImplicitReturns/
noFallthroughCasesInSwitch/noImplicitOverrideflags. Requires Node >=24
(engines). No user-facing behavior change. - The build/packaging scripts (
scripts/*.ts) are TypeScript too, type-checked
by a separate Node-targetedtsconfig.scripts.jsonand run directly via
Node's.tsexecution. Aci.ymlworkflow type-checks, tests, builds, and
validates the packaged ZIP on push/PR. - Development now loads the bundled
build/directory as the unpacked
extension (npm run build); the packaged zip ships the Vite output. See
docs/DEVELOPMENT.md.
Install manually
- Download the
.zipfile below and unzip it into a folder you will keep. - Open
chrome://extensionsin Chrome and turn on Developer mode (top right). - Click Load unpacked and select the unzipped folder (the one that contains
manifest.json).
A manually installed copy does not update itself. See the README for details.