jots-py
Pure-Python parser for Jot Syntax.
The normative specification lives at jotsyntax.org.
This package is a from-scratch Python implementation of the spec —
no Rust, no FFI, no compiled extension. For a faster parser backed
by the Rust implementation
(jots-rs), see the sibling
PyO3 bindings (jots-rs-py);
both expose the same jots.parse() API.
Install
pip install jots
Usage
import jots
result = jots.parse("..meeting ::work::q2 ??buy milk")
# {
# "tags": ["meeting"],
# "categories": ["work::q2"],
# "todos": [{"importance": 0, "action": "buy", "description": "milk", ...}],
# "diagnostics": [],
# ...
# }
Optional config flags (see SPEC §2.2) are passed via the config
keyword:
jots.parse(text, config={"parse_hashtags_as_tags": True, "emit_loc": False})
category_root (SPEC §9.1) requires every category path to start
with the given segment; a path that does not — ::title when the
root is cat — is ordinary text, free-standing or as an annotation
suffix. Rooted paths are emitted unchanged, root included:
jots.parse("::cat::dh ::title --42::title", config={"category_root": "cat"})
# categories == ["cat::dh"]; references[0]["category"] is None
Iota Syntaxis (Unicode variant)
The Iota Syntaxis variant widens the
identifier and filename character classes to Unicode
XID_Start/XID_Continue: jots.parse(text, unicode=True).
The sibling iotas distribution in this repo wraps
jots with the variant preset.
Status
Tracks Jot Syntax 1.0 RC1 (2026-03-18). Current scope is the parser
only (Part II of the spec); the processor (Part III) will live in a
future jotr-py repo.
Conformance is verified against the shared vector suite in
jots-tests — the same
suite used by jots-rs and
jots-rs-py.
Metadata
Release files for jots 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jots-0.2.0.tar.gz | 35.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jots-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 65.3 kB
Release files / jots-0.2.0.tar.gz
| Download URL | jots-0.2.0.tar.gz |
|---|---|
| Size | 35.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dd95d970ba04e61970001498f8587cbcd79c54c90f2ce2ccf7b846c84e3ee629
|
|
BLAKE2b-256 checksum How to use checksums |
995f64bf034d61b5bf7dfc5fb22e37c2d6a22db1e80b37655836668e00c126d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / jots-0.2.0-py3-none-any.whl
| Download URL | jots-0.2.0-py3-none-any.whl |
|---|---|
| Size | 29.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4cb5a1de00d26fb7ffb7487af225bd456e1e688ece94837d0a2f5f08e3ed0348
|
|
BLAKE2b-256 checksum How to use checksums |
6dbf2fa963095b1ca63ed9acc5d3a493e8552b098d42a9e55eac70b1780e8eb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|