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:
- Sets up the toolchain via the pantry action.
- Builds and packages both targets (
bun run package+bun run package:firefox). - Creates a GitHub Release for the tag with the Chrome and Firefox zips and a generated
checksums.txtattached. The release notes are generated by the pantry action itself (release-changelog: auto), which runs logsmith over the previous-tag → this-tag range — no committedCHANGELOG.mdrequired.
No secrets are needed beyond the automatic GITHUB_TOKEN.