UR stands for Uniform Resources, a method for encoding structured binary data in plain-text strings that are also well-formed URIs. It's an interoperability specification that allows for the reliable, typed transfer of data and was designed in particular to allow for reliable transmission of crypto-seeds, crypto-keys, PSBTs, and other data related to cryptocurrency.
One of the particular advantages of UR is careful integration with QR codes, a prime method for transmitting data across airgaps. URs are built to be efficient when encoded as QRs. In addition, multi-part URs allow for the creation of animated QRs, overall containing more information than any single QR could have.
Typed data, reliable interoperation, QR optimization, and animated QRs are the main reasons to use the UR specification.
The following provides broad overviews of UR:
These videos offer overviews in a different format:
- URs in Technology Overview Video
- Multi-part URs in Technology Overview Video
- UR Types in Technology Overview Video
As a user, you might note applications using URs of the format "ur:type/bytewords" (or a QR encoding that UR). These allow for the free movement of data among apps that support the UR specification. This will be mostly automated, typically requiring you to show a QR from one app to another.
Example UR:
ur:crypto-seed/oyadgdhkwzdtfthptokigtvwnnjsqzcxknsktdhpyljeda
- Gordian Seed Tool — imports and exports URs
The following are accessible guides to using URs in your programs:
They are based on the following, original definitional research papers:
- BCR-2020-005: Uniform Resources (UR): Encoding Structured Binary Data for Transport in URIs and QR Codes
- BCR-2020-006: Registry of Uniform Resource (UR) Types
- BCR-2020-007: UR Type Definition for Hierarchical Deterministic (HD)
- BCR-2020-008: UR Type Definition for Elliptic Curve (EC) Keys
- BCR-2020-009: UR Type Definition for Cryptocurrency Addresses
- BCR-2020-010: UR Type Definition for Bitcoin Output Descriptors
- BCR-2020-011: UR Type Definition for Sharded Secret Key Reconstruction (SSKR)
- BCR-2020-014: URs on E-paper display
- BCR-2020-015: UR Type Definition for BIP44 Accounts
- BCR-2021-001: UR Type Definitions for Transactions Between Airgapped Devices
One of the important aspects of URs was that they allowed for the introduction of Animated QRs. These are crucial for airgapped architectures because they allow the transmission of PSBTs over an airgap.
The following Blockchain Commons libraries support the usage of URs:
- bc-ur — C++ reference library
- bc-ur-java — Java reference library
- URKit and URUI — Swift libraries for usage and display of URs.
The following third-party libraries support URs in a variety of languages:
- Hummingbird — Another Java library
- foundation-ur-py — Python library
- ur-rs — Rust library
Want to verify your code? That's what the Blockchain Commons reference tools are for.
- seedtool-cli - Cryptographic Seed Tool for the command line
- Gordian Seed Tool iOS - Cryptographic Seed Manager for iOS & Mac
To support the continued creation and growth of specifications such as this, please become a sponsor of Blockchain Commons, either through GitHub or through Bitcoin donations on our BTCpay. Thank you to our sustaining and additional sponsors.
Please also join us in our Airgapped Wallet Community where we are discussing and advancing this and other specifications.