SkillAgentSearch skills...

TSON

TSON, short for Typed JSON, is a binary-encoded serialization of JSON-like document that support javascript typed data.

Install / Use

/learn @tercen/TSON
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

TSON

TSON, short for Typed JSON, is a binary-encoded serialization of JSON-like document that support javascript typed data.

Implementations

  • Dart
  • R (use native lib rustson)
  • Smalltalk
  • rust (see https://github.com/tercen/rustson)

Specification Version 1.1.0

TSON is a binary format in which zero or more key/value pairs are stored as a single entity. We call this entity a document.

The following grammar specifies version 1.1.0 of the TSON standard. We've written the grammar using a pseudo-BNF syntax. Valid TSON data is represented by the document non-terminal.

Changes

1.1.0

  • add type null : null ::= "\x00"
  • change type code for cstring, integer, double and bool types
  • add type cstring_list : cstring_list ::= "\x70" list_length (cstring*)
  • add typed list to type map_list, it enable typed list to be the root of the document

Basic Types

The following basic types are used as terminals in the rest of the grammar. Each type must be serialized in little-endian format.

uint8	1 byte (8-bit unsigned integer)
uint16   2 bytes (16-bit unsigned integer)
uint32	4 bytes (32-bit unsigned integer)

int8	1 byte (8-bit signed integer)
int16   2 bytes (16-bit signed integer)
int32   2 bytes (32-bit signed integer)
int64	8 bytes (64-bit signed integer, two's complement)

float32	4 bytes (32-bit IEEE 754-2008 binary floating point)
float64	8 bytes (64-bit IEEE 754-2008 binary floating point)

Non-terminals

The following specifies the rest of the TSON grammar. Note that we use the * operator as shorthand for repetition (e.g. ("\x01"*2) is "\x01\x01"). When used as a unary operator, * means that the repetition can occur 0 or more times.

document ::= version map_list      TSON Document. cstring is the version of the specification.

map_list ::= map 
        | list 
        | uint8_list 
        | uint16_list 
        | uint32_list 
        | int8_list 
        | int16_list 
        | int32_list 
        | int64_list
        | float32_list 
        | float64_list 
        | cstring_list
list ::= "\x0A" uint32 (element*)     "\x0A" is the code type for list element. uint32 is the length of the list
map ::= "\x0B" uint32 (key_value*)    "\x0B" is the code type for map element. uint32 is the length of the map
key_value ::= cstring element
element ::= map_list
	   | null 
       | integer
       | double
       | bool
       | cstring 

version ::= cstring
null ::= "\x00"
cstring	::= "\x01" (uint8*) null           First "\x00" is the code type for cstring element
integer ::= "\x02" int32
double ::= "\x03" float64
bool ::= "\x04" uint8

list_length ::= uint32
list_length_in_bytes ::= uint32
 
uint8_list ::= "\x64" list_length (uint8*)
uint16_list ::= "\x65" list_length (uint16*)
uint32_list ::= "\x66" list_length (uint32*)
int8_list ::= "\x67" list_length (int8*)
int16_list ::= "\x68" list_length (int16*)
int32_list ::= "\x69" list_length (int32*)
int64_list ::= "\x6A" list_length (int64*)
float32_list ::= "\x6E" list_length (float32*)
float64_list ::= "\x6F" list_length (float64*)
cstring_list ::= "\x70" list_length_in_bytes (cstring*)

Related Skills

View on GitHub
GitHub Stars30
CategoryCustomer
Updated2mo ago
Forks1

Languages

JavaScript

Security Score

75/100

Audited on Jan 18, 2026

No findings