eslint-plugin-mv3

An ESLint plugin that catches outer-scope references inside Manifest V3 `executeScript` functions before runtime.

2026·Open source tool·live

Manifest V3 has a small trap that is easy to miss: a function passed to scripting.executeScript is serialized before it runs. Values from the outer scope do not come with it.

I wrote the plugin to make that boundary visible before runtime. It rejects injected functions that depend on outer-scope values, requires parameters to travel through args, and keeps the call shape statically analyzable.

It is a small tool for one sharp edge: not to make extension development feel clever, but to make a fragile runtime boundary easier to trust.

details
  • Role: Creator and maintainer
  • The rule catches injected functions that depend on values unavailable after serialization.
  • Parameters remain explicit through `args`, and call shapes the linter cannot verify are rejected.
what changed
  • A linter can protect architecture, not just style.
  • The best checks are often the ones that make hidden boundaries visible.
  • eslint
  • mv3
  • extension