# Snowflake ID

1777737510428868608
Snowflake ID

Snowflake IDs, or snowflakes, are a form of unique identifier used in distributed computing. The format was created by X (formerly Twitter) and is used for the IDs of tweets. It is popularly believed that every snowflake has a unique structure, so they took the name "snowflake ID". The format has been adopted by other companies, including Discord and Instagram. The Mastodon social network uses a modified version.

## Format

Snowflakes are 64 bits in binary. (Only 63 are used to fit in a signed integer.) The first 41 bits are a timestamp, representing milliseconds since the chosen epoch. The next 10 bits represent a machine ID, preventing clashes. Twelve more bits represent a per-machine sequence number, to allow creation of multiple snowflakes in the same millisecond. The final number is generally serialized in decimal.[1]

Snowflakes are sortable by time, because they are based on the time they were created.[1] Additionally, the time a snowflake was created can be calculated from the snowflake. This can be used to get snowflakes (and their associated objects) that were created before or after a particular date.[2]

Offsets Octet 0 1 2 3
Octet Bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 0 Timestamp
4 32 Machine ID Machine Sequence Number

### Example

A tweet produced by @Wikipedia in June 2022[3] has the snowflake ID 1541815603606036480. The number may be converted to binary as 00 0001 0101 0110 0101 1010 0001 0001 1111 0110 0010 00|01 0111 1010|0000 0000 0000, with pipe symbols denoting the three parts of the ID.

• The first 41 (+ 1 top zero bit) bits convert to decimal as 367597485448. Add the value to the X Epoch of 1288834974657 (in Unix time milliseconds),[4] the Unix time of the tweet is therefore 1656432460.105: June 28, 2022 16:07:40.105 UTC.
• The middle 10 bits 01 0111 1010 are the machine ID.
• The last 12 bits decode to all zero, meaning this tweet is the first tweet processed by the machine at the given millisecond.

## Usage

The format was first announced by Twitter in June 2010.[5] Due to implementation challenges, they waited until later in the year to roll out the update.[6]

• X uses snowflake IDs for tweets, direct messages, users, lists, and all other objects available over the API.[7]
• Discord also uses snowflakes, with their epoch set to the first second of the year 2015.[2]
• Instagram uses a modified version of the format, with 41 bits for a timestamp, 13 bits for a shard ID, and 10 bits for a sequence number.[8]
• Mastodon's modified format has 48 bits for a millisecond-level timestamp, as it uses the UNIX epoch. The remaining 16 bits are for sequence data.[9]