Skip to content

Latest commit

 

History

History
29 lines (18 loc) · 1.75 KB

File metadata and controls

29 lines (18 loc) · 1.75 KB

ADR 0001: No build system, plain vanilla JS

  • Status: Accepted
  • Date: 2026-05-20 (retroactive)

Context

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.

Decision

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.

Consequences

  • 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.

Production path

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.

References

  • 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.