# Purplemonkey2

> Just like Violentmonkey, but with more unsafe API.

Canonical page: [https://chrome-stats.com/d/purplemonkey2](https://chrome-stats.com/d/purplemonkey2)

## Overview

- **ID:** `purplemonkey2`
- **Platform:** Firefox
- **Type:** Firefox add-on
- **Status:** Available
- **Publisher:** gholk
- **Category:** web-development
- **Daily users:** 28
- **Weekly downloads:** 2
- **Rating:** 3.00 / 5 (1 ratings)
- **Version:** 2.20.0
- **Last updated:** 2024-07-21
- **First published:** 2024-04-16
- **Size:** 2.02 MB
- **Data as of:** 2026-09-05
- **Store listing:** [Firefox Add-ons Store](https://addons.mozilla.org/firefox/addon/purplemonkey2/)
- **Website:** [https://github.com/GHolk/violentmonkey/tree/purple-monkey](https://github.com/GHolk/violentmonkey/tree/purple-monkey)

## Description

Just like [Violentmonkey], but with more unsafe API.

[Violentmonkey]: <a href="https://prod.outgoing.prod.webservices.mozgcp.net/v1/b54f36524992dc8af7d2f1c11ccc7de0c263b3ca41b0d1ca7e5a71f9521da7e2/https%3A//violentmonkey.github.io/api/gm/" rel="nofollow">https://violentmonkey.github.io/api/gm/</a>

## Purplemonkey API
only the additional api from violent monkey are listed.
other api are same to the violent monkey in the same version.

### GM_messageExtension(id, payload)
send message to other extension's `browser.runtime.onMessageExternal` handler.

* id: the id of the destination extension.
* payload: the data to send. must be structure clonable.
* return: a promise resolve to the response or reject to error.

to use this api, you have to add `@connect web-extension://id`
in the userscript's meta field.
where id is the extension that you want to send message with.
the special `web-extension://*` allow to connect to all the other extensions.

### GM_webextEval(code, args)
eval string or function in violent monkey background script.

* String(code): the code is call as
  `(function (...args) {return eval(code)})(...args)`,
  so the last statement is return.

* Function(code): code is stringify and reconstructed as function in background.
  stringify so any closure will not work.

  if this is a method, you should make sure that it could be stringify 
  and reconstruct correctly.
  
  async could work.

* args: an argument array that structure clonable.

* return: a promise resolve to result or reject to error.

## Rankings

- #21,120 — Overall

## Permissions and access

### Permissions

- `tabs`
- `<all_urls>`
- `webRequest`
- `webRequestBlocking`
- `notifications`
- `storage`
- `unlimitedStorage`
- `clipboardWrite`
- `contextMenus`
- `cookies`

### Content script matches

- `<all_urls>`

## Safety

- **Risk impact:** Very high risk impact
- **Risk likelihood:** Moderate risk likelihood

### Analysis details

- Grants access to browser tabs, which can be used to track user browsing habits and history, presenting a privacy concern.
- This extension has low user count. Unpopular extensions may not be stable or safe.

> Some risk analysis details are omitted from this free response. [Upgrade to view the full analysis](https://chrome-stats.com/pricing).

## Similar extensions and apps

- [Violentmonkey](https://chrome-stats.com/d/violentmonkey) — 176,631 users, 4.73 / 5
- [FireMonkey](https://chrome-stats.com/d/firemonkey) — 1,791 users, 4.49 / 5
- [Wildmonkey](https://chrome-stats.com/d/wildmonkey) — 19 users, 3.50 / 5
- [Monkey in mozilla](https://chrome-stats.com/d/monkey-in-mozilla)
- [Joker Monkey](https://chrome-stats.com/d/joker-monkey) — 7 users, 5.00 / 5
- [cleanmonkey](https://chrome-stats.com/d/douban) — 1 users, 5.00 / 5
- [Sea Monkey X](https://chrome-stats.com/d/sea-monkey-x) — 5.00 / 5
- [GreyMF](https://chrome-stats.com/d/greymf)
- [MonkeyCoursePro](https://chrome-stats.com/d/monkeycoursepro)
- [GooseMod for Web](https://chrome-stats.com/d/goosemod-for-web) — 214 users, 4.60 / 5
- [APXM](https://chrome-stats.com/d/apxm) — 27 users
- [Purple Ads Blocker for Twitch](https://chrome-stats.com/d/purpleadblock) — 5,476 users, 2.99 / 5

---

Source: [Chrome-Stats](https://chrome-stats.com/d/purplemonkey2)
