MCPcopy Index your code
hub / github.com/cloudflare/utahfs

github.com/cloudflare/utahfs @v1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0 ↗ · + Follow
410 symbols 1,180 edges 37 files 84 documented · 20%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

UtahFS

UtahFS is a state-of-the art encrypted storage solution, meant to be similar to Dropbox. It has a FUSE binding that creates a synthetic drive on the user's computer that they can interact with like an external hard-drive. Files stored in the drive are uploaded to a cloud storage provider, which means the drive will never run out of space and minimizes the likelihood of any files being lost. However the files are encrypted such that the cloud storage provider knows almost nothing about what's being stored.

Features

  1. Interchangeable Storage Providers. For storing data in the cloud, UtahFS uses Object Storage, which is cheap and commodified. Example providers include: AWS S3, Google Cloud Storage, Backblaze B2, and Wasabi.
  2. Very Very Strong Encryption. The method of encryption hides the number of files, file names, file contents, individual file size, and prevents any modifications (including rollbacks!). The only information which is clearly leaked is the maximum archive size: archives grow to fit new data, but won't shrink if that data is deleted. Instead, that space is left allocated and will be re-used if needed in the future.
  3. Local Hardware allows Multiple Users and Improved Performance. If the user has server-like hardware on their LAN (Rasberry Pi / Intel NUC), this can be used to coordinate multiple users operating in the same archive. It can also dramatically improve the performance of uploads, because a user can upload large amounts of already-encrypted data to the server over the fast local network, and let the server take over the much slower upload to the cloud provider.
  4. Archive Mode. The client can be configured to guard against deleting or overwriting existing files, while still allowing new files to be created and old files to be moved around. This helps protect against accidental data loss.
  5. Oblivious RAM (ORAM). ORAM can be used to hide the access pattern of data from the cloud storage provider, so the provider only sees the amount data is accessed. (Access pattern: Which pieces of data are being accessed, and whether the access was a read or write.)

How to Use

Setup documentation can be found in the docs/ folder.

Future Work

  1. Reliability strategies for the WAL. Changes are buffered in a local Write-Ahead Log (WAL) before being sent to the cloud storage provider. If the disk that the WAL is stored on fails, it could become very difficult to return the archive to a usable, partially-regressed state.

Extension points exported contracts — how you extend this code

ObjectStorage (Interface)
ObjectStorage defines the minimal interface that's implemented by a remote object storage provider. [9 implementers]
persistent/persistent.go
ReliableStorage (Interface)
ReliableStorage is an extension of the ObjectStorage interface that provides distributed locking (if necessary) and atom [10 …
persistent/persistent.go
BlockStorage (Interface)
BlockStorage is a derivative of ObjectStorage that uses uint64 pointers as keys instead of strings. It is meant to help [6 …
persistent/persistent.go
ObliviousStorage (Interface)
ObliviousStorage defines the interface an ORAM implementation would use to access and store sensitive data. [2 implementers]
persistent/persistent.go

Core symbols most depended-on inside this repo

Unlock
called by 34
persistent/persistent.go
Set
called by 31
persistent/persistent.go
Get
called by 27
persistent/persistent.go
Lock
called by 25
persistent/persistent.go
Commit
called by 24
persistent/persistent.go
Open
called by 22
blockfs.go
Rollback
called by 21
persistent/persistent.go
synchronize
called by 17
filesystem.go

Shape

Method 260
Function 93
Struct 50
Interface 4
TypeAlias 3

Languages

Go100%

Modules by API surface

filesystem.go38 symbols
persistent/persistent.go34 symbols
blockfs.go32 symbols
persistent/integrity.go24 symbols
persistent/remote.go22 symbols
persistent/oblivious.go22 symbols
node_manager.go19 symbols
persistent/reliable_storage.go18 symbols
cmd/utahfs-web/filesystem.go18 symbols
cmd/internal/config/config.go18 symbols
cache/cache.go18 symbols
persistent/disk_cache.go16 symbols

For agents

$ claude mcp add utahfs \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact