No description
Find a file
2026-10-15 23:41:15 +11:00
.assets documentation (README): update project README 2019-04-16 15:57:42 +10:00
.github chore (github): update github template 2024-09-16 15:24:06 +10:00
cmd feature (debug): quit on error in debug mode 2026-10-14 02:20:52 +11:00
docker fix (docker): jenkins release issue 2026-08-22 02:34:29 +10:00
public fix (96acef0): oopsy from 96acef0 2026-10-15 23:41:15 +11:00
server fix (traceID): inject traceID even when missing 2026-10-15 21:34:59 +11:00
.gitignore chore (maintenance): update gitignore rules 2026-05-13 13:54:44 +10:00
CONTRIBUTING.md fix (api): api key validation 2023-10-31 08:43:47 +11:00
embed.go feature (debug): improve debug mode 2026-10-14 02:45:55 +11:00
go.mod chore (maintenance): go mod tidy 2026-09-24 17:00:19 +10:00
go.sum chore (maintenance): go mod tidy 2026-09-24 17:00:19 +10:00
Jenkinsfile feature (release): reduce fat binary size on release 2026-10-07 21:13:24 +11:00
LICENSE Initial commit 2017-06-13 15:34:14 +10:00
Makefile feature (Makefile): enable window build 2026-03-16 13:19:17 +11:00
README.md chore (doc): update README 2026-10-13 09:41:28 +11:00

screenshot

What is this?

Filestash started as a storage agnostic Dropbox-like file manager that speaks every storage protocol (SFTP, S3, SMB, WebDAV, IPFS, FTP, NFS, and about 20 more).

It grew into what we want to be the world's best file management platform. The world has enough silos to lock your data in. What is missing is the tooling to give those existing silos the Dropbox++ treatment with:

  1. Web client (the file manager available from your browser): documentation / screenshot / demo
  2. Native client (the folder that syncs across your devices): repo / screenshots for mac, windows, linux, android, iphone, and our docker storage driver
  3. Gateways (to expose your data over any protocol): showcase

Originally made for humans, that tooling now extends to agents as a filesystem where every access is controlled and every action is monitored.

The philosophy that guides this project is: "anything that's not a fundamental truth of the universe lives in a plugin". That keeps the core lean and fast, and the opinions replaceable, so when your requirements get deep or weird, the answer is a plugin.

Key Features

  • Plugin Driven Architecture: everything that matters is a plugin, browse the ecosystem or build your own. With this approach, you get exactly what you need without overhead and bloat.
  • Universal Access: the web client is just one way to access your data (albeit an awesome one, handcrafted in vanilla JS). APIs and Gateways let you also expose your data over protocols like SFTP, S3, FTP, WebDAV, MCP, and AS2.
  • Integrations: our explicit goal is to support 100% of storage and authentication technologies on the market. Beyond your usual options, you can go much further, like a virtual filesystem delegating authentication to your WordPress site and using its roles to drive RBAC authorization.
  • Workflow Engine: automate anything that happens to your files by chaining actions on events, from simple notifications via Slack or email to full on MFT pipelines and everything in between.
  • File Apps: use any of the existing apps or build your own, from astronomy to embroidery and everything in between like:
  • Themes:
  • AI features for search, smart folders and OCRs.
  • ... and much much more (versioning, audit, public site, antivirus, quota, chat, chromecast support, on demand video transcoding, mounting shared links as network drive, ...) As a rule of thumb, if your problem involves files, we either already have a plugin for it or can make a plugin for it

Plugins

Malleability isn't an afterthought, it's the whole architecture:

anything that's not a fundamental truth of the universe lives in a plugin

Taken literally, the "truths of the universe" are a set of core interfaces, one for every key component of Filestash, and they're yours to implement (storage, authentication, authorisation, search, thumbnailing, apps, middleware, frontend changes, ...)

The oldest one is the storage interface, the one at work whenever you connect to a storage:

type IBackend interface {
	Ls(path string) ([]os.FileInfo, error)
	Stat(path string) (os.FileInfo, error)
	Cat(path string) (io.ReadCloser, error)
	Mkdir(path string) error
	Rm(path string) error
	Mv(from string, to string) error
	Save(path string, file io.Reader) error
	Touch(path string) error
}

Historically, plugins were made in Go and compiled in. Today there's a second path: runtime plugins, a zip you drop in the plugins folder. The zip can reshape the frontend and it can carry wasm implementing the very same core interfaces. That wasm runs in a VM with tight control on permissions: no declared network host, no way to phone home. Installing a plugin doesn't mean trusting it with everything.

For example:

use filestash::*;

#[derive(Default)]
pub struct Plugin;

impl Authorisation for Plugin {
    fn ls(&self, _ctx: &Context, path: &str) -> Decision {
        self.check(path)
    }
    fn cat(&self, _ctx: &Context, path: &str) -> Decision { ... }
    fn stat(&self, _ctx: &Context, path: &str) -> Decision { ... }
}

impl Plugin {
    fn check(&self, path: &str) -> Decision {
        if path.split("/").any(|segment| segment == "top_secret") {
            log::warn!("[TOPSECRET] access denied !!");
            return Decision::Deny;
        }
        Decision::Allow
    }
}

register!(Plugin: Authorisation);

These few lines give you a readonly view of your data where every folder named "top_secret" is off limits. For more examples, browse the plugin folder, the runtime plugin cookbook, and the plugin marketplace.

And to be clear, code is the power-user path, there are no code options

Getting Started

To install Filestash, head to the Getting started guide. If you want to leverage plugins, head over to the inventory, or learn about developing your own plugins.

Support

Why

Familiar with the infamous comment from Dropbox's launch on HN? In my memory it goes like this:

Credits

Filestash stands on the shoulder of: contributors, folks developing awesome libraries, BrandonM, a whole bunch of C stuff (the C standard library, libjpeg, libpng, libgif, libraw and many more), fontawesome, material, Browser stack to let us test on real devices, and the many guys from Nebraska and elsewhere who have been thanklessly maintaining the critical pieces that Filestash sits on top:

credit to the nebraska guy on xkcd