- Status: Accepted
- Date: 2026-05-20 (retroactive)
The extension targets caseworkers on government-managed laptops where installing Node, npm, or other dev tooling is friction-heavy or disallowed. The extension itself is small (~1k LoC) and has no need for transpilation, JSX, or third-party libraries.
Ship the extension as plain HTML/CSS/JavaScript loaded directly by Chrome's Manifest V3 content-script mechanism. No package.json, no bundler, no transpiler, no dependency tree.
- Pro — Zero install steps for contributors; any developer can read, edit, and load-unpacked the extension immediately.
- Pro — No supply-chain surface; nothing to audit, vendor, or update.
- Pro — Zero ongoing build cost or CI complexity.
- Con — No type checking, linting, or module system. Scripts share a single global namespace and depend on the order in manifest.json
content_scripts[].js. - Con — Modern conveniences (async iteration helpers, JSX, TypeScript) are unavailable without revisiting this decision.
Adopt TypeScript with a fast bundler (esbuild or Vite) so that source can use modules, type-checking, and shared utilities; emit a single content-script bundle per entrypoint. Layer in ESLint, Prettier, unit tests (Vitest or Jest with jsdom), and CI that gates merges on type-check, lint, and test. Provide a versioned, reproducible build artifact suitable for code signing.
- manifest.json — content scripts are loaded directly, no build artifacts referenced.
- Absence of
package.json,tsconfig.json, or any build config in the repository root.