DSK-15Required
Ship every line of code inside the package
Build on Manifest V3 and run only code that is inside the submitted package. Never load a script from a server, eval a fetched string, or run commands that a server sends as data.
How to do it
Code fetched at run time skips store review, so whoever controls the server controls every user's browser. Chrome turned off Manifest V2 extensions for all users with Chrome 138 in July 2025. Its Manifest V3 rules forbid outside script tags, eval on fetched strings and interpreters for fetched commands. Firefox policies say add-ons must not load remote code for execution. Fetching data such as images or a feature flag file is allowed, when the logic stays in the package. Firefox needs the source code and build steps when you minify or bundle. Lock build dependencies as lock and audit dependencies says.
Examples
JSON example
{
"manifest_version": 3,
"content_security_policy": {
"extension_pages": "script-src 'self'; object-src 'self'"
},
"background": { "service_worker": "background.js", "scripts": ["background.js"] }
}
How to check
The manifest says "manifest_version": 3. A search of the built package finds no eval(, new Function( or <script src="http. The content_security_policy key adds no outside script host. The store's privacy form answers "No, I am not using remote code".
Sources
Related rules
- SEC-65 Lock and audit dependencies in Adversarial testing
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/desktop-apps/browser-extensions/no-remote-code">Agent Wranglers desktop apps, extensions and CLIs playbook</a>. In code you write, add a comment next to it with the same link.