Development

Very Good AdBlock is a Bun TypeScript project with STX-authored extension UI and Bunpress-authored docs.

Extension Build

bun run build           # Chrome, output to dist/
bun run build:firefox   # Firefox, output to dist-firefox/

Both targets share one codebase. The build is declared in config/extension.ts and driven by @stacksjs/browser-extension, which derives the browser-specific manifest.json (service worker vs. event page, browser_specific_settings.gecko, etc.), bundles the content/background/page scripts, and packages the store zips at build time. See Install for loading and packaging each target.

Docs

bun run docs:dev
bun run docs:build
bun run docs:preview

Docs are Markdown files in docs/, with Bunpress config in config/docs.ts.

Generated Rules

bun run update:filters
bun run validate:rules

Filter sources are pinned and attributed in the repository.

Releasing

Releases are cut with the Stacks CLI, which wraps bumpx (version bump) and logsmith (changelog):

bun run release   # buddy release — pick the bump, then tag & push

buddy release bumps package.json, tags v<version> and pushes. The pushed tag triggers .github/workflows/release.yml, which:

  1. Sets up the toolchain via the pantry action.
  2. Builds and packages both targets (bun run package + bun run package:firefox).
  3. Creates a GitHub Release for the tag with the Chrome and Firefox zips and a generated checksums.txt attached. The release notes are generated by the pantry action itself (release-changelog: auto), which runs logsmith over the previous-tag → this-tag range — no committed CHANGELOG.md required.

No secrets are needed beyond the automatic GITHUB_TOKEN.