Tiny CBOR library
npm install @levischuck/tiny-cbor





This minimal generic library decodes and encodes most useful CBOR structures
into simple JavaScript structures:
- Maps with keys as strings or numbers with CBORType values as a Map
- Arrays of CBORType values
- integers as numbers
- float32 and float64 as numbers
- float16 NaN, Infinity, -Infinity
- strings
- byte strings as Uint8Array
- booleans
- null and undefined
- tags as CBORTag(tag, value)
This implementation does not support:
- indefinite length maps, arrays, text strings, or byte strings.
- half precision floating point numbers
- integers outside the range of [-9007199254740991, 9007199254740991], see
Number.MAX_SAFE_INTEGER
- native output to JSON
- does not support generic objects, only Maps
This implementation has the following constraints:
- Map keys may only be strings or numbers
- Tags are not interpreted
Maps that have duplicate keys will throw an error during decoding. Decoding data
that is incomplete will throw an error during decoding.
CBOR byte decoding example, this outputs a CBORType which is up to you to ensure
matches the right underlying type (e.g. a string) at runtime.
``typescript``
// NPM
// import { decodeCBOR } from "@levischuck/tiny-cbor";
// or JSR
// import { decodeCBOR } from "jsr:@levischuck/tiny-cbor";
import { decodeCBOR } from "./index.ts";
// Get your bytes somehow, directly or with decodeBase64 / decodeHex (available through @levischuck/tiny-encodings)
// encoded ["hello", "world", 1]
const HELLO_WORLD_BYTES = new Uint8Array([
0x83, // Array (3)
0x65, // text (5),
0x68, // h
0x65, // e
0x6C, // l
0x6C, // l
0x6F, // o
0x65, // text(5),
0x77, // w
0x6F, // o
0x72, // r
0x6C, // l
0x64, // d
0x01, // 1
]);
const decoded = decodeCBOR(HELLO_WORLD_BYTES);
if (
Array.isArray(decoded) && decoded.length == 3 && decoded[0] == "hello" &&
decoded[1] == "world" && decoded[2] == 1
) {
console.log("Success!");
}
If you're looking to make this more ergonomic in JS / TS, check out
tiny-cbor-schema!
This library is available on
NPM and
JSR.
This library is no longer automatically published to Deno's Third Party Modules.
Newer versions may appear on deno.land/x, but do not work.