A modern web UI for various torrent clients with a Node.js backend and React frontend.

Overview

Flood

Flood logo

Github Actions build status badge Crowdin Discord server badge

Flood is a monitoring service for various torrent clients. It's a Node.js service that communicates with your favorite torrent client and serves a decent web UI for administration. Flood-UI organization hosts related projects.

Supported Clients

Client Support
rTorrent (tested)
qBittorrent v4.1+ (tested)
Transmission (tested)
Deluge v2+ ⚗️ Experimental

Integrating with Flood

APIs are officially documented inline by the comments and types.

You can also check out:

Flood conforms to Semantic Versioning conventions.

Feedback

If you have a specific issue or bug, please file a GitHub issue. Please join the Flood Discord server to discuss feature requests and implementation details.

More Information

Check out the Wiki for more information.

Getting started

Pre-Requisites

Install Node.js runtime. Flood tracks Current and provides support to Active LTS as well.

  • Debian, Ubuntu (apt/.deb) and Enterprise Linux (yum/dnf/.rpm) -based distributions users can install nodejs from NodeSource software repository.
  • Windows users can use winget, Chocolatey or installer.
  • macOS users can use brew or installer.
  • Check Node.js website for more.

Alternatively, download a single-executable build from Releases (or rolling build from Actions). It bundles Node.js and supports Linux, macOS and Windows.

Installation

(sudo) npm install --global flood or npx flood

Or use @jesec/flood for cutting-edge builds.

Or build from source.

Run

flood or npx flood if you installed Flood via npm.

npm run start if you compiled Flood from source.

Check Wiki for how to install Flood as a service.

Configuration

Flood uses a command line configuration interface.

Run flood --help, npx flood --help or npm run start -- --help to get help about command line arguments.

If you want to know more about configurations, check shared/schema/Config.ts.

When Flood's builtin user management is enabled (default), you will be prompted to configure the connection to torrent client when loading the web interface.

What to configure

  1. If you are proxying requests to Flood from your own web server, configure Flood's path from the host at the --baseuri (or baseURI) property. All requests will be prefixed with this value.
    • For example, if serving Flood from https://foo.bar/apps/flood, you would set baseURI to /apps/flood. If serving flood from https://foo.bar, you do not need to configure baseURI.
    • Read more about proxying requests to Flood in the Wiki.
  2. Check Wiki, especially Security sections.

Upgrade

Run the installation command again.

Troubleshooting

  • Flood and filesystem:
    • Flood server performs file operations itself. As such, Flood needs to have permissions/access to the files.
    • Flood only uses the path provided by the torrent client so it needs to have the same filesystem context as the torrent client. If a file is "/path/to/a/file" to the torrent client, it has to be "/path/to/a/file" to Flood in order to get file operations working. It can't be "/mnt/some/different/path/file".
  • rTorrent:
    • Linux users can download the latest static executable (available for amd64 and arm64) from jesec/rtorrent. Alternatively, use package managers such as apt, yum, pacman of the platform to install rTorrent.
    • macOS users can use brew to install rTorrent.
    • Compile: XMLRPC support flag (--with-xmlrpc-c) is required during compilation.
    • Certain features (sequential download, initial seeding, etc.) are not available in vanilla rTorrent.
  • Ask for help in the Flood Discord server.

Docker

docker run -it jesec/flood --help

Or jesec/flood:master for cutting-edge builds.

To upgrade, docker pull jesec/flood.

Note that you have to let Docker know which port should be exposed (e.g. -p 3000:3000) and folder mapping (e.g. -v /data:/data).

Don't forget to pay attention to flood's arguments like --port and --allowedpath.

Alternatively, you can pass in environment variables instead (e.g. -e FLOOD_OPTION_port=3000).

Checkout Run Flood (and torrent clients) in containers discussion.

Filesystem parts in Troubleshooting are especially important for containers.

Building Flood

Clone from repository

git clone https://github.com/jesec/flood.git

Compiling assets and starting the server

From the root of the Flood directory...

  1. Run npm install.
  2. Run npm run build.
  3. Run npm start.

Access the UI in your browser. With default settings, go to http://localhost:3000. You can configure the port via --port argument.

Notes

  • When you use npm run start to execute Flood, you have to pass command line arguments after --. For example, npm run start -- --host 0.0.0.0 --port 8080. This applies to any npm run (e.g. start:development:client).

Updating

  1. To update, run git pull in this repository's directory.
  2. Kill the currently running Flood server.
  3. Run npm install to update dependencies.
  4. Run npm run build to transpile and bundle static assets.
  5. Start the Flood server with npm start.

Local Development

  1. Run npm install.
  2. Run npm run start:development:server and npm run start:development:client in separate terminal instances.
    • npm run start:development:server uses ts-node-dev to watch for changes to the server-side source. Or open the folder with VS code and then Run -> Start Debugging. You may use a Javascript IDE to debug server codes.
    • npm run start:development:client watches for changes in the client-side source. Access the UI in your browser. Defaults to localhost:4200. You may use browser's DevTools to debug client codes.

--help --show-hidden shows advanced arguments.

--proxy proxies requests from a development client to a URL of your choice (usually URL to a Flood server). It is useful when you wish to do development on the frontend but not the backend. Or when the frontend and backend are being developed on different hosts.

Environment Variables

  1. DEV_SERVER_PORT: webpackDevServer's port, used when developing Flood. Defaults to 4200.
  2. DEV_SERVER_HOST: webpackDevServer's host, used when developing Flood. Defaults to 0.0.0.0.
  3. DEV_SERVER_HTTPS: webpackDevServer's protocol, used when developing Flood. Defaults to http.

Building Docker

  1. docker build --pull --rm -f Dockerfile -t flood:latest .
  2. docker run -it flood --help
