Snowflake ID

Short description: Unique identifiers used by X (formerly Twitter)

Template:TwitterSnowflake/gen

Snowflake ID

Other names| Twitter Snowflake
X Snowflake
Components of a snowflake identifier in binary

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.[1] 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.

## Contents

* 1 Format
* 1.1 Example
* 2 Usage
* 3 See also
* 4 References
* 5 External links

## 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.[2]

Snowflakes are sortable by time, because they are based on the time they were created.[2] 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.[3]

Fixed header format  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 - first 31 bits
4  | 32  | Timestamp - last 10 bits | Machine ID | Machine Sequence Number

### Example

A tweet produced by @Wikipedia in February 2025[4] has the snowflake ID 1888944671579078978. The number may be converted to binary as 0001 1010 0011 0110 1110 0001 0010 1011 1011 0101 11|01 0110 1000|0001 0100 0010, with pipe symbols denoting the three parts of the ID.

* The first 41 (+ 1 top zero bit) bits convert to decimal as 450359504599. Add the value to the X Epoch of 1288834974657 (in Unix time milliseconds),[5] the Unix time of the tweet is therefore 1739194479256: February 10, 2025 13:34:39.256 UTC.
* The middle 10 bits 01 0110 1000 are the machine ID.
* The last 12 bits 0001 0100 0010 decode to 322, meaning this tweet is the 322'nd snowflake processed this millisecond.

## Usage

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

* X (formerly Twitter) uses snowflake IDs for tweets, direct messages, users, lists, and all other objects available over the API.[7]
* The 10-bit machine ID field can be further split into sub-fields by a given implementation. For example, the archived version of the original Twitter snowflake library in Scala splits it into a 5-bit data center ID and a 5-bit worker ID.[8]
* Discord also uses snowflakes, with their epoch set to 1420070400000, which translates to the zeroth second of the year 2015.[3]
* 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.[9]
* 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.[10]

## See also

* Universally unique identifier
* GUID v7

## References

1. ↑ 1.0 1.1 King, Ryan (June 1, 2010). "Announcing Snowflake". Twitter. https://blog.twitter.com/engineering/en_us/a/2010/announcing-snowflake.html.
2. ↑ 2.0 2.1 "twitter-archive/snowflake at b3f6a3c6ca". October 1, 2012. https://github.com/twitter-archive/snowflake/tree/b3f6a3c6ca8e1b6847baa6ff42bf72201e2c2231.
3. ↑ 3.0 3.1 "API Reference". Discord. https://discord.com/developers/docs/reference#snowflakes.
4. ↑ @Wikipedia. "Wikipedia is a free encyclopedia written and maintained by a community of nearly 260,000 volunteers.". https://twitter.com/Wikipedia/status/1888944671579078978. Missing or empty `|date=` (help)
5. ↑ "2019-08-03: TweetedAt: Finding Tweet Timestamps for Pre and Post Snowflake Tweet IDs". https://ws-dl.blogspot.com/2019/08/2019-08-03-tweetedat-finding-tweet.html.
6. ↑ Siegler, MG (October 12, 2010). "Tweet IDs About To Get Jumbled In A Blizzard As Snowflake Is Set To Roll Live". https://techcrunch.com/2010/10/12/twitter-snowflake/.
7. ↑ "Twitter IDs". Twitter. https://developer.twitter.com/en/docs/twitter-ids.
8. ↑ Source Code  twitter-archive/snowflake, Twitter, 2010-08-14, https://github.com/twitter-archive/snowflake/blob/snowflake-2010/src/main/scala/com/twitter/service/snowflake/IdWorker.scala#L27, retrieved 2025-05-24
9. ↑ "Sharding & IDs at Instagram" (in en). May 2, 2016. https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c.
10. ↑ Source Code  mastodon/mastodon, Mastodon, 2022-11-11, https://github.com/mastodon/mastodon/blob/5e796dc6f85b37c8378fe01cfd8ac23222c89eea/lib/mastodon/snowflake.rb, retrieved 2022-11-11

## External links

* on GitHub
* Snowflake ID generator Tool

0.00

(0 votes)

Original source: https://en.wikipedia.org/wiki/Snowflake ID. Read more

|

Retrieved from "https://handwiki.org/wiki/index.php?title=Snowflake_ID&oldid=3977217"