Softwr

Guide

Userscript managers in 2026: what Manifest V3 actually changed

Chrome finished removing Manifest V2 in 2025, and userscript managers were hit harder than any other category of extension, because running code a user supplies is precisely what MV3 was written to restrict. Both Tampermonkey and Violentmonkey survived it. What changed is that Chrome now requires the reader to flip a switch before either one can do its job, and the switch has moved twice.

By Softwr Editorial, Software research teamPublished 8 min read
Share

The short answer

  • Both Tampermonkey and Violentmonkey ship Manifest V3 builds and both still work on Chrome. The category was not killed by MV3, but it was made conditional.
  • Chrome will not let either one run your scripts until a toggle is enabled. Before Chrome 138 that meant turning on Developer Mode; from 138 it is a per-extension "Allow User Scripts" switch on the extension’s own details page.
  • From Chrome 138, if that toggle is off the API is simply absent rather than erroring, so a manager can look installed and healthy while silently doing nothing.
  • Violentmonkey is open source under an MIT-style licence. Tampermonkey is closed source, and is the only one of the two with an official Safari build, which is paid.
  • Firefox never forced the MV2 removal on the same timetable, so both managers behave more predictably there. If your scripts matter more than your browser does, that is the honest recommendation.
  • Sync exists in both, but GM_setValue data does not travel with it. Moving browsers moves your scripts and leaves their stored state behind.

What Manifest V3 actually changed

Chrome completed its Manifest V2 phase-out through 2025, force-disabling extensions that had not migrated. Most categories adapted with some grumbling about blocking rules. Userscript managers had a harder problem: their entire function is to fetch code a user chose and run it in a page, and restricting exactly that was one of MV3's design goals.

The resolution was a dedicated userScripts API, available from Chrome 120 onwards for MV3 extensions. An extension declares the userScripts permission alongside host permissions for the sites it will touch, and registers scripts through that API rather than injecting them itself.

So the category survived. Both major managers ship MV3 builds and both run on Chrome, Edge and Opera today. The part that trips people up is not the migration, it is the consent gate that came with it.

The toggle nobody tells you about

Chrome will not hand the userScripts API to an extension unless the person using the browser has explicitly allowed it. Reasonable, and the reason this is worth an article is that the switch has moved.

  • Chrome before 138. The user had to enable Developer Mode at chrome://extensions. A browser-wide setting, with a persistent warning attached, to permit one extension to do the thing it was installed for.
  • Chrome 138 and later. A per-extension Allow User Scripts toggle on that extension's own details page. Narrower and better: it grants the capability to one extension rather than putting the whole browser into a developer posture.

The behaviour when it is off also changed, and this is the detail that produces the support threads. Chrome's own documentation notes that from 138, with the toggle disabled, browser.userScripts is undefined rather than throwing. The manager loads. Its dashboard opens. Your scripts are listed, enabled, apparently fine. Nothing runs, and nothing says why.

If you have installed a userscript manager and your scripts are not firing, check that toggle before you debug anything else. It is the single most common cause and it produces no error message.

Tampermonkey against Violentmonkey, on the things that differ

Tampermonkey and Violentmonkey account for most of the installed base, and for most of the argument. They are more alike than either community suggests: both support the older synchronous GM_ functions and the newer promise-based GM. ones, both run on Chrome, Firefox, Edge and Opera, both sync, both export.

The differences that would actually change a decision:

  • Licence. Violentmonkey is open source under an MIT-style licence: the change history is public and anyone can file a pull request against a behaviour they dislike. Tampermonkey is closed source, so using it means trusting the vendor, because the code cannot be independently audited. For an extension that by design can read and rewrite every page you visit, some people will stop reading here.
  • Safari. Tampermonkey has an official Safari build, sold through the App Store. Violentmonkey has none. On Safari this is not a comparison.
  • The dashboard. Tampermonkey's is the fuller one, with syntax highlighting, a diff view for script updates and a searchable list. Violentmonkey is leaner and will happily hand editing to your own editor. Which is better depends entirely on whether you write scripts or only install them.
  • New APIs. Violentmonkey has generally been quicker to adopt new GM. functions.
  • Android. Violentmonkey is available on Firefox for Android through Mozilla's add-on collection. Tampermonkey's mobile story is thinner.
Compare Tampermonkey and Violentmonkey side by side

Pricing, platforms and the GM API surface, in a table rather than prose.

The sync trap, which costs people their settings

Both managers sync scripts to a cloud provider. Tampermonkey covers Google Drive, Dropbox, OneDrive, WebDAV and local files; Violentmonkey covers Google Drive, OneDrive, WebDAV and a generic REST endpoint. Both export a zip.

What neither carries across is the data your scripts have stored through GM_setValue. Your scripts arrive on the new machine; their accumulated state does not. For a script that only restyles a page this is invisible. For one that holds an API key, a whitelist, a counter or anything you configured once and forgot, it is a silent reset on the far side of a migration you thought had worked.

