Available on WebStore · HomePage
vBookmarks turns your bookmark pile into a fast, keyboard-first workspace. One click on the toolbar icon opens a six-view manager that lives in the popup (or Chrome's side panel — your choice): the familiar folder tree, instant fuzzy search, a Recently Added timeline, visit statistics, a dead-link scanner, and a duplicate cleaner. Everything is reachable from the keyboard, every delete is undoable, and nothing ever leaves your browser — no accounts, no telemetry, no build-step black box, just plain JavaScript you can read.
- Six views, one popup — Tree / Search / Recent / Stats / Dead links / Duplicates, switched from an icon tab strip or with
Alt+1…6. - A maintenance crew for your library — scan for dead links with pause & resume, deduplicate with six keep-strategies and undoable batch cleaning, save a whole window of tabs as a session folder.
- Keyboard-first for real — every view is fully operable without a mouse: arrows,
Enter,F2rename,Delete, view shortcuts, and aCtrl/Cmd+Kcommand palette. - Fast and quiet — fzf-style fuzzy search with match highlighting (CJK-friendly), omnibox search (
*+ Space), and sync-status indicators that stay out of your way. - Make it yours — five crafted themes, custom CSS, custom toolbar icon, per-view visibility toggles — or hide the tab strip entirely for the classic one-pane look.
- Private by design — local-only data, 43 languages, MIT licensed.
- Chrome and Edge — one MV3 package installs on both (
scripts/package.py --target chrome|edge; Firefox would need a build step — evaluation in browser-compat.md).
Licensed under the MIT License. Read the FAQ. New in 4.0? Read the v4 feature guide.
- Modern, calm UI — a full design-token system with five looks: follow-system, light, dark, plus two crafted "fable" themes: Ink (deep dark) and Paper (warm light).
- Find anything instantly — fzf-style fuzzy search with match highlighting (CJK-friendly), persistent search history, and a command palette (
Ctrl/Cmd+K) unifying bookmark search, folder jumps, view jumps and power commands. - Power tools built in — a dead-link scanner with dual-channel checks and pause/resume, a duplicate cleaner with six keeper strategies and undo-safe batch deletion, a session saver, and one-click undo for every delete.
- Quick add everywhere — star button in the popup,
Ctrl/Cmd+D, the globalAlt+Shift+Sshortcut, or "Bookmark this page" from the page context menu. - Sync-aware — on Chrome 138+ it understands Chrome's dual local/synced bookmark storage: local-only subtrees are gently dimmed, roots are labeled
(Local)/(Synced), and cross-storage drags are blocked with a polite toast instead of a hard failure. - 43 languages, all aligned to the English baseline and kept in sync by an LLM-assisted translation pipeline.
- Private by design — plain ES6+ JavaScript, no framework, no build step, no telemetry; the source you inspect is the code you run. Visit statistics are stored locally, can be paused with one switch and erased with one button.
4.0 is the largest release in the project's history. It rebuilds the popup around a view system — six specialized views behind an icon tab strip — while keeping the classic tree experience one setting away.
- Six views: Tree (the classic), Search, Recent, Stats, Dead links, Duplicates. The icon tab strip shows live count badges (dead marks, dupe groups, tracked pages) and can be hidden per view (Stats/Dead/Duplicates) or entirely for the classic single-pane layout.
- One keyboard model everywhere — the tree's mature semantics (arrows,
Home/End,PageUp/PageDown,Enter,F2,Delete, type-ahead) now work identically in every list view;↑past the first row steps up to the tab strip, then the search box; the strip itself is arrow/Home/End navigable with roving tabindex and RTL awareness;Alt+1…6jumps straight to a view (portable across Chrome and Edge, which reservesCtrl+1…8for its own tabs). - Layered
Esc— context menu → command palette → view-level action (e.g. pausing a scan) → clear search → back to tree → close, always peeling one layer at a time. - Popup vs panel — both reopen on the view you left (the popup via the default-on remember the last view switch — turn it off for the classic always-tree boot), and the side panel is ready to become your always-on bookmark workspace.
- The popup search is now a proper view: history on top, results below. Both stay on screen together.
- Search history (MRU 10) records what you actually used — pressing
Enter, opening a result, or leaving the view — with result counts and relative timestamps. Click or pressEnterto re-run,Deleteor right-click to remove one or clear all. A setting turns history off (and wipes it) instantly. - Leaving and coming back keeps everything: the box, the results, the scroll — no reflow, no re-query.
- The old in-tree "recently added" strip grew up into its own tab: your newest bookmarks grouped into Today / This week / This month / Older, each row with a relative-time badge and a
path · exact timesecond line. R(or right-click) reveals any row in the tree; an optional one-time import from Chrome history (off by default, permission requested only if you opt in) back-fills older visits.
- Visit statistics, 100% local: rows you open from the popup are counted, and a background collector notices when you navigate to bookmarked URLs from anywhere else (deduplicated, so one open never counts twice).
- Sort by count or recency (persisted), clear everything with one ConfirmDialog-gated button, or flip
statsEnabledoff — recording stops completely, and the erase exit stays reachable. - A Recently visited section lists what Chrome says you actually visit; bookmarked rows show a ★, everything else has a one-click ☆ to file it away.
- Dual-channel checking: a direct fetch first; on failure, a second channel gets the final say — so "down for everyone" and "just blocked here" read as different badges. The second channel is your own proxy server (http/https/socks5) added in one click from the strip above the list (reachability-tested before it is saved), or a legacy relay URL template from the options page.
- Proxy mechanics, honestly scoped: checks through your proxy are routed by a temporary PAC script that matches only the scanner's own marker-tagged probe URLs — every other tab's traffic stays on its normal path, and the settings are restored the moment a scan settles, cancels or the popup closes. The
proxypermission is declared at install time (Chrome does not allow it as an optional permission); it sits completely unused if you never configure a proxy server or never run a scan — no proxy code path executes otherwise. Known conflict: a few proxy/acceleration extensions (e.g. iGuge) actively disable any enabled extension that declares theproxypermission and is not on their whitelist — see the issue #53/#57 analysis for the verified root cause and what to do if you're affected. - Progressive, pausable scans that outlive the popup: the scan runs in the service worker, so closing the popup or side panel mid-scan loses nothing — reopen to a live mirror, and an interrupted run even resumes itself. Results stream in row by row;
Escpauses/resumes without losing progress; canceling restores the last completed snapshot. Progress ticks repaint silently, never moving your scroll position. - A risk banner before the first cleanup (dead links and dedup both rewrite bookmarks in bulk) links to Chrome's own backup & restore guide; Don't show again snoozes it until the next major or minor version (patch updates stay silent).
- Tunable concurrency (1–16) and timeout (2–30 s), a dead/blocked/all filter with a dead·blocked summary line, and dead marks — flag a link once and the red ✕ follows it across the tree, search, recent and stats views.
- Finds real duplicates, not just string matches: URLs are normalized (tracking parameters like
utm_*/fbclid/gclidstripped, hash dropped, optional http/https folding) before grouping. - Six keeper strategies — oldest, newest, bookmark-bar, shortest title, shallowest, most-visited (live data from the Stats view) — plus per-group manual pinning with
Kor the radio button. - Preview first, execute after: doomed rows render struck-through until you commit; batch cleaning runs through the undo chain with a single summary toast, and the last result set is snapshotted so reopening the popup paints instantly while it re-validates in the background.
Ctrl/Cmd+Kin the popup,Ctrl/Cmd+Shift+Kanywhere: fuzzy bookmark search, folder jumps, and a curated slash-command table — one Go command per view,/add/new/folder,/session,/theme <name>(or the direct switches/dark/light/ink/paper),/tabsand/options, each with a short alias or two.- Custom slash commands: open a URL, fill a URL template from the rest words (
/g kimi code), open a bookmark folder as a tab group, or jump to a view with a preset — managed in the options page's Commands group, saved straight from the palette's Save as a command row, synced across devices, and editable/deletable from the row's→menu. - A plain query that isn't a command offers a bridge row to run it in the full search view; the palette closes itself when it loses focus.
- The options page grew a Views group — tab-strip and per-view visibility, count badges, the remember-last-view switch, the palette/quick-add/tool-button chrome toggles, and a one-click Restore the classic header button — plus a Dead scan group (proxy template, concurrency, timeout).
- Backup & restore: export every setting to a stamped JSON file, import it back with merge semantics — moving machines no longer means re-clicking forty toggles.
- Options and advanced options are now one merged page with a responsive multi-column card layout that stays readable from 320 px to 4K (the old advanced-options URL redirects).
- Classic-mode friendly: one click on Restore the classic header — or a hand-picked set of toggles — and 4.0 behaves like the vBookmarks you know; every new surface is opt-out.
- Search field fixed and modernized: click-through dead zone removed, a proper clear button that always appears when text is present.
- Adding a bookmark/folder/separator into a collapsed folder now works visibly: the folder expands and shows the new node immediately.
- "Copy title and URL" moved to the async Clipboard API (
clipboardWritepermission) — it works again. - Sync presentation reworked: synced rows stay quiet (no green-dot noise), tooltips localized, dual-storage roots labeled
(Local)/(Synced), blocked drags show a toast, and "highlight unsynced" finally dims local-only subtrees. - Inline SVG icons throughout (folders, bookmarklets, twisties, view tabs); bitmap icons retired.
- Unit tests across 50+ Vitest suites, covering every module — including contract tests that pin the row-alignment geometry, the z-index layering table, per-theme badge contrast and the horizontal-scrollbar protection contract (every scrollable pane clips
overflow-x, text slots ellipsis, fixed slotsflex: none, zoom rules never alter geometry). The live count isnpm run test:runoutput (and the CI badge). - Docker harness: zero-console-error smoke, a real-browser keyboard/view verification suite (tab-strip keyboard model, focus zones, header-row arrow chain, per-view ↑↓/past-top crossings with the in-list toolbar rungs — the dead view stacks two, custom palette commands end-to-end, banner keyboard reachability, search dual-zone, per-view rendering — 132 hard assertions), a scrollbar matrix probe (screen resolution × browser zoom × in-extension zoom × popup size sweep, no horizontal scrollbar on any pane — 752 assertions), and screenshot suites across 5 themes and 8 UI languages (with an RTL mirroring check).
- Unified locale tooling (
scripts/i18n.py): audit, missing-key reports, LLM batch translation, verify gate. Baseline grew from 75 to 345 keys at 4.0 (390 as of 4.0.5), all 43 locales aligned. - CI: GitHub Actions runs the unit suites, the i18n gates and the release packaging on every push and PR.
- Repository organized for the v4 era:
src/,pages/,css/,assets/,scripts/; obsolete artifacts (oldrelease/*.crx, MV2 leftovers) live on in git history.
- Six views in one popup: tree, search, recent, stats, dead-link scan, duplicate cleaner.
- Bookmark current tab before/after a selected bookmark or folder, or to the top/bottom of a folder.
- Add sub-folders, update a bookmark's URL with the current tab, copy title + URL to the clipboard.
- Search history with re-run, per-item remove and clear-all — can be disabled (and wiped) in settings.
- Visit statistics with a pause switch, one-click erase, and a recently-visited section powered by optional Chrome-history access.
- Folder content sorting: by title or date, folders-first option, optional recursion.
- Synchronizable bookmark separators with customizable style.
- Dark theme done right: light / dark / follow-system / ink / paper on shared design tokens.
- Optional side-panel mode (opt-in setting; popup stays the default), with an
Alt+Shift+Bshortcut. - Command palette (
Ctrl/Cmd+K, orCtrl/Cmd+Shift+Kglobally) and omnibox search: type*+ Space in the address bar. - Full keyboard support in every view, and drag & drop rearranging in the tree.
- Sync-status awareness with quiet visuals: only local-only and unsyncable rows are marked.
- Omnibox search — type
*in the address bar, press Space, then enter your keywords. - Full keyboard support, identical across all six views (details in the v4 feature guide):
- ↑↓ move selection; ↑ past the first row steps up to the tab strip, then the search box
- ←→ on the tab strip switch views; → on a row opens its context menu, ← closes it
- Enter / Space to open; Ctrl/Cmd+Enter to open in a new tab
- Home / End, PageUp / PageDown; Alt+1…6 jump to a view directly (
Ctrl/Cmd+1…6is the legacy twin where the browser allows it) - Delete to delete (undoable), F2 to rename, R to reveal in tree; K pins a keeper in Duplicates, M toggles a dead mark
- Type-ahead filtering in the tree and search views: start typing to find items by name
- Middle-click a folder to open all its bookmarks (as a color-coded tab group).
Ctrl+Ffocuses the search field;Escclears the search, dismisses the context menu, pauses a scan, or closes the palette — layered from inner to outer.- Command palette (
Ctrl/Cmd+Kinside the popup,Ctrl/Cmd+Shift+Kglobally):- Fuzzy-search bookmarks and folders, jump to a folder in the tree, or run slash-commands
- Slash-commands:
/recent/stats/dead/dupesjump to views,/sessionsaves the window's tabs,/optionsopens settings,/theme <name>switches themes,/tabstoggles the strip — plus your own custom commands (options page → Commands group, or the palette's Save as a command row)
- Drag & drop to rearrange; dragging across synced/local storage is safely blocked with an explanation.
- Decide whether the popup closes after opening a bookmark (option in settings).
- Show only the Bookmark Bar (option in settings).
- Open bookmarks in background tabs (option in settings).
- Control the popup zoom level in settings.
- Options page: the Separators group customizes separator title/URL/style; the Dead scan group tunes scan concurrency/timeout.
- Options page: custom CSS for the whole popup (CodeMirror editor, Custom Styles group), e.g.
* { font-family: Consolas; }. - Options page: replace the toolbar icon with your own (Custom Icon group).
- Disable popup auto-resize to keep a fixed height.
- Export/import all settings as JSON from the Backup group at the bottom of the options page.
No build step — Load unpacked the repo root in chrome://extensions/.
# Unit tests (Vitest — the live case count is `npm run test:run` output)
npm install
npm run test:run
# Headless harness (Docker)
scripts/harness/run.sh # the verify gate: smoke + keyboard + scrollbars + menu verifies
scripts/screenshots/run.sh # visual capture ONLY — suites into tmp/shots/
# smoke.js popup/panel/options raise zero console errors
# verify-keyboard.js tab-strip keyboard model, focus zones, view rendering
# verify-scrollbars.js screen×browser-zoom×in-extension-zoom sweep: no horizontal scrollbar
# verify-menu-*.js #48 menu overflow / collapsed flyouts / extreme zoom sweep
# scripts/screenshots/shots.js interaction states (light/dark)
# scripts/screenshots/shots-matrix.js 4 themes × full surface (menus + flyouts + dialogs)
# scripts/screenshots/shots-i18n.js tree/tabs/menus/dialog/options × 8 UI languages
# scripts/screenshots/shots-palette.js palette + the four feature views
# scripts/screenshots/shots-guide.js guide screenshots (search dual zone, options Views group)
# scripts/screenshots/shots-tabgroups.js tab-group menus & dialogs, verified from the service worker
# scripts/console/ browser-console probes; scripts/harness/diag/ node probes (on demand)
# Locale pipeline (scripts/i18n.py, stdlib only)
python3 scripts/i18n.py audit # keys used in code vs en baseline
python3 scripts/i18n.py missing # per-locale missing / [TODO] report
python3 scripts/i18n.py translate --apply # LLM batch translation
python3 scripts/i18n.py verify # gate: alignment, TODOs, menu lengths
# translate reads the LLM endpoint from a git-ignored repo-root .env:
# VBM_LLM_API_KEY=... VBM_LLM_BASE_URL=... VBM_LLM_MODEL=...
# VBM_LLM_API_TYPE=openai|anthropic_messages
# Release zip (version read from manifest.json)
python3 scripts/package.py # → tmp/vBookmarks_<version>.ziptmp/ and .env are git-ignored. When adding runtime files, keep the include list in scripts/package.py in sync; see AGENTS.md for the full contributor guide.
- Powered by plain ES6+ JavaScript (no framework, no bundler); CodeMirror backs the Custom CSS editor.
- Successor of Neat Bookmarks — thanks to cheeaun for the original work.
- Old pre-4.0 releases (
release/*.crx) were removed from the working tree and remain available in git history.
2026-08-15
- Real site icons for bookmarks Chrome hasn't cached: this release fetches the actual site icon for bookmarks the browser has no cached image for — direct from the site first, then through a built-in third-party icon fallback list (favicon.run) guarded by a per-provider circuit breaker and failover; while a dead-link proxy session is active, discovery re-runs through the proxy. The enriched cache is capped by a dynamic byte budget that halves-and-evicts under pressure. New Icons-group controls: "Fetch missing site icons" (on by default), "Third-party icon fallback" (also on by default), and a "Clear icon cache" action.
- Options page regrouped into 15 sections: the overloaded Views group split into View display / Icons / Context menus / Tools / Statistics, so every area has breathing room.
- Storage usage bar: the Icons group now shows how much of the storage quota icons, bookmarks, settings and the free space each take (with a byte-formatted legend), updating live as data changes.
- Header GitHub / Homepage links and version number in the top-right corner of the options page.
- Backup includes the icon cache by default: a new "Include icon cache in backups" option packs the enriched per-site icon cache into settings export/import (on by default, so a full-fidelity backup travels with its icons); turning it off keeps backups small, and icons are re-fetched automatically.
- Favicon cache quota race: the byte budget is now enforced asynchronously, so a burst of concurrent fetches can no longer push the cache past the limit before the eviction runs.
- Favicon discovery edge cases: site icons served as
application/octet-stream(common on plain CDNs/static hosts) are now recognized by magic-byte sniffing instead of being rejected; page-HTML reads are capped at 200 KB; a host already cached no longer gets re-fetched when a placeholder renders before the storage hydrate lands; oversized session-only icons are capped in memory; and<link>extraction now honors<base href>and skips commented-out icon declarations.
- In-product announcement banner: the version-gate banner became a local "What's new" banner fired exactly once by the version gate on the 4.x → 4.0.8 crossing — no network, no dismiss; the remote announce feed (toggled by "Show in-product announcements") still runs as its network-dependent complement. The v4.0.8 banner announces this favicon-enhanced release and links the v4 guide and the changelog.
- Options-page polish: trailing hints no longer sit far below their controls; list buttons share one visual weight with the page's other buttons; the storage bar gained a used/total overview row, distinct segment colors, per-segment share legend and keyboard-reachable tooltips; destructive actions (clear cache / clear stats / import / reset) render in the warning danger style; the header wraps gracefully at narrow widths.
- Third-party icon fallback and icon-cache backups are on by default, so new users get working icons for sites Chrome can't reach directly and full-fidelity backups out of the box.
- Favicon enrichment module: discovery chain, built-in provider list with per-provider circuit breaker + failover, cache + queue, capped HTML reads and session-only eviction.
- Store publishing supports a trusted-tester grey release (
TRUSTED_TESTERS);DEFAULT_PUBLISHrestores a full rollout. loadDotenvaccepts inline comments (KEY=value # note).- Bookmarklet behavior verified in a real-browser harness (
verify-bmlet.js). - Test suite at 69 files / 2254 cases, all green.
2026-08-15
- Zoomed context menus always show at full height: the 4.0.5-era fix compressed the menu down to the space below the trigger row, so at zoom > 100 a below-midline right-click showed a shrunken menu. The menu now keeps its full height — clamped to a viewport-level scrollable box only when even the whole popup cannot fit it — and a right-click on an open menu's background re-opens it at the pointer instead of dismissing it, so consecutive right-clicks on a row always show the menu again (no more show/hide alternation).
- Dead-marked list stays in sync with the toolbar filter: switching the toolbar between 全部 / 受限 / 死链 (All / Blocked / Dead) filters the result rows correctly again (仅受限 / 仅死链 used to be swapped), the marked list no longer echoes rows the active filter hides, and it renders after the result rows.
- Imported backups no longer double-count "Previously marked": an import restores
deadMarksand the last-scan cache as-is and the residue count derives from the §2.4 natural-residue rule — marks the restored scan verdicts dead/blocked ride their result rows and are never counted again as marks, so the All counter no longer doubles. - ↑/↓ keyboard navigation crosses the result list and the residue marked list: the "已标注" heading between the two sibling lists no longer blocks arrow-key travel, and the crossing works from a result row's inline buttons too; single-list views (tree/search/recent/stats/dupes) are unaffected.
- Dead-check view redesigned around a "Previously marked" category: the toolbar filter gains a Previously marked segment that switches to a marks-only view; in the default All view the marked list is appended below the scan results (italic heading to tell it apart), and items this scan still flags as broken move out of the marked list into the results keeping their ⚑ mark. The All counter now sums all three categories (dead + blocked + previously marked), not just this scan's result rows. Cancelling an in-flight scan switches to the Previously-marked view and raises a session-scoped, dismissible tooltip banner — prompting you to click Rescan to start a new check and to handle the bookmarks in the list below; the same banner appears after a finished scan when past marks this scan no longer flags as broken (reachable again, but marked before) remain below the results. The selection toolbar now applies to the marked list too, so marks can be batch-deselected.
- Mark-status filter on a second toolbar: alongside the category filter, a second toolbar filters the view by mark status (已标注 / 未标注), applied to the result rows and the residue marked list together — 未标注 hides the residue list, since every residue row is marked. The batch/selection scopes (mark-all, delete-all, select-all/invert) all follow the visible set, and the two filters stay orthogonal.
- Result sorting: a sort dropdown (Detection time — the per-row scan timestamp, default; Folder path; Mark time — a per-mark timestamp persisted alongside the marks) reorders the result rows and the residue list together. Sorting applies once a scan has finished only — a live scan keeps progressive tree order so rows never jump mid-scan — and old backups without timestamps fall back to the stable stored key order.
- Amber reading for marked / blocked rows (4.1.0 task-1 A6/D1): a row's mark toggle that is already marked — or whose verdict is blocked (受限) — renders in the warning amber (same as the blocked pill) instead of the neutral accent, and the tree-view dead × overlay on marked bookmarks is amber too, so "restricted" reads apart from a dead-only row.
2026-08-15
Rollback to 4.0.4 — 4.0.5 shipped with two regressions (zoomed context menus, and the dead-marked list out of sync with the toolbar filter); its changes were recalled and reworked into 4.0.7.
2026-08-15
⚠ Recalled / deprecated — superseded by 4.0.6 (rollback to 4.0.4); properly re-fixed in 4.0.7.
- Low-contrast favicon inversion: a new
faviconContrastoption (Views group, on by default) detects favicons that sink into the active theme — dark glyphs on dark surfaces, light glyphs on light ones — and flips their brightness while preserving hue (invert(1) hue-rotate(180deg)), so brand colors survive. The detector keys off extreme-tone pixel shares rather than average brightness (which misread small dark marks on transparent backgrounds, e.g. thepaper.cn and GitHub) and deliberately spares self-inverting icons like x.com's white-on-black disc. It re-judges on OS light/dark flips under the auto theme, applies live in the always-on side panel, and was tuned against a 14-real-favicon × 4-theme render matrix. - Dead-link view empty state gains a "start scan" pill CTA — the first scan is one click from the empty view instead of a toolbar hunt.
- Command palette result highlighting: matched characters are wrapped in
<mark>again, so a row shows why it ranked.
- Palette keyboard traps: result rows no longer sit in the Tab order (they degraded ↑↓/Space into native scrolling and froze the highlight), and Tab now cycles a two-stop loop between the input and the Esc close button instead of escaping the palette and auto-closing it.
- Stale
.activemarker swallowed keys: a leftover active class on a closed menu made the palette keep treating it as open. - Batch deletions report the real count: duplicate-cleaner removals that fail mid-batch are skipped and the summary toast counts only actual deletions (the dead-link side already did); applying a selection now exits selection mode.
- Dead-link view robustness: bookmarks created mid-session (or restored by Undo) re-join the rows; the tab badge derives from the tree-joined result rows and can no longer resurrect a stale count on popup reopen; mark-all / selection entries key off the filtered row set like delete-all does.
- Escaping gaps closed: an untitled bookmark's protocol-stripped URL fallback rendered unescaped (a pre-v4.0 leftover), and the shared escaper now covers
&after a full caller audit proved no double-escaping path remains. - Folder menus in search results / the palette grey out content-dependent entries (open-all, tab group, sort) for empty folders, matching the tree — and a greyed state never leaks into the next menu.
- Visual consistency: two-line row icons align with the tree's slot rhythm (search view included); delete affordances are uniformly red (search-history inline/menu deletes, remove-separator, the palette delete command, dupes clean) with a shared danger hover; sync dots and dead-link × badges use logical
inset-inline-end, so RTL mirrors correctly. - Second-pass audit merge: the palette's custom-command rows now escape and validate
slash/aliases(closing a sync-storage injection path); tree rebuilds park/restore the focused row and thefocusIDrestore is guarded, so a rebuild no longer drops keyboard focus to the page body; popup focus memory covers the search-history area; the omnibox highlighter self-escapes regex metacharacters (a query likec++no longer breaks highlighting) and highlights subsequence matches, so highlight and ranking agree; toolbar focus restore survives button-set changes (class+index instead of a bare position); the dead-link start row shows its focus ring only for keyboard focus (:focus-visible); dead-link selection rows drop the leftover ghost icon slot. - Colorful logos are no longer mis-inverted on light themes: a chroma guard keeps brand-color icons (e.g. the Chrome Web Store devconsole mark) from being flipped into a black-card wreck — the tuning matrix grew to 14 real favicons × 4 themes.
- Dead-link marks survive a cancelled scan: with no result list on screen, marked bookmarks render as their own list (each individually unmarkable, plus a batch clear-all), and a cached result list surfaces the marks it doesn't cover — a cancelled run never strands a mark with no way to clear it.
- Zoomed context menus never cover the right-clicked row: above 100% zoom an over-tall menu used to flip up over the trigger row, so the next right-click hit the menu itself and dismissed it (show/hide alternation) — the menu now clamps to the space below the row, including the viewport-scrollable case.
- Three shared-module consolidations: nine verbatim
htmlspecialcharscopies →src/escape.js; the four list views' park/restore focus copies →src/list-focus.js(plus a unified row focus-target contract and the toolbar focus trio); omnibox and popup fuzzy ranking →src/fuzzy-core.js(one fzf-style implementation, with a fix for highlight offsets on characters likeİwhose lowercase form changes length). - Focus memory obeys "Remember previous state": the remembered row is gated by the option and cleared at startup when off; the visible undo toast joined the Tab ring; dropdown-list rows are skipped by the row stops.
- Batch confirmations name the stakes: duplicate-cleanup confirms name the keeper ("Keep ‹title› and remove the other N copies?"), and every batch delete/clean confirm across the dead-link and duplicates views appends the one-step-undo note (new key
undoSingleStepNote, translated across all 43 locales). - Version bumped to 4.0.5 in
manifest.json/package.json.
- Two independent audits of the full v4.0 → 4.0.5 delta plus their merge (the second pass caught what the first missed: a favicon theme observer that never installed, the palette injection path, tree focus park/restore) — both reports, the comparison/merge plan and the fused 4.1.0 design are archived in
docs/review-4.0.5/; documentation (AGENTS.md, keyboard-model, the v4 guide) re-synced to the implementation. - The popup resize/zoom layer was extracted from
neat.jsintosrc/resize.js(pure decision kernels stay insrc/resize-core.js), closing a stale drag-ceiling leak between drags. - Test suite at 67 files / 2078 cases, all green — new
list-focussuite, rewritten favicon-contrast strategy tests, and new contracts for the deletion chains, menu greying, escaping and the i18n copy changes.
2026-08-13
- Empty-folder menu greying: folder context-menu items that depend on folder content (open-all, open-as-tab-group, new window / incognito, sort) grey out on empty or URL-less folders — only the add-type entries (bookmark / folder / separator inserts) stay enabled. Disabled entries are dimmed at half opacity so they read clearly as unavailable across every theme.
- Unified focus restoration on popup reopen (focusSpot): the search bar, header buttons, in-view toolbar controls, view tabs and list rows restore their focus across a popup reopen through one model, gated by the "remember previous state" option.
- Command palette returns focus on keyboard dismiss: closing the palette with Esc / Ctrl+K / the close button returns focus to the element that opened it (the search bar / tool button).
- Batch deletions (duplicates / dead-links) refresh the tree immediately — deleted rows no longer linger in the tree view until the popup is reopened.
- Command-palette close focus misplacement (folded into the New item above).
- Unified "what counts as a completed search": a query enters the recent-search history when it is consumed — opening a result, pressing Enter, the two-level Esc clear, leaving the search view, closing the popup, or revealing the row in the tree (R). The × clear button is the abandon path: it is not recorded, and it now clears the results pane too, so an unconsumed query leaves no trace.
- Test suite strengthened substantially: rewrote 11 pseudo-tests (copied-kernel / tautological / zero-assertion), filled 3 file-level coverage gaps, and extracted the resize / folder-sort / quick-add / donation / tool-button / wake-up / startup-flags / settings logic into testable modules.
- New option-switch → behavior differential contract, parameterized-copy contract (
tests/i18n-copy) and shared test-infrastructure helpers. - Introduced an ESLint progressive gate (error-level, in CI).
- Added a real-browser smoke gate (zero console errors) to CI and the release pre-check, so an extension that crashes on load is caught before tagging.
- Dead-code cleanup (the unused
copy-all-titles-and-urlshandler, the ineffectivehide-editablestoggle).
2026-08-12
- Drag-and-drop sorting misaligned in zoomed mode (#59, #60): with the popup zoomed, a dropped row landed in the wrong place — the drag overlay's coordinates and the mouse-release drop-target hit-test did not account for the zoom level. Both are zoom-corrected now, with regression tests covering overlay layout, drop-into-folder sizing and the zoom-level reset.
- The focus-restore highlight can be turned off (#58): reopening the popup used to refocus and flash the last-focused row on every open. The focus restore now follows the existing "Remember previous state" option — unchecked, the popup starts fully fresh, with no remembered highlight (and no remembered scroll or opened folders either).
- "Remember previous state" now covers the last-focused row (#58): previously it only restored scroll position and opened folders; the focus restore is folded in, so a single switch controls the whole "where I was" restore. The option's description is updated in all 42 locales.
- iGuge conflict documented (#53, #57): the iGuge proxy/acceleration extension actively disables any installed extension that declares the
proxypermission and is not on its whitelist — so vBookmarks could be disabled on every Chrome restart when both are installed. Verified against the store-shipped CRX; the Dead-link section now explains the cause and what affected users can do, and we're coordinating whitelisting with iGuge. vBookmarks keeps itsproxypermission (it is only ever used, temporarily and marker-only, during a dead-link scan). - Developer tooling: vitest bumped 1 → 3.2.7, clearing 6 Dependabot advisories (dev-only — no user impact); the modified-key i18n flow and the release process are documented in
AGENTS.md.
2026-08-11
- Collapsible context-menu blocks (#48 follow-up): the crowded tab-group block (bookmark & folder menus) and the sort block (folder menu) collapse into a single submenu entry with a ▸ indicator. Two new Views toggles control them —
collapseTabGroupMenu(tab groups, off by default) andcollapseSortMenu(sorting, on by default). The flyouts reuse the whole context-menu keyboard protocol:→/Enteropen,←/Escclose one level at a time,↑/↓wrap inside the flyout on every platform. - Menus hardened at extreme zoom/DPI (#48): a right-click menu can no longer outgrow the popup — height clamps to the space below the search bar (overflow scrolls internally), width caps to the viewport, and a flyout that does not fit on one side flips or stacks below its entry. Menus stay usable at high browser zoom, high DPI and narrow popup widths.
- Precision-first search ranking: results sort by match tier — exact > prefix > word-start > subsequence — with the added date demoted to a final tie-break, so an exact match can no longer be outranked by a newer, looser one. URL scoring strips the structural
https://andwww.prefixes first, sohttps://github.comandhttps://www.github.comrank alike.
- #48: a right-click menu taller than the popup closed the instant it opened — focusing it scrolled the document and tripped the scroll-close listener. Menus now clamp to the viewport and scroll internally.
- On macOS the slight finger movement of a right-click (two-finger tap / corner click) read as a scroll gesture and closed the freshly opened menu — a short window now tolerates small jitter scrolling right after open; a real scroll still closes it.
- #56: the dark themes' blanket
brightness(1.5)filter on every favicon is removed — the placeholder is already a fingerprint-replaced SVG, so the filter only overexposed real favicons. - Custom CSS no longer fails silently: when the CodeMirror editor does not load (CSP-blocked, etc.), a native
textareachange event persists the edit. - Rapidly toggling the page right-click "Bookmark this page" switch no longer throws a "duplicate id" error — the remove→create cycle is serialized.
- A collapsed flyout flipped to the wrong side when the popup body was narrower than the viewport — horizontal placement now keys off
window.innerWidth. - The options-page tab-group collapse switch looked checked even though the feature is off by default (the stored
'0'was read as truthy) — it now reflects the real state.
- The 6 new collapsed-submenu keys are translated across all 42 locales; the collapsed entries keep just the ▸ indicator.
- Developer tooling:
scriptsreorganized into harness / console / screenshots, the screenshot suite became a 4-theme matrix plus a 7-locale light i18n pass, console probes gained browser/platform identification, and the verify gate now also captures human-eye confirmation shots.
- Version bumped to 4.0.2 in
manifest.json/package.json; the design docs move on to the 4.1.0 slate.
2026-08-08
- Tab groups for folders & bookmarks: "open all as a tab group" now creates/joins the group in the service worker, so closing the popup mid-flight no longer aborts it. The folder/bookmark context menus add …and set name/color (a new-group dialog with a title and nine Chrome-style color swatches) and open into an existing group (a picker of your current tab groups); old Chrome or a vanished group falls back to a plain open.
- Dead-link batch delete: the toolbar's red Delete all removes every row in the current filter (All / Dead / Blocked; the confirm shows the exact count); selection mode gains Delete selected — both run serially through the undo chain and end in one summary toast.
- Folder sorting (#33): the folder menu offers Sort by name / Sort by date added as direct commands (recursive folders append "(recursive)") beside Sort options…; a new options-page Sorting group edits the same persisted
sortOptions(by / folders-first / recursive). Sorting physically reorders the bookmarks (survives restarts), and every sort — recursive ones included — is undoable via toast (Undo replays the pre-sort snapshot level by level). - Palette theme shortcuts (#44): next to
/theme <name>, the direct switches/dark/light/ink/paperapply a theme in one keystroke — the exact slash match now always wins the Enter row. - Page context-menu quick-add switch (#49): the "Bookmark this page" entry is now an independent Views toggle (
quickAddContextMenu) — off removes it from every page on the fly, and the Restore the classic header preset covers it too. - Stats view merges recent visits into one list: bookmarked history rows merge into the main list wearing a solid ★ and their visit count in the pill; a toolbar Show unbookmarked checkbox (
statsShowUnbookmarked) brings in the rest (one-click ☆ files them). The row end reads right-to-left: star → count pill → time. - Shared dropdown component: the Duplicates strategy/scope selects become a custom dropdown with one keyboard protocol (
↓/Enter/Spaceopen,Home/Endjump to the first/last option,←/Esccancel,Tabapplies) — the browser's native select no longer hijacks the arrows.
- #46: clicking a folder in search results opened the popup's own URL in a new tab — folder rows now jump in place (multi-class matching).
- #47: the Stats "recent" time badge was crushed into a tiny pill — now plain muted text aligned with the path column.
- "Open all as a tab group" could silently do nothing when the popup closed mid-creation (its tab callbacks were dropped).
- Dead-link tab badge missing on cold start, and intermittently when opening the popup straight into the dead view — now pre-loaded and refreshed after the async read.
- Clicking a ghosted/stale row (a folder deleted or synced away mid-redraw) no longer crashes.
- A context-menu click on a re-rendered row (search-history remove / stats star) no longer throws.
- Popup height could lock to 300 px while the tree was hidden — invisible trees are no longer measured.
- Closing the side panel via the toolbar toggle could leave the popup unreachable — restored instantly (Chrome 142+) or via an alarm probe (114–141).
Ctrl/Alt+1-9stopped working afterCtrl+2parked focus in the search box — ordinary inputs no longer swallow view switches (only modal dialogs and the open palette do).Ctrl+digitview switches could strand focus in the old view — focus now lands on the new view and the arrows work immediately.- In the palette, closing a context menu with
←/Escstranded focus on a result row — it returns to the input. - "Reveal in tree" (
R) left no keyboard focus — the revealed row now receives it. - New-tab-group dialog input misaligned with the color row — now the same width.
- The packaged zip could silently miss new modules — the packaging script now resolves imports recursively.
- Stats view overflowed horizontally at narrow widths — the path column now wraps instead of stretching.
- A clean dead-link scan (zero dead rows) left no way to scan again from the view — the Rescan button now stays on the toolbar.
- #50: middle-clicking a bookmark closed the popup even with "stay open" off — background opens no longer force-close the popup (only foreground opens honor the setting), matching the folder open-all behavior.
- #51: a manually shrunken popup height kept "resetting" (auto-height re-grew it on the next tree click, so the popup could only ever grow) — once you drag the popup edge, auto-height steps back for the rest of the session.
- #52: the custom toolbar icon did not survive a browser restart (
chrome.action.setIconis session-scoped) — the service worker now restores it on every cold start. - Duplicates toolbar regression: after opening the strategy/scope dropdown,
↓from the button area could no longer enter the rows — a listbox option no longer steals the remembered-row.focusmarker, and the toolbar rung's↓skips a marker parked inside a hidden listbox. - Menu actions and re-renders no longer strand keyboard focus: every menu dispatch closes the menu and returns focus to the owning row first, and the dupes/stats/recent views plus the search-history area park/restore a focused row across their
innerHTMLswaps — "set as keeper", deleting a history row and similar actions leave the arrow keys live. - The separator menu's lone "remove separator" entry used to be keyboard-unreachable by design — it is now bound to the menu walker and joins the
Tabring.
- One 16 px line-art SVG icon set: solid/hollow star (stats), flag + trash (dead marks/deletes), check (dupes apply); danger actions stay red.
- Dialogs: content width-capped and centered with a soft slide-in; the new-tab-group dialog gained breathing room and Chrome-style selected-color states.
- Dead-link toolbar reordered: scan time → filter segment with counts (All 2 · Dead 1 · Blocked 1) → rescan / mark-all / unmark-all / delete-all / select.
- Row metadata aligned across all list views: time column left, path column right.
- Root-folder menus disable the actions Chrome refuses (delete, rename, add before/after, separator) instead of erroring.
- Keyboard interaction hardening (menus, toolbar rungs, Home/End):
- Context menus (all seven) wrap around on every platform — the old macOS no-wrap exception is gone — with
Home/Endjumping to the first/last enabled item. - A shared confirm/cancel protocol for menus and dropdowns:
→/Enter/Spaceconfirm,←/Esccancel, mirrored under RTL; confirming on a bare menu container or a greyed item is a no-op. - Toolbar rungs cycle at their edges like the tab strip; the tab strip's
Home/Endare now view-scoped (the current view's first/last row — they no longer switch views), and a row-less view crosses out to its anchor instead of trapping focus.
- Context menus (all seven) wrap around on every platform — the old macOS no-wrap exception is gone — with
- Dead-link proxy hint banner: the × sits top-right (aligned with the risk banner's close button) and the hint drops the "N direct failures" prefix.
- Version handling refactored into
src/version.js(fullmajor.minor.patchcomparison, threshold "crossed into" checks); the release is 4.0.1 — a silent patch, so existing 4.0 users don't get a "new version" card. - Keyboard model hardening: menu walking skips disabled and CSS-hidden items; a new focus-regression suite gates cross-view focus hand-offs.
- Risk-banner re-arm gate is now major.minor-grained (it used to be major-only): a patch bump (4.0.0 → 4.0.1) stays silent, while 4.0 → 4.1 or 4 → 5 re-arms the banner once.
- Dead-link proxy consolidation: the legacy relay URL template (
deadProxyTemplate) is retired — values stored by older versions are cleaned out of storage automatically on upgrade. The options page's Dead scan group now manages your proxy server in place (add / test / save / clear; saving runs parse → permission → control → reachability probe and rejects unreachable servers), and the view's add-a-proxy hint strip can be dismissed with × and brought back from the Dead scan group's checkbox (hideDeadProxyStrip).
2026-08-02
- Six-view manager — Tree / Search / Recent / Stats / Dead links / Duplicates behind an icon tab strip with live count badges, per-view visibility toggles and
Alt+1…6jumps. - Search view — dual-zone layout (history top / results below) with re-runnable search history.
- Recent view — coarse time groups and reveal-in-tree.
- Local visit statistics — background collector, recently-visited section, one-click starring.
- Dead-link scanner — dual-channel checks, progressive rendering, pause/resume/cancel and cross-view dead marks, running in the service worker so closing the popup mid-scan loses nothing. Its second channel now also supports your own proxy server (http/https/socks5): a one-click add button in the view's proxy strip validates the address and probes reachability (unreachable servers are rejected) before saving, change/remove live on the same strip, and the options page shows/clears the saved server. Routing uses a marker-matched temporary PAC so only the scanner's own probe URLs go through the proxy (other tabs untouched, settings restored on settle/cancel/popup close, crash residue swept by the service worker). The toolbar adds a dead·blocked summary line and a configure-a-proxy nudge when direct-failing rows have no proxy.
- Duplicate cleaner — URL normalization, six keeper strategies, will-delete preview, undoable batch deletion.
- Risk banner — both bulk tools show a one-time backup-first banner before first cleanup.
- Command palette upgrades — Go commands per view,
/theme <name>,/session,/options, aliases, custom slash commands (URL/template/folder-group/view-preset, synced), search bridge row, auto-close on blur. - Options — Views group, custom-commands group, settings backup/restore, responsive card layout.
- Ink & Paper "fable" themes; quick-add star button; sync status presentation rework (quiet dots, localized tooltips,
(Local)/(Synced)root labels, blocked-drag toast, working "highlight unsynced" dimming).
- Selection modes in Dead links (batch mark/unmark) and Duplicates (batch group cleaning) with
Escto exit. Tab/Shift+Tabregion cycling including in-list toolbars, with per-region focus memory.- Duplicates member-row keys (
Enteropens a copy,←returns to the group head) and group-head menus. - Remember-last-view restore (default on) and count-badge, palette, quick-add and tool-button switches, plus a one-click Restore the classic header button.
- Options and advanced options merged into a single page (old URL redirects).
- Global quick-add shortcut (
Alt+Shift+S). - ARIA roles on all context menus,
aria-modaldialogs with a focus trap. - Lazy favicons; GitHub Actions CI.
- Search field click-through and unreliable native clear button.
- Adding into collapsed folders is immediately visible.
- Copy title/URL via the async Clipboard API (
clipboardWritepermission added). - Non-empty folder deletion is confirm-gated again (with undo).
- Repository reorganized (
src/,pages/,css/,assets/,scripts/); obsoleterelease/and MV2 leftovers removed (kept in git history). - All icons are inline SVG now.
- Locale baseline grew to 306 keys with all 43 locales re-aligned through the
scripts/i18n.pyLLM pipeline. - Test suite grew to 1303 cases across 40 suites; Docker harness extended with a keyboard/view verification suite and multi-theme, multi-language screenshot captures.
- The
proxypermission is declared at install time (Chrome refuses it as an optional permission) and is exercised only while a configured proxy serves a running scan or the add-flow reachability probe — never when no proxy server is set or dead-link scanning is unused.
2026-05-10
- New: #36: Add auto-resize popup toggle option. Enable/disable automatic popup height adjustment in General settings.
- New: Full 42-language support synced from cc-dev branch, all aligned with English baseline (75 keys). Languages: ar, bg, bn, cs, da, de, el, en, es, et, fa, fi, fr, he, hi, hr, hu, id, it, ja, ko, lt, lv, mk, nl, no, pl, pt, pt_BR, pt_PT, ro, ru, sk, sl, sv, th, tr, uk, vi, zh, zh_HK, zh_TW.
- Fixed: #42: Extension broken in Chrome 148 due to deprecated
<command>HTML element. Replaced with<div>elements for full compatibility.
2024-01-08
- Fixed: #31: Custom icon not working.
2023-09-04
- Fixed: #29: cursor focus doesn't stay in search bar after clearing the search text.
- Fix shortcut in manifest. Now the default shortcut is Ctrl+Shift+V (Ctrl+Shift+B cannot work in new Chrome.)
2023-02-14
- New: Key Right to open context menu (when focus on an opened dir or a bookmark) and key Left to close it (when context menu is showing).
- Remove timeout of height reset. Speed up the popup.
- Fixed: #26: open directory in the background.
2023-02-02
- New: #24: Add new option to disable incremental search (use ENTER to search).
- Fixed: #23: Incorrect link on the options page.
- Fixed: #26: Middle/Ctrl click no longer opens bookmarks in the background in Chrome 107.
- Fixed: The stupid double scroll bar (finally).
- Fixed: Focus lost when quit from search mode.
- Fixed: Arrow down triggers an error in search mode.
- Fix some undefined errors.
- Update code to manifest V3. minimum_chrome_version = 88.
2020-09-12
- New: #15: Search for folders in bookmark search bar.
- New: Resize the height of popup.
- Added: Italy language.
- Added: Russian language. Thanks for @Stanislav .
- Fixed: #19: "Add to the end of folder" feature does not work bugs.
- Fix some undefined errors.
- Update code to ecmascript version 6. minimum_chrome_version = 61.
2020-07-03
- Added: France language. Thanks for @Fab-fr.
- Added: Chinese Hong Kong language.
- Fixed: #12: Focus lost when clear the menu.
- Fixed: #18: Tree does not scroll when drag to top or bottom.
- Fix an undefined error when pressing key DOWN.
- Fix the support of bookmarklet. Thanks for @ZG-nico.
2019-08-22
- Fixed: New icons.
2019-08-22
- Fixed: Double scrollbar since Chrome version 77+.
2019-05-06
- Added: Placeholder "__VBM_CURRENT_TAB_URL__" in bookmark URL to make some bookmarklets work (Chrome does not allow document.location.href in BMlet). It will be replaced with URL of current active tab when you click BMlet from vBookmarks.
- Improved: Scrollbar CSS style.
- Fixed: Open URL twice when clicked by middle button of mouse. #9
- Fixed: Sometimes search will fail. #7
- Fixed: Context menu position.
2013-10-21
- Fixed: Remove double scroll bars.
2013-08-30
- Fixed: Remove HTML notifications because it is not available now. https://bugs.webkit.org/show_bug.cgi?id=98388.
2013-08-29
- Fixed: "Unexpected end of input" in js.
2013-04-09
- Fixed: Context menu will be dismissed when scrolling up/down (broken again in previous version).
- Fixed: Remember position of scroll bar (broken again in previous version).
2013-04-02
- Fixed: Scroll bar does not work above chrome 26+ (not well tested).
2012-12-12
- Added: Cancel button for dialogs in vbookmarks.
- Improved: Position of context menu. And context menu will be dismissed when scrolling up/down.
- Fixed: Now it can remember and restore position of scroll bar correctly.
2012-11-01
- Added: Advanced options for separator.
- Improved: Synchronizable separators.
- Fixed: Version checking in background.js.
- "The real title of bookmark which is shown as a separator": By default it is "|". That means the separators you added in vbookmarks will be shown as a normal bookmark in Chrome bookmark manager or bookmark menu, with this title value. You can modify it to "------------" so that you can split your bookmarks horizontally even if you check your bookmarks in Chrome bookmark menu.
- "The real URL of bookmark which is shown as a separator": By default it is "http://separatethis.com/". It's a "online separator". The separators you added in vbookmarks will be shown as a normal bookmark in Chrome bookmark manager or bookmark menu, with this URL value.
- "If URL of a bookmark contains this string, it will be shown as a separator": If you set this value (you can set several URLs joined by ";"), all bookmarks whose URL contains any of them will be shown as real separators in vbookmarks. e.g. if you set it to google.com, all google services in your bookmarks will be shown as separators.
2012-08-19
- Updated: Color of ICON.
- Updated: Style of separator.
- Fixed: Neatbookmarks bug: Scrollbar will be reset to the top when opening and scrolling the popup down.
2012-08-01
- Added: Separators for bookmarks/folders. But it is a local record and cannot be synchronized between different devices. see #3
- Added: Color of icon is changed to red.
- Added: Simple update checking and desktop notification.
- Fixed: Neatbookmarks bug: Wrong position of dragged bookmark when vertical scrollbar is scrolled down (since Chrome18).
- Removed: Several languages. Only 4 locales are left: en, ja, zh, zh_TW. Cannot maintain many translations any more.
2012-06-26
- Fixed: Double scrollbars in Chrome 19. Sorry for the previous untest release. I do not have many different Chromes in different versions :)
- Fixed: Width resetting occured when expanding root folder. #2
2012-06-24
- Fixed: Cannot search bookmarks in Omnibox (*+space). [Content Security Policy]
- Fixed: Restore width of the popup window. [Content Security Policy]
- Fixed: Dialogs cannot submit their forms. [Content Security Policy]
2012-06-21
- Fixed: manifest problem in Chrome 20+.
- Fixed: separated script file instead of inline scripts. see Content Security Policy http://code.google.com/chrome/extensions/contentSecurityPolicy.html
2012-06-20
- Fixed: Scrollbar problem in Chrome 18,19. #2
2012-05-25
- Fixed: Scrollbar glitch in Chrome 18,19. #1
2011-11-30
- Added: update selected bookmark with current URL.
- Added: copy title and URL of selected bookmark to clipboard.
- Fixed: after adding new bookmark or folder to a closed folder, its original children cannot be shown correctly.
- Fixed: make up some missing translations for cs(Czech).
2011-11-16
- Added: option for only displaying bookmarks in Bookmark Bar.
- Added: context menu for adding folder before/after bookmark/folder.
- Fixed: some translations in multi-language support.
2011-11-15
- First version.
Installing from source ("Load unpacked") or the Web Store build is recommended. Legacy crx sideloading notes: above Chrome 20+, drag the crx file to chrome://chrome/extensions/; above Chrome 22+, add --enable-easy-off-store-extension-install to accept extensions from outside the Web Store (see details).
Available on WebStore — the recommended way to use this extension.