HFS is the best way via web to access or share files from your disk.
This project is in an early stage, few things are missing, but it already rocks!
This is a full rewrite of the Delphi version. You won't find all previous features here (yet), but still we got:
localhostaddress, so you can configure the rest in the Admin-panel.
If you access Admin-panel via localhost, by default HFS won't require you to login.
If you don't like this behavior, disable it in the Admin-panel or enter this console command
config localhost_admin false.
If your system is not Windows/Linux/Mac, you can try this alternative version:
sudo npm -g i hfs
Configuration and other files will be stored in
With this installation method, you can update with
sudo npm -g update hfs .
If you want to run HFS as a service
npx qckwinsvc2 install name="HFS" description="HFS" path="%APPDATA%\npm\node_modules\hfs\src\index.js" args="--cwd %HOMEPATH%\.hfs" now
npx qckwinsvc2 uninstall name="HFS"
npm -g update hfs
To install a plugin you just copy its folder inside
Delete it to uninstall.
HFS will ignore all folders with
-disabled at the end of the name.
As you can see from the list of features, we already have some goods that you cannot find in HFS 2. Other than that, you can also consider:
But you may still want to stay with HFS 2.x (so far) for the following reasons
If you have access to HFS' console, you can enter commands. Start with
help to have a full list.
Configuration can be done in several ways
config NAME VALUE
config.yamlfile. As soon as you save it is reloaded and changes are applied
NAME stands for the property name that you want to change. See the complete list below.
Configuration is stored in the file
config.yaml, which is stored in the same folder of
hfs.exe if you are using this
kind of distribution on Windows, or
USER_FOLDER/.hfs on other systems.
You can decide a different file and location by passing
--config SOME_FILE at command line, or inside
an env called
HFS_CONFIG. Any relative path provided is relative to the cwd.
portwhere to accept http connections. Default is 80.
vfsthe files and folders you want to expose. For details see the dedicated following section.
logpath of the log file. Default is
log_rotationfrequency of log rotation. Accepted values are
monthly, or empty string to disable. Default is
error_logpath of the log file for errors. Default is
errors_in_main_logif you want to use a single file for both kind of entries. Default is false.
accountslist of accounts. For details see the dedicated following section.
mimecommand what mime-type to be returned with some files. E.g.:
"*.jpg": image/jpegYou can specify multiple entries, or separate multiple file masks with a p|pe. You can use the special value
autoto attempt automatic detection.
max_kbpsthrottle output speed. Default is Infinity.
max_kbps_per_ipthrottle output speed on a per-ip basis. Default is Infinity.
zip_calculate_size_for_secondshow long should we wait before the zip archive starts streaming, trying to understand its finale size. Default is 1.
open_browser_at_startshould HFS open browser on localhost on start? Default is true.
https_portlisten on a specific port. Default is 443.
certuse this file for https certificate. Minimum to start https is to give a cert and a private_key. Default is none.
private_keyuse this file for https private key. Default is none.
allowed_refereryou can decide what domains can link to your files. Wildcards supported. Default is empty, meaning any.
blocka list of rules that will block connections. E.g.:
Syntax supports, other than simple address,
block: - ip: 192.168.0.90
*as wildcard and CIDR format.
plugins_configthis is a generic place where you can find/put configuration for each plugin, at least those that need configuration.
enable_pluginsif a plugin is not present here, it won't run. Defaults is
[ antibrute ].
custom_headerprovide HTML code to be put at the top of your Frontend. Default is none.
localhost_adminshould Admin be accessed without credentials when on localhost. Default is true.
proxiesnumber of proxies between server and clients to be trusted about providing clients' IP addresses. Default is 0.
keep_unfinished_uploadsshould unfinished uploads be deleted immediately when interrupted. Default is true.
The virtual file system is a tree of files and folders, collectively called nodes. By default, a node is a folder, unless you provide for it a source that's a file. Valid keys in a node are:
name: this is the name we'll use to display this file/folder. If not provided, HFS will infer it from the source. At least
sourcemust be provided.
source: absolute or relative path of where to get the content
children: just for folders, specify its virtual children. Value is a list and its entries are nodes.
rename: similar to name, but it's from the parent node point. Use this to change the name of entries that are read from the source, not listed in the VFS. Value is a dictionary, where the key is the original name.
mime: specify what mime to use for this resource. Use "auto" for automatic detection.
default: to be used with a folder where you want to serve a default html. E.g.: "index.html". Using this will make
mimedefault to "auto".
can_read: specify who can download this entry. Value is a
WhoCandescriptor, which is one of these values
true: anyone can, even people who didn't log in. This is normally the default value.
false: no one can.
"*": any account can, i.e. anyone who logged in.
[ frank, peter ]: the list of accounts who can.
can_see: specify who can see this entry. Even if a user can download you can still make the file not appear in the list.
can_uploadspecify who can upload. Applies to folders with a source. Default is none. Remember that to see in the list you must also be able to download, or else you won't see it anyway. Value is a
WhoCandescriptor, refer above.
masks: maps a file mask to a set of properties as the one documented in this section. E.g.
masks: "**/*.mp3": can_read: false "*.jpg|*.png": mime: auto
Permissions set on an inner element will override inherited permissions. This means that you can restrict access to folder1, and yet decide to give free access to folder1/subfolder2.
All accounts go under
accounts: property, as a dictionary where the key is the username.
accounts: admin: password: hello123 belongs: group1 guest: password: guest group1:
As soon as the config is read HFS will encrypt passwords (if necessary) in a non-reversible way. It means that
password property is replaced with an encrypted property:
As you can see in the example,
group1 has no password. This implies that you cannot log in as
group1, but still
group1 exists and its purpose is to
gather multiple accounts and refer to them collectively as
group1, so you can quickly share powers among several accounts.
For each account entries, this is the list of properties you can have:
ignore_limitsto ignore speed limits. Default is
redirectprovide a URL if you want the user to be redirected upon login. Default is none.
trueif you want to let this account log in to the Admin-panel. Default is
belongsan array of usernames of other accounts from which to inherit their permissions. Default is none.