Hestia
Pseudo-Decentralized Storage Middleware, or in other words, a Multi-Backend Gaia Hub
Feature Overview
- Gaia Compatability
- To use as your Gaia Hub, simply use
{your hestia node url}/gaia
! - Uses Gaia Authentication token format for simplicity and ease-of-use
- To use as your Gaia Hub, simply use
- Easily configurable with many whitelisting options
- Uses a Database for storing metadata, indexing the files, and storing user preferences
- This improves performance when looking up your files instead of just assuming they all exist.
- Advance Drivers
- Multi-Instance: Run more than one driver of a particular type with different configuration options
- Multi-User: Run one driver that supports individual users (for remote cloud storage like Dropbox)
- “Root Only”: Only writing the root folder (profile.json and avatar), to limit storage use and encourages users to use their own remote backends
- Plugins
- From making backups-on-request to providing a dashboard, it’s all possible through the Plugin API Interface
Doc Shortcuts:
Note: This is a trimmed verison of the readme; to view the full version, go here.
About / Goals
Background
I am simply trying to finish what Blockstack started in regards to Gaia – or rather, to try and fulfill the original goal in a different way. I wanted Users to be able to use their own Dropbox without having to spin up their own node and all of the complexity that doing so brings – so why not have a pseudo-centralized service handle it all for them? And beyond that, why not have the ability to hook up multiple backends (as advertised in the whitepaper) that can replicate or be given to a particular app at the user’s choosing?
If you want to get into blockstack easily, use this; if you are concerned about centralization but still want the ease-of-use this brings, run your own node; if you want to go as deep as you can, run multiple of your own gaia hubs and use a browser that supports that (if any exist currently).
- Michael Fedora, from here.
Explanation
The goal of Hestia is to serve as a more complex Gaia Hub. While the original software works well, it works simply and cannot solve certain problems, such as those posed by using personal cloud storage providers as backends while also allowing any end-user to do so.
Hestia was made so that any Blockstack user could use their personal cloud storage (i.e. Dropbox, Google Drive, etc) as their own storage backend, i.e. to have full control over both ends (writing the files and accessing the backend). While this node, which serves as middleware, is still controled by a third-party, it can easily be run by any user as well, whether for themselves, for their family, or their organization.
End User -> Gaia -> Amazon S3 (Node Owned Backend)
End User -> Hestia -> End User's Dropbox (User Owned Backend)
In addition, because of its inherent complexity, more features have been added to allow extension by third party plugins and other drivers, whether locally created or imported through npm
. There are also more configuration options on the default drivers, such as the Disk driver being able to limit how much overall storage it is using, as well as how much each user is allowed to store. Hestia can also whitelist drivers as well as limit a driver to only being able to be used as an identity folder – i.e. only a user’s profile.json and avatar will be stored on the driver backend, and all other apps that attempt to use the driver will fail.
Hestia also provides a singular Gaia interface for all backends – this means the user manages what drivers handle what buckets. For instance, an end-user could have their Dropbox handle Stealthy data, while their Google Drive can handle their Travelstack data, and their One Drive gets everything. All drivers get your identity folder, however, and some drivers allow you to use them more than once; for instance, you could attatch two dropbox instances to your account if you so desired – but you can only have one disk driver per driver instance.
User Connections:
- Disk (identity only, 5mb limit)
- Dropbox 1 (personal, 2gb limit, default (store everything))
- Dropbox 2 (team, 2gb limit, stealthy.im only)
Of course, with all of this complexity, there will be some downsides:
- It is required to use an association token for every request, as the Hestia Hub needs to know the end-user’s address to be able to read the connection information
- Connection information (such as dropbox tokens) are stored unencrypted within the Hestia Hub
- These can obviously still be revoked, and should not seem more unsecure than any other app requesting to use your dropbox.
- File Metadata and their Path are stored in the local database, unencrypted
- While it could be concerning because of how easy it is to get it, reading a Gaia Hub’s logs (or the box’s HTTP logs) would get you the same information.
Installation / Setup
- Clone the source
npm i
npm run build-prod
- Copy
config.sample.json
, rename toconfig.json
and configure (see:
Configuration in the readme) npm start
Known Issues & Dev Comments
-
I can’t find an app that has the latest version of
blockstack.js
and accepts association tokens correctly… the hestia frontend logs in all well and fine but graphite, xor drive, and one of the kanban apps just don’t want to use it. Quite unfortunate. -
I can probably upload a gif of it working eventually, but I have a node running in production and it works pretty smoothly… as much as a storage backend can when no apps will run on it, but I was at least able to test syncing, driver adding/removing, user whitelisting, etc. so…
-
There’s quite a number of things I want to do still, but this is the MVP to release. You can see my whishlist here.
License
Released under Mozilla Public License 2.0, with graphics under CC BY-SA 4.0.