Releases: discord-jda/JDA
v6.4.1
Bug Fixes
- Fixed
CheckboxGroup.Builder.setRequiredRange()incorrectly setting min and max by @replaceitem in #3065 - Fix
getCommandTypereading value of interaction type instead of command type by @freya022 in #3074
Full Changelog: v6.4.0...v6.4.1
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.4.1")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.4.1</version>
</dependency>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)
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();
When a user submits a modal with a checkbox group, the selected values can be accessed in the ModalInteractionEvent with getValue(groupId).getAsStringList() and radio groups using getValue(groupId).getAsString().
New Features
- Add checkboxes, checkbox groups and radio groups by @freya022 in #3010
- Add soundboard sounds by @freya022 in #2753
- Add getJumpUrl for all channel types by @Vampire in #3055
Changes
- Use
ANIMATED_WEBPfor all animated assets by @freya022 in #3036 - Alternatively check for
CREATE_*permissions when managing/deleting our own events/emojis/stickers by @freya022 in #3061 - Prevent warning about message content intent if message contains content by @freya022 in #3053
Full Changelog: v6.3.2...v6.4.0
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.4.0")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.4.0</version>
</dependency>v6.3.2
Overview
Small bug fix release.
Changes
- Update dependencies by @MinnDevelopment in #3038
- Bump limit of context menu commands to 15 by @freya022 in #3035
- Prevent explicitly required select menus when
minValuesis zero by @freya022 in #3023
Bug Fixes
Full Changelog: v6.3.1...v6.3.2
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.3.2")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.3.2</version>
</dependency>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)
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#getImageandCustomEmoji#getImageUrlwill now usewebpformat by default. This is due to API changes which make thegifformat unreliable. See #2999 for details. You can useCustomEmoji#getImage(ImageFormat)to choose a different format, likeImageFormat.PNGorImageFormat.GIF.
New Features
- Adding s/S TimeFormat by @Sheldan in #3016
- Enable users to choose the requested format of assets by @freya022 in #3009
Bug Fixes
- Fix unique id not being copied in SelectMenus by @Kaktushose in #3013
- Use Locale.ROOT in AudioEncryption for consistent string handling by @arif-banai in #3024
Deprecations
- Template Strings for Image CDN URLs are replaced by DiscordAssets
- ScheduledEventUpdateImageEvent is replaced by ScheduledEventUpdateCoverImageEvent
Full Changelog: v6.3.0...v6.3.1
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.3.1")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.3.1</version>
</dependency>v6.3.0 | DAVE Protocol Support
Overview
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:
builder.setAudioModuleConfig(
new AudioModuleConfig()
.withDaveSessionFactory(daveSessionFactory)
)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.
New Features
- Add support for libdave by @MinnDevelopment in #2988
Full Changelog: v6.2.1...v6.3.0
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.3.0")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.3.0</version>
</dependency>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. 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, that all voice connections will require End-to-End-Encryption starting March 1st, 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 - Adds new audit log action types:
ActionType.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_UPDATE
- Adds
AuditLogKey.GUILD_BRAND_COLOR_PRIMARY - Adds new audit log target types:
TargetType.SOUNDBOARD_SOUNDTargetType.ONBOARDING_PROMPT_STRUCTURETargetType.ONBOARDING
- Adds
ChannelType.GUILD_DIRECTORY
Changes
- Redact token from trace logs of gateway requests by @freya022 in #2986
- Added Component Verification in Modal Builder by @Crain-32 in #2987
- Update dependencies by @MinnDevelopment in #2989
Full Changelog: v6.2.0...v6.2.1
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.2.1")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.2.1</version>
</dependency>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)
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:
guild.retrieveRoleMemberCounts().queue(counts -> {
int boostRoleMemberCount = counts.get(guild.getBoostRole());
IO.println("This guild has " + boostRoleMemberCount + " boosters!");
});Enhanced Role Colors (#2975)
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()));
});New Features
- Add support for enhanced role colors by @MinnDevelopment in #2975
- Add
Guild#retrieveRoleMemberCountsby @freya022 in #2973 - Add GUILD_BANNER ("banner_hash") auditlog key by @Vulcano771 in #2968
- Voice Channel Invite Guest Flag by @austinpilz in #2966
Changes
Full Changelog: v6.1.3...v6.2.0
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.2.0")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.2.0</version>
</dependency>v6.1.3
Bug Fixes
- Avoid downloading external URLs for component updates by @MinnDevelopment in #2971
Full Changelog: v6.1.2...v6.1.3
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.1.3")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.1.3</version>
</dependency>v6.1.2
Bug Fixes
- Fix voice state in events when joining channel by @MinnDevelopment in #2959
Full Changelog: v6.1.1...v6.1.2
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.1.2")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.1.2</version>
</dependency>v6.1.1
New Features
Bug Fixes
- Fix
ModalMapping::getAsAttachmentListif no attachments were submitted by @archer-321 in #2941 - Remove internal class call and replace with local version by @mikomikotaishi in #2944
- Fix emtpy edit message builders by @MinnDevelopment in #2953
- Add check for valid interface types on ChannelCacheView#ofType by @MinnDevelopment in #2955
Full Changelog: v6.1.0...v6.1.1
Installation
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("net.dv8tion:JDA:6.1.1")
}Maven
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>6.1.1</version>
</dependency>