Skip to main content
Deno 2 is finally here 🎉️
Learn more

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)

Limitations

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

Behavior

Maps that have duplicate keys will throw an error during decoding. Decoding data that is incomplete will throw an error during decoding.

Example

// 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 tiny-encodings)
const HELLO_WORLD_BYTES = new Uint8Array([
  107, // String wih length 11
  104, // h
  101, // e
  108, // l
  108, // l
  111, // o
  32, // Space
  119, // w
  111, // o
  114, // r
  108, // l
  100, // d
]);
const helloWorld = decodeCBOR(HELLO_WORLD_BYTES);
if ("hello world" == helloWorld) {
  console.log("Success!");
}

Where to get it

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.