Dmitry Olshansky
2 min readJun 26, 2023


An idea is to provide a simple FS like experience with semantic paths and going beyond just local FS. It should use a multitude of pluggable stores but can start just with k-sharded sqlite (where k is 2*CPU coint) including inverted index there + fuzzy search library on top.

It’s meant for developers and then some protection against ambiguity is provided by default. Speed of file search is important but we’ll take liberties by requiring fast hardware and locking ~1G of RAM for ourselves.

So every file has a url and local ones are file:///home/dmitry/file …

First semanticFS has a path where order of individual compinents doesn’t prevent a hit in search but is used to disambiguate. Fuzziness is configurable and if more then 1 object matches an error is returned or a list is reported depending on switch.

Add a fuse driver and mount at /sf by default so that any program can use semantic paths.

Have a rule-list like .gitignore for auto-tagging files.

sf path cats a file path for object found with path or errors on failure to find

sfr path — (SemanticFs Run) open a file at semantic path using associated program (same as sf —run)

sfc path — (SemanticFs Cat) cats matching files (same as sf —cat )

sfd path — (SemanticFS cD) cd to the folder containing the SF object (only files)

sf —del path — removes matching objects (with y/n prompt)

sf -f —del — without prompt (-f always means force)

sf —tag “tag” “url or local path” (adds a tag to a url for disambiguation)

sf —untag “tag” “…” (removes tag)

sf -r “regex” — (-r option means use regex for path parts, any comand)

sf -t tag (filter to _require_ given tag, applies to any command)

sf -m mime/type (addition to any command, may specify multiple times to extend allowed set)

sf -p protocol (filter by protocol, may extend by adding multiple -p … )

sf —copy path1 path2 (both are semantic paths?)