Diego Cabello

ENTS

The Extendable Nested Tagging Spec, or ENTS, is an implementable specification for writing human-readable nested tagging structures for file systems.

Quick Start

ENTS is a specification that can have many implementations. The (current) featured implementation is PRLENTS, which is a very useful terminal program for organizing files on your computer.

Imagine this - you have a bunch of photos, or pdfs, or papers, or whatever in your home folder, and making organized tree directory folders for it will be a huge pain in the ass. And even if you make a really great folder layout, there’s still no perfect way to do it, but you just can’t put your finger on why. Should I make the folders by country, and then the child folders by subject, and have some child folders for subtopics in there? Or should I have the subject folders be above the country folders? What if I made the very top level folders ‘Europe’ and ‘North America’? See what I mean? Tree file directories have their limitations. They were brilliant in the 70s, when we had constrained hardware, but it’s not the 70s anymore.

Introducing the next evolution of filesystems. PRLENTS is a program that sits in userspace that allows conditional tag-based filesystem. It is the prototype for an eventual FUSE implementation and an eventual proper actual filesystem.

Here’s a sample ENTS file:

+ Continents
    - Europe
        - Germany
        - France
        - UK
    - North America
        - United States
        - Canada
        - Mexico
+ Subjects
    - Chemistry
        - Organic Chemistry 
            - Carbon Nanomaterials
    - Physics

Using PRLENTS, we tag our files according to the ENTS file above, and then can run filtering and querying commands on it.

prlents fil europe 
prlents intersect "organic chemistry" physics
prlents ftt add schelling.pdf economics "game theory"

Much better!

Documentation

Posts

November Redesign

Date: 2025 Nov 14

Words: 899

Draft: 1 (Most recent)

terms here i use the term exclusion rules, which means: within any single branch, you can only tag at one, fixed depth level. you can tag siblings, because those are roots of two different branches. you can tag different depths on sibling branches because those are not on one single branch. really it’s just one rule, one canonical rule with a couple derived rules. I also interchangeably use functor and relationship. ENTS is designed to work with two different things of two different categories: files and nestable tags. using category theory terminology, a functor is a relationship between two different things of different categories. so here we are dealing with file-tag functors. colloquially, here i use “relationship” to refer to a file-tag functor. here i use file group to mean all the files in a folder and all the files in any nested subfolders. next planned changes the normal tag is going to have soft enforcement for the exclusion rules. to follow these rules (non-strictly), there has to be one functor called the principal functor, and there can only be one of these. when the enforcement is broken with additional functors, these will be additional associated functor/ies. the user has to use the --force flag to break the exclusion rules and create an associated functor (done to encourage the user to keep files to tags at a fixe...

Design

Date: 2025 Oct 27

Words: 245

Draft: 1 (Most recent)

The Organizational Container vs. Labeler Problem: Let’s say you want to have some tags be used to label objects, and some tags just to organize and contain those tags. For example, you want to label files based on their reading completion and their source format. If you just had plain nested tags, you could accidentally label an object with the literal tag “reading completion” or “format”, which would show up in queries and cause all sorts of issues downstream. So how do you make it so you can’t label objects with organiztiional containers in a human-readable, keyboard-typable format? If we were to use JSON, there would be no clean and easy way to type it out. Here are the cleanest possible ways to do it: { "reading levels": ["not read", "skimmed", "partially read", "read", "re-read"], "format": ["journal", "book", "webpage"] } [ { "tag": "reading levels", "labeler": false, "children": { {"tag": "not read", "labeler": true, "children": null}, {"tag": "skimmed", "labeler": true, "children": null}, {"tag": "partially read", "labeler": true, "children": null}, {"tag": "read", "labeler": true, "children": null}, {"tag": "re-read", "labeler": true, "children": null} }, { "tag": "format", "labeler": false, "children": { {"tag": "journal", "labeler": true, "children": null}, {"tag": "book", "labeler": true, "children": null}, {"tag": ...

Specification

Implementations: PRLENTS (PRototype Rust Local ENTS)

Roadmap and Implementations

The PRLENTS implementation for file tagging managment, written entirely in Rust, was released in June 2025. In the future, ENTS is planned to be used for improved academic taxonomies for research paper databases; potentially as a configuration language; and for a FUSE nested tagging filesystem.