Manage your Johnny.Decimal index as a KDL file
Find a file
2026-05-27 11:26:54 -06:00
.woodpecker refactor(ci): use mise for CI 2026-05-13 11:00:04 -06:00
src cargo clippy --fix 2025-08-06 11:26:35 -06:00
.editorconfig Initial commit 2025-06-03 12:55:52 -06:00
.gitignore Initial commit 2025-06-03 12:55:52 -06:00
.pre-commit-config.yaml Add pre-commit 2025-06-04 17:25:19 -06:00
basic_jdex.kdl fix(docs): update CI badge [ci skip] 2026-05-27 11:26:54 -06:00
Cargo.lock Update Rust crate clap to v4.6.1 2026-04-23 12:12:27 +00:00
Cargo.toml Update Rust crate inquire to 0.9.0 2025-09-17 02:16:34 +00:00
CODE_OF_CONDUCT.md Add project docs 2025-06-03 22:39:08 -06:00
LICENSE.md Add project docs 2025-06-03 22:39:08 -06:00
mise.toml feat(build): add cargo-binstall for faster cargo-audit install 2026-05-27 10:38:14 -06:00
README.md fix(docs): update CI badge [ci skip] 2026-05-27 11:26:54 -06:00
renovate.json Update renovate.json 2026-05-27 16:01:03 +00:00
tennis.kdl fix(docs): update CI badge [ci skip] 2026-05-27 11:26:54 -06:00

jd_kdl

status-badge

Manage your Johnny.Decimal index with a KDL file.

A KDL index looks like this:

area 20 29 "Tennis club"
category 21 "People"
heading 21 10 "Current, past, & future members"
id 21 11 "Applications"
id 21 12 "Current members"

jd_kdl can add IDs either interactively or through arguments:

asciicast

Usage

At a bare minimum, add your area, category, heading, and id entries like in the example above. You can do that by hand, or with jd_kdl <area|category|heading|id> add commands.

Once you've made your index, run jd_kdl tree to make sure the file parses right.

$ jd_kdl -f index.kdl tree
index.kdl
└─ 20-29 Tennis club
   └─ 21 People
      └─ 21.10 Current, past, & future members
         ├─ 21.11 Applications
         └─ 21.12 Current members

You can add information to your index with description, location, and locations entries:

area 20 29 "Tennis club"
category 21 "People"
heading 21 10 "Current, past, & future members"
id 21 11 "Applications" {
    description """
    Anything related to someone wanting to join the club.
    """

    locations {
        - "club email"
        - "filing cabinet"
    }
}
id 21 12 "Current members" {
    location "filesystem"
}

Print a description of any entry with the show command:

$ jd_kdl -f index.kdl id show 21 11
21.11 Applications
=================
Anything related to someone wanting to join the club.

Locations
----------
- club email
- filing cabinet

You can use it to create folders on your filesystem, too:

$ jd_kdl -f index.kdl export folders -d ~/System
Creating directory ~/System/20-29 Tennis club
Creating directory ~/System/20-29 Tennis club/21 People
Creating directory ~/System/20-29 Tennis club/21 People/21.10 Members
Creating directory ~/System/20-29 Tennis club/21 People/21.11 Applications
Creating directory ~/System/20-29 Tennis club/21 People/21.12 Current members

See jd_kdl --help to see the complete list of commands.

Maintainer

This project is maintained by Rosa Richter. You can get in touch with her on Matrix.

Contributing

Questions and pull requests are more than welcome. I believe bad documentation is a bug, so if anything is unclear, please file an issue!

Note that this project is released with a Code of Conduct. By participating in this project you agree to abide by its terms.

License

© 2025 Rosa Richter

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.