If your scripts hold state worth keeping, export it deliberately before you move rather than assuming sync covered it.

The recommendation people do not want

Firefox has not forced the same timetable on the old extension APIs, so userscript managers behave more predictably there than on Chrome. No consent toggle that silently disables the API, no per-version change to where that toggle lives.

That is a real answer to "which userscript manager should I use", and it is about the browser rather than the manager. If userscripts are how you use the web, running them somewhere the platform is not actively narrowing them is the choice with the fewest future surprises. If you are on Chrome for other reasons, both managers work; you simply have a switch to find first.

The other managers, and when one of them is the answer

The big two take most of the attention. Four others are worth knowing, because each is the right answer in a situation the big two handle badly.

  • Greasemonkey. The original, and Firefox only. It is still maintained and still works, and it carries the longest history of any manager here. Its script API diverged from the Tampermonkey-flavoured norm years ago, so a script written against modern GM. conventions may need adjusting. Choose it if you are on Firefox and value the lineage; choose Violentmonkey if you want the widest script compatibility on the same browser.
  • FireMonkey. Also Firefox, and the distinguishing feature is that it manages user styles as well as user scripts in one extension. If half of what you install is CSS rather than JavaScript, that consolidation is the reason to look.
  • Userscripts for Safari. An open-source Safari extension, and the usual recommendation for people who want userscripts on Safari without paying for Tampermonkey's App Store build.
  • Stay. A newer Safari manager whose selling point is compatibility: it runs its own native scripts and also accepts scripts written for Tampermonkey and Violentmonkey, which is the practical problem on Safari, where the library was written for browsers you are not using.

The pattern is worth naming. On Chrome the question is which of two managers to run. On Firefox you have genuine choice and the platform is not fighting you. On Safari the question is which compatibility compromise you prefer.

What actually breaks under MV3, beyond the toggle

The consent switch is the one that catches everyone, but it is not the only behavioural change. These are the ones that show up as "this script used to work".

Background requests. MV3 replaced persistent background pages with service workers, and XMLHttpRequest is not available in a service worker. Managers moved to fetch underneath. Most scripts never notice, because they call GM_xmlhttpRequest rather than the browser API directly, but the translation is not perfectly lossless: reports against MV3 builds include FormData being form-encoded when it was not before, and binary responses being handled poorly or not at all. If a script uploads files or downloads an image as a blob, that is where to look first.

Content Security Policy. A page with a strict CSP blocks inline script, and that is the whole point of a CSP. Userscript managers run your code in an isolated world where the page's policy does not apply, which is why a userscript can still do things the page itself forbids. Where this bites is the cross-boundary work: touching the page's own window through unsafeWindow, or injecting elements the policy rejects.

unsafeWindow. Still available, still the correct tool when a script genuinely must reach the page's own JavaScript context, and still the sharpest object in the drawer. Reaching into the page's global scope deliberately steps outside the isolation that separates your script from the site's, which is the same boundary that stops a hostile page reaching back. Treat any script that uses it as one you need to have read.

The part that deserves more attention than the comparison

A userscript manager is the most privileged thing most people install in a browser. It can read and rewrite every page you visit, including your bank, your email and your employer's internal tools. The extension itself is not the risk; the scripts are, and they come from wherever you found them.

Three habits are worth more than any choice between managers.

Read what you install. A userscript is plain JavaScript and the manager shows it to you before it runs. You do not need to understand every line to spot the shape of a problem: a script that restyles a page should not contain a URL you do not recognise, and a script that hides adverts has no reason to read document.cookie or post anything anywhere.

Watch the @match lines. The header declares which sites the script runs on. @match *://*/* means every page on the internet, which is occasionally justified and usually laziness. Narrow it yourself if the author did not; the managers let you edit the header of an installed script.

Understand auto-update. Scripts update from the URL in their @updateURL, which means the code you read is not necessarily the code that will be running next week. That is convenient, and it is also a supply chain with one maintainer and no review. For anything with broad matches, consider turning automatic updates off and reading the diff yourself. Tampermonkey's dashboard shows a diff view for exactly this.

None of this is an argument against userscripts. It is an argument for treating them as code you are choosing to run with your own privileges, because that is what they are.

Choosing, in one paragraph each

You are on Firefox. Violentmonkey, unless you specifically want user styles managed in the same place, in which case FireMonkey. You get the widest script compatibility and a platform that is not narrowing the APIs underneath you.

You are on Chrome or Edge and you mostly install other people’s scripts. Either works. Violentmonkey if the open-source licence matters to you, Tampermonkey if you want the richer dashboard and the diff view on updates. Find the Allow User Scripts toggle first, whichever you pick.

You write your own scripts. Tampermonkey's editor, diff view and searchable list do more for you, and its documentation is the more complete of the two. Violentmonkey pairs better with an external editor if that is how you already work.

