LogoLogo

Schema Benchmarks

    • home
      Home

    • download_2
      Download

    • timer
      Initialization
    • check_circle
      Validation
    • output_circle
      Parsing
    • swap_horiz
      Codec
    • schema
      Standard Schema
    • format_quote
      String

    • error
      Stack

    • deployed_code
      Libraries

    • article
      Blog
Expand sidebarExpand sidebar
Benchmarks/CodecCodec
github
GitHubGitHub
DiscordDiscord
PreferencesPreferences

Some schema libraries support two way conversion of data, often referred to as "encoding" and "decoding".

We benchmark the time taken to encode and decode a bigint to and from a string.

Copy to clipboardCopy to clipboard
import * as z from "zod"; const bigIntFromString = z.codec(z.string(), z.bigint(), { decode: (str) => BigInt(str), encode: (bigint) => bigint.toString(), }); bigIntFromString.encode(1234567890123456789n); // "1234567890123456789" bigIntFromString.decode("1234567890123456789"); // 1234567890123456789n
format_quoteInvalid data

We don't benchmark codecs with invalid data, as many libraries require the input to be correctly typed before passing it to the codec.

Optimizations
  • flash_offNone
  • codeJIT
  • buildPrecompiled
LibrarysortVersionDownloads (/wk)arrow_upwardOptimizationsEncodesortDecodesort
zod4.4.3240.5MJIT
Code snippetCode snippet
z.codec(...).encode(data)
170 ns
Code snippetCode snippet
z.codec(...).decode(data)
207 ns
zod/mini4.4.3240.5MJIT
Code snippetCode snippet
z.encode(codec, data)
157 ns
Code snippetCode snippet
z.decode(codec, data)
215 ns
effect (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
3.22.026.02MNone
Code snippetCode snippet
Schema.encodeUnknownSync(Schema.BigInt)(data)
352 ns
Code snippetCode snippet
Schema.decodeUnknownSync(Schema.BigInt)(data)
436 ns
effect3.22.026.02MNone
Code snippetCode snippet
Schema.encodeSync(Schema.BigInt)(data)
367 ns
Code snippetCode snippet
Schema.decodeSync(Schema.BigInt)(data)
422 ns
effect@beta (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
4.0.0-beta.10126.02MNone
Code snippetCode snippet
Schema.encodeUnknownSync(Schema.BigIntFromString)(data)
2 μs
Code snippetCode snippet
Schema.decodeUnknownSync(Schema.BigIntFromString)(data)
2 μs
effect@beta4.0.0-beta.10126.02MNone
Code snippetCode snippet
Schema.encodeSync(Schema.BigIntFromString)(data)
2 μs
Code snippetCode snippet
Schema.decodeSync(Schema.BigIntFromString)(data)
2 μs
typebox
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
1.3.85.5MJIT
Code snippetCode snippet
// const BigIntFromString = Type.Codec(...).Decode(...).Encode(...);
Value.Encode(BigIntFromString, data)

(Commented code is not benchmarked)

5 μs
Code snippetCode snippet
// const BigIntFromString = Type.Codec(...).Decode(...).Encode(...);
Value.Decode(BigIntFromString, data)

(Commented code is not benchmarked)

5 μs
io-ts2.2.222.71MNone
Code snippetCode snippet
// const BigIntFromString = new t.Type<bigint, string, string>(...)
BigIntFromString.encode(data)

(Commented code is not benchmarked)

90 ns
Code snippetCode snippet
// const BigIntFromString = new t.Type<bigint, string, string>(...)
BigIntFromString.decode(data)

(Commented code is not benchmarked)

129 ns
sury11.0.0-alpha.11291.77KJIT
Code snippetCode snippet
// const encoder = S.encoder(S.bigint, S.string);
encoder(data)

(Commented code is not benchmarked)

84 ns
Code snippetCode snippet
// const decoder = S.decoder(S.string, S.bigint);
decoder(data)

(Commented code is not benchmarked)

123 ns
Created by eskimojo for Open Circle

Preferences

Style
Theme
NPM browser
Code ligatures