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.
|
||
|---|---|---|
| .github/workflows | ||
| .vscode | ||
| assets | ||
| lib | ||
| patches | ||
| scripts | ||
| shims | ||
| src | ||
| types | ||
| .editorconfig | ||
| .gitignore | ||
| biome.json | ||
| bun.lock | ||
| bunfig.toml | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
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:
- 📵 Non-root: Revenge Manager
- 🩹 Root with Xposed: RevengeXposed
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:
- Download the latest release asset from Revenge Next's Actions tab.
- Extract the built bundle and host a local HTTP server that serves the
revenge.bundlefile. - In Revenge Classic, go to Settings > Revenge, and toggle on Developer Settings.
- Navigate back, and head into the Developer section.
- Edit the Load from custom URL field to point to the URL of the
revenge.bundlefile you hosted. - 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:
-
Host a HTTP server that points to a new
revenge.bundlefile. -
Head to Settings > Developer (under the Revenge section).
-
Tap on the Evaluate JavaScript option.
-
Paste and evaluate the following snippet. Make sure to modify the URL to point to your newly hosted
revenge.bundlefile: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" -
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