You are on Safari. Tampermonkey if you will pay for the App Store build and want the name everyone writes scripts against. Userscripts if you want an open-source option. Stay if your existing library was written for Tampermonkey or Violentmonkey and you need it to keep working.

Your scripts are load-bearing. Run them on Firefox. Not because Chrome's managers are bad, but because the consent gate has already moved once between Chrome versions and the direction of travel on running user-supplied code in Chrome has been consistent for years.

Questions people ask

Does Tampermonkey still work on Chrome in 2026?
Yes. Tampermonkey ships a Manifest V3 build and runs on Chrome. You must enable the "Allow User Scripts" toggle on its details page in Chrome 138 or later, or Developer Mode in earlier versions, before your scripts will run.
Why are my userscripts not running after installing a manager?
Almost always the Chrome consent toggle. From Chrome 138, if "Allow User Scripts" is off for that extension, the userScripts API is undefined rather than raising an error, so the manager appears installed and healthy while nothing executes. Check the toggle on the extension’s details page first.
Is Violentmonkey safer than Tampermonkey?
Violentmonkey is auditable and Tampermonkey is not: Violentmonkey is open source under an MIT-style licence with a public change history, while Tampermonkey is closed source. That is a difference in verifiability rather than a finding that either has behaved badly, and both can read and modify every page you visit.
Which userscript manager works on Safari?
Tampermonkey, through a paid App Store extension. Violentmonkey has no official Safari build.
Will my scripts and their settings transfer if I switch managers?
The scripts will. Values stored through GM_setValue do not transfer automatically, in either direction, so anything a script saved, such as an API key or a configured list, needs exporting separately.
What is the difference between a userscript manager and a browser extension?
A userscript manager is itself an extension. What it adds is the ability to run small scripts you supply, per site, without packaging and installing each one as its own extension. That is also why Chrome gates it behind a consent toggle: the manager’s whole purpose is to run code the browser never reviewed.
Do userscripts still work on pages with a strict Content Security Policy?
Generally yes. Managers run scripts in an isolated world where the page’s CSP does not apply to your code, which is why a userscript can do things the page itself is forbidden from doing. The friction appears when a script crosses back into the page’s own context through unsafeWindow, or injects elements the policy rejects.
Are userscripts safe?
The manager is not the risk; the scripts are. A userscript can read and modify every page it matches, including banking and email. Read the source before installing, narrow any @match that covers the whole web, and remember that @updateURL means the code can change after you have read it.

Sources

Every price, limit and date above was checked against these pages on the day shown. Where a figure has since moved, the vendor’s own page is the authority and this one is a snapshot.

  1. 1chrome.userScripts · Chrome for DevelopersEstablishes Chrome 120+ and MV3 as the requirement, the userScripts permission, and that the toggle differs by version: Developer Mode before Chrome 138, a per-extension "Allow User Scripts" switch from 138. States that from 138 the API is undefined rather than throwing when the toggle is off.Checked
  2. 2Tampermonkey vs Violentmonkey: Which to Use · HatScriptsSource for the licensing difference, the Safari and Android availability, the sync provider lists, the GM_setValue caveat and the relative pace of GM. API adoption. A secondary source, used where the two vendors do not publish a directly comparable statement.Checked
  3. 3Violentmonkey · ViolentmonkeyProject home. Confirms open source status and the browsers with official builds.Checked
  4. 4Documentation · TampermonkeyReference for the GM_ and GM. API surface, the script header directives including @match and @updateURL, and the dashboard features described here.Checked
  5. 5GM_xmlhttpRequest limited per browser/script manager (issue 1040) · TampermonkeyCommunity reports of MV3 request handling differences, including FormData encoding and binary responses. Cited as evidence that the translation to fetch under service workers is not perfectly lossless, not as a vendor statement.Checked
  6. 6FireMonkey Help · FireMonkeyConfirms FireMonkey manages user scripts and user styles in one Firefox extension.Checked

Read next

  • Guide

    The Best Ad Blockers After Manifest V3

    Chrome finished removing Manifest V2 in 2026, and that single platform decision reshuffled the whole category. The extension that was the default recommendation for a decade no longer runs there at all. Here is what changed technically, what still works, and why the right answer now depends on which browser you opened this page in.

  • Guide

    Dark Mode Extensions: Dark Reader, Night Eye and the Alternatives

    A dark mode extension is not a colour swap. It rewrites a site's stylesheet as the page loads, and the popular ones differ in how they do that. Which technique an extension uses determines what breaks, how much memory it costs you, and whether the paid option is worth anything at all.

  • Guide

    AIS vessel tracking platforms: what consolidation left you to choose from

    Three of the best known names in ship tracking belong to the same company. Kpler acquired MarineTraffic and FleetMon in 2023, and the effect on a buyer in 2026 is that a comparison which looks like three quotes is often one vendor quoting three ways. This is what each platform is actually for, what the published coverage figures mean, and where the genuinely independent options remain.