base on HFS is a web file server for your computer. Share folders or even a single file thanks to the virtual file system. # HFS: HTTP File Server ![logo and motto](hfs-logo-color-motto.svg) ## Introduction Access your files via web, directly from your disk. - Be your own server: share files **fresh from your disk** with **unlimited** space and bandwidth. - **Fast:** try zipping 100GB – download starts immediately. - **Smart:** HFS detects problems and suggest solutions. - Present things the way you want: share **even a single file**, even with a different name, with our *virtual file system*. - **Monitor** all activities in real-time. - **Bandwidth throttling**: decide how much to give. - **Direct transfers**: share large files with friends without having to upload them first. - **Expandable**: install plugins for additional features. Runs on: Windows, Linux, macOS, FreeBSD, Android ## How does it work - run HFS on your computer, administration page automatically shows up - select what 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](https://github.com/rejetto/hfs/discussions/270) - speed throttler - geographic firewall - admin web interface - multi-language front-end - virtual hosting - [reverse-proxy support](https://github.com/rejetto/hfs/wiki/Reverse-proxy) - comments in file descript.ion - integrated media player - [customizable with html, css and javascript](https://github.com/rejetto/hfs/wiki/Customization) - dynamic-dns updater ## Installation If you need [Docker installation](https://github.com/damienzonly/hfs-docker) or [Service installation](https://github.com/rejetto/hfs/wiki/Service-installation), click the links. 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 - ⚠️ If you have Linux ARM or other unlisted/unsupported platforms, please see the [Other systems](#other-systems) section. 2. Unzip and launch `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 on `localhost` address, so you can configure the rest in the Admin-panel. Troubleshooting - if a browser cannot be opened on the computer where you are installing HFS, you should enter this command in the HFS console: `create-admin <PASSWORD>` - if you cannot access the console (like when you are running as a service), you can [edit the config file to add your admin account](config.md#accounts) - if you don't want to use an editor you can create the file with this command: `echo "create-admin: PASSWORD" > config.yaml` 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`. ### Other systems If can't or don't want to run our binary versions, you can try this: 1. [install node.js](https://nodejs.org) version 20 (or greater, but then compatibility is not guaranteed) 2. execute at 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](https://github.com/nodejs/node-gyp#installation). Configuration and other files will be stored in `%HOME%/.vfs` ## Configuration For configuration please see [file config.md](config.md). ### Where is it stored Configuration is stored in the file `config.yaml`, exception made for custom HTML which is stored in `custom.html`. These files are kept in the Current Working Directory (cwd), which is by default 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 folder passing `--cwd SOME_FOLDER` parameter at command line. Any relative path provided is relative to the *cwd*. [Check details about config file format](config.md). ## 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](https://github.com/rejetto/hfs/tree/main/src/langs). In the Languages section of the Admin-panel you can install additional language files. If your language is missing, please consider [translating yourself](https://github.com/rejetto/hfs/wiki/Translation). ## 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 `?overwrite` when uploading to override the `dont_overwrite_uploading` configuration, provided you also have *delete* permission - 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 ## Contribute There are several ways to contribute - [Report bugs](https://github.com/rejetto/hfs/issues/new?labels=bug&template=bug_report.md) 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](mailto:[email protected]) 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](https://github.com/rejetto/hfs/wiki/Translation). - [Suggest ideas](https://github.com/rejetto/hfs/discussions) 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](https://github.com/rejetto/hfs/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](dev-plugins.md) A plugin can change the look (a theme), and/or introduce a new functionality. ## More - [APIs](https://github.com/rejetto/hfs/wiki/APIs) - [Build yourself](dev.md) - [License](https://github.com/rejetto/hfs/blob/master/LICENSE.txt) - Flag images are public-domain, downloaded from https://flagpedia.net", Assign "at most 3 tags" to the expected json: {"id":"7173","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"