Skip to main content

dtab

Logo made with PowerRP. Open it in PowerRP to edit it (source: assets/doc.json).

dtab

Delta Tab. Config files made of tab-separated paths. One line is one path into a tree, and later lines are deltas on top of earlier ones. Try it in your browser: dtab on the left, JSON on the right.

objects	l1,l2 light
deltas	l1	position	x 1	y .5
	z -2
import dtab
dtab.parse(open("scene.dtab").read())
# {'objects': {'l1': 'light', 'l2': 'light'},
#  'deltas': {'l1': {'position': {'x': '1', 'y': '.5', 'z': '-2'}}}}

Why

  • Less to look at. No braces, quotes, or commas between values. A file with its tabs aligned reads like pseudocode, and is easy to write by hand, even on paper.

  • Simple. Six rules, one pass, about 70 lines per implementation.

  • Everything is addressable. There are no lists, so every value has a dotted path: config.deltas.l1.position.x works with EasyDict in Python and plain property access in JavaScript.

  • You choose the shape. Lines stack, and c,d writes one value under several keys, so the same tree can be written wide, deep, or on one line, trading horizontal space for vertical. These are the same file:

    a	b	c x
    a	b	d x
    
    a
    	b
    		c x
    		d x
    
    a	b	c,d x
    

Rules

  • Tabs separate the steps of a path. deltas l1 position walks three keys down. Several tabs in a row count as one, so you can align columns.
  • An entry with a space is key value. It sets the key and stays at the same level, so x 1 y .5 sets two keys.
  • An indented line continues the path of the line above it.
  • Writing a key again replaces it. Writing into an object merges.
  • a,b writes the same value under a and under b.
  • An entry that starts with a space is a comment.
  • $key starts a multiline string. See below.

Every value is a string. Cast the ones you need. Keys are identifiers (letters, digits, underscores), so attribute access like config.deltas.l1 works with EasyDict and friends.

Multiline strings

$key makes the lines indented under it the value, with their common indentation removed. Blank lines inside are kept, trailing ones dropped.

$query sql
	SELECT name, age
	FROM users
	WHERE age > 30

The word after the key is optional. It tells editors which language to highlight and is not part of the value. Unknown tags are plain text, never an error.

Tag Also
sql
python py
javascript js
typescript ts
html, css, json, yaml, markdown yml, md
bash sh, shell, zsh
c, cpp, rust, go, java, swift
dtab

Install

  • Python: pip install dtab then import dtab
  • JavaScript: npm install deltatab then const dtab = require('deltatab'), or <script src="https://cdn.jsdelivr.net/npm/deltatab/dtab.js"> for window.dtab
  • Vim: Plugin 'RyannDaGreat/dtab' (Vundle) or Plug 'RyannDaGreat/dtab' (vim-plug), or paste dtab.vim into your vimrc. Highlights *.dtab, flags bad keys and trailing tabs, and gives the file a Δ icon in NERDTree if vim-devicons is installed.
  • VS Code: search "dtab" in Extensions, or code --install-extension RyannDaGreat.dtab. Highlighting plus a Δ file icon.

API

  • parse(text) returns nested dicts (Python) or plain objects (JavaScript). Raises on an invalid key, with the line number.
  • stringify(tree) writes the tree back out, one key per line.
  • Command line: dtab scene.dtab prints the tree as JSON.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dtab-0.2.0.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dtab-0.2.0-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file dtab-0.2.0.tar.gz.

File metadata

  • Download URL: dtab-0.2.0.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for dtab-0.2.0.tar.gz
Algorithm Hash digest
SHA256 7c4651cea3b38e07f5cf134ea95a3734fbb3c2bc7016f24aba4e19dbb368298c
MD5 1f017ac217c651b53e6d57392e7794f0
BLAKE2b-256 f660bfabe383a771df767a643bdbb515daf3ee0fef41907911014c41e2c851b2

See more details on using hashes here.

File details

Details for the file dtab-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: dtab-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for dtab-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dfdd57ccf5d70702016af6643ef6f77d2290581c423b51ce186a312e34a1e23f
MD5 e0768e4c19df2d7112e721e1c9946a14
BLAKE2b-256 d5625e9f282816ed033d32e5cf10c55b52c95c8609f12f9cb55503de9e54ad37

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page