Data made simple

Dit is a new kind of container file that can hold any data, with scripts and schemas to organize it. Managing data across platforms, contexts, and industries has never been easier.

"field": {
  "name": "Sku"
  "payload": {{MDR-IF5000}},
  "validator": {{
    if (!/^[A-Z]{2,3}-[A-Z]{0,2}\d{3,4}$/.test(PAYLOAD)) {
      return `"${PAYLOAD}" did not pass the sku regex.`;
    return true;
DitaBase Logo   
GitHub Logo    Scripts Logo
GitHub Logo


What is DitaBase?

At its core, DitaBase is a developer tool that makes data more useful. It works with any and all data. DitaBase achieves this by combining a variety of proven ideas together.

The DitaBase file-type, or dit, is a new kind of container file that incorporates schemas, scripts and data together.
Dits can contain anything.

Schema Repository
  • Fully customizable schemas, unlike
  • Extend a schema, add fields, alter formats to match your actual data.
  • Any schema can be in any container — JSON, XML, YAML etc.
  • Schemas are directly integrated into dits.

Validation Scripts
  • All items — containers, fields, etc. — have validators.
  • Ensures data is always formatted according to its schema, no matter its origin.
  • Anyone can work with obscure schemas by using the validators as unit tests.
  • JavaScript and Python scripts supported out of the box, any interpreted language can be added.
"schema": {
  "name": "RAM modules"
  "meta-example": "1 x 8GB"
  "validator": {
    def validate(value):
      if not isinstance(value, str):
        return (False, "error: '" + str(value) + "' is not a string")
      modules = value[0:-2]
      modulesEnum = ["1 x 8", "2 x 4", "1 x 16", "2 x 8", "2 x 16"]
      if not modules in modulesEnum:
        return (False, "error: '" + modules + "' not found in enum")
      return True
Conversion Scripts
  • Schema-to-schema conversion for similar schemas
  • Convert containers, English to Metric units, nuanced date formats, and anything in between.
  • Data can use any format, because it can be easily converted to a different one.
  • Converters can be found on the project page for a schema, or in the dits, as preferred.
  name: dollarToUSD
  expected-in: moneyDollarSign
  expected-out: moneyUSDNoSign
  code: |
    (value) => {
      return `${value.replace('$', '').replace('.', ',')} USD`;
  name: USDToDollar
  expected-in: moneyUSDNoSign
  expected-out: moneyDollarSign
  code: |
    (value) => {
      return `$${value.replace(' USD', '').replace(',', '.')}`;

Online Version Control
  • Open Source schemas belong entirely to the community.
  • Anyone can make pull requests to suggest changes to schemas.
  • All public scripts and schemas are easily found online.
  • Git keeps track of changes.

The .dit file type

One File Type to Rule them All

  • Dits can contain anything.
  • Schemas and scripts allow dits to change their container, styling, everything, on the fly.
  • Each field contains a label which uses scripts and schemas to describe the payload.
  • Payloads can contain other fields, primitive values, binary, or entire other dit files.
  • All file formats can be in a dit: .pdf .jpg .dwg .xlsx .pproj .gcode etc.
  • In the future, there will be no need for file extensions: every file will be a dit.
dit file
[Not supported by viewer]
[Not supported by viewer]
[Not supported by viewer]
[Not supported by viewer]
[Not supported by viewer]
[Not supported by viewer]
field(s) etc.
[Not supported by viewer]
See a WIP demo of a dit.