discord.js Latest Version 2026: 14.28.0 and the v14 Changes

Published on | Updated

The latest discord.js version is 14.28.0 from 30 October 2026. What it adds, how to update and check your version, which Node.js to run and where v15 stands.

Rows of server racks in a dark data center, lit in blue and purple with cables running overhead

You searched for the discord.js latest version because a tutorial, a lockfile or an error message made you doubt what your bot runs. Maybe package.json says ^14.15.0, maybe a guide still imports MessageEmbed. This page gives the current version and its release date, what the newest release adds, how to update and check what is installed, and what changed for anyone still moving from v13.

Quick answer: The latest discord.js version is 14.28.0, released on 30 October 2026. It stays on the v14 line, so from any 14.x release you update with npm install discord.js@^14.28.0. It adds permissions and appPermissions on channels that arrive in interaction data, fileTypes filters for attachment options and file uploads, and invites that hand out roles or accept only listed users. The package needs Node.js 18 or newer, but run a supported LTS such as Node.js 24 or 26. discord.js v15 exists on npm only as development builds under the dev tag, so v14 is the version for production bots in 2026.

What is the discord.js current version in 2026?

On 3 November 2026 the latest tag of discord.js on npm points to 14.28.0. The v14 line had three minor releases this year, plus patch releases 14.26.1 to 14.26.5 between April and July:

VersionReleasedHeadline changes
14.28.030 October 2026permissions and appPermissions on channels from interactions, file type filters, invite roles and target users
14.27.015 July 2026Sending voice messages, RoleManager#fetchMemberCounts, member collectibles, a voiceServerUpdate event
14.26.031 March 2026Radio group and checkbox components in modals, partial DM channels without a client user

Ask npm yourself:

npm view discord.js dist-tags

That prints latest (the stable release) next to dev, which points to a v15 development build. Only latest belongs in a production bot.

