Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
This branch is 4 commits ahead of devyn:master.

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


TPFS (the Tagged Plain File System) is a revolutionary new file system developed by ΩF:∅ that aims to move beyond the rut of hierarchical file systems through a purely tag based model. There are only two objects in TPFS: files and tags. They share a many-to-many relationship; files can have many different tags, and tags can have many different files. It is designed to be quick to look up in both directions.

TPFS is simple, but powerful. Tags can store any string data and are not restricted in size. They can be looked up quickly, through SHA-256 hashing and a B-tree index. While TPFS is not designed to be the fastest or the most reliable, it should be enough to satisfy most users. The loss is a small price to pay for such an innovative filesystem.

The reference implementation of TPFS is written in Haskell. Lots of help is currently needed, but please note that the challenges are often not for the faint of heart. It is recommended to be quite comfortable with Haskell and the barebones basics of filesystems before attempting this project.

That said, if you're interested, here's a rough idea of what needs to be done:

  • Block allocation.
  • A B-Tree implementation in Haskell using the Device API. This will be used for the file and tag indexes.
  • Implementation of the low level part of System.TPFS.Objects. This, of course, is dependent on the B-Tree implementation.
  • Design of the high level access API for the Haskell implementation.
  • A FUSE driver, probably using HFuse if it works. The FUSE driver will need to be very carefully planned; mapping TPFS to the conventional POSIX system in an obvious manner won't be easy.


Tagged plain file system in which a file can only have multiple tags and nothing more.







No releases published


No packages published


  • Haskell 100.0%