Skip to content

Releases: discord-jda/JDA

v6.4.1

02 Apr 19:06
2cda370

Choose a tag to compare

Bug Fixes

  • Fixed CheckboxGroup.Builder.setRequiredRange() incorrectly setting min and max by @replaceitem in #3065
  • Fix getCommandType reading 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

28 Mar 15:00
7c09b43

Choose a tag to compare

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();
image

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

Changes

  • Use ANIMATED_WEBP for 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

15 Mar 11:15
47c95bc

Choose a tag to compare

Overview

Small bug fix release.

Changes

Bug Fixes

  • Helpers.appendCause: Add special case for circular causes by @freya022 in #3041

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

15 Feb 13:18
132149c

Choose a tag to compare

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#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.

New Features

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

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

11 Jan 14:50
7a456b2

Choose a tag to compare

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

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

01 Jan 14:44
95da188

Choose a tag to compare

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_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

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

14 Dec 15:27
6355712

Choose a tag to compare

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_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 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

Changes

  • Update permission checks with the Feb 23 2026 deadline by @freya022 in #2967

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

09 Dec 11:10
f15c0f6

Choose a tag to compare

Bug Fixes

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

23 Nov 20:30
899d817

Choose a tag to compare

Bug Fixes

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

02 Nov 15:10
7d465e5

Choose a tag to compare

New Features

  • Implement Reading/Writing System Channel Flags by @LaFriska in #2928

Bug Fixes

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>