Architecture¶
To understand the high-level architecture of Supertag, it is important to understand what Supertag is fundamentally doing, at a technical level. At its core, Supertag is system for viewing tags in SQL database through a filesystem.
The following technical architecture will explain how this is achieved.
FUSE¶
Supertag uses FUSE to connect a collection to the
filesystem via the fuse-sys
Rust crate, written specifically for Supertag. The job of fuse-sys
is to
surface a user’s filesystem actions and connect them to Supertag application code.
For example, mkdir
can be used to create a new tag in Supertag, while ln
can be used to manually link
a file to that tag. The actions resulting from these commands are channeled through FUSE to allow manipulating
Supertag files and tags.
SQLite database¶
The Supertag backend is a per-collection sqlite database. It contains the records for files, tags, the many-to-many links between files and tags, and other useful data. See the Datatabase Schema for more details.
The tag
binary¶
Many Supertag operations can be initiated by manipulating the filesystem in expected ways, either through the
commandline or through a GUI file browser. See Usage. However, some operations that
are a little more nuanced are provided as subcommands on the Supertag tag
binary. For example the tag
binary
will let you link a file to multiple non existant tags at the same time:
tag ln /home/Desktop/somefile.pdf pdfs/documents/research/projects
The above isn’t possible with regular ln
unless the tagpath pdfs/documents/research/projects
already
exists, otherwise ln
will report No such file or directory.
However, tag
binary allows you to do this
by creating tags as needed directly in the sqlite database.
Database¶
See Database Schema