CKS is a language-neutral data serialization tool.
- An efficient binary format (like Protocol Buffers and Thrift)
- A human-friendly text format (like JSON and YAML)
- Language-specific bindings generator (like Protocol Buffers and Thrift)
- Elegant data model (tagged unions, parameterized types)
Learn More
Example
Let’s say we wanted to store a simple list of students. Here’s a possible type definition (file: “students.tcks”):
def Students = List(Student)
def Student = {
Name: String
Age: Nat16 // unsigned 16-bit integer
Sex: Sex // "Male" or "Female" (defined below)
}
def Sex = < Male, Female > // a "variant" type
A sample value, using the text format (file: “students.cks”):
[ // square brackets for lists
{ // braces for records
Name = "Scooby Doo"
Age = 55
Sex = Male
}
{
Name = "Wilma Flintstone"
Age = 4012
Sex = Female
}
]
Using it in your program.
We currently support Java, C#, and Haskell. Running the “cks” tool on the type file will generate helper code in the specified language.
Using the “cks” tool to convert your data.
The “cks” tool can convert between the text and binary formats. Usage:
> cks convert <type-file> <type-name> <input> <output>
For example, to convert the example value from text to binary, run:
> cks convert students.tcks Students \
text:students.cks binary:students.bin
The binary version looks roughly like this:
2 10 "Scooby Doo" 0x0037 0
16 "Wilma Flintstone" 0x0fac 1