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