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
Libraryarrow_upwardVersionDownloads (/wk)sortOptimizationsEncodesortDecodesort
effect (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
3.22.0n/aNone
Code snippetCode snippet
Schema.encodeUnknownSync(Schema.BigInt)(data)
376 ns
Code snippetCode snippet
Schema.decodeUnknownSync(Schema.BigInt)(data)
448 ns
effect3.22.0n/aNone
Code snippetCode snippet
Schema.encodeSync(Schema.BigInt)(data)
389 ns
Code snippetCode snippet
Schema.decodeSync(Schema.BigInt)(data)
447 ns
effect@beta4.0.0-beta.101n/aNone
Code snippetCode snippet
Schema.encodeSync(Schema.BigIntFromString)(data)
2 μs
Code snippetCode snippet
Schema.decodeSync(Schema.BigIntFromString)(data)
2 μs
effect@beta (unknown)
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
4.0.0-beta.101n/aNone
Code snippetCode snippet
Schema.encodeUnknownSync(Schema.BigIntFromString)(data)
2 μs
Code snippetCode snippet
Schema.decodeUnknownSync(Schema.BigIntFromString)(data)
2 μs
io-ts2.2.22n/aNone
Code snippetCode snippet
// const BigIntFromString = new t.Type<bigint, string, string>(...)
BigIntFromString.encode(data)

(Commented code is not benchmarked)

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

(Commented code is not benchmarked)

114 ns
sury11.0.0-alpha.11n/aJIT
Code snippetCode snippet
// const encoder = S.encoder(S.bigint, S.string);
encoder(data)

(Commented code is not benchmarked)

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

(Commented code is not benchmarked)

117 ns
typebox
Accepts unknown valuesAccepts unknown values
This codec allows unknown input, requiring extra validation.
1.3.8n/aJIT
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
zod4.4.3n/aJIT
Code snippetCode snippet
z.codec(...).encode(data)
187 ns
Code snippetCode snippet
z.codec(...).decode(data)
221 ns
zod/mini4.4.3n/aJIT
Code snippetCode snippet
z.encode(codec, data)
178 ns
Code snippetCode snippet
z.decode(codec, data)
214 ns
Created by eskimojo for Open Circle

Preferences

Style
Theme
NPM browser
Code ligatures