The @discordjs/* subpackages keep their own version numbers. discord.js 14.28.0 depends on @discordjs/builders ^1.15.0, released the same evening, which brings the file type methods shown below.

What changed in discord.js 14.28.0

The release notes list three features. Each wraps a change Discord made to its API earlier in the year.

permissions and appPermissions on picked channels

Every channel object now has permissions and appPermissions (PR 11577). They are filled only for channels that arrive in an interaction's resolved data, such as a channel a user picks in a slash command option. permissions holds Discord's calculation of the invoking member's permissions in that channel, overwrites included; appPermissions holds the same for your bot. Discord added the bot half on 16 July 2026, and only sends it when the bot user is in the server. On channels from anywhere else both are null.

const { MessageFlags, PermissionFlagsBits } = require('discord.js');

// /setlogchannel with a required channel option named "channel"
async function setLogChannel(interaction) {
  const channel = interaction.options.getChannel('channel', true);
  const needed = [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages];

  if (channel.appPermissions?.has(needed)) {
    await saveLogChannel(interaction.guildId, channel.id); // your own storage
    await interaction.reply({ content: `Logging to ${channel}.`, flags: MessageFlags.Ephemeral });
  } else {
    await interaction.reply({
      content: `I cannot view or post in ${channel}. Give my role View Channel and Send Messages there.`,
      flags: MessageFlags.Ephemeral,
    });
  }
}

Discord's channel docs say these values leave out implicit permissions, so test View Channel explicitly, as above. This check gets more useful on 16 November 2026, when Discord starts hiding channels a bot cannot view; our channel obfuscation guide explains that change.

File type filters for attachment options and file uploads

Since 5 August 2026 a slash command ATTACHMENT option or a modal File Upload component can limit which files a user picks. discord.js 14.28.0 accepts this as fileTypes (PR 11580), and @discordjs/builders 1.15.0 adds addFileTypes() and setFileTypes() to attachment options and to FileUploadBuilder:

const { SlashCommandBuilder } = require('discord.js');

const data = new SlashCommandBuilder()
  .setName('upload-skin')
  .setDescription('Upload a skin image')
  .addAttachmentOption((option) =>
    option
      .setName('file')
      .setDescription('An image file')
      .setRequired(true)
      .addFileTypes('image'),
  );

Each value is a group (image, video or audio) or a dot-prefixed extension such as .pdf, up to 10 per option. Discord recommends the groups; if you list extensions, include .jpg for images and both .mp4 and .mov for video, because some mobile clients rely on them. The filter only checks the extension in the file name, not the content, so still validate what you receive. Register your commands again after adding a filter.

Invites that give roles or only work for listed users

On 13 January 2026 Discord made invites able to grant roles and to accept only chosen users. discord.js 14.28.0 backports this to v14 (PR 11590): guild.invites.create() and channel.createInvite() take roles and targetUsersFile, and invites gain fetchTargetUsers(), updateTargetUsers() and fetchTargetUsersJobStatus().

// Inside an async handler: guild is a Guild, channel a text channel in it
const invite = await guild.invites.create(channel, {
  maxAge: 86400, // 24 hours
  maxUses: 25,
  roles: ['ROLE_ID'], // given to everyone who accepts
  targetUsersFile: ['USER_ID_1', 'USER_ID_2'], // only these users can accept
  reason: 'Tournament invite',
});

const job = await invite.fetchTargetUsersJobStatus();
console.log(invite.url, job.status, `${job.processedUsers}/${job.totalUsers}`);

targetUsersFile takes an array of users or IDs, or a CSV file with one column of user IDs. Discord processes that list as a background job: status 1 means still processing, 2 completed and 3 failed, with the reason in errorMessage. Creating an invite needs Create Instant Invite. Adding roles also needs Manage Roles, and Discord will not let the bot hand out a role with higher permissions than its own. The target_user_ids array and the per-user endpoints Discord added on 18 September 2026 have no wrapper in 14.28.0.

How to update to 14.28.0

npm install discord.js@^14.28.0
npm list discord.js

Skim the release notes of each minor between your version and 14.28.0 before you deploy. One example: 14.22.0 deprecated the ready event in favour of clientReady, and your bot prints a DeprecationWarning until you switch:

const { Client, Events, GatewayIntentBits } = require('discord.js');

const client = new Client({ intents: [GatewayIntentBits.Guilds] });

client.once(Events.ClientReady, (readyClient) => {
  console.log(`Logged in as ${readyClient.user.tag}`);
});

client.login(process.env.DISCORD_TOKEN);

Is discord.js v15 out?

No. On 3 November 2026 v15 exists only as development builds behind npm's dev tag, the newest published on 2 November. There is no stable v15 release yet. Two details are worth planning for: the newest dev build declares Node.js 24.17.0 or newer in engines, and the v14 deprecation warning says the ready event "will only emit under that name in v15", meaning clientReady. Keep production bots on v14 and try v15 in a separate branch.

Which Node.js version does discord.js need?

discord.js 14.28.0 declares "node": ">=18" in its package.json. That is the floor, not advice: Node.js 18 reached end of life on 30 April 2025 and Node.js 20 on 30 April 2026, so neither gets security fixes. On 3 November 2026 the supported lines are Node.js 26 (LTS since 28 October 2026), Node.js 24 (maintenance until 30 April 2028) and Node.js 22 (maintenance until 30 April 2027). Pick 24 or 26 for a new bot; a current 24.x or 26.x release also meets the floor of the v15 dev builds. Check with node -v, and see our Node.js version guide for discord.js hosting for the upgrade steps.

How to check your discord.js version

From package.json

A caret range like ^14.15.0 lets npm install any newer 14.x, so the range in package.json is not the version that runs. Your lockfile or the terminal tells you that.

From the terminal

npm list discord.js

You should see one top-level version. Duplicates usually come from old plugins or monorepo mistakes; dedupe them so one discord.js instance handles the gateway.

At runtime

console.log(require('discord.js').version);

Use this in a debug branch, not in production logs.

What changed from v13 to v14

If you are still on v13, these are the changes that touch almost every file. The official Updating to v14 guide has the full list.

  • API v10. v14 switched discord.js to Discord API v10. Intents are required, and privileged intents such as Message Content need a toggle in the Developer Portal. Once more than 10,000 unique users can see your app, Discord reviews your access to them.
  • Builders. MessageEmbed became EmbedBuilder, MessageActionRow became ActionRowBuilder, MessageButton became ButtonBuilder and MessageSelectMenu became StringSelectMenuBuilder. addField() is gone; use addFields(). Components you receive from the API are read-only, so copy them with ButtonBuilder.from() before you change them.
  • Enums instead of strings. Intents.FLAGS.GUILDS became GatewayIntentBits.Guilds, the 'CHANNEL' partial became Partials.Channel, and style: 'PRIMARY' became ButtonStyle.Primary. Enum names are singular and values are PascalCase.
  • Bundled packages. @discordjs/builders, @discordjs/formatters, @discordjs/rest and discord-api-types ship with v14. Uninstall separate copies to avoid version conflicts.
  • Type guards. Methods like channel.isText() are gone; compare channel.type with a ChannelType value instead.
  • Rows. Buttons and selects live in an ActionRowBuilder, with up to five buttons per row.

Expect a wave of TypeScript errors after the upgrade. Most reflect real API drift, so fix them instead of casting interaction objects to any; that is where permission mistakes turn into production incidents. Test commands, buttons and permissions in a staging server before you deploy.

Getting started with the latest discord.js

  1. Install a supported Node.js LTS (24 or 26).
  2. Create an application in the Developer Portal, copy the bot token and enable only the intents you need.
  3. Run npm install discord.js.
  4. Declare intents explicitly in the Client options.
  5. Register slash commands for one test server during development, then globally for production.
  6. Listen for clientReady, and log client.on('error') and process.on('unhandledRejection') so silent crashes do not look like Discord bugs.

Running a discord.js bot in production

A long-running bot needs a process manager such as pm2, systemd or a container restart policy. Set NODE_ENV=production, rotate logs and watch memory if you cache large guilds. If you would rather skip that, our Discord bot hosting lets you pick the Node.js runtime during setup, installs dependencies from package.json when the bot starts and, on paid plans, restarts the bot automatically after a crash. Each plan runs one bot process; for several bots or a dashboard next to them, a VPS gives you full control.

Slash commands stay responsive when you defer long work. If a command calls a database or remote API, use deferReply() and editReply(), and show the user a fallback when something fails. Our guide to 'The application did not respond' and error 10062 goes through each cause with code.

@discordjs/voice adds native dependencies; pin the versions the release notes list as compatible with your discord.js. Sharding is rarely a day-one concern, but memory growth is: profile heap usage after updates, and cache less before you buy more RAM.

Not every feature needs a gateway connection. Incoming webhooks suit status posts from CI or game servers. Keep tokens out of logs and rotate webhook URLs if they leak.

FAQ

What is the discord.js latest version?

14.28.0, released on 30 October 2026. It is a minor release on the v14 line, so any 14.x bot can update with npm install discord.js@^14.28.0. Check what you run with npm list discord.js.

What changed in discord.js 14.28.0?

Three features: permissions and appPermissions on channels from interaction data, fileTypes filters for attachment options and file upload components, and invite support for roles and target users with fetchTargetUsers(), updateTargetUsers() and fetchTargetUsersJobStatus().

Is discord.js v15 released?

No. On 3 November 2026 v15 is only published as development builds under npm's dev tag. Use v14 for production.

Which Node.js version do I need for discord.js?

14.28.0 installs on Node.js 18 or newer, but Node.js 18 and 20 are end of life. Run Node.js 24 or 26, or 22 until it reaches end of life on 30 April 2027.

Do I still need the Message Content intent?

Only if your bot reads plain message text, for prefix commands or moderation. Enable it in the Developer Portal; above 10,000 users Discord reviews the access. Slash command bots usually do not need it.

How hard is migration from v13 to v14?

Usually moderate: many repetitive renames of embeds, components and enums across files. Search and replace gets you far, but test every command, button and permission check in a staging server.

Sources

All opened on 3 November 2026: