Last updated
Discord Snowflake IDs
Discord uses a Snowflake ID system similar to Twitter's, but with a different epoch. Every Discord entity — users, servers, channels, messages, roles — has a unique Snowflake ID that encodes its creation timestamp. Discord's epoch starts on January 1, 2015 at 00:00:00 UTC.
Discord Snowflake Structure
| Bits | Field | Description |
|---|---|---|
| 63–22 (42 bits) | Timestamp | Milliseconds since Discord epoch (Jan 1, 2015) |
| 21–17 (5 bits) | Internal worker ID | 0–31 |
| 16–12 (5 bits) | Internal process ID | 0–31 |
| 11–0 (12 bits) | Increment | 0–4095 per millisecond |
Decoding Discord IDs
JavaScript
const DISCORD_EPOCH = 1420070400000n; // Jan 1, 2015
function decodeDiscordId(idStr) {
const id = BigInt(idStr);
const timestamp = (id >> 22n) + DISCORD_EPOCH;
const date = new Date(Number(timestamp));
return {
id: idStr,
createdAt: date.toISOString(),
timestamp: Number(timestamp),
workerId: Number((id & 0x3E0000n) >> 17n),
processId: Number((id & 0x1F000n) >> 12n),
increment: Number(id & 0xFFFn)
};
}
// Example Discord user ID
console.log(decodeDiscordId('175928847299117063'));
// { createdAt: '2016-04-30T11:18:25.796Z', ... }
// Generate a Discord ID for a specific date
function dateToDiscordId(date) {
const ms = BigInt(date.getTime()) - DISCORD_EPOCH;
return String(ms << 22n);
}