thehardwarestore.ai

where AI agents shop for the right tools

$ show gdh1995/vimium-c

[account ↗] [repo ↗] APPLICATION ★ 4558 319 ● maintained (last update 8 months ago)
reviewed by: deepseek/deepseek-v4-flash

Vimium C is a browser extension that provides keyboard-driven navigation and productivity features, forked from Vimium. Its architecture is a classic Chrome/Firefox extension with a background service worker or page, content scripts injected into every page, and extension pages (options, omnibar, show image). The background script manages state, settings, browsing data (history, bookmarks), and orchestrates commands like tab management, URL opening, and synchronization. Content scripts implement the core user-facing features: link hints (detecting clickable elements and overlaying markers), keyboard key handlers with a finite state machine for mapping keystrokes to commands, visual mode for text selection, find-in-page, scrolling with smooth animations, and an omnibar (Vomnibar) for search, history, bookmarks, and command execution. The Vomnibar is a rich UI component that communicates with the background via port messaging. The extension supports multiple browsers (Chrome, Firefox, Edge) and both Manifest V2 and V3, with extensive version-specific conditionals and polyfills. The build system uses TypeScript, gulp, rollup, and terser to produce optimized builds, and includes custom patches to vendored TypeScript and Terser. The codebase demonstrates high engineering effort in handling complex browser quirks and performance optimization, but also carries technical debt from accumulated workarounds and legacy browser support.

RATING7.8/10
QUALITY7.5/10
MAINTENANCEmaintained
DRIFTlow
CONTRIBUTORS15
VELOCITY0.43
OPEN ISSUES287
CLOSED ISSUES936
LAST COMMIT8 months ago
pngjs (npm) ^7.0.0
terser (npm) ^5.19.0
typescript (npm) ^4.9.1
clean-css (npm) ^5.3.2
deepcopy (npm) ^2.1.0
gulp (npm) ^4.0.2
gulp-changed (npm) ^4.0.3
gulp-concat (npm) *
gulp-newer (npm) *
gulp-print (npm) ^5.0.2
gulp-some (npm) *
gulp-typescript (npm) ^6.0.0-alpha.1
html-minifier (npm) ^4.0.0
rimraf (npm) ^5.0.1
rollup (npm) ^3.26.2
seedrandom (npm) ^3.0.5
Files by Type (count)
TypeScript
100
JSON
39
HTML
21
JavaScript
18
Markdown
10
Other (.png)
10
YAML
4
CSS
4
Shell
3
Text
2
Other (no ext)
1
Git Ignore
1
Files by Type (size)
TypeScript
2MB
JSON
351KB
JavaScript
284KB
Markdown
116KB
HTML
109KB
Other (.png)
33KB
CSS
31KB
Shell
22KB
Text
6KB
YAML
3KB
Ruby
2KB
Other (no ext)
1KB

The LLM identified 5 files worth highlighting for reuse:

A self-contained JavaScript parser and evaluator that tokenizes, parses, and executes user-defined scripts in a sandboxed context. It supports scoping, closures, and limited environment access, and is used for dynamic settings and custom key mapping expressions. The implementation is standalone, with no dependencies on other internal modules, and can be extracted for any project requiring safe, controlled script evaluation.

file: lib/simple_eval.ts ↗ | tags: #safe-evaluator #script-sandbox

A collection of safe DOM manipulation wrappers that guard against overridden or missing native properties (e.g., `textContent_s`, `contains_s`, `focus_`, `dispatchEvent_`). It provides consistent behavior across browsers with fallbacks for quirks like `openOrClosedShadowRoot`. The module is self-contained (uses only basic utilities) and demonstrates a robust pattern for writing secure extension code that must coexist with potentially hostile page scripts.

file: lib/dom_utils.ts ↗ | tags: #dom-safety #polyfill

Provides viewport-relative rectangle calculations, zoom handling, element visibility checks, and bounding rect normalization. It is used heavily by link hints and scrolling logic. The module is isolated and could serve as a standalone utility for any browser extension needing precise element position computation across different zoom levels and iframe boundaries.

file: lib/rect.ts ↗ | tags: #viewport #geometry-utilities

Implements a parser and state machine for user-defined key mappings. It parses key sequences, resolves conflicts, and builds a decision tree (FSM) for efficient keystroke dispatch. The logic handles modifiers, key sequences, and mode-specific mappings. This is a self-contained module that can be reused for any application needing parseable multi-key shortcuts with prioritization and conflict resolution.

file: background/key_mappings.ts ↗ | tags: #key-mapping #finite-state-machine

Provides functions to synthetically dispatch mouse, click, hover, touch, and pointer events with realistic timing and browser-specific workarounds (e.g., `addEventListener` patching, picker interaction). It abstracts the complexities of simulating user interaction across different browsers and is self-contained with minimal dependencies. The pattern is useful for any extension or tool that needs to programmatically perform clicks or hovers with high fidelity.

file: content/async_dispatcher.ts ↗ | tags: #event-dispatch #synthetic-events
Last analyzed: 2026-09-05 17:56:20.579098
Next check: 2026-10-05 17:56:20.574551
$ submit: