digitalmars.D.announce - Semantic file system - Vitis
- Vindex9 (73/73) Oct 18 After many years of development, I'm pleased to present
- Dejan Lekic (18/18) Oct 19 Fantastic!
- Vindex9 (4/6) Oct 20 This turned out to be a rather complex program. I recommend
After many years of development, I'm pleased to present [Vitis](https://codeberg.org/os-18/vitis), a semantic filesystem for Linux. Suppose we have a book called something like "Cryptography in C.pdf", along with directories named "C Programming" and "Cryptography". Where should we put it? As someone who collects all kinds of information, I've struggled for a long time with organizing files properly. On UNIX systems, of course, we can use symbolic links or hard link to make the same file accessible from multiple locations. But how do we find all the locations of a given file? The only way is to search by inode number. The core idea behind the Vitis filesystem is that each file "knows" all the directories it belongs to. File management becomes a matter of assigning categories to files (which are essentially the same thing as directories). To find all the locations of a file, you can append the **\\paths** postfix to its name. Vitis may not be particularly convenient to use with conventional file managers due to its many specific features, so I've developed a versatile CLI tool instead. Here's a simple demonstration of the contents of the "Autumn" category: ``` $ vitis show -c Autumn --full-details [1] Mountains.jpg Categories: "Autumn" "Mountains" "Nature" "Photographs" " /Extension/jpg" " /Format/JPEG" " /Group/Pictures" Relations: (empty) Properties: Inode: 6 Size: 9.71 MiB (10176733 B) Links: 5 Type: regular file Modified: 2026-07-02 00:29:13 Mode: -rw-rw-r-- Accessed: 2026-07-02 00:28:07 User: 1000 (vindex) Born: 2026-07-02 00:29:13 Group: 1000 (vindex) ``` In addition to regular categories, files are assigned automatic categories (in the example, " /Extension/jpg", " /Format/JPEG", and " /Group/Pictures"). Automatic categorization is implemented through external user-defined plugins, either as shared libraries (.so) or as standalone programs. Vitis supports set algebra: categories can be intersected (%), combined (:), or subtracted (-). For example: ``` vitis show -e Music % 90s ``` This command lists all files that belong to both the "Music" and "90s" categories. Among other features, files can be linked to one another using named (directed or undirected) relations. Individual fragments of text and media files can be categorized (using the [mediafragmenter](https://codeberg.org/os-18/mediafragmenter) utility, as can links to Internet resources. Vitis can also save local copies of HTML pages with the help of another utility, [pageguard](https://codeberg.org/os-18/pageguard). During development, I also ended up implementing my own file format detection system and a utility for opening files ([ufo](https://codeberg.org/os-18/ufo)). I can't cover every detail in this short forum post, but I've written documentation that aims to explain all the major aspects of how the system works. Packages are available for Debian, Ubuntu, Fedora, openSUSE, and Arch Linux, though you can always compile it from source. As you might expect, the filesystem is implemented in D and uses FUSE. Looking back, I realize that when I started working on Vitis 11 years ago as a simple utility for managing symbolic links, I couldn't really have chosen any language other than D. And now, I consider it the only language well suited to this task, thanks to its closeness to C, the convenience of writing code in it, and its compactness, comparable to Python.
Oct 18
Fantastic! We currently can set/get attributes on Linux with setfattr: ``` setfattr -n user.tags -v "green,tree,autumn" green-tree.png getfattr user.tags green-tree.png getfattr -d green-tree.png ``` We can even search with help of grep: ``` grep -l autumn $(getfattr -R -n user.tags --only-values /path 2>/dev/null; echo) ``` But your FS makes it so much easier! I will definitely give it a try on my Fedora workstation!
Oct 19
On Monday, 19 October 2026 at 14:22:56 UTC, Dejan Lekic wrote:But your FS makes it so much easier! I will definitely give it a try on my Fedora workstation!This turned out to be a rather complex program. I recommend starting here: https://codeberg.org/os-18/vitis/src/branch/develop/doc/en/01_Introduction.md
Oct 20








Vindex9 <tech.vindex gmail.com>