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