guild.searchMessages().attachmentFilenames("cat.png").includeAuthorTypes(MessageSearchAction.AuthorType.USER).queue(response->{if(response.isNotReady()){intretryAfter=response.asNotReady().getRetryAfter();event.reply("The server is still indexing messages, try again later").queue();return;}List<Message>messages=response.asResults().getMessages();event.reply("Found %s messages of cats!".formatted(messages.size())).queue();});
Additionally, we made a minor change in the handling for received messages. For messages received in guilds JDA now handles events with missing member objects, which is necessary to handle messages that arrive shortly after a user is banned from the guild. These messages will contain members which are not added to cache and have no roles.
You can now include checkboxes and radio groups in your modals:
Modal.create("modal","Welcome Screening").addComponents(Label.of("How did you find this server?",RadioGroup.create("radio").addOption("I was told by a friend","friend").addOption("I found it online","online").addOption("Other","other").build()),Label.of("Server Rules",CheckboxGroup.create("checkbox-group").addOption("I've read the server rules and agree to follow them.","rule-checkbox").setMinValues(1).build())).build();
This is primarily a bug fix release, but also includes a minor breaking change for emojis.
Enable users to choose the requested format of assets (#3009)
Most methods, that previously returned ImageProxy or an image URL, now support passing ImageFormat to choose a different format. This enables users to easily switch from PNG to WEBP or other formats.
Additionally, most of the template strings used to create image URLs, such as User.AVATAR_URL, have been deprecated in favor of the new DiscordAssets utility class. You can use DiscordAssets.userAvatar(ImageFormat.PNG, userId, avatarId) to get an ImageProxy instance and use ImageProxy#getUrl to get the respective URL.
[!WARNING]
Breaking Changes
CustomEmoji#getImage and CustomEmoji#getImageUrl will now use webp format by default. This is due to API changes which make the gif format unreliable. See #2999 for details. You can use CustomEmoji#getImage(ImageFormat) to choose a different format, like ImageFormat.PNG or ImageFormat.GIF.
This release adds initial support for the DAVE Protocol.
[!IMPORTANT]
Audio connections without the DAVE Protocol will stop working on March 1st, 2026. If you use JDA to connect to voice channels or stage channels, you will have to update to this release and add the required DAVE Protocol implementation.
Setting up DAVE Protocol in JDA
Since the implementation for DAVE requires native library dependencies, it is not included by default by JDA. We've decided that dependencies related to audio features will no longer be included by default in the future.
Starting with JDA 6.3.0, audio features require additional setup in your JDABuilder or DefaultShardManagerBuilder. Once you have added a dependency that implements DaveSessionFactory, you can configure it in your builder using setAudioModuleConfig:
You can use JDAVE, which provides an implementation for this interface. Note that this library requires Java 25 and only supports a few platforms for now. Read the README for setup instructions.
[!WARNING]
This library is still in its early stages and might have some issues. However, I wanted to get this released as soon as possible to allow people to test and report issues, since the deadline is only a few weeks away. I recommend to test this thoroughly before going into production.
There are other libraries still in development that will add support for older java versions, such as libdave-jvm which uses JNI instead of the modern FFM API.
In this release, we have added new compliance tests that automatically validate some of our enums against the Official Discord OpenAPI Specification. This allows us to easily verify the completeness of our enums, which is why we added a lot of new enum constants. In the future, we might use this spec for serialization / deserialization internally, or even expand it to a public REST-only module.
[!IMPORTANT]
Important Announcement: Changes to Audio Connections in March 2026
Support for this in JDA has been blocked by Discord's slow release of their library libdave. However, they have finally released a usable C-interface 2 weeks ago. The next feature release of JDA will add a new opt-in interface to support the DAVE protocol and will log warnings and errors if this interface is not implemented. The development for this has started in my pull request: Add support for libdave #2988.
On March 1st, 2026, all JDA audio connections will require an implementation of DAVE. Users of JDA are responsible to choose or provide their own implementation of this protocol. There are already some work-in-progress implementations that directly use libdave, such as JDAVE (requires Java 25) and libdave-jvm (requires Java 8).
If you are affected by this change, you should start migrating to JDA 6 as soon as possible.
New Features
Support retrieving available SKUs via /applications/{application.id}/skus by @rainbowdashlabs in #2828
Adds new locales: DiscordLocale.ARABIC, DiscordLocale.HEBREW
This release includes a permission change that will go into effect on February 26th, 2026. Any versions older than this will not have the correct permission checks for the new rules, or only partially support the new rules.
After the deadline of February 26th, 2026, some permissions will lose capabilities in favor of new permissions.
MESSAGE_MANAGE will no longer allow users to Pin/Unpin Messages or Bypass Slowmode. Instead, the new BYPASS_SLOWMODE and PIN_MESSAGES permissions have been added.
MANAGE_GUILD_EXPRESSIONS will no longer allow users to Create Emojis/Stickers. Instead, the new CREATE_GUILD_EXPRESSIONS permission has been added.
MANAGE_EVENTS will no longer allow users to Create Scheduled Events. Instead, the new CREATE_SCHEDULED_EVENTS permission has been added.
guild.retrieveRoleMemberCounts().queue(counts->{intboostRoleMemberCount=counts.get(guild.getBoostRole());IO.println("This guild has "+boostRoleMemberCount+" boosters!");});
You can now access and modify the Gradient or Holographic role colors, a feature unlocked through boosting a guild.
Example:
guild.createRole().setName("Gradient Role").setGradientColors(0x0000FF,0x00FF00).queue(role->{IO.println("Is role a gradient? "+role.getColors().isGradient());IO.println("Primary: %X".formatted(role.getColors().getPrimaryRaw()));IO.println("Secondary: %X".formatted(role.getColors().getSecondaryRaw()));});
@OverridepublicvoidonModalInteraction(@NotNullModalInteractionEventevent){event.reply("The banner is being updated.").setEphemeral(true).queue();Message.Attachmentattachment=event.getValue("cat-img").getAsAttachmentList().get(0);attachment.getProxy().downloadAsIcon().thenCompose(icon->event.getGuild().getSelfMember().getManager().setBanner(icon).submit()).exceptionally(e->{RestAction.getDefaultFailure().accept(e);returnnull;});}
This is the stable release of JDA 6.0.0. To avoid repeating the same information again, please look at the release notes of the release candidates for detailed explanations of the breaking changes and new features.
To help ease the upgrade to JDA 6.0.0, we've provided an OpenRewrite recipe that can automatically refactor parts of your codebase. This will update imports and replace a few method calls with their new equivalents in JDA 6.0.0.
However, not all breaking changes can be handled automatically — for example, code that relied on the mutability of ActionRow will require manual adjustments.
You will also have to update your code for creating Modal instances. Instead of using ActionRow, modals now make use of the Label component. Read the release notes for v6.0.0-rc.4 to learn more.
The OpenRewrite Recipe
Before applying the recipe, make sure you’re using version control (e.g., Git) or back up your project manually. You’ll also need to be using Gradle or Maven to apply the migration.
Gradle
We are using the OpenRewrite Gradle Plugin. Before changing your JDA version in gradle, you can add the rewrite plugin and use the recipe to migrate your code:
plugins{id("org.openrewrite.rewrite")version"7.11.0"}repositories{mavenCentral()}dependencies{// Your current JDA version before upgrading to 6.0.0
implementation("net.dv8tion:JDA:5.+")rewrite("net.dv8tion:JDA:6.0.0")rewrite("org.openrewrite.recipe:rewrite-java-dependencies:1.37.0")}rewrite{activeRecipe("net.dv8tion.MigrateComponentsV2")}
Once you configured this plugin, you can use the rewriteDryRun task to generate a git patch in build/reports/rewrite/rewrite.patch to see what the plugin will do with your source code. To apply the changes, either use this patch or use rewriteRun.
After migrating your code, you can then update your JDA version (if the rewrite hasn't done it already) and remove the plugin again.
Maven
We are using the OpenRewrite Maven Plugin. Before changing your JDA version in your pom, you can add the rewrite plugin and use the recipe to migrate your code:
Once you configured this plugin, you can use the rewrite:dryRun task to generate a git patch in target/site/rewrite/rewrite.patch to see what the plugin will do with your source code. To apply the changes, either use this patch or use rewrite:run.
After migrating your code, you can then update your JDA version (if the rewrite hasn't done it already) and remove the plugin again.
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [net.dv8tion:JDA](https://github.com/discord-jda/JDA) | compile | major | `5.6.1` → `6.5.0` |
---
### Release Notes
<details>
<summary>discord-jda/JDA (net.dv8tion:JDA)</summary>
### [`v6.5.0`](https://github.com/discord-jda/JDA/releases/tag/v6.5.0): | Message Search API
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.4.2...v6.5.0)
### Overview
This release adds support for the [Message Search API](https://docs.discord.com/developers/change-log#search-guild-messages), which allows bots to search messages in a guild. See [Guild#searchMessages](https://docs.jda.wiki/net/dv8tion/jda/api/entities/Guild.html#searchMessages\(\)) and [MessageSearchAction](https://docs.jda.wiki/net/dv8tion/jda/api/requests/restaction/MessageSearchAction.html) for detailed documentation.
**Example**:
```java
guild.searchMessages()
.attachmentFilenames("cat.png")
.includeAuthorTypes(MessageSearchAction.AuthorType.USER)
.queue(response -> {
if (response.isNotReady()) {
int retryAfter = response.asNotReady().getRetryAfter();
event.reply("The server is still indexing messages, try again later").queue();
return;
}
List<Message> messages = response.asResults().getMessages();
event.reply("Found %s messages of cats!".formatted(messages.size())).queue();
});
```
Additionally, we made a minor change in the handling for received messages. For messages received in guilds JDA now handles events with missing `member` objects, which is necessary to handle messages that arrive shortly after a user is banned from the guild. These messages will contain members which are not added to cache and have no roles.
#### New Features
- Add message search by [@​freya022](https://github.com/freya022) in [#​3052](https://github.com/discord-jda/JDA/pull/3052)
- Add attachment flags by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3109](https://github.com/discord-jda/JDA/pull/3109)
- Add support for image descriptions in embeds by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​310](https://github.com/discord-jda/JDA/pull/310)
#### Changes
- Handle messages received after ban by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3103](https://github.com/discord-jda/JDA/pull/3103)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.4.2...v6.5.0>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.5.0")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.5.0</version>
</dependency>
```
### [`v6.4.2`](https://github.com/discord-jda/JDA/releases/tag/v6.4.2)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.4.1...v6.4.2)
#### New Features
- Add attachment flags, embed flags and fields, and, media flags by [@​freya022](https://github.com/freya022) in [#​3081](https://github.com/discord-jda/JDA/pull/3081)
- Add missing `NO_MUTUAL_GUILDS` ErrorResponse by [@​srnyx](https://github.com/srnyx) in [#​3083](https://github.com/discord-jda/JDA/pull/3083)
- Add `ErrorResponse#CANNOT_FORWARD_UNREADABLE_MESSAGE` by [@​freya022](https://github.com/freya022) in [#​3087](https://github.com/discord-jda/JDA/pull/3087)
#### Changes
- Improve error messages caused by entities relying on the cache to find themselves by [@​freya022](https://github.com/freya022) in [#​3067](https://github.com/discord-jda/JDA/pull/3067)
- Component options: Prevent setting an out-of-range number of default values by [@​freya022](https://github.com/freya022) in [#​3068](https://github.com/discord-jda/JDA/pull/3068)
- Fix deserialization of components without unfurled media by [@​freya022](https://github.com/freya022) in [#​3078](https://github.com/discord-jda/JDA/pull/3078)
#### Bug Fixes
- Fix Guild#invalidate not removing thread channels from global cache by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3094](https://github.com/discord-jda/JDA/pull/3094)
- Fix incorrect ID used in AbstractGuildChannelImpl#getGuild for entity parent refresh by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3095](https://github.com/discord-jda/JDA/pull/3095)
- Fix incorrect check for choice value length by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3096](https://github.com/discord-jda/JDA/pull/3096)
- fix: handle integer sound ids in voice channel effects by [@​rxsto](https://github.com/rxsto) in [#​3085](https://github.com/discord-jda/JDA/pull/3085)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.4.1...v6.4.2>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.4.2")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.4.2</version>
</dependency>
```
### [`v6.4.1`](https://github.com/discord-jda/JDA/releases/tag/v6.4.1)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.4.0...v6.4.1)
#### Bug Fixes
- Fixed `CheckboxGroup.Builder.setRequiredRange()` incorrectly setting min and max by [@​replaceitem](https://github.com/replaceitem) in [#​3065](https://github.com/discord-jda/JDA/pull/3065)
- Fix `getCommandType` reading value of interaction type instead of command type by [@​freya022](https://github.com/freya022) in [#​3074](https://github.com/discord-jda/JDA/pull/3074)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.4.0...v6.4.1>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.4.1")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.4.1</version>
</dependency>
```
### [`v6.4.0`](https://github.com/discord-jda/JDA/releases/tag/v6.4.0): | Checkboxes
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.3.2...v6.4.0)
### Overview
This release adds support for new checkbox and radio groups in modals as well as support for voice channel effects and soundboards.
> \[!WARNING]
> All animated assets now use `.webp` by default instead of `.gif`.
##### Checkboxes and Radio Groups ([#​3010](https://github.com/discord-jda/JDA/issues/3010))
You can now include checkboxes and radio groups in your modals:
```java
Modal.create("modal", "Welcome Screening")
.addComponents(
Label.of(
"How did you find this server?",
RadioGroup.create("radio")
.addOption("I was told by a friend", "friend")
.addOption("I found it online", "online")
.addOption("Other", "other")
.build()),
Label.of(
"Server Rules",
CheckboxGroup.create("checkbox-group")
.addOption(
"I've read the server rules and agree to follow them.", "rule-checkbox")
.setMinValues(1)
.build()))
.build();
```
<img width="351" height="329" alt="image" src="https://github.com/user-attachments/assets/cdbcfcd5-c9ba-4a12-b316-5be14a92213e" />
When a user submits a modal with a checkbox group, the selected values can be accessed in the [`ModalInteractionEvent`](https://docs.jda.wiki/net/dv8tion/jda/api/events/interaction/ModalInteractionEvent.html) with [`getValue(groupId).getAsStringList()`](https://docs.jda.wiki/net/dv8tion/jda/api/interactions/modals/ModalMapping.html#getAsStringList\(\)) and radio groups using [`getValue(groupId).getAsString()`](https://docs.jda.wiki/net/dv8tion/jda/api/interactions/modals/ModalMapping.html#getAsString\(\)).
#### New Features
- Add checkboxes, checkbox groups and radio groups by [@​freya022](https://github.com/freya022) in [#​3010](https://github.com/discord-jda/JDA/pull/3010)
- Add soundboard sounds by [@​freya022](https://github.com/freya022) in [#​2753](https://github.com/discord-jda/JDA/pull/2753)
- Add getJumpUrl for all channel types by [@​Vampire](https://github.com/Vampire) in [#​3055](https://github.com/discord-jda/JDA/pull/3055)
#### Changes
- Use `ANIMATED_WEBP` for all animated assets by [@​freya022](https://github.com/freya022) in [#​3036](https://github.com/discord-jda/JDA/pull/3036)
- Alternatively check for `CREATE_*` permissions when managing/deleting our own events/emojis/stickers by [@​freya022](https://github.com/freya022) in [#​3061](https://github.com/discord-jda/JDA/pull/3061)
- Prevent warning about message content intent if message contains content by [@​freya022](https://github.com/freya022) in [#​3053](https://github.com/discord-jda/JDA/pull/3053)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.3.2...v6.4.0>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.4.0")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.4.0</version>
</dependency>
```
### [`v6.3.2`](https://github.com/discord-jda/JDA/releases/tag/v6.3.2)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.3.1...v6.3.2)
### Overview
Small bug fix release.
#### Changes
- Update dependencies by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​3038](https://github.com/discord-jda/JDA/pull/3038)
- Bump limit of context menu commands to 15 by [@​freya022](https://github.com/freya022) in [#​3035](https://github.com/discord-jda/JDA/pull/3035)
- Prevent explicitly required select menus when `minValues` is zero by [@​freya022](https://github.com/freya022) in [#​3023](https://github.com/discord-jda/JDA/pull/3023)
#### Bug Fixes
- `Helpers.appendCause`: Add special case for circular causes by [@​freya022](https://github.com/freya022) in [#​3041](https://github.com/discord-jda/JDA/pull/3041)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.3.1...v6.3.2>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.3.2")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.3.2</version>
</dependency>
```
### [`v6.3.1`](https://github.com/discord-jda/JDA/releases/tag/v6.3.1)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.3.0...v6.3.1)
### Overview
This is primarily a bug fix release, but also includes a minor breaking change for emojis.
##### Enable users to choose the requested format of assets ([#​3009](https://github.com/discord-jda/JDA/issues/3009))
Most methods, that previously returned `ImageProxy` or an image URL, now support passing `ImageFormat` to choose a different format. This enables users to easily switch from `PNG` to `WEBP` or other formats.
Additionally, most of the template strings used to create image URLs, such as `User.AVATAR_URL`, have been deprecated in favor of the new [DiscordAssets](https://docs.jda.wiki/net/dv8tion/jda/api/utils/DiscordAssets.html) utility class. You can use `DiscordAssets.userAvatar(ImageFormat.PNG, userId, avatarId)` to get an `ImageProxy` instance and use `ImageProxy#getUrl` to get the respective URL.
> \[!WARNING]
>
> ## Breaking Changes
>
> - `CustomEmoji#getImage` and `CustomEmoji#getImageUrl` will now use `webp` format by default. This is due to API changes which make the `gif` format unreliable. See [#​2999](https://github.com/discord-jda/JDA/issues/2999) for details. You can use `CustomEmoji#getImage(ImageFormat)` to choose a different format, like `ImageFormat.PNG` or `ImageFormat.GIF`.
#### New Features
- Adding s/S TimeFormat by [@​Sheldan](https://github.com/Sheldan) in [#​3016](https://github.com/discord-jda/JDA/pull/3016)
- Enable users to choose the requested format of assets by [@​freya022](https://github.com/freya022) in [#​3009](https://github.com/discord-jda/JDA/pull/3009)
#### Bug Fixes
- Fix unique id not being copied in SelectMenus by [@​Kaktushose](https://github.com/Kaktushose) in [#​3013](https://github.com/discord-jda/JDA/pull/3013)
- Use Locale.ROOT in AudioEncryption for consistent string handling by [@​arif-banai](https://github.com/arif-banai) in [#​3024](https://github.com/discord-jda/JDA/pull/3024)
#### Deprecations
- Template Strings for Image CDN URLs are replaced by [DiscordAssets](https://docs.jda.wiki/net/dv8tion/jda/api/utils/DiscordAssets.html)
- [ScheduledEventUpdateImageEvent](https://docs.jda.wiki/net/dv8tion/jda/api/events/guild/scheduledevent/update/ScheduledEventUpdateImageEvent.html) is replaced by [ScheduledEventUpdateCoverImageEvent](https://docs.jda.wiki/net/dv8tion/jda/api/events/guild/scheduledevent/update/ScheduledEventUpdateCoverImageEvent.html)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.3.0...v6.3.1>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.3.1")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.3.1</version>
</dependency>
```
### [`v6.3.0`](https://github.com/discord-jda/JDA/releases/tag/v6.3.0): | DAVE Protocol Support
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.2.1...v6.3.0)
### Overview
This release adds initial support for the [DAVE Protocol](https://daveprotocol.com/).
> \[!IMPORTANT]
> Audio connections without the DAVE Protocol will stop working on March 1st, 2026. If you use JDA to connect to voice channels or stage channels, you will have to update to this release and add the required DAVE Protocol implementation.
#### Setting up DAVE Protocol in JDA
Since the implementation for DAVE requires native library dependencies, it is not included by default by JDA. We've decided that dependencies related to audio features will no longer be included by default in the future.
Starting with JDA 6.3.0, audio features require additional setup in your `JDABuilder` or `DefaultShardManagerBuilder`. Once you have added a dependency that implements `DaveSessionFactory`, you can configure it in your builder using [setAudioModuleConfig](https://docs.jda.wiki/net/dv8tion/jda/api/JDABuilder.html#setAudioModuleConfig\(net.dv8tion.jda.api.audio.AudioModuleConfig\)):
```java
builder.setAudioModuleConfig(
new AudioModuleConfig()
.withDaveSessionFactory(daveSessionFactory)
)
```
You can use [JDAVE](https://github.com/MinnDevelopment/jdave), which provides an implementation for this interface. Note that this library requires **Java 25** and only supports a few platforms for now. Read the [README](https://github.com/MinnDevelopment/jdave) for setup instructions.
> \[!WARNING]
> This library is still in its early stages and might have some issues. However, I wanted to get this released as soon as possible to allow people to test and report issues, since the deadline is only a few weeks away. I recommend to test this thoroughly before going into production.
There are other libraries still in development that will add support for older java versions, such as [libdave-jvm](https://github.com/KyokoBot/libdave-jvm) which uses JNI instead of the modern FFM API.
#### New Features
- Add support for libdave by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2988](https://github.com/discord-jda/JDA/pull/2988)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.2.1...v6.3.0>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.3.0")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.3.0</version>
</dependency>
```
### [`v6.2.1`](https://github.com/discord-jda/JDA/releases/tag/v6.2.1)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.2.0...v6.2.1)
### Overview
In this release, we have added new compliance tests that automatically validate some of our enums against the [Official Discord OpenAPI Specification](https://github.com/discord/discord-api-spec). This allows us to easily verify the completeness of our enums, which is why we added a lot of new enum constants. In the future, we might use this spec for serialization / deserialization internally, or even expand it to a public REST-only module.
> \[!IMPORTANT]
>
> ### Important Announcement: Changes to Audio Connections in March 2026
>
> Discord has announced in their [Changelog: Deprecating Non-E2EE Voice Calls](https://discord.com/developers/docs/change-log#deprecating-none2ee-voice-calls), that all voice connections will require End-to-End-Encryption starting **March 1st, 2026**.
>
> Support for this in JDA has been [blocked](https://github.com/discord/libdave/issues/8) by Discord's slow release of their library [libdave](https://github.com/discord/libdave). However, they have finally released a usable C-interface [2 weeks ago](https://github.com/discord/libdave/commit/74979cb33febf4ddef0c2b66e57520b339550c17). The next feature release of JDA will add a new opt-in interface to support the DAVE protocol and will log warnings and errors if this interface is not implemented. The development for this has started in my pull request: [ **Add support for libdave #​2988**](https://github.com/discord-jda/JDA/pull/2988).
>
> On **March 1st, 2026**, all JDA audio connections will require an implementation of DAVE. Users of JDA are responsible to choose or provide their own implementation of this protocol. There are already some work-in-progress implementations that directly use libdave, such as [JDAVE](https://github.com/MinnDevelopment/jdave) (requires Java 25) and [libdave-jvm](https://github.com/KyokoBot/libdave-jvm) (requires Java 8).
>
> If you are affected by this change, you should start migrating to JDA 6 as soon as possible.
#### New Features
- Support retrieving available SKUs via /applications/{application.id}/skus by [@​rainbowdashlabs](https://github.com/rainbowdashlabs) in [#​2828](https://github.com/discord-jda/JDA/pull/2828)
- Adds new locales: `DiscordLocale.ARABIC`, `DiscordLocale.HEBREW`
- Adds new audit log action types:
- `ActionType.SOUNDBOARD_SOUND_CREATE`, `ActionType.SOUNDBOARD_SOUND_UPDATE`, `ActionType.SOUNDBOARD_SOUND_DELETE`
- `ActionType.AUTO_MODERATION_QUARANTINE_USER`
- `ActionType.CREATOR_MONETIZATION_REQUEST_CREATED`, `ActionType.CREATOR_MONETIZATION_TERMS_ACCEPTED`
- `ActionType.ONBOARDING_PROMPT_CREATE`, `ActionType.ONBOARDING_PROMPT_UPDATE`, `ActionType.ONBOARDING_PROMPT_DELETE`
- `ActionType.ONBOARDING_CREATE`, `ActionType.ONBOARDING_UPDATE`
- `ActionType.HOME_SETTINGS_CREATE`, `ActionType.HOME_SETTINGS_UPDATE`, `ActionType.GUILD_PROFILE_UPDATE`
- Adds `AuditLogKey.GUILD_BRAND_COLOR_PRIMARY`
- Adds new audit log target types:
- `TargetType.SOUNDBOARD_SOUND`
- `TargetType.ONBOARDING_PROMPT_STRUCTURE`
- `TargetType.ONBOARDING`
- Adds `ChannelType.GUILD_DIRECTORY`
#### Changes
- Redact token from trace logs of gateway requests by [@​freya022](https://github.com/freya022) in [#​2986](https://github.com/discord-jda/JDA/pull/2986)
- Added Component Verification in Modal Builder by [@​Crain-32](https://github.com/Crain-32) in [#​2987](https://github.com/discord-jda/JDA/pull/2987)
- Update dependencies by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2989](https://github.com/discord-jda/JDA/pull/2989)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.2.0...v6.2.1>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.2.1")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.2.1</version>
</dependency>
```
### [`v6.2.0`](https://github.com/discord-jda/JDA/releases/tag/v6.2.0)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.1.3...v6.2.0)
### Overview
This release includes a permission change that will go into effect on **February 26th, 2026**. Any versions older than this will not have the correct permission checks for the new rules, or only partially support the new rules.
##### Permission Changes ([#​2967](https://github.com/discord-jda/JDA/issues/2967))
After the deadline of **February 26th, 2026**, some permissions will lose capabilities in favor of new permissions.
- `MESSAGE_MANAGE` will no longer allow users to **Pin/Unpin Messages** or **Bypass Slowmode**. Instead, the new `BYPASS_SLOWMODE` and `PIN_MESSAGES` permissions have been added.
- `MANAGE_GUILD_EXPRESSIONS` will no longer allow users to **Create Emojis/Stickers**. Instead, the new `CREATE_GUILD_EXPRESSIONS` permission has been added.
- `MANAGE_EVENTS` will no longer allow users to **Create Scheduled Events**. Instead, the new `CREATE_SCHEDULED_EVENTS` permission has been added.
See the [Discord Changelog](https://discord.com/developers/docs/change-log#permission-changes-going-into-effect-february-2026-for-pinmessages-bypassslowmode-createguildexpressions-and-createevents) for details.
##### Retrieve Role Member Counts ([#​2973](https://github.com/discord-jda/JDA/issues/2973))
The guild role member count can now be retrieved with [Guild#retrieveRoleMemberCounts](https://docs.jda.wiki/net/dv8tion/jda/api/entities/Guild.html#retrieveRoleMemberCounts\(\)).
**Example:**
```java
guild.retrieveRoleMemberCounts().queue(counts -> {
int boostRoleMemberCount = counts.get(guild.getBoostRole());
IO.println("This guild has " + boostRoleMemberCount + " boosters!");
});
```
##### Enhanced Role Colors ([#​2975](https://github.com/discord-jda/JDA/issues/2975))
You can now access and modify the **Gradient** or **Holographic** role colors, a feature unlocked through boosting a guild.
**Example:**
```java
guild.createRole()
.setName("Gradient Role")
.setGradientColors(0x0000FF, 0x00FF00)
.queue(role -> {
IO.println("Is role a gradient? " + role.getColors().isGradient());
IO.println("Primary: %X".formatted(role.getColors().getPrimaryRaw()));
IO.println("Secondary: %X".formatted(role.getColors().getSecondaryRaw()));
});
```
#### New Features
- Add support for enhanced role colors by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2975](https://github.com/discord-jda/JDA/pull/2975)
- Add `Guild#retrieveRoleMemberCounts` by [@​freya022](https://github.com/freya022) in [#​2973](https://github.com/discord-jda/JDA/pull/2973)
- Add GUILD\_BANNER ("banner\_hash") auditlog key by [@​Vulcano771](https://github.com/Vulcano771) in [#​2968](https://github.com/discord-jda/JDA/pull/2968)
- Voice Channel Invite Guest Flag by [@​austinpilz](https://github.com/austinpilz) in [#​2966](https://github.com/discord-jda/JDA/pull/2966)
#### Changes
- Update permission checks with the Feb 23 2026 deadline by [@​freya022](https://github.com/freya022) in [#​2967](https://github.com/discord-jda/JDA/pull/2967)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.1.3...v6.2.0>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.2.0")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.2.0</version>
</dependency>
```
### [`v6.1.3`](https://github.com/discord-jda/JDA/releases/tag/v6.1.3)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.1.2...v6.1.3)
#### Bug Fixes
- Avoid downloading external URLs for component updates by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2971](https://github.com/discord-jda/JDA/pull/2971)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.1.2...v6.1.3>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.1.3")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.1.3</version>
</dependency>
```
### [`v6.1.2`](https://github.com/discord-jda/JDA/releases/tag/v6.1.2)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.1.1...v6.1.2)
#### Bug Fixes
- Fix voice state in events when joining channel by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2959](https://github.com/discord-jda/JDA/pull/2959)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.1.1...v6.1.2>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.1.2")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.1.2</version>
</dependency>
```
### [`v6.1.1`](https://github.com/discord-jda/JDA/releases/tag/v6.1.1)
[Compare Source](https://github.com/discord-jda/JDA/compare/v6.1.0...v6.1.1)
#### New Features
- Implement Reading/Writing System Channel Flags by [@​LaFriska](https://github.com/LaFriska) in [#​2928](https://github.com/discord-jda/JDA/pull/2928)
#### Bug Fixes
- Fix `ModalMapping::getAsAttachmentList` if no attachments were submitted by [@​archer-321](https://github.com/archer-321) in [#​2941](https://github.com/discord-jda/JDA/pull/2941)
- Remove internal class call and replace with local version by [@​mikomikotaishi](https://github.com/mikomikotaishi) in [#​2944](https://github.com/discord-jda/JDA/pull/2944)
- Fix emtpy edit message builders by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2953](https://github.com/discord-jda/JDA/pull/2953)
- Add check for valid interface types on ChannelCacheView#ofType by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2955](https://github.com/discord-jda/JDA/pull/2955)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.1.0...v6.1.1>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.1.1")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.1.1</version>
</dependency>
```
### [`v6.1.0`](https://github.com/discord-jda/JDA/releases/tag/v6.1.0): | Modal File Uploads
### Overview
This release primarily adds support for file uploads in modals.
##### Creating a Modal accepting file uploads
```java
Modal.create("modal-id", "Banner Update")
.addComponents(Label.of("Banner Image", AttachmentUpload.of("banner-file")))
.build()
```
##### Using the uploaded file
```java
@Override
public void onModalInteraction(@NotNull ModalInteractionEvent event) {
event.reply("The banner is being updated.").setEphemeral(true).queue();
Message.Attachment attachment = event.getValue("cat-img").getAsAttachmentList().get(0);
attachment.getProxy()
.downloadAsIcon()
.thenCompose(icon -> event.getGuild().getSelfMember().getManager().setBanner(icon).submit())
.exceptionally(e -> {
RestAction.getDefaultFailure().accept(e);
return null;
});
}
```
#### New Features
- Add modal file uploads by [@​freya022](https://github.com/freya022) in [#​2920](https://github.com/discord-jda/JDA/pull/2920)
- Support modifying avatar, banner and bio of current member by [@​freya022](https://github.com/freya022) in [#​2915](https://github.com/discord-jda/JDA/pull/2915)
- Add missing `Invite.Guild` fields by [@​freya022](https://github.com/freya022) in [#​2914](https://github.com/discord-jda/JDA/pull/2914)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v6.0.0...v6.1.0>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.1.0")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.1.0</version>
</dependency>
```
### [`v6.0.0`](https://github.com/discord-jda/JDA/releases/tag/v6.0.0): | New Component API
[Compare Source](https://github.com/discord-jda/JDA/compare/v5.6.1...v6.0.0)
### Overview
This is the stable release of JDA **6.0.0**. To avoid repeating the same information again, please look at the release notes of the release candidates for detailed explanations of the breaking changes and new features.
##### Release Candidates
1. [v6.0.0-rc.1](https://github.com/discord-jda/JDA/releases/tag/v6.0.0-rc.1) **New Components**
2. [v6.0.0-rc.2](https://github.com/discord-jda/JDA/releases/tag/v6.0.0-rc.2) **New Pin Pagination API**
3. [v6.0.0-rc.3](https://github.com/discord-jda/JDA/releases/tag/v6.0.0-rc.3) **New pin permissions and removal of bot owned guilds**
4. [v6.0.0-rc.4](https://github.com/discord-jda/JDA/releases/tag/v6.0.0-rc.4) **Change to Modals**
5. [v6.0.0-rc.5](https://github.com/discord-jda/JDA/releases/tag/v6.0.0-rc.5) **Modal Components and Serialization**
##### Migrating to 6.0.0
To help ease the upgrade to JDA 6.0.0, we've provided an [OpenRewrite recipe](https://github.com/discord-jda/JDA/blob/b3667079444e2a70a6794a1eb1853ebe752c9f9f/src/main/resources/META-INF/rewrite/rewrite.yml) that can automatically refactor parts of your codebase. This will update imports and replace a few method calls with their new equivalents in JDA 6.0.0.
However, not all breaking changes can be handled automatically — for example, code that relied on the mutability of `ActionRow` will require manual adjustments.
You will also have to update your code for creating `Modal` instances. Instead of using `ActionRow`, modals now make use of the `Label` component. Read the [release notes for v6.0.0-rc.4](https://github.com/discord-jda/JDA/releases/tag/v6.0.0-rc.4) to learn more.
##### The OpenRewrite Recipe
Before applying the recipe, make sure you’re using version control (e.g., Git) or back up your project manually. You’ll also need to be using **Gradle** or **Maven** to apply the migration.
<details>
<summary><strong>Gradle</strong></summary>
We are using the [OpenRewrite Gradle Plugin](https://docs.openrewrite.org/reference/gradle-plugin-configuration). Before changing your JDA version in gradle, you can add the rewrite plugin and use the recipe to migrate your code:
```gradle
plugins {
id("org.openrewrite.rewrite") version "7.11.0"
}
repositories {
mavenCentral()
}
dependencies {
// Your current JDA version before upgrading to 6.0.0
implementation("net.dv8tion:JDA:5.+")
rewrite("net.dv8tion:JDA:6.0.0")
rewrite("org.openrewrite.recipe:rewrite-java-dependencies:1.37.0")
}
rewrite {
activeRecipe("net.dv8tion.MigrateComponentsV2")
}
```
Once you configured this plugin, you can use the `rewriteDryRun` task to generate a git patch in `build/reports/rewrite/rewrite.patch` to see what the plugin will do with your source code. To apply the changes, either use this patch or use `rewriteRun`.
After migrating your code, you can then update your JDA version (if the rewrite hasn't done it already) and remove the plugin again.
</details>
<details>
<summary><strong>Maven</strong></summary>
We are using the [OpenRewrite Maven Plugin](https://docs.openrewrite.org/reference/rewrite-maven-plugin). Before changing your JDA version in your pom, you can add the rewrite plugin and use the recipe to migrate your code:
```xml
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>6.13.0</version>
<configuration>
<activeRecipes>
<recipe>net.dv8tion.MigrateComponentsV2</recipe>
</activeRecipes>
</configuration>
<dependencies>
<dependency>
<groupId>org.openrewrite.recipe</groupId>
<artifactId>rewrite-java-dependencies</artifactId>
<version>1.37.0</version>
</dependency>
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.0.0</version>
</dependency>
</dependencies>
</plugin>
```
Once you configured this plugin, you can use the `rewrite:dryRun` task to generate a git patch in `target/site/rewrite/rewrite.patch` to see what the plugin will do with your source code. To apply the changes, either use this patch or use `rewrite:run`.
After migrating your code, you can then update your JDA version (if the rewrite hasn't done it already) and remove the plugin again.
</details>
#### New Features
- Add support for components V2 by [@​freya022](https://github.com/freya022) in [#​2809](https://github.com/discord-jda/JDA/pull/2809)
- Add new pinned message pagination by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2874](https://github.com/discord-jda/JDA/pull/2874)
- Add message pin permission by [@​freya022](https://github.com/freya022) in [#​2895](https://github.com/discord-jda/JDA/pull/2895)
- Add support for user primary guilds by [@​mjezek-dev](https://github.com/mjezek-dev) in [#​2863](https://github.com/discord-jda/JDA/pull/2863)
- Add common interface for interactions with a custom ID by [@​Kaktushose](https://github.com/Kaktushose) in [#​2778](https://github.com/discord-jda/JDA/pull/2778)
- Add support for Label and StringSelectMenu in Modals by [@​Xirado](https://github.com/Xirado) in [#​2162](https://github.com/discord-jda/JDA/pull/2162)
- Add ComponentSerializer and ComponentDeserializer by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2906](https://github.com/discord-jda/JDA/pull/2906)
- Add TextInput#of shortcut by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2908](https://github.com/discord-jda/JDA/pull/2908)
- Add entity selects and text displays in modals by [@​freya022](https://github.com/freya022) in [#​2913](https://github.com/discord-jda/JDA/pull/2913)
#### Changes
- Remove deprecated features by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2867](https://github.com/discord-jda/JDA/pull/2867)
- Make JDA#getMutualGuilds accept UserSnowflake instead of User objects by [@​MineKing9534](https://github.com/MineKing9534) in [#​2877](https://github.com/discord-jda/JDA/pull/2877)
- Move modal classes out of the `interactions` package by [@​freya022](https://github.com/freya022) in [#​2890](https://github.com/discord-jda/JDA/pull/2890)
- Use new routes to (un)pin messages by [@​freya022](https://github.com/freya022) in [#​2896](https://github.com/discord-jda/JDA/pull/2896)
- Remove bot owned guild endpoints by [@​freya022](https://github.com/freya022) in [#​2888](https://github.com/discord-jda/JDA/pull/2888)
#### Bug Fixes
- Remove port stripping in VoiceServerUpdateHandler by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2884](https://github.com/discord-jda/JDA/pull/2884)
- Use `DELETE_GUILD` route according to the Discord Docs by [@​kiLeo13](https://github.com/kiLeo13) in [#​2875](https://github.com/discord-jda/JDA/pull/2875)
- Handle forum channels with missing available\_tags field by [@​MinnDevelopment](https://github.com/MinnDevelopment) in [#​2902](https://github.com/discord-jda/JDA/pull/2902)
- Remove unnecessary escaping while creating a masked link by [@​Alf-Melmac](https://github.com/Alf-Melmac) in [#​2910](https://github.com/discord-jda/JDA/pull/2910)
**Full Changelog**: <https://github.com/discord-jda/JDA/compare/v5.6.1...v6.0.0>
### Installation
#### Gradle
```gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.0.0")
}
```
#### Maven
```xml
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.0.0</version>
</dependency>
```
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMTEuNCIsInVwZGF0ZWRJblZlciI6IjQ0LjQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
5.6.1→6.5.0Release Notes
discord-jda/JDA (net.dv8tion:JDA)
v6.5.0: | Message Search APICompare Source
Overview
This release adds support for the Message Search API, which allows bots to search messages in a guild. See Guild#searchMessages and MessageSearchAction for detailed documentation.
Example:
Additionally, we made a minor change in the handling for received messages. For messages received in guilds JDA now handles events with missing
memberobjects, which is necessary to handle messages that arrive shortly after a user is banned from the guild. These messages will contain members which are not added to cache and have no roles.New Features
Changes
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.4.2...v6.5.0
Installation
Gradle
Maven
v6.4.2Compare Source
New Features
NO_MUTUAL_GUILDSErrorResponse by @srnyx in #3083ErrorResponse#CANNOT_FORWARD_UNREADABLE_MESSAGEby @freya022 in #3087Changes
Bug Fixes
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.4.1...v6.4.2
Installation
Gradle
Maven
v6.4.1Compare Source
Bug Fixes
CheckboxGroup.Builder.setRequiredRange()incorrectly setting min and max by @replaceitem in #3065getCommandTypereading value of interaction type instead of command type by @freya022 in #3074Full Changelog: https://github.com/discord-jda/JDA/compare/v6.4.0...v6.4.1
Installation
Gradle
Maven
v6.4.0: | CheckboxesCompare Source
Overview
This release adds support for new checkbox and radio groups in modals as well as support for voice channel effects and soundboards.
Checkboxes and Radio Groups (#3010)
You can now include checkboxes and radio groups in your modals:
When a user submits a modal with a checkbox group, the selected values can be accessed in the
ModalInteractionEventwithgetValue(groupId).getAsStringList()and radio groups usinggetValue(groupId).getAsString().New Features
Changes
ANIMATED_WEBPfor all animated assets by @freya022 in #3036CREATE_*permissions when managing/deleting our own events/emojis/stickers by @freya022 in #3061Full Changelog: https://github.com/discord-jda/JDA/compare/v6.3.2...v6.4.0
Installation
Gradle
Maven
v6.3.2Compare Source
Overview
Small bug fix release.
Changes
minValuesis zero by @freya022 in #3023Bug Fixes
Helpers.appendCause: Add special case for circular causes by @freya022 in #3041Full Changelog: https://github.com/discord-jda/JDA/compare/v6.3.1...v6.3.2
Installation
Gradle
Maven
v6.3.1Compare Source
Overview
This is primarily a bug fix release, but also includes a minor breaking change for emojis.
Enable users to choose the requested format of assets (#3009)
Most methods, that previously returned
ImageProxyor an image URL, now support passingImageFormatto choose a different format. This enables users to easily switch fromPNGtoWEBPor other formats.Additionally, most of the template strings used to create image URLs, such as
User.AVATAR_URL, have been deprecated in favor of the new DiscordAssets utility class. You can useDiscordAssets.userAvatar(ImageFormat.PNG, userId, avatarId)to get anImageProxyinstance and useImageProxy#getUrlto get the respective URL.New Features
Bug Fixes
Deprecations
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.3.0...v6.3.1
Installation
Gradle
Maven
v6.3.0: | DAVE Protocol SupportCompare Source
Overview
This release adds initial support for the DAVE Protocol.
Setting up DAVE Protocol in JDA
Since the implementation for DAVE requires native library dependencies, it is not included by default by JDA. We've decided that dependencies related to audio features will no longer be included by default in the future.
Starting with JDA 6.3.0, audio features require additional setup in your
JDABuilderorDefaultShardManagerBuilder. Once you have added a dependency that implementsDaveSessionFactory, you can configure it in your builder using setAudioModuleConfig:You can use JDAVE, which provides an implementation for this interface. Note that this library requires Java 25 and only supports a few platforms for now. Read the README for setup instructions.
There are other libraries still in development that will add support for older java versions, such as libdave-jvm which uses JNI instead of the modern FFM API.
New Features
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.2.1...v6.3.0
Installation
Gradle
Maven
v6.2.1Compare Source
Overview
In this release, we have added new compliance tests that automatically validate some of our enums against the Official Discord OpenAPI Specification. This allows us to easily verify the completeness of our enums, which is why we added a lot of new enum constants. In the future, we might use this spec for serialization / deserialization internally, or even expand it to a public REST-only module.
New Features
DiscordLocale.ARABIC,DiscordLocale.HEBREWActionType.SOUNDBOARD_SOUND_CREATE,ActionType.SOUNDBOARD_SOUND_UPDATE,ActionType.SOUNDBOARD_SOUND_DELETEActionType.AUTO_MODERATION_QUARANTINE_USERActionType.CREATOR_MONETIZATION_REQUEST_CREATED,ActionType.CREATOR_MONETIZATION_TERMS_ACCEPTEDActionType.ONBOARDING_PROMPT_CREATE,ActionType.ONBOARDING_PROMPT_UPDATE,ActionType.ONBOARDING_PROMPT_DELETEActionType.ONBOARDING_CREATE,ActionType.ONBOARDING_UPDATEActionType.HOME_SETTINGS_CREATE,ActionType.HOME_SETTINGS_UPDATE,ActionType.GUILD_PROFILE_UPDATEAuditLogKey.GUILD_BRAND_COLOR_PRIMARYTargetType.SOUNDBOARD_SOUNDTargetType.ONBOARDING_PROMPT_STRUCTURETargetType.ONBOARDINGChannelType.GUILD_DIRECTORYChanges
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.2.0...v6.2.1
Installation
Gradle
Maven
v6.2.0Compare Source
Overview
This release includes a permission change that will go into effect on February 26th, 2026. Any versions older than this will not have the correct permission checks for the new rules, or only partially support the new rules.
Permission Changes (#2967)
After the deadline of February 26th, 2026, some permissions will lose capabilities in favor of new permissions.
MESSAGE_MANAGEwill no longer allow users to Pin/Unpin Messages or Bypass Slowmode. Instead, the newBYPASS_SLOWMODEandPIN_MESSAGESpermissions have been added.MANAGE_GUILD_EXPRESSIONSwill no longer allow users to Create Emojis/Stickers. Instead, the newCREATE_GUILD_EXPRESSIONSpermission has been added.MANAGE_EVENTSwill no longer allow users to Create Scheduled Events. Instead, the newCREATE_SCHEDULED_EVENTSpermission has been added.See the Discord Changelog for details.
Retrieve Role Member Counts (#2973)
The guild role member count can now be retrieved with Guild#retrieveRoleMemberCounts.
Example:
Enhanced Role Colors (#2975)
You can now access and modify the Gradient or Holographic role colors, a feature unlocked through boosting a guild.
Example:
New Features
Guild#retrieveRoleMemberCountsby @freya022 in #2973Changes
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.1.3...v6.2.0
Installation
Gradle
Maven
v6.1.3Compare Source
Bug Fixes
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.1.2...v6.1.3
Installation
Gradle
Maven
v6.1.2Compare Source
Bug Fixes
Full Changelog: https://github.com/discord-jda/JDA/compare/v6.1.1...v6.1.2
Installation
Gradle
Maven
v6.1.1Compare Source
New Features
Bug Fixes
ModalMapping::getAsAttachmentListif no attachments were submitted by @archer-321 in #2941Full Changelog: https://github.com/discord-jda/JDA/compare/v6.1.0...v6.1.1
Installation
Gradle
Maven
v6.1.0: | Modal File UploadsOverview
This release primarily adds support for file uploads in modals.
Creating a Modal accepting file uploads
Using the uploaded file
New Features
Invite.Guildfields by @freya022 in #2914Full Changelog: https://github.com/discord-jda/JDA/compare/v6.0.0...v6.1.0
Installation
Gradle
Maven
v6.0.0: | New Component APICompare Source
Overview
This is the stable release of JDA 6.0.0. To avoid repeating the same information again, please look at the release notes of the release candidates for detailed explanations of the breaking changes and new features.
Release Candidates
Migrating to 6.0.0
To help ease the upgrade to JDA 6.0.0, we've provided an OpenRewrite recipe that can automatically refactor parts of your codebase. This will update imports and replace a few method calls with their new equivalents in JDA 6.0.0.
However, not all breaking changes can be handled automatically — for example, code that relied on the mutability of
ActionRowwill require manual adjustments.You will also have to update your code for creating
Modalinstances. Instead of usingActionRow, modals now make use of theLabelcomponent. Read the release notes for v6.0.0-rc.4 to learn more.The OpenRewrite Recipe
Before applying the recipe, make sure you’re using version control (e.g., Git) or back up your project manually. You’ll also need to be using Gradle or Maven to apply the migration.
Gradle
We are using the OpenRewrite Gradle Plugin. Before changing your JDA version in gradle, you can add the rewrite plugin and use the recipe to migrate your code:
Once you configured this plugin, you can use the
rewriteDryRuntask to generate a git patch inbuild/reports/rewrite/rewrite.patchto see what the plugin will do with your source code. To apply the changes, either use this patch or userewriteRun.After migrating your code, you can then update your JDA version (if the rewrite hasn't done it already) and remove the plugin again.
Maven
We are using the OpenRewrite Maven Plugin. Before changing your JDA version in your pom, you can add the rewrite plugin and use the recipe to migrate your code:
Once you configured this plugin, you can use the
rewrite:dryRuntask to generate a git patch intarget/site/rewrite/rewrite.patchto see what the plugin will do with your source code. To apply the changes, either use this patch or userewrite:run.After migrating your code, you can then update your JDA version (if the rewrite hasn't done it already) and remove the plugin again.
New Features
Changes
interactionspackage by @freya022 in #2890Bug Fixes
DELETE_GUILDroute according to the Discord Docs by @kiLeo13 in #2875Full Changelog: https://github.com/discord-jda/JDA/compare/v5.6.1...v6.0.0
Installation
Gradle
Maven
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.
c2581d395cto55a95ff13355a95ff133to0eb0aef81b0eb0aef81bto040f4526e8View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.