Comments
  • HTTP_BASIC_AUTH_HANDLER

    HTTP_BASIC_AUTH_HANDLER

    Add method httpbasic to auth

    Description

    The feautre is enabled in case the auth cli arg is set to httpbasic In such case jwtFromRequest in passport.ts will extract the username from the http basic credentials and compare with the one from the jwt token. if there is a match the process continues as before The /api/auth/authenticate will read the credentials from http basic auth instead of body request and continue with the same flow. The /api/auth/logout will send a 401 Unathorized response.

    Related Issue

    Motivation and Context

    I use flood behind a nginx proxy with http basic auth and I want to use this credentials for logging in in flood for a smoother experience.

    How Has This Been Tested?

    Tested on a server with multiple users (admin and not) with flood setup behind nginx proxy

    Screenshots (if appropriate):

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [x] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] I have read the CONTRIBUTING document.
    • [x] I have added tests to cover my changes.
    • [x] All new and existing tests passed.
    opened by zawapete 36
  • Error while adding one specific torrent

    Error while adding one specific torrent

    Your Environment

    • Version used: f731469
    • Environment name and version:
      • Node.js version v14.9.0
      • npm version 6.14.8

    Adding a specific torrent file (which I cannot reproduce, but it is a valid file that has worked with rtorrent (rutorrent as ui) in the past.) causes a failure. This only happens with this specific file, adding different torrents with Flood works fine.

    Steps to Reproduce

    1. Add the torrent
    2. Observe this error in API response:
    {"errno":-104,"code":"ECONNRESET","syscall":"write"}
    

    Adding the torrent manually (in rTorrent) works fine.

    opened by ThatNerdyPikachu 32
  • fix: flood entrypoint in container images

    fix: flood entrypoint in container images

    Description

    I did not think of the ramifications of moving flood from the entrypoint to the command. Keeping it in the entrypoint should mean it will work the way the documentation expects it too.

    Let me know if you want me to move the other flags to the entrypoint as well or if they are expected to be defaults we could leave them out.

    Sorry!

    Related Issue

    Screenshots

    Types of changes

    • [ ] Breaking change (changes that break backward compatibility of public API or CLI - semver MAJOR)
    • [ ] New feature (non-breaking change which adds functionality - semver MINOR)
    • [ ] Bug fix (non-breaking change which fixes an issue - semver PATCH)
    opened by onedr0p 22
  • auth, Users: initial preparation for multi client support

    auth, Users: initial preparation for multi client support

    ~BREAKING CHANGE.~

    ~Requires database reset.~ https://github.com/jesec/flood/pull/53/commits/8c3e9eccfb75f75eebc06daf21f1452d391b254b.

    Bug: Flood-UI/Flood#185

    screenshot (946a972):

    image

    Data structures defined in: https://github.com/jesec/flood/tree/refactor/auth/shared/schema

    opened by jesec 21
  • HTTP_BASIC_AUTH_HANDLER

    HTTP_BASIC_AUTH_HANDLER

    Introduced a new config to enable automatic login if there is an HTTP Basic header

    Description

    The feautre is enabled in case the httpauth cli arg is passed/the enableUsersHTTPBasicAuthHandler config value is set to true The /api/auth/verify will read the credentials from http basic auth, perform the authentication against the db and apply in case of success the same logic for disableUsersAndAuth. The /api/auth/authenticate will read the credentials from http basic auth instead of body request and continue with the same flow. The /api/auth/logout will send a 401 Unathorized response. In client we will check if isHTTPAuthUser other than token is null in order to enable/disable the logout button.

    Related Issue

    Motivation and Context

    I use flood behind a nginx proxy with http basic auth and I want to use this credentials for logging in in flood for a smoother experience.

    How Has This Been Tested?

    Screenshots (if appropriate):

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [x] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] I have read the CONTRIBUTING document.
    • [x] I have added tests to cover my changes.
    • [x] All new and existing tests passed.
    opened by zawapete 20
  • feat: use env instead of args in docker images

    feat: use env instead of args in docker images

    Description

    This sets up the defaults in the docker container to use config from env instead of args

    Related Issue

    As discussed here https://github.com/jesec/flood/pull/261

    Screenshots

    Types of changes

    • [ ] Breaking change (changes that break backward compatibility of public API or CLI - semver MAJOR)
    • [ ] New feature (non-breaking change which adds functionality - semver MINOR)
    • [ ] Bug fix (non-breaking change which fixes an issue - semver PATCH)
    opened by onedr0p 16
  • Cannot build using docker

    Cannot build using docker

    Type: Bug Report

    • [ ] Try to follow the update procedure described in the README and try again before opening this issue.
    • [ ] Please check the F.A.Q..
    • [ ] Please check the Troubleshooting wiki section.

    Your Environment

    • Version used:
      • Version (stable release) git --no-pager tag
      • Commit ID (development release) git --no-pager log -1
    • Environment name and version:
      • Node.js version node --version
      • npm version npm --version
      • Web browser name and version
    • Operating System and version:

    Summary

    When doing docker build I get following error. Not sure how to proceed with it, doesn't seem to respect docker build args

    Step 13/21 : RUN npm run build &&     npm prune --production
     ---> Running in 63b34291b8ef
    
    > [email protected] build /usr/src/app
    > node client/scripts/build.js
    
    /usr/src/app/config.js:10
      secret: process.env.FLOOD_SECRET || CHANGE_ME,
                                          ^
    
    ReferenceError: CHANGE_ME is not defined
        at Object.<anonymous> (/usr/src/app/config.js:10:39)
        at Module._compile (internal/modules/cjs/loader.js:759:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
        at Module.load (internal/modules/cjs/loader.js:628:32)
        at Function.Module._load (internal/modules/cjs/loader.js:555:12)
        at Module.require (internal/modules/cjs/loader.js:666:19)
        at require (internal/modules/cjs/helpers.js:16:16)
        at Object.<anonymous> (/usr/src/app/client/config/env.js:3:20)
        at Module._compile (internal/modules/cjs/loader.js:759:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    

    Expected Behavior

    Respect build-args or skip requirement to set flood_secret during docker build ( only need to set it when running built docker )

    Current Behavior

    Possible Solution

    Steps to Reproduce

    Context

    opened by zewelor 14
  • Torrents with long names get truncated in torrent detail modal

    Torrents with long names get truncated in torrent detail modal

    Type: Bug Report

    • [ ] Try to follow the update procedure described in the README and try again before opening this issue.

    Your Environment

    • Version used:
      • Version: 4.5.2
      • Commit ID (development release) git --no-pager log -1
    • Environment name and version:
      • Node.js version node --version
      • npm version npm --version
      • Web browser name and version
    • Operating system and version:
    • Torrent client and version:

    Summary

    The entire name of the torrent is not visible in the header in torrent detail modal for torrents with long names.

    Expected Behavior

    The entire torrent name should be visible.

    opened by agneevX 12
  • Add torrent not working with no errors

    Add torrent not working with no errors

    Type: Bug Report

    Your Environment

    • Version used:
      • Version (stable release) 4.3.1 (with NPM & Build)
      • Commit ID (development release) git --no-pager log -1: 57ded2014d807ed253202961fca84795f03989f2
    • Environment name and version:
      • Node.js version node --version : 14.15.4
      • npm version npm --version : 6.14.11
      • Web browser name and version Google Chrome Version 88.0.4324.96 (Official Build) (x86_64)
    • Operating system and version: Mac OS Big Sur
    • Torrent client and version: Rtorrent 0.9.7

    Hi, I've installed latest version of flood and, I can't add torrents. I've no error, /api/client/add-files return HTTP code 200 but and I've success tooltip in bottom right with message "x torrent added" and I don't understand why my torrent not start

    Can u help me please ?

    Thanks

    Can't reproduce 
    opened by kallard1 12
  • The added date is mm/dd/yyyy, should be localised and/or configurable

    The added date is mm/dd/yyyy, should be localised and/or configurable


    name: '🐛 Bug Report' about: 'Report a general bug'

    Type: Bug Report

    • [ ✅ ] Try to follow the update procedure described in the README and try again before opening this issue.
    • Also checked Config.ts in case there was some hidden setting I was missing (though localisation should be per user).

    Your Environment

    • Version used:
      • Version (stable release) 4.3.1
      • ~~Commit ID (development release) git --no-pager log -1~~
    • Environment name and version:
      • Node.js version node --version v12.19.0
      • npm version npm --version 7.1.0
      • Web browser name and version Firefox version 83.0
    • Operating system and version: Windows 10 v20H2
    • Torrent client and version:

    Summary: dates are wrong

    For me mm/dd/yyyy is specifically wrong, confusing, & neigh unreadable. yyyy-mm-dd would be my preference (and an international standard, readable by everyone 😊) but even dd/mm/yyyy would be better.

    Edit: I'm updating this to a bug report, because frankly the date format is completely incorrect if being tied to the language English. The date format used is American.

    Expected Behavior: being able to read the date.

    Current Behavior: date format unreadable.

    Possible Solution

    My solution would be a place for a setting in settings > user interface, directly under the language setting. Could be a drop down menu with predetermined formats, a field for entering a custom format - or both, with custom being an option in the drop down menu.

    ~~Steps to Reproduce~~ N/A

    ~~Context~~

    opened by PaulBags 12
  • rtorrent: torrents added outside of Flood report a bogus

    rtorrent: torrents added outside of Flood report a bogus "Added" date

    Type: Bug Report

    Your Environment

    • Version used:
      • Version (stable release) : 4.6.1 (via Docker image jesec/flood:latest sha256:95dd5112471e3afcb85b1760026d9b6370540bb2a238e22b094236d74afb67e0)
    • Operating system and version: Linux (Docker container)
    • Torrent client and version: rtorrent 0.9.8 (from Alpine Linux)

    Summary

    The Flood UI reports an incorrect Added date for torrents added outside of its control.

    Expected Behavior

    The Flood UI should display the torrent add/load date reported by the torrent client (here, rtorrent).

    Current Behavior

    • When adding a torrent via the Flood UI, the Added date is correctly set.
    • When load new torrents outside of Flood (e.g. using rtorrent's watch system), the torrent Added date reported by Flood is bogus (01/01/1970, or None when looking in a torrent's details section). I've checked the result of rtorrent's d.load_date XML-RPC method, it correctly returns the UNIX timestamp of the time a torrent is loaded.

    Possible Solution

    I haven't looked at how Flood retrieves the torrent add date, however the correct way to get this information from rtorrent seems to be via the d.load_date XML-RPC method.

    Steps to Reproduce

    1. Set up an rtorrent/Flood combination
    2. Load a torrent directly in rtorrent
    3. Check the Added time reported in the Flood UI

    Thank you 🤞

    opened by falzm 11
  • build(deps): bump loader-utils from 2.0.2 to 2.0.4

    build(deps): bump loader-utils from 2.0.2 to 2.0.4

    Bumps loader-utils from 2.0.2 to 2.0.4.

    Release notes

    Sourced from loader-utils's releases.

    v2.0.4

    2.0.4 (2022-11-11)

    Bug Fixes

    v2.0.3

    2.0.3 (2022-10-20)

    Bug Fixes

    • security: prototype pollution exploit (#217) (a93cf6f)
    Changelog

    Sourced from loader-utils's changelog.

    2.0.4 (2022-11-11)

    Bug Fixes

    2.0.3 (2022-10-20)

    Bug Fixes

    • security: prototype pollution exploit (#217) (a93cf6f)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • build(deps): bump minimatch and recursive-readdir

    build(deps): bump minimatch and recursive-readdir

    Bumps minimatch and recursive-readdir. These dependencies needed to be updated together. Updates minimatch from 3.0.4 to 3.1.2

    Commits

    Updates recursive-readdir from 2.2.2 to 2.2.3

    Changelog

    Sourced from recursive-readdir's changelog.

    v2.2.3 - Mon, 19 Sep 2016 21:55:22 GMT

    v2.1.0 - Mon, 19 Sep 2016 21:55:22 GMT

    v2.0.0 - Wed, 06 Apr 2016 04:31:02 GMT

    v1.3.0 - Wed, 14 Oct 2015 14:35:55 GMT

    v1.2.1 - Wed, 14 Jan 2015 16:49:55 GMT

    Commits
    Maintainer changes

    This version was pushed to npm by bnb, a new releaser for recursive-readdir since your current version.


    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Downloaded resets to zero after restart

    Downloaded resets to zero after restart

    After restarting my server - Flood resets the downloaded tag for me. When I add a new torrent it will show the correct downloaded size for that file only. After another restart that file will also show 0b downloaded. In rTorrent these numbers are correctly present.

    CleanShot 2022-11-08 at 23 22 16@2x
    opened by Nevotic 0
  • Added a way to sort torrent peers columns

    Added a way to sort torrent peers columns

    Description

    I've found sad that we didn't have the ability to sort the "Torrent Peers" table.

    More precisely, currently it seems to be sorted automatically on the the backend side by IPs.

    Personally, I'm always curious to see which peers are giving me the best download speeds and to where I'm uploading the faster.

    Screenshots

    screenshot

    Types of changes

    So I've implemented a logic to sort columns on a click and I've followed the project logic to don't diverge too much from the main idea.

    It is possible to sort by any columns and in any direction.

    Note that the sort can handle IPv4/v6 too.


    • [ ] Breaking change (changes that break backward compatibility of public API or CLI - semver MAJOR)
    • [X] New feature (non-breaking change which adds functionality - semver MINOR)
    • [ ] Bug fix (non-breaking change which fixes an issue - semver PATCH)
    opened by noefleury 0
  • Can only add tags in flood (torrent client is qBittorrent)

    Can only add tags in flood (torrent client is qBittorrent)

    Type: Bug Report

    Your Environment

    Running your docker container jesec/flood:master

    • Version used:
      • Commit ID (development release): 6ff622c6b98fc896fcbd0657691e2a4a3b746d3b
    • Environment name and version:
      • Node.js version: v18.9.0
      • npm version: 8.19.1
      • Web browser: Brave v1.44.105
    • Operating system and version: Alpine 3.16.2 (in docker container)
    • Torrent client and version: qBittorrent 4.4.5

    Summary

    Removing tags doesn't work. (can only add tags)

    Have also tested removing tags on qbt's native web ui, which works (and then does update in flood). But I can't remove tags in the flood UI.

    Looking in the browser console it reports status 200 for the api/torrents/tags endpoint when removing a tag, but nothing is removed. The payload also looks correct, with the torrent hash and tags: []

    Expected Behavior

    The tag should be removed.

    Current Behavior

    Tags never get removed, can only add.

    Possible Solution

    Steps to Reproduce

    1. Select "Set Tags" on a torrent
    2. Delete all the tags and replace it with something new
    3. Click "Set Tags" button (tag gets added but nothing removed)

    Same goes if I "Set Tags" and remove a single or all tags, and click "Set Tags", nothing happens. (I mean the console says ok, 200, but the tags are still there)

    opened by runaroundhome 0
Releases(v4.7.0)
  • v4.7.0(Oct 9, 2021)

    4.7.0 (October 9, 2021)

    • Display total size by tag or tracker of torrents on sidebar (#369, @sabersalv)
    • Improve memoization of "TorrentListRow" and "ProgressBar" components
    • Fix loading indicator bar alignment (#396, @DopyConqueror)
    • New translations
      • Arabic, thanks to yngams
      • Chinese Simplified, thanks to @davidxuang
      • Czech, thanks to @Kedlub
      • Italian, thanks to @GiorgioBrux
      • German, thanks to @Kiina
      • Japanese, thanks to @Kuri0421 and @Kiina
      • Korean, thanks to @Kiina
      • Polish, thanks to @retmas-gh
      • Spanish, thanks to @oaknuggins
      • Norwegian, thanks to Daddie0
    • Bump dependencies
    Source code(tar.gz)
    Source code(zip)
    flood-linux-arm64(55.03 MB)
    flood-linux-arm64.deb(18.78 MB)
    flood-linux-x64(58.41 MB)
    flood-linux-x64.deb(19.61 MB)
    flood-macos-arm64(61.97 MB)
    flood-macos-x64(66.91 MB)
    flood-win-arm64.exe(45.88 MB)
    flood-win-x64.exe(54.23 MB)
  • v4.6.1(Jul 5, 2021)

    4.6.1 (July 5, 2021)

    • DiskUsage: skip mount points of "overlayfs" type (#341, @Trim21)
    • Deluge:
      • Avoid crashing Flood when there is a connection error
      • Note again that Deluge support is still experimental
    • Bug fixes:
      • Cleanup synchronous patterns (#340)
      • AuthForm: add missing i18n for "Username" and "Password" (#336)
      • server: destroy user services before cleaning up data
      • TorrentListCell: passthrough clicks
    • New translations
      • French, thanks to @foXaCe
      • German, thanks to @chint95
      • Korean, thanks to @Kiina
      • Romanian, thanks to @T-z3P
    • Bump dependencies
    Source code(tar.gz)
    Source code(zip)
    flood-linux-arm64(44.19 MB)
    flood-linux-arm64.deb(16.88 MB)
    flood-linux-x64(47.57 MB)
    flood-linux-x64.deb(17.71 MB)
    flood-macos-x64(48.18 MB)
    flood-win-arm64.exe(35.03 MB)
    flood-win-x64.exe(43.23 MB)
  • v4.6.0(May 28, 2021)

    4.6.0 (May 28, 2021)

    • Experimental Deluge support
      • caveat: tags are not supported at the moment
    • Add "last active date" and "finished date" to the torrent properties
    • Migrate stylesheets to SCSS module system
    • Ditch inefficient "TRANSFER_SUMMARY_DIFF_CHANGE" SSE event
    • Allow to download contents of multiple selected torrents
    • Update base Node.js versions of single-executable builds
    • rTorrent:
      • Add torrents to rTorrent via socket
    • qBittorrent:
      • Improve performance by throttling concurrent requests
    • Bug fixes:
      • Fix memory leak and unreliability when the settings of a user is updated by simplifying service manager
      • Pipe created torrent to response directly
    • Security enhancements:
      • Forbid non-owner access to runtime directory by default
    • New translations
      • Chinese (Simplified), thanks to @coxde
      • Czech, thanks to @brezinajn
      • German, thanks to @chint95
      • Hungarian, thanks to @m3r3nix
      • Korean, thanks to @Kiina
      • Spanish, thanks to Zagon
    • Bump dependencies
    Source code(tar.gz)
    Source code(zip)
    flood-linux-arm64(43.71 MB)
    flood-linux-arm64.deb(16.79 MB)
    flood-linux-x64(47.09 MB)
    flood-linux-x64.deb(17.61 MB)
    flood-macos-x64(47.70 MB)
    flood-win-arm64.exe(34.55 MB)
    flood-win-x64.exe(42.75 MB)
  • v4.5.4(Apr 24, 2021)

  • v4.5.3(Apr 10, 2021)

    4.5.3 (April 10, 2021)

    • Bug fixes:
      • Tags need a F5 refresh to be displayed after being set (#266)
      • Torrents with long names get truncated in torrent detail modal (#273)
      • qBittorrent: allow .torrent download with new session directory path (#275, @angristan)
    • New translations
      • French, thanks to @foXaCe
      • Hungarian, thanks to @m3r3nix
      • Japanese, thanks to @Kiina
      • Korean, thanks to @Kiina
      • Spanish, thanks to @Shutruk
    • Bump dependencies
    Source code(tar.gz)
    Source code(zip)
    flood-linux-arm64(36.45 MB)
    flood-linux-arm64.deb(14.13 MB)
    flood-linux-x64(38.25 MB)
    flood-linux-x64.deb(14.79 MB)
    flood-macos-x64(37.56 MB)
    flood-win-arm64.exe(33.83 MB)
    flood-win-x64.exe(36.22 MB)
  • v4.5.2(Apr 4, 2021)

  • v4.5.1(Mar 31, 2021)

    4.5.1 (March 31, 2021)

    • Allow to press Ctrl-A or Command-A to select all torrents (#253, @sabersalv)
    • Enlarge width of "Torrent Details" modal (#250, @RoroTiti)
    • Bug fixes:
      • Fix multi-file "Move torrents" of rTorrent (XMLRPC)
      • Don't close the notification panel when a button is clicked
    • New translations
      • Czech, thanks to @brezinajn
      • Italian, thanks to @gmcinalli
      • Korean, thanks to @Kiina and @m4ximuel
    • Bump dependencies
    Source code(tar.gz)
    Source code(zip)
    flood-linux-arm64(36.40 MB)
    flood-linux-arm64.deb(14.12 MB)
    flood-linux-x64(38.21 MB)
    flood-linux-x64.deb(14.78 MB)
    flood-macos-x64(37.52 MB)
    flood-win-arm64.exe(33.79 MB)
    flood-win-x64.exe(36.18 MB)
  • v4.5.0(Mar 14, 2021)

    4.5.0 (March 14, 2021)

    • Reannounce. Typically torrent clients do that automatically, but in some cases you may want to do it manually. It is available as a context menu action.
    • Redesigned filesystem browser. Allow searching in the current directory and eliminate unnecessary requests sent to server. Additionally, navigation via arrow keys is implemented (mainly for accessibility but could be useful for anyone).
    • Major accessibility enhancements. All elements are now navigable by keyboard.
    • Improve scrolling performance by overscanning 30 rows.
    • rTorrent:
      • JSON-RPC support for eligible versions. Preliminary tests showed that, when compared with XMLRPC, JSON-RPC yields 2x performance, 15% lower total CPU time in rTorrent process, 33% lower total CPU time in Flood process.
      • load.throw command support for eligible versions. Definitive response when you add torrents, so Flood won't display success when the operation actually fails.
      • Better handle command failures.
      • Verify filesystem access and respond with errors when necessary.
    • Bug fixes:
      • Fix French mistranslation
      • Fix button location in download rules tab of feed modal
      • Fix "Set tracker" of single tracker torrents in rTorrent
      • Fix "Checking" bar selected style for dark color scheme
      • Recognize qBittorrent's "Forced" state
      • Disk usage service errors are no longer fatal
    • New translations
      • Chinese (Simplified), thanks to @MeetWq
      • Chinese (Traditional), thanks to @vongola12324
      • Czech, thanks to @brezinajn
      • French, thanks to @Carryozor and @foXaCe
      • German, thanks to @chint95
      • Hungarian, thanks to @m3r3nix
      • Romanian, thanks to @T-z3P
    • Bump dependencies
    Source code(tar.gz)
    Source code(zip)
    flood-linux-arm64(36.48 MB)
    flood-linux-arm64.deb(14.13 MB)
    flood-linux-x64(38.29 MB)
    flood-linux-x64.deb(14.79 MB)
    flood-macos-x64(37.59 MB)
    flood-win-arm64.exe(33.86 MB)
    flood-win-x64.exe(36.26 MB)
  • v4.4.1(Feb 6, 2021)

    • Better handle tracker domain conversion and grouping
    • Wrap texts (e.g. long IPv6 addresses and peer client versions) in tables of torrent details if necessary
    • Distribution:
      • CI now publishes releases to AUR (Arch Linux User Repository)
      • CI now publishes Debian (.deb) packages to Github Releases
      • Contributions are welcome. See distribution/README.md.
    • rTorrent fixes:
      • Remove [] from IPv6 addresses in peer list
    • Bug fixes:
      • Remove ugly outline and highlight of focused button caused by an a11y change
      • Try to workaround potential index.html caching issues
        • Browser uses a fully cached asset tree in some cases, which defeats cache busting by asset hashes
    • New translations
      • Finnish, thanks to @hyvamiesh
      • German, thanks to @chint95
    • Bump dependencies
    Source code(tar.gz)
    Source code(zip)
    flood-linux-arm64(36.31 MB)
    flood-linux-arm64.deb(14.10 MB)
    flood-linux-x64(38.12 MB)
    flood-linux-x64.deb(14.75 MB)
    flood-macos-x64(37.43 MB)
    flood-win-arm64.exe(33.70 MB)
    flood-win-x64.exe(36.09 MB)
  • v4.4.0(Feb 2, 2021)

    4.4.0 (February 2, 2021)

    • Return a portable link when torrent content is requested
      • Allow sharing of links to other people
      • Allow casting (Chromecast, Airplay) of content to devices which can't authenticate with Flood
      • Allow copying the link and paste it to a player application so more formats can be streamed
      • Allow external downloaders to use the link
    • Allow to register to handle magnet links in "Add by URL" panel
      • Support for "add-urls" frontend query action is added
      • e.g. http://localhost:3000/?action=add-urls&url=magnet:?xt=
    • Allow to download .torrent file of a torrent
    • Add sequential downloading support for applicable clients
    • Add initial seeding (aka superseeding) support for applicable clients
    • Display existing tags in alphabetical order in tag selector
    • Optionally skip assets serving with --assets=false
      • May be useful for users who serve static assets from their own servers
      • Or developers who don't want to build assets before starting a server instance
    • Refresh manifest and assets related to PWA (Progressive Web Application) support
    • Separate locale and language when using "Automatic" language setting
      • Deal with minor locale differences (e.g. date formats) between language variants
      • See #123
    • Remove inconsistency of clients by normalizing hashes in API responses to upper case
    • Explicitly pass paths of contents to mediainfo
      • So unrelated files in the same folder won't be processed by mediainfo
    • Remove dependency on shell in disk usage functions
      • New distribution-less (distroless) Docker image is now available, which has smaller size and allows maximum security
    • Standalone executable:
      • Now available for linux-arm64 and win-arm64
      • Bundled Node.js runtime bumped to 14.15.4
      • Linux binaries are now fully static
      • Customized Node.js runtime with smaller size and memory consumption
    • rTorrent fixes:
      • Create destination directory structure before moving torrent
      • Flood API responses no longer mixes with unprocessed rTorrent method call responses
      • Properly handle multi tags while adding
      • Remove torrents (with data) can delete empty directories
    • qBittorrent fixes:
      • Fix "isBasePath" for newer versions
      • Implement "isCompleted" (skip_checking)
      • Trim whitespace in tags property
      • Optionally set website cookie for torrent fetching (add by URL)
    • Security enhancements:
      • Don't leak details of internal errors
      • Rate limits /data API endpoint
    • Bug fixes:
      • Pack torrent contents one by one to avoid out-of-memory during batch downloading
      • Potential crashes related to disk usage functions in rare Docker environments
      • Disallow comma in tag
    • New translations
      • Chinese (Traditional), thanks to @vongola12324
      • Czech, thanks to @brezinajn
      • Dutch, thanks to @vain4us
      • French, thanks to @Carryozor
      • German, thanks to @Ben-Wallner
      • Hungarian, thanks to @sfu420
      • Romanian, thanks to @T-z3P
      • Spanish, thanks to @almontegil
    • Bump dependencies

    Additionally, Sonarr #4159 and Radarr #5552 now supports Flood natively.

    Notes about sequential downloading:

    Drawbacks:

    • https://wiki.vuze.com/w/Sequential_downloading_is_bad

    Benefits:

    • Sequential downloading helps with I/O performance and lowers resource consumption and cost of hardware. It enables predictable I/O patterns and efficient caching. My hard disk is really noisy while downloading a torrent. But with sequential downloading, it does not make a sound. Speed is much better as well. Sequential I/O patterns also eliminate disk fragmentation problem that damages performance/lifespan of hard disks in long-term, which is a headache for long seeders.
    • "It is bad for swarms." That's correct for unhealthy swarms. However, for private torrent users, in most cases, the seeder/leecher relationship is "many seeder, single/little leecher". Plus, with the incentives/punishments of tracker sites, there is little to no risk of "draining". As such, it makes more sense to protect hardware of everyone in the swarm. Predictable I/O patterns also allow seeders to seed many torrents more efficiently: if leechers use sequential download, the read patterns become predictably sequential, which allows better I/O performance and reduces the failure rate of hard disks.
    • For seedbox users: seedboxes are virtual machines. That means many users share the same physical machine. Random chunk downloading is extremely taxing on disks. As a result, usually the speeds are limited by I/O more than bandwidth. If the swarm pattern is usually "many seeder, single leecher", sequential downloading can help a lot.
    • Widely known "self" benefits: stream early, stream while downloading, organize episodes quick and unpack some files before finish, etc.
    Source code(tar.gz)
    Source code(zip)
    flood-linux-arm64(36.35 MB)
    flood-linux-x64(38.15 MB)
    flood-macos-x64(37.46 MB)
    flood-win-arm64.exe(33.73 MB)
    flood-win-x64.exe(36.13 MB)
  • v4.3.1(Dec 10, 2020)

    • Make theme button always at the bottom of sidebar
    • Remove legacy font formats from static assets
    • Slightly tweak styles of country flags in peer list
      • Better accommodate longer flags
      • Display country code on hover
    • qBittorrent fixes:
      • Attach cookies to URL downloads
      • Set trackers
    • Transmission fixes:
      • Percentage downloaded of contents of a torrent
    • Bug fixes:
      • API call to get peer list of a non-existent torrent no longer crash Flood server
      • Handle file not exist and access denied cases in content download
      • Properly handle API call to update password of a user
    • Security enhancements:
      • Rate limit resource-intensive mediainfo request
      • Ensure path is allowed for mediainfo request
      • API call to list users no longer receive hashed passwords and client connection settings
        • Note: only an authenticated admin user may list users
    • New translations
      • Czech, thanks to @brezinajn
      • Romanian, thanks to @T-z3P
    • Bump dependencies
    Source code(tar.gz)
    Source code(zip)
    flood-linux(82.08 MB)
    flood-macos(82.31 MB)
    flood-win.exe(83.62 MB)
  • v4.3.0(Dec 1, 2020)

    • Generate magnet link from torrent
    • Add a button to allow user to switch color scheme
    • Multi architecture Docker images
      • linux/amd64
      • linux/arm64 (new)
      • linux/arm/v7 (new)
    • Allow to display precise percentage
      • Expanded view: 1 decimal place
      • Details: 3 decimal places
    • Mountpoints with very long paths are ignored by disk usage
    • Tags can be attached while adding torrents to qBittorrent (needs qbittorrent/qBittorrent#13882)
    • Bug fixes:
      • Download destination fallback to rTorrent default destination (Mika-/torrent-control#105)
      • Properly catch errors of AddFiles and AddURLs when using qBittorrent
      • Display existing trackers in set trackers modal
    • New translations
      • Spanish, thanks to @vain4us
    • Bump dependencies

    Side note:

    I am starting to maintain a distribution of rTorrent, available at jesec/rtorrent. It is optimized and small. It uses modern CMake and Bazel build systems. Bazel can also be used for dependency management and to produce statically linked reproducible builds.

    Static binaries (amd64, arm64) can be downloaded via Github Actions. Docker images are also available at jesec/rtorrent.

    I made a simple Dockerfile to demonstrate how to integrate rTorrent with Flood.

    Source code(tar.gz)
    Source code(zip)
    flood-linux(82.61 MB)
    flood-macos(82.84 MB)
    flood-win.exe(84.15 MB)
  • v4.2.0(Nov 25, 2020)

  • v4.1.2(Nov 20, 2020)

  • v4.1.1(Nov 18, 2020)

  • v4.1.0(Nov 17, 2020)

    flood.js.org/Changelog-4.1

    ⚠️ Changes that may require manual attention: ⚠️

    • Configuration is now schema validated before the start of Flood server
      • No action required if you use (preferred and default) CLI configuration interface
      • This ensures that when the config.js needs to be updated, the failure happens loud and early
      • Check shared/schema/Config.ts for more details
    • Enforces that the length of secret must be larger than 30
      • Secret can be brute forced locally without interaction with the server
        • However, an attacker must get a valid token (generated by proper authentication) first
          • If all users are trusted, attackers have no way to get a valid token
      • Secret is used to sign authentication tokens but it is NOT linked to the password
        • Attacker may log into Flood as any user if they have the secret
          • However, they are still constrained by capabilities and settings (such as --allowedpath) of Flood

    Other changes:

    • Tag selector preference:
      • Single selection
      • Multi selection
    • UX enhancements to tag selector
    • Suggest destination based on selected tag
    • add-urls and add-files API endpoints no longer fail if destination property is not provided
      • Download destination fallback has been implemented:
        • Tag-specific preferred download destination
        • Last used download destination
        • Default download destination of connected torrent client
      • This makes things easier for API users
      • No direct impact on Flood itself
    • Remember last used "Add Torrents" tab
    • Remove center alignment of certain modals to align with global styles
    • Disallow browser's input suggestion when tag selector or folder browser is open
    • Don't pop up the browser menu on right click while context menu is open
    • Experimental standalone (single-executable) builds
    • New translations
      • German, thanks to @chint95
      • Romanian, thanks to @T-z3P
    • Bump dependencies
    • Bug fixes:
      • Properly handle "error" alerts (display "❗" icon instead of "✅" icon)
    Source code(tar.gz)
    Source code(zip)
    flood-linux(82.50 MB)
    flood-macos(82.73 MB)
    flood-win.exe(84.04 MB)
  • v4.0.2(Nov 11, 2020)

  • v4.0.0(Nov 9, 2020)

    • Experimental multi-client support
      • qBittorrent
      • Transmission
    • Stabilized and documented public API endpoints
    • Defined and documented internal interfaces, data structures and APIs
    • Better documentation for users and developers
    • Full migration to TypeScript
    • Reasonable test coverages for API endpoints
    • Torrent creation support
    • Add torrents as completed
    • Dropdown selector for existing tags
    • Seeding status in status filter
    • Set tracker URLs of torrents
    • Improved handling of rendering, updating and scrolling of torrent list
      • Preliminary tests show that Flood can now handle 500,000 torrents at least in the frontend.
      • Note: real-world performance depends on other factors such as method call and deserialization operations in the backend and data transfer between backend and frontend.
    • Better performance, less memory and CPU consumption in both frontend and backend
    • New translations
      • Chinese (Traditional), thanks to @vongola12324
      • Czech, thanks to Jan Březina
      • French, thanks to @Zopieux and @Mystere98
      • German, thanks to @chint95
    • Bug fixes
    • Security enhancements
    • Dockerfile revamp
    • Native build tools no longer needed as native dependency is replaced with WebAssembly variant
    • Server is packed before distribution, reduced number of dependencies in production, faster installation

    -----BEGIN PGP SIGNATURE-----

    iQFBBAABCgArFiEElsZPMCZQTUzZLTai0uSYfcYwogQFAl+pCwYNHGpjQGxpbnV4 LmNvbQAKCRDS5Jh9xjCiBOEXB/4rJpAlosbFPg6cZEzn94CQk17qSJKKh8lHfWrv CwS2hN2rZ/2/eazQNc9VzbvKfN9tlNXbPEx2RtRheqPVDbchh0Kd9cR/F91AzUvk 8X656iSLt6PwmjWfrES9MbwHcH4uOImjLt1tWKvTNFCtjj0Rff6YytQEBG2dATwu NhtS7f/T31vXNkvmTAmK/mjeMU5v8uJhXuRRTQgLL7Mh3CXcINNNJZ3XPMOpmt1Y UQ57tSSdPQlnj/ZFyHH+VjLFuofV6k5gsj0Ymu+NSH7cC0hGNme6hAt8yEdwkeCS 419UUOYNZqZ2xV8i1ph/S6Wn+l1OCfAF3753oAxmZF4pdqaT =ugQL -----END PGP SIGNATURE-----

    Source code(tar.gz)
    Source code(zip)
Owner
Jesse Chan
0xA102C2F15053B4F7; comments are my own; projects are not official Meta products, unless otherwise noted.
Jesse Chan
Use patches to keep the UI in sync between client and server, multiple clients, or multiple windows

The core idea is to use patches to keep the UI in sync between client and server, multiple clients, or multiple windows. It uses Immer as an interface

Webstudio 27 Sep 15, 2022
Small demo standalone app letting users vote for a movie while results are synced over different clients with Microsoft's fluid Framework.

Small demo standalone app letting users vote for a movie while results are synced over different clients with Microsoft's fluid Framework.

Markus Möller 1 Jun 1, 2022
Framework frontend Javascript yg dibuat untuk belajar lebih memahami tentang sistem reactivity pada framework2 frontend modern.

Fremwok-Fremwokan Framework frontend Javascript yg dibuat untuk belajar lebih memahami tentang sistem reactivity pada framework2 frontend modern. jika

Faizal Amiruddin 12 Sep 2, 2022
FROG-Backend - Backend para FROG-React

1. Index app.use(routes/auth) 2. Routes/Auth const { callbacks importados } = require(controllers/auth) 3. Controllers/Auth const funcionCrearUsuario

Leandro Arbelo 0 Nov 29, 2022
A robust, speedy and simple Pokédex, made with ❤️ using Rust (backend) and ReactJS (frontend)

Pokee A robust, speedy and simple Pokédex, made with ❤️ using Rust (backend) and ReactJS (frontend) ??️ Overview: ○ Which parts are you most proud of?

Bruno Silva 2 Aug 1, 2022
Mini ecommerce website using react for frontend and django for backend

Mini ecommerce website using react for frontend and django for backend

Ben Boby 2 Nov 10, 2021
Cryptocurrency exchange website written in Django (Backend) and React (frontend)

crypto-exchange Cryptocurrency exchange website written in Django (Backend) and React (frontend) Quick Start You need to run backend and frontend sepa

Nima 3 Jun 29, 2022
X-Netflix is a streaming platform based on Netflix UI: built with ReactJS in frontend and nodeJS in backend.

X-Netflix X-Netflix is a streaming platform based on Netflix UI: built with ReactJS in frontend and nodeJS in backend. Built with FrontEnd: React.JS,

Mehdi BHA 52 Aug 19, 2022
FullestStack - an open source dashboard powered by NextJs for both the frontend and the backend

Fullest-Stack MonoRepo: TechStack: React/Native, NextJs, GraphQL, REST, SCSS, Tailwind, Prisma, Jest, GitHub Workflows & NX

Neekware Inc. 11 Nov 22, 2022
Backend for probook social media app using Nodejs, mongodb, express, jwt etc. Frontend is React, redux, material ui.

Probook - A social media app Probook App | A Social Media App An social media platform built using ReactJS, Redux Toolkit,Material UI, Node, Express,

Wasif Baliyan 22 Sep 30, 2022
JobBoard App Backend with Node.js GraphQL MongoDB

JobBoard App Backend with Node.js GraphQL MongoDB jobboard-backend-graph-ql-react-node-mongodb About This is the backend side of a JobBoard App that I

Riko Trihendrawan 2 Apr 27, 2022
Web application that allows users to buy and sell various things of different categories

This simple and functional application allows users to sell and buy their products. It's open for anybody around the world, in this way the users can deal with all currencies as well as crypto currencies to close their business.

Edilson Pateguana 3 Jul 26, 2022
A full-stack web app that tracks a users cover letters they have submitted to various companies to aid their job hunt.

A full-stack web app that tracks a users cover letters they have submitted to various companies to aid their job hunt.

Travis Anderson 2 Apr 12, 2022
React-ecommerce-frontend - A E-ccomerce website frontend built in React.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: ya

Sammwy 1 Feb 5, 2022
frontend. this contains the node.js and react

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Thom 2 Jan 10, 2022
E-commerce Web App for audio products. A full-stack project, using Nodejs and Express in the backend, MongoDB as database, React, and Redux on the front-end.

E-commerce Web App for audio products. A full-stack project, using Nodejs and Express in the backend, MongoDB as database, React, and Redux on the front-end.

Jose Furtado 10 Nov 25, 2022
Example of various data storage options in a React client and express.js server.

Data Storage Example App This repository contains a client app built with React and a server app built with Express.js.

null 2 Dec 9, 2021
Snippet Box is a simple self-hosted app for organizing your code snippets. It allows you to easily create, edit, browse and manage your snippets in various languages.

Snippet Box is a simple self-hosted app for organizing your code snippets. It allows you to easily create, edit, browse and manage your snippets in various languages.

null 657 Dec 1, 2022
A TODO-List app allows user to perform various actions like creating a task, updating a task, and removing a task.

A TODO-List app allows user to perform various actions like creating a task, updating a task, and removing a task. User generated data get stored in a browser storage using localstorage API for later use.

Steven Ntakirutimana 5 Jul 16, 2022