www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Semantic file system - Vitis

reply Vindex9 <tech.vindex gmail.com> writes:
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
parent reply Dejan Lekic <dejan.lekic gmail.com> writes:
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
parent Vindex9 <tech.vindex gmail.com> writes:
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