{"id":27662698,"url":"https://github.com/racum/uuinfo","last_synced_at":"2026-05-31T13:00:32.210Z","repository":{"id":266340580,"uuid":"890054634","full_name":"Racum/uuinfo","owner":"Racum","description":"A tool to debug unique identifiers (UUID, ULID, Snowflake, etc).","archived":false,"fork":false,"pushed_at":"2026-05-22T21:43:27.000Z","size":2184,"stargazers_count":64,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-22T23:38:59.880Z","etag":null,"topics":["cli","database","debug","identifier","rust-cli","snowflake-id","unique","unique-identifier","uuid"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Racum.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-17T22:17:55.000Z","updated_at":"2026-05-22T21:43:31.000Z","dependencies_parsed_at":"2025-12-30T14:06:33.411Z","dependency_job_id":null,"html_url":"https://github.com/Racum/uuinfo","commit_stats":null,"previous_names":["racum/uuinfo"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Racum/uuinfo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Racum%2Fuuinfo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Racum%2Fuuinfo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Racum%2Fuuinfo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Racum%2Fuuinfo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Racum","download_url":"https://codeload.github.com/Racum/uuinfo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Racum%2Fuuinfo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33731998,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","database","debug","identifier","rust-cli","snowflake-id","unique","unique-identifier","uuid"],"created_at":"2025-04-24T10:01:47.322Z","updated_at":"2026-05-31T13:00:32.197Z","avatar_url":"https://github.com/Racum.png","language":"Rust","funding_links":[],"categories":["CLI Tools"],"sub_categories":["Go"],"readme":"# uuinfo: UUID (+others) Information\n\nA tool to debug unique identifiers (UUID, ULID, Snowflake, etc).\n\nThis is a simple CLI program to parse and debug compound unique identifiers, that means, ID’s with built-in structure to achieve uniqueness, like randomness, hashed data, timestamp, node or sequence. It understands most 128 and 64-bit IDs, and some other obscure lengths, including text-only representations.\n\nJust input some ID and **uuinfo** will try to infer as much information as possible from it:\n\n![Screenshot of a terminal window showing an uuinfo output](assets/uuinfo.png)\n\nIf the ID format allows for it, **uuinfo** also shows its bits, color-coded by type; the key of the color doubles as the values from the left column in the rendered card. The colors on your system may differ, since those are ANSI colors instead of hardcoded ones.\n\n## Supported ID Formats\n\n- [UUID](https://www.rfc-editor.org/rfc/rfc9562.html): versions 1 to 8, Nil, Max, NCS and Microsoft GUID.\n- UUID wrappers: [ShortUUID](https://github.com/skorokithakis/shortuuid), [Base64](https://en.wikipedia.org/wiki/Base64), [Uuid25](https://github.com/uuid25/python) and integer\n- [ULID](https://github.com/ulid/spec)\n- [Julid](https://proclamations.nebcorp-hias.com/sundries/presenting-julids/)\n- [UPID](https://github.com/carderne/upid)\n- [COMB](https://github.com/richardtallent/RT.Comb) (TR.Comb)\n- [Sandflake](https://github.com/celrenheit/sandflake)\n- [MongoDB ObjectId](https://www.mongodb.com/docs/manual/reference/method/ObjectId/)\n- [KSUID](https://github.com/segmentio/ksuid)\n- [Xid](https://github.com/rs/xid)\n- [CUID1](https://github.com/paralleldrive/cuid) / [CUID2](https://github.com/paralleldrive/cuid2)\n- [SCRU128](https://github.com/scru128/spec) / [SCRU64](https://github.com/scru64/spec)\n- [Timeflake](https://github.com/anthonynsimon/timeflake)\n- [Flake](https://github.com/boundary/flake) (Boundary)\n- [Nano ID](https://zelark.github.io/nano-id-cc/)\n- [TSID](https://github.com/f4b6a3/tsid-creator)\n- [Sqids](https://sqids.org/)\n- [Hashids](https://github.com/hashids)\n- [YouTube Video ID](https://www.youtube.com/watch?v=gocwRvLhDf8)\n- [Stripe ID](https://dev.to/stripe/designing-apis-for-humans-object-ids-3o5a)\n- [Datadog Trace ID](https://docs.datadoghq.com/tracing/guide/span_and_trace_id_format/)\n- [NUID](https://github.com/nats-io/nuid) (NATS)\n- [TypeID](https://github.com/jetify-com/typeid) (Jetify)\n- [Breeze ID](https://github.com/tzwel/breezeid)\n- [Puid](https://github.com/pid/puid)\n- [PushID](https://firebase.blog/posts/2015/02/the-2120-ways-to-ensure-unique_68/) (Firebase)\n- [TID](https://atproto.com/specs/tid) (AT Protocol, Bluesky)\n- [Thread ID](https://developers.facebook.com/docs/threads) (Meta Threads)\n- [SnowID](https://github.com/qeeqez/snowid-rust)\n- [DUNS Number](https://en.wikipedia.org/wiki/Data_Universal_Numbering_System)\n- [ASIN](https://en.wikipedia.org/wiki/Amazon_Standard_Identification_Number) (Amazon)\n- [Google Docs ID](https://stackoverflow.com/questions/47151920)\n- [Slack ID](https://docs.slack.dev/tools/deno-slack-sdk/reference/slack-types/)\n- [Spotify ID](https://developer.spotify.com/documentation/web-api/concepts/spotify-uris-ids)\n- [Nano64](https://github.com/only-cliches/nano64)\n- [OrderlyID](https://github.com/orderlykit/orderlyid)\n- [Mist (薄雾)](https://github.com/asyncins/mist)\n- [SWHID](https://www.swhid.org) (Software Hash ID)\n- [IBAN](https://www.iban.com/structure) (International Bank Account Number)\n- [Commerce Barcode](https://en.wikipedia.org/wiki/Global_Trade_Item_Number) (EAN-8, UPC-A, EAN-13 and GTIN-14; only auto-detected with dashes)\n- [VIN](https://en.wikipedia.org/wiki/Vehicle_identification_number) (Vehicle Identification Number)\n- [Bitcoin Address](https://rf5.github.io/2022/02/14/btc-address-intro.html)\n- [Ethereum Address](https://ethereum.org/developers/docs/accounts/)\n- 128-bit formats encoded as UUID: ULID, UPID, Flake, Timeflake and SCRU128\n- Snowflake variants:\n  - [Twitter](https://developer.x.com/en/docs/x-ids)\n  - [Discord](https://discord.com/developers/docs/reference#snowflakes)\n  - [Instagram](https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c)\n  - [Sony](https://github.com/sony/sonyflake)\n  - [Spaceflake](https://github.com/kkrypt0nn/spaceflake)\n  - [Mastodon](https://github.com/mastodon/mastodon/blob/main/lib/mastodon/snowflake.rb)\n  - LinkedIn\n  - [Frostflake](https://github.com/ordo-one/package-frostflake)\n  - [Flake ID](https://github.com/T-PWK/flake-idgen)\n  - [Simpleflake](https://github.com/leodutra/simpleflakes)\n- [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) (seconds, ms, μs and ns)\n- [Hex-encoded Hash](https://en.wikipedia.org/wiki/Secure_Hash_Algorithms)\n- [IPFS CID](https://docs.ipfs.tech/concepts/content-addressing/) (v0 and v1)\n- Network: [IPv4](https://en.wikipedia.org/wiki/IPv4), [IPv6](https://en.wikipedia.org/wiki/IPv6), [MAC Address](https://en.wikipedia.org/wiki/MAC_address) and [IMEI](https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity)\n- [ISBN](https://en.wikipedia.org/wiki/ISBN) (10 and 13)\n- Geo: [H3 Index](https://h3geo.org)\n\n## Installation\n\n### macOS (Homebrew)\n\nRequires macOS 11 Big Sur or newer.\n\n```shell\n$ brew tap racum/tap  # Setup (only needed once).\n\n$ brew install uuinfo  # Install.\n\n$ brew upgrade uuinfo  # Update.\n```\n\n### Linux (Debian/Ubuntu, APT)\n\n```shell\n$ # Set up APT source (only needed once):\n$ curl -fsSL https://racum.github.io/apt/key.gpg \\\n    | sudo gpg --dearmor -o /etc/apt/keyrings/racum.gpg \\\n  \u0026\u0026 echo \"deb [signed-by=/etc/apt/keyrings/racum.gpg] https://racum.github.io/apt stable main\" \\\n    | sudo tee /etc/apt/sources.list.d/racum.list\n\n$ sudo apt update \u0026\u0026 sudo apt install uuinfo  # Install or update.\n```\n\n### Linux (other distros)\n\nStatic binary, zero runtime deps. Pick the right arch:\n\n```shell\n$ # x86_64:\n$ curl -L https://github.com/racum/uuinfo/releases/latest/download/uuinfo-linux-x86_64.tar.gz | tar xz\n$ sudo mv uuinfo /usr/local/bin/\n\n$ # arm64:\n$ curl -L https://github.com/racum/uuinfo/releases/latest/download/uuinfo-linux-aarch64.tar.gz | tar xz\n$ sudo mv uuinfo /usr/local/bin/\n```\n\n### Windows (Scoop)\n\nRequires Windows 10 or newer.\n\n```shell\n\u003e scoop bucket add racum https://github.com/racum/scoop-bucket  # Setup (only needed once).\n\n\u003e scoop install uuinfo  # Install.\n\n\u003e scoop update uuinfo  # Update.\n```\n\nThe zipped `.exe` (x86_64 and arm64) can also be downloaded directly from the [GitHub releases page](https://github.com/racum/uuinfo/releases/latest).\n\n### Cargo (any platform)\n\n**Uuinfo** was developed in [Rust](https://www.rust-lang.org), thus it requires [its toolchain](https://www.rust-lang.org/tools/install); if you already have it available, you can install it with `cargo`:\n\n```shell\n$ cargo install uuinfo\n```\n\n## Usage\n\nFor a complete list of options, just run the help: `uuinfo --help`.\n\n### Auto Detect\n\nIf you just input an ID without any options, **uuinfo** will try to detect its format using very basic heuristics on its length and popularity; and this may work for most cases.\n\n```shell\n$ uuinfo 01941f29-7c00-7aaa-aaaa-aaaaaaaaaaaa\n...\n```\n\n### Parse Everything\n\nIf you are not sure about the ID format, you can see the cards for all formats that it got parsed successfully with `-e`/`--everything`; and with that, you can see what result makes more sense.\n\n**Note**: this argument disables the output options.\n\n### Force Format\n\nSometimes an ID could be valid for more than one format, if this happens and the auto-detection above picks the wrong one, you can disambiguate using the `-f` (of `--force`) parameter.\n\nFor example, the ID `12345678901234567890` is automatically detected as a **Snowflake**, but, it could also be a valid **Xid**. If you want to force **uuinfo** to parse it as Xid, call it like this:\n\n```shell\n$ uuinfo -f xid 12345678901234567890\n...\n```\n\nCheck the `--help` for a complete list of values of `-f`/`--force`.\n\n#### Snowflake Variants\n\nSnowflake is **not** an “ID format”, but rather a **category** of formats; since it is just a number, **uuinfo** can’t detect what variation was used to generate it, thus, specifying the variant with `-f`/`--force` is required to be able to get anything useful from it.\n\nFortunately, **uuinfo** can compare time-aware IDs and sort them by date; for example:\n\n```shell\n$ date\nSat May 16 21:05:33 CEST 2026\n\n$ uuinfo --compare 2039815312720154892\nDate/times of the valid IDs parsed as:\n- 1985-01-18T21:25:12.000Z Snowflake: Frostflake\n- 1985-05-30T19:37:48.488Z Snowflake: LinkedIn\n- 1985-05-30T19:37:48.488Z Snowflake: Flake ID\n- 2007-09-15T14:48:54.244Z Snowflake: Simpleflake\n- 2019-05-09T06:55:55.965Z Thread ID (Meta Threads)\n- 2019-05-09T06:55:55.965Z Snowflake: Instagram\n- 2026-04-02T21:20:43.145Z Snowflake: Twitter\n- 2026-05-16T19:07:22.371Z --- Now ---\n- 2030-05-30T19:37:48.488Z Snowflake: Discord\n- 2030-05-30T19:37:48.488Z Snowflake: Spaceflake\n- 2034-08-21T23:21:52.720Z Unix timestamp: Assuming nanoseconds\n- 2035-05-30T19:37:48.488Z TSID\n- 2039-05-30T19:37:48.488Z SnowID\n- 2053-03-12T01:04:31.220Z Snowflake: Sony\n- 2956-04-25T08:19:43.254Z Snowflake: Mastodon\n```\n\nIn this case, the ID `2039815312720154892` is probably from Twitter, since it is the most recent value from the list that is not in the future.\n\nOnce identified the variant, just run it again enforcing its type:\n\n```shell\n$ uuinfo -f sf-twitter 2039815312720154892\n...\n```\n\n### Pipe from STDIN\n\nUse a dash (`-`) instead of the ID to get the value from STDIN piped from another program:\n\n```shell\n$ echo 8ff95663-c8ee-48b9-a236-a2f29a991001 | uuinfo -\n...\n```\n\n### Output Options\n\n#### Card (default)\n\nThis is the pretty-printed output, with all the extracted data, plus a hexadecimal and binary representation of the bits at the end:\n\n```shell\n$ uuinfo 01941f29-7c00-7aaa-aaaa-aaaaaaaaaaaa\n┏━━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ ID Type   │ UUID (RFC-9562)                             ┃\n┃ Version   │ 7 (sortable timestamp and random)           ┃\n┠───────────┼─────────────────────────────────────────────┨\n┃ String    │ 01941f29-7c00-7aaa-aaaa-aaaaaaaaaaaa        ┃\n┃ Integer   │ 2098319972277167143349324748782480042       ┃\n┠───────────┼─────────────────────────────────────────────┨\n┃ Size      │ 128 bits                                    ┃\n┃ Entropy   │ 74 bits                                     ┃\n┃ Timestamp │ 1735689600.000 (2025-01-01T00:00:00.000Z)   ┃\n┃ Node 1    │ -                                           ┃\n┃ Node 2    │ -                                           ┃\n┃ Sequence  │ -                                           ┃\n┠───────────┼─────────────────────────────────────────────┨\n┃ 0194 1f29 │ 0000 0001  1001 0100   0001 1111  0010 1001 ┃\n┃ 7c00 7aaa │ 0111 1100  0000 0000   0111 1010  1010 1010 ┃\n┃ aaaa aaaa │ 1010 1010  1010 1010   1010 1010  1010 1010 ┃\n┃ aaaa aaaa │ 1010 1010  1010 1010   1010 1010  1010 1010 ┃\n┗━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n```\n\n#### Short\n\nThis is just the 2 first lines of the card in one, with the ID type and version:\n\n```shell\n$ uuinfo -o short 01941f29-7c00-7aaa-aaaa-aaaaaaaaaaaa\nID Type: UUID (RFC-9562), version: 7 (sortable timestamp and random).\n```\n\n#### JSON\n\nIn case you need to integrate **uuinfo** with some other commands, there is a JSON output available:\n\n```shell\n$ uuinfo -o json 01941f29-7c00-7aaa-aaaa-aaaaaaaaaaaa | jq\n{\n  \"id_type\": \"UUID (RFC-9562)\",\n  \"version\": \"7 (sortable timestamp and random)\",\n  \"standard\": \"01941f29-7c00-7aaa-aaaa-aaaaaaaaaaaa\",\n  \"integer\": 2098319972277167143349324748782480042,\n  \"uuid_wrap\": null,\n  \"parsed\": \"from hex\",\n  \"size\": 128,\n  \"entropy\": 74,\n  \"datetime\": \"2025-01-01T00:00:00.000Z\",\n  \"timestamp\": \"1735689600.000\",\n  \"relative_time\": \"a year ago\",\n  \"sequence\": null,\n  \"node1\": null,\n  \"node2\": null,\n  \"node3\": null,\n  \"hex\": \"01941f297c007aaaaaaaaaaaaaaaaaaa\"\n}\n```\n\n#### Binary\n\nYou can also return just the raw binary representation of the ID, but, be careful, this can mess up your terminal:\n\n```shell\n$ uuinfo -o binary 01941f29-7c00-7aaa-aaaa-aaaaaaaaaaaa\n�)|z���������%\n```\n\nI recommend piping into a command that can handle binary, like `xxd`:\n\n```shell\n$ uuinfo -o binary 01941f29-7c00-7aaa-aaaa-aaaaaaaaaaaa | xxd\n00000000: 0194 1f29 7c00 7aaa aaaa aaaa aaaa aaaa  ...)|.z.........\n```\n\nYou can even see the same bits from the card with `xxd -b`:\n\n```shell\n$ uuinfo -o binary 01941f29-7c00-7aaa-aaaa-aaaaaaaaaaaa | xxd -b\n00000000: 00000001 10010100 00011111 00101001 01111100 00000000  ...)|.\n00000006: 01111010 10101010 10101010 10101010 10101010 10101010  z.....\n0000000c: 10101010 10101010 10101010 10101010                    ....\n```\n\n### Custom Epoch\n\nTime-based IDs store a timestamp as an offset from an epoch defined in their format. Use `--epoch` (seconds since `1970-01-01T00:00:00Z`) to override that epoch.\n\nFor example: Simpleflake uses **2000-01-01** as its default epoch, but forcing **2020-01-01** (`1577836800`) shows a 20-year difference:\n\n```shell\n$ uuinfo -f sf-simpleflake 4242587201037260245 -o json | jq -r .datetime\n2016-01-10T20:43:26.092Z\n\n$ uuinfo -f sf-simpleflake 4242587201037260245 -o json --epoch 1577836800 | jq -r .datetime\n2036-01-10T15:43:26.092Z\n```\n\nUnix timestamp formats are unaffected (their value is already absolute).\n\n## Contributing\n\n### New ID Format Support\n\n\nHunting for ID formats is a rabbit-hole! I published the first version of **uuinfo** with the formats I found on my research. If you want to add more formats, please create a [GitHub issue](https://github.com/racum/uuinfo/issues) containing the following:\n\n- Reference link,\n- Size in bits and the map of bits,\n- ID examples (more than one if possible) with its encoded data (timestamp, node, sequence, etc),\n- Alphabet (if applicable),\n- Epoch (if custom),\n- Source-code (if available).\n\nThe more information I get, the easier it will be for me to implement it!\n\n### Code Contribution\n\nJust create a PR, but try to follow some basic guidelines:\n\n- Look at the current structure and try to emulate it.\n- One format per file, unless they are related.\n- Run `cargo fmt` and `cargo clippy` before committing.\n\n\n## License\n\n**Uuinfo** is under the 3-Clause BSD License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fracum%2Fuuinfo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fracum%2Fuuinfo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fracum%2Fuuinfo/lists"}