hfs is a free, open source file management & sync project written in TypeScript and released under GPL-3.0. It has 3,915 GitHub stars, 371 forks and 17 open issues, and was last pushed 12 hours ago. On this registry it ranks #23 of 33 tracked projects in File Management & Sync, with 5 head-to-head comparisons available.

What is hfs?

HFS is a TypeScript web file server under the GPL-3.0 licence that turns a computer running Windows, Linux, macOS, FreeBSD or Android into a file-sharing server whose folders and individual files are reachable from any browser.

What it is

HFS, short for HTTP File Server, is a self-hosted application that serves files from your own disk over HTTP. It lives in the Node.js and TypeScript ecosystem and ships in several forms: prebuilt release binaries for Windows, Linux, macOS, FreeBSD and Android, a Homebrew formula under the rejetto/hfs tap, a Docker image, and a Node.js package that can be run through npx on Node.js 18 to 24. The defining idea is a virtual file system: the structure presented to visitors is assembled inside HFS and kept separate from the real layout of the disk, so a single file or an entire folder tree can be exposed without moving or reorganising anything.

The concrete problem it solves is the upload step that cloud file-sharing services impose. HFS performs no cloud upload — files come directly from your disk, which the project presents as unlimited space and bandwidth, because the storage and the throughput are your own machine's. A recipient on a phone or a second computer opens a browser, sees what has been shared, and downloads it; accounts and access limits can restrict that visibility where needed. Folder downloads are delivered as ZIP archives generated on demand, including for very large folders, and transfers are resumable so an interrupted download or upload does not have to start again. The administration interface itself is a web page, and the project documents reverse-proxy support, service installation and Docker deployment for running it continuously.

Key capabilities

  • A web Admin-panel that opens automatically at localhost when HFS starts, with a multi-language front-end and real-time monitoring of connections.
  • A virtual file system for organising shared content independently of the disk, with delete, move and rename operations on served files.
  • On-demand ZIP downloads of whole folders, plus resumable downloads and uploads and a speed throttler for bandwidth control.
  • Accounts with per-file access limits, and a plug-in system covering anti-brute-force protection, thumbnails, LDAP and themes.
  • HTTPS with easy certificate generation, reverse-proxy support, virtual hosting for simple website serving, and a geographic firewall.
  • An integrated media player, search, comments stored in descript.ion, a dynamic-DNS updater, and customisation with HTML, CSS and JavaScript.

Who uses it and how

  • Individuals on Windows 10 or Windows Server 2019 and later, macOS, Linux, FreeBSD or Android who download the release zip, unzip it and launch the hfs file to share material straight from their own disk.
  • Home and small-office users who send a folder to a phone or a second computer over the browser, with nothing installed on the receiving device.
  • Docker and service deployments for always-on hosting, using the project's wiki pages for Docker and for service installation.
  • Administrators who need access control or branding, using accounts and the LDAP plug-in for authentication, or a theme plug-in for the served front-end.

Getting started

On macOS and Linux, Homebrew users install with brew install rejetto/hfs/hfs. Otherwise the usual route is downloading the release zip for your operating system, unzipping it and launching the hfs file, with Docker and service installations documented on the project wiki and a Node.js 18-to-24 npx route for platforms without a binary; the administrator account is created with the create-admin command in the running HFS console, or by setting HFS_INITIAL_ADMIN_PASSWORD for a new Docker installation.

How it compares

No comparable products and no paid alternatives that HFS replaces are named in the available facts, so it stands alone in this registry, filed under Productivity & Utilities / File Management & Sync without a named competitor to contrast. Any comparison therefore rests on the properties the project documents itself: GPL-3.0 licensing, self-hosting, and files served directly from disk rather than uploaded to a third party.

When to use it — and when not to

A self-hoster has to run the process, keep the configuration and data directory intact, and manage the administrator account, and the default behaviour allows Admin-panel access from localhost without a login until it is disabled with config localhost_admin false. Windows users may encounter documented antivirus false positives, and platforms without a prebuilt binary such as Linux ARM must fall back to the Node.js route. Anyone who wants a managed cloud service, no local machine involved, or a polished hosted product should look elsewhere.

project readme (upstream, from github) — read inline

HFS: HTTP File Server

logo and motto

Index

Introduction

Turn your computer into a file-sharing server in seconds.

  • Unlimited space and bandwidth — no cloud upload, files come directly from your disk
  • Instant ZIP downloads, even for huge folders
  • Virtual file system to organize what you share
  • Real-time activity monitoring
  • Bandwidth throttling to control transfer speed
  • Plugin system to extend functionality

Runs on: Windows, Linux, macOS, FreeBSD, Android

How does it work

  • run HFS on your computer; an administration webpage automatically shows up
  • select which files and folders you want to be accessible
  • access those files from a phone or another computer just using a browser
  • possibly create accounts and limit access to files

Features

  • https
  • easy certificate generation
  • virtual file system
  • mobile friendly
  • search
  • accounts
  • resumable downloads & uploads
  • download folders as zip archive
  • delete, move and rename files
  • plug-ins (anti-brute-force, thumbnails, ldap, themes, and more)
  • simple website serving
  • real-time monitoring of connections
  • show some files
  • speed throttler
  • geographic firewall
  • admin web interface
  • multi-language front-end
  • virtual hosting
  • reverse-proxy support
  • comments in file descript.ion
  • integrated media player
  • customizable with html, css, and javascript
  • dynamic-dns updater

Installation

For Docker, see https://github.com/rejetto/hfs/wiki/Docker .

For service installation, see https://github.com/rejetto/hfs/wiki/Service-installation.

For Homebrew, just brew install rejetto/hfs/hfs

The minimum Windows version required is 10 or Server 2019.

  1. Download the zip file for your operating system from https://github.com/rejetto/hfs/releases
    • ⚠️ Antivirus problems on Windows? READ THIS
    • ⚠️ If you have Linux ARM or other unlisted/unsupported platforms, please see the Other systems section.
  2. Unzip and launch the hfs file.
    • ⚠️ Mac: if you get "cannot be opened because it is from an unidentified developer", you can hold control key while clicking, then click open.
  3. The browser should automatically open at localhost, so you can configure the rest in the Admin-panel.

Troubleshooting

  • If a browser cannot be opened on the computer where HFS runs, enter create-admin in the running HFS console (this is not an OS shell command), then log in as admin with that password.
  • If you cannot access the HFS console (for example, when running as a service), you can edit the config file to add your admin account
  • If you don't want to use an editor, you can create the file with this command: echo "create-admin: PASSWORD" > config.yaml
  • For a new Docker installation, set HFS_INITIAL_ADMIN_PASSWORD to only the password, and log in as admin. It is used only when creating config.yaml; afterwards, manage the password in HFS and keep the config volume persistent. The older HFS_CREATE_ADMIN takes precedence when non-empty and, by default, reapplies its password at every container start. See Docker setup.

By default, HFS does not require a login when you access the Admin-panel from localhost. If you don't like this behavior, disable it in the Admin-panel or enter this console command config localhost_admin false.

To uninstall, remove the files you unzipped and the configuration/data directory (see config.md for the location).

Other systems

If you can't or don't want to run our binary versions, you can try this:

  1. Install Node.js version 18 to 24
  2. Run at the command line npx hfs@latest

The @latest part is optional, and ensures that you are always up to date.

If this procedure fails, it may be that you are missing one of these requirements.

Configuration and other files will be stored in %HOME%/.vfs

Configuration

For configuration please see config.md; it explains also where all configurations are stored.

Internationalization

It is possible to show the Front-end in other languages. Translation for some languages is already provided. If you find an error, consider reporting it or editing the source file.

In the Languages section of the Admin-panel you can install additional language files.

If your language is missing, please consider translating yourself.

Hidden features

  • Append #LOGIN to the URL to open the login dialog
  • Append ?lang=CODE to the URL to force a specific language
  • Right-click on toggle-all checkbox to invert the state of all checkboxes
  • Append ?login=USER:PASSWORD to automatically log in to the browser
  • Append ?search=PATTERN to trigger a search on startup
  • Append ?onlyFiles or ?onlyFolders to limit the type of results
  • Append ?get=basic to display a basic web interface, intended for older/simpler browsers
    • This is automatic if a basic browser is detected.
  • Append ?autoplay=shuffle to trigger show & play; ?autoplay will not shuffle, but also will not start until the list is complete
  • Right-click on "check for updates" to enter a URL of a version to install
  • Shift+click on a file to show and play
  • Ctrl+backspace to navigate to the parent folder
  • Start typing a filename to focus it in the list
  • --consoleFile PATH to also output all stdout/stderr to a file
  • Set env.var. DISABLE_UPDATE=1 (for containers)
  • Launch with --debug or env.var. HFS_DEBUG=1 to generate additional console logs
  • Launch with --no-central to skip fetching updated info from GitHub (uses built-in data only)

Contribute

There are several ways to contribute

  • Report bugs

    It's very important to report bugs, and if you are not so sure about it, don't worry, we'll discuss it. If you find important security problems, please contact us privately so that we can publish a fix before the problem is disclosed, for the safety of other users.

  • Use beta versions, and give feedback.

    While betas have more problems, you'll get more features and give a huge help to the project.

  • Translate to your language.

  • Suggest ideas

    While the project should not become too complex, yours may be an idea for a plugin.

  • Write guides or make videos for other users. We got a wiki!

  • Submit your code

    If you'd like to make a change yourself in the code, please first open an "issue" or "discussion" about it, so we'll try to cooperate and understand what's the best path for it.

  • Make a plugin

    A plugin can change the look (a theme), and/or introduce a new functionality.

Code Signing Policy

Free code signing 🙏 provided by SignPath.io, certificate by SignPath Foundation.

Author/Reviewer/Approver: Massimo Melina.

Privacy: Update checks are opt-out; other outbound connections are user-triggered.

More

Frequently asked questions

Is hfs free to use?

hfs is open source under the GPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does hfs do?

HFS is a web file server for your computer. Share folders or even a single file thanks to the virtual file system.

What is hfs written in?

hfs is primarily written in TypeScript. Its source is publicly available at https://github.com/rejetto/hfs, and it has 3,915 GitHub stars.