Semantic file system - Vitis

Vindex9 tech.vindex at gmail.com
Mon Oct 19 06:04:26 UTC 2026


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.


More information about the Digitalmars-d-announce mailing list