Userscripts
User Script and Style Manager
Free
Userscripts is an open source Safari extension that lets you save and run arbitrary bits of JavaScript (and CSS) code for the websites you visit.
Features:
- Open source
- No user tracking
Use cases:
- Automatic page redirection
- Website page manipulation (styling, element creation)
- Custom ad-blocking
- Custom code injection
- Custom style injection
If you're looking for a way to easily create quality of life Javacript code snippets for your web browsing experience, give Userscripts a try.
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
more Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix: significantly reduces memory usage - #900 #901
- Resolve crash issue with large metadata userscript in iOS
- Prevent potential memory usage when there are too many scripts
1.8.6 11 Jan
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix: temporarily disable auto scripts update check - #895
1.8.4 27/12/2025
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix(ios): mitigation measure for directory reset issue - #885
1.8.3 10/12/2025
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix: avoid browser tabs content scripts memory leak - #864
1.8.2 01/09/2025
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- feat: surpoort `GM.xmlHttpRequest` upload property - #809
- https://github.com/quoid/userscripts/tree/release/4.x.x#api
1.8.1 10/07/2025
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- feat: GM.xmlHttpRequest add document type support and performance improvements - #710
- Add support `responseType: "document"` for `GM.xmlHttpRequest`
- New non-standard `contentType` key in `GM.xmlHttpRequest` response object
- perf: Optimized for transmission and processing of various data types
- fix: `GM.info.version` is missing #706
- feat: GM.xmlHttpRequest returns promise and supports multiple data types - #716
- `GM.xmlHttpRequest` send supports more data types and deprecates `binary` key #708
- `GM.xmlHttpRequest` return a promise resolved with response object #712
1.7.1 26/03/2025
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix: further avoid potential thread crashes - #724
1.5.4 22/09/2024
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix: avoid two potential thread crashes - #714
- fix(macos): popup window height and scrolling issues
1.5.3 13/09/2024
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix: enforce stricter rules for new remote file types and make related improvements - #682
- fix: make `@grant none` work correctly - #693
- fix: avoid path trailing slash stripped in older os versions - #695
1.5.2 03/09/2024
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Highlights:
- In this release, introducing our new open source automated build and deployment process, where everything from the open source code to the app installed on your device is transparent and verifiable.
- We've fixed a compatibility issue that existed in visionOS (Designed for iPad) and you can now use this Safari extension in Apple Vision Pro, just like on the iPad and iPhone.
Changes:
- refactor(native): several significant improvements around preferences - #546
- With a new preference item, the logger is now disabled by default, and a toggle has been added in iOS and macOS.
- In iOS, the toggle is located in the `Userscripts` sub pane of the system `Settings` app.
- In macOS, the toggle is under the `DEBUG` menu in the menu bar of `Userscripts` app.
- The old save location will be smoothly and imperceptibly imported into the new preferences.
- Fully optimized storage and reading processes, eliminating potential kernel resources leaks.
- Only use shared containers and have updates between app and ext done auto via wrappers.
- In iOS, enable the feature of displaying the app's document directory to the system `Files` app.
- It also supports importing and exporting document content through `iTunes` or `Finder`.
- Supports in-place editing or viewing of third-party applications that supports file providers.
- This directory is automatically set by default when the app is launched for the first time.
- Optimize the first-time use experience, no longer require to manually set a directory.
- Retain the ability to change the save location and optimize relevant text prompts.
- fix(ios): improve initialization process make sure display document folder - #548
- refactor: update dev and build process and improvements - #560
- Some minor tweaks and optimizations to the iOS App WebView.
- Show informative text when using the default app document.
- Improved rendering flickering through min-height and min-width.
- Click on the current directory text to open the folder in Files app.
- Refactor the APIs append and injection process of user scripts in content scripts.
- Only parse UserJS code without APIs precode can reduce computation.
- This also incidentally fixes "Userscripts with quotes in their names break #401".
- Inject into page with closed ShadowRoot for better security.
- fix: correctly handle url containing hash but without search - #593
- fix: make the Open Extension Page button work stably - #616
- refactor: improve basic popup view structure and fix issues - #624
- ci: verifiable open source automated builds and deployments - #665
- fix: avoid potentially infinite hangs on async messages - #669
- fix: avoid potentially infinite hangs on async messages (revise) - #671
1.5.0 21/08/2024
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix: correctly returns xhr errors when type is blob - #558
1.4.5 01/11/2023
- fix: update rules when toggle dnr item - #522
- refactor: improve native data update logic and triggers - #525
- refactor: update dependencies and improve accessibility - #528
- fix: make download button back to work in code editor - #537
- fix: properly clean up resource files no longer required - #538
- fix: restore @require resources injection in iOS devices - #539
- refactor: improve code of required resources cleanup - #540
- refactor(logger): reduce disk writes and improve privacy - #541
1.4.4 04/10/2023
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
fix: correct the setClipboard property accessor - #514
1.4.3 17/07/2023
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
fix: properly discharge xhr resources - #476
fix: disable dnr below safari 15.4 - #477
fix: revive javascript linter in editor page - #481
1.4.2 30/05/2023
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix: metadata @match now for url path plus query string - #463
- fix: show toolbar count in settings and some improvements - #469
- fix: compatibility for Safari below 15.4 - #472
You should notice that our latest version provides you with more convenient features while keeping the size smaller. (^_^)v
1.4.1 27/04/2023
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS/iOS] - misc style and code changes - #374, #376, #433, #442, #443
- [macOS/iOS] - update default file name patterns (.user.js suffix now added) - #436
- [macOS/iOS] - refactor script installation experience from popup - #439
- [macOS/iOS] - fix permission for declarativeNetRequest - #458
1.4.0 03/04/2023
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS/iOS] - fix userstyle injection - #368
- [macOS/iOS] - minor code refactoring
1.3.3 02/11/2022
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS/iOS] - remove `use strict` statement from code wrap - #362
1.3.2 30/10/2022
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS/iOS] - bug fixes - #355
1.3.1 24/10/2022
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS/iOS] - fixed bug that prevented `closeTab()` API method from working - #310
- [macOS/iOS] - only pass valid `@grant` value to userscrupt - #307
- [macOS/iOS] - better error logging when injecting into content scope - #312
- [macOS/iOS] - script injection updates - #314
- [macOS/iOS] - use `Function()()` instead of `eval()` - #323
- [macOS/iOS] - fix bug causing scripts to be trashed when renaming - #317
- [macOS/iOS] - no longer using window.postMessage for API calls - #315
- [macOS/iOS] - updated userscript wrapper - #322
- [macOS/iOS] - put apis and wrapping process into content.js - #335
- [macOS/iOS] - use browser.runtime.connect refactor xhr api - #336
- [macOS/iOS] - settings experience optimization - #341
- [macOS/iOS] - misc. code cleanup
- [macOS] - auto close notifications - #330
1.3.0 23/10/2022
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS/iOS] - GM.xmlHttpRequest onloadstart bugfix - #304 (thank you @spd2last!)
- [macOS/iOS] - GM.getTab if tab is null, return empty object - #306 (thank you @maggch97!
- [macOS/iOS] support for GM_info.script.icon - #302
- [macOS/iOS] update`@match` matching - #301
- [macOS] clarify acceptable blocklist values #283
- [macOS/iOS] fix userscript install checking bug when dom elements manipulated - #295
- [macOS/iOS] add GM.getTab and GM.saveTab - #296 (thank you @maggch97!)
- [macOS/iOS] further changed the way `@grant` interacts with `@inject-into`
- if `@inject-into` is not set, then `@inject-into` is set to `auto`
- if `@inject-into` is `auto`
- if `@grant`s are requested, then `@inject-into` is `content`
- if `@grant` is `none`, then `@inject-into` is `page`
- if page content security policy blocks script execution, `@inject-into` becomes `content`
- if `@inject-into` is `content`, all `@grant`s are provided
- if `@inject-into` is `page`, no `@grant`s are provided (+ warning in the console)
- thank you @scholtzm!
1.2.3 28/08/2022
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS/iOS] fix `@grant none` from being disallowed in page injection context - #291
- [macOS/iOS] revert the default `@inject-into` value to `auto` - #265
1.2.2 21/07/2022
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS/iOS] update url validation for `@downloadURL` and `@updateURL` #274
- [macOS/iOS] fix css subframe injection - #268
- [macOS/iOS] change the way `@inject-into` works when `@grant` values are present - #265
- when `@grant` values are present, `@inject-into page` is disallowed
- this could change the way some script currently function
- SEE: https://github.com/quoid/userscripts/issues/265
- [macOS/iOS] `content` is now the default `@inject-into` value - #265
1.2.1 19/07/2022
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS] enable basic userscript linting when javascript linter running in extension page editor - #132
- [macOS/iOS] changed CSS injection to use browser.tabs.insertCSS(), this should circumvent CSP blocking
- [macOS/iOS] injection refactoring and optimizations
- [macOS/iOS] enable support for declarativeNetRequest (content blocking) userscripts using `@run-at` `request`
- [macOS/iOS] fix getValue default value bug (thanks @elyscape) - #241
- [macOS/iOS] style updates to iphone/ipad popup to resolve unreachable buttons- #243
- [macOS/iOS] fix url parsing to resolve invalid matching - #249
- [macOS] updated and re-implemented `@run-at context-menu` userscripts - #159
- [macOS/iOS] changed the frequency at which declarativeNetRequest scripts get updated
- [macOS/iOS] misc code/style fixes
1.2.0 02/06/2022
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- [macOS / iOS] update console messages when userscripts get injected - #149
- [macOS / iOS] - updated and included more values for GM.info - #229
- [macOS / iOS] make GM.info and GM_info an object rather than function - #229
- [macOS] fixed context-menu injection regressions
- [macOS] - limit userscript description length #207
- [macOS] - highlight search input text when focusing #199
- [macOS] - show full userscript directory path when hovering the label in app #214
- [macOS / iOS] - allow whitespace after opening tags in userscript, trim whitespace on metadata lines #218
- [macOS / iOS] - improve save error messages #218
- [macOS / iOS] - fix issue where async api methods were returning the wrong values #220 #221
- [macOS / iOS] - fix issue where GM.xmlHttpRequest wasn't returning data for responseType arraybuffer & blob #212 #222
- [macOS / iOS] - implement GM.setClipboard & GM_setClipboard api method
- [macOS / iOS] - fix issue where getting remote file contents failed when url had unicode characters #226
- [macOS / iOS] - allow user to cancel update checks #211
- [macOS / iOS] - implement GM.info & GM_info #188
- [macOS / iOS] - misc. code and style updates
1.1.0 27/02/2022
Visit the GitHub repository for help or to report bugs: https://github.com/quoid/userscripts/
Changes:
- fix: significantly reduces memory usage - #900 #901
- Resolve crash issue with large metadata userscript in iOS
- Prevent potential memory usage when there are too many scripts
more Version 1.8.6 11 Jan
Data Not Collected The developer does not collect any data from this app.