👊 Discord, your way. Revenge is a client modification for Discord Android. 🧪 Experimental. Use at your own risk!
Find a file
PalmDevs 9b412a9404
feat!: new repo system + versioning system support + bug fixes
BREAKING CHANGES:
- New versioning system: Allowing any amount of number segments, with prerelease support.
  - Any number of segments is supported: 1, 1.0, 1.0.0, 1.0.0.0, ...
  - Prerelease labels are compared "digit-run", similar to Debian.
  - Plugins must specify a version.
  - User-facing plugins should use CalVer. API plugins should use SemVer.
    Revenge APIs use SemVer while the new `discord` dependency parses the Discord version string directly.
- Dependency is now a Map, with support for version ranges and optional. Suggested URL is removed. (See new repo system)
- Plugins will now have to declare a dependency on `revenge.api` (Revenge API version) and `discord` (Discord version).
- Manifest now requires a format version (currently `1`)

New APIs:
- lib/plugins/utils: Utilities to format versioning

Features:
- New repo system: Repository design is inspired by Linux package repositories.
  - Repos host manifest, versions, channels, download URL/size, and hash for multiple plugins.
  - New dependency system: Plugins are versioned, and shouldn't break when updates come.
    Plugins can now declare dependency on supported Discord/Revenge API versions, so they won't break with auto-updates.
    Dependencies can be optional, but dependency on `revenge.api` and `discord` must be required.
    Dependents are soft-disabled when dependencies don't satisfy. Once satisfied, the plugin can start again.
  - All updates for running plugins REQUIRE a reload to prevent stale linking issues. Both native and JS-side.
  - Update checking is handled entirely by JS. But the native-side still handles installation, indexing, and verification.
  - Local indexes are updated against remote indexes. Dependency checking always uses local indexes.
  - Users can add custom repositories and custom their priority order. URL is the identity.
- Plugins can now have custom data URI icons instead of being restricted to React Native app assets.
- External plugin installs require UI confirmation before installing.
- Pending Update and Pending Reload filters in Plugins page.
- Ability to browse external plugins in repositories. Official repository will be added soon.

Fixes/Refactor:
- Refactored Plugin-related settings to a separate "Plugin Settings" plugin.
- Masonry layout fixes in landscape.
- Updated plugins now show "reload to apply" toast instead.
- Removed dead code.
2026-07-25 23:43:44 +07:00
.github/workflows ci(build): remove fetch-depth from checkout 2025-07-21 21:26:13 +07:00
.vscode chore: use biome v2 2025-06-03 16:22:59 +07:00
assets chore(README): add assets 2025-04-16 14:56:51 +07:00
lib feat!: new repo system + versioning system support + bug fixes 2026-07-25 23:43:44 +07:00
patches fix: update broken package patch 2025-08-06 20:55:41 +07:00
scripts fix: build compilation failing 2026-06-10 23:59:04 +07:00
shims chore(shims): remove bad file in tsconfig 2025-09-02 10:25:08 +07:00
src feat!: new repo system + versioning system support + bug fixes 2026-07-25 23:43:44 +07:00
types feat(lib/modules): support native to JS bridge 2026-07-06 23:48:27 +07:00
.editorconfig chore: use biome v2 2025-06-03 16:22:59 +07:00
.gitignore chore: initial commit 2025-03-21 19:59:16 +07:00
biome.json chore: update dependencies 2025-12-13 22:43:21 +07:00
bun.lock feat(plugins/developer-kit): new DevTools support 2026-06-10 23:58:23 +07:00
bunfig.toml chore: update bunfig 2025-11-12 14:59:11 +07:00
LICENSE chore: add LICENSE 2025-07-12 01:43:28 +07:00
package.json feat(plugins/developer-kit): new DevTools support 2026-06-10 23:58:23 +07:00
README.md chore(README): clarify more on how external scripts should map imports 2025-08-25 21:52:05 +07:00
tsconfig.json fix(plugins/developer-kit): proper error message for websocket disconnects 2026-02-26 17:22:29 +07:00


             

Revenge

Discord, your way. Revenge is a client modification for Discord Android.

Revenge aims to be a lightweight and lightning-fast client modification for Discord Android, while being user-friendly and developer-first. It provides a powerful framework, allowing developers to make add-ons with ease. The sky is the limit!

❓ About

This repository releases Hermes Bytecode to be executed on official Discord Android clients. The bytecode is not standalone and is meant to be used with official bootstrappers listed in the ⬇️ Download section.

💪 Features

  • 🔌 Plugins: Extend Discord with custom features
  • 🎨 Themes & Fonts: Customize Discord's appearance to your liking
  • 🧪 Experiments: Try out Discord's new features before they're rolled out

⬇️ Download

These are the official Revenge ways to install Revenge:

Using the installation methods above will currently install Revenge Classic. You'll need to update from Revenge Classic to Revenge Next manually.

⬆️ Updating to Revenge Next

It is recommended to do a separate installation of Revenge before updating to Revenge Next.
Revenge Next does not offer an easy way to downgrade to Revenge Classic.

To update to Revenge Next from Revenge Classic, follow these steps:

  1. Download the latest release asset from Revenge Next's Actions tab.
  2. Extract the built bundle and host a local HTTP server that serves the revenge.bundle file.
  3. In Revenge Classic, go to Settings > Revenge, and toggle on Developer Settings.
  4. Navigate back, and head into the Developer section.
  5. Edit the Load from custom URL field to point to the URL of the revenge.bundle file you hosted.
  6. Restart Discord, and you should be running Revenge Next!

🔄️ Updating builds

Revenge Next is updated regularly with new features and bug fixes. To update to the latest build, follow these steps:

  1. Host a HTTP server that points to a new revenge.bundle file.

  2. Head to Settings > Developer (under the Revenge section).

  3. Tap on the Evaluate JavaScript option.

  4. Paste and evaluate the following snippet. Make sure to modify the URL to point to your newly hosted revenge.bundle file:

    var REVENGE_UPDATE_URL = "<URL here, keep the quotes>";
    revenge.discord.native.FileModule.writeFile("documents", "pyoncord/loader.json", JSON.stringify({"customLoadUrl":{"enabled":true,"url":REVENGE_UPDATE_URL}}), "utf8");
    "URL updated, please reload Revenge"
    
  5. Restart Discord.

👷 Developing with Revenge Next

You'll need to have Bun installed. Once you have Bun, follow these steps:

# Install dependencies
bun install

# Build Revenge Next
bun run build

# Build Revenge Next with debugging enabled (slow, don't use in production)
bun run build --dev
# Start the development server
bun run dev

# Build as production
bun run dev --prod

Builds are generated at dist/revenge.bundle.

# Build types for external consumers
bun run types

Types are generated at dist/types. To consume, include <dir>/globals.d.ts, and map @revenge-mod/* to <dir>/lib/*.
Bundlers will need to map imports to property access on revenge turning kebab-case and snake_case to camelCase. Example: @revenge-mod/discord/modules/main_tabs_v2 to revenge.discord.modules.mainTabsV2