{"id":22489719,"url":"https://github.com/relvacode/storm","last_synced_at":"2026-01-16T20:34:07.690Z","repository":{"id":39675751,"uuid":"310854831","full_name":"relvacode/storm","owner":"relvacode","description":"A Modern Deluge Interface","archived":false,"fork":false,"pushed_at":"2023-11-12T14:31:55.000Z","size":845,"stargazers_count":161,"open_issues_count":18,"forks_count":12,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-22T20:25:10.899Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/relvacode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-11-07T13:49:17.000Z","updated_at":"2025-07-28T09:14:20.000Z","dependencies_parsed_at":"2024-12-06T17:23:36.187Z","dependency_job_id":"ea194320-3f38-44aa-88ca-8f1c0e980ceb","html_url":"https://github.com/relvacode/storm","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/relvacode/storm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relvacode%2Fstorm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relvacode%2Fstorm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relvacode%2Fstorm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relvacode%2Fstorm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/relvacode","download_url":"https://codeload.github.com/relvacode/storm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/relvacode%2Fstorm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28482267,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-06T17:20:30.730Z","updated_at":"2026-01-16T20:34:07.666Z","avatar_url":"https://github.com/relvacode.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\n\u003cp align=\"middle\"\u003e\u003cimg src=\"frontend/src/assets/logo.svg\" height=\"200\"/\u003e\u003c/p\u003e\n\n\n\u003e You probably have a whole [media stack](https://github.com/relvacode/mediastack) for managing your _legitimate_ media files remotely.\n\u003e\n\u003e Sometimes though, downloads can get stuck or you want to add something manually to your Torrent client. Deluge's WebUI whilst powerful is pretty much useless on mobile devices.\n\u003e\n\u003e Introducing __Storm__\n\u003e\n\u003e A slick remote interface for Deluge that fully supports mobile devices (including as a home-screen app)\n\n\u0026nbsp;\n\n\u003cp float=\"left\" align=\"middle\"\u003e\n\u003cimg src=\"_docs/example-torrent-view.jpg\" height=\"450\"/\u003e\n\u003cimg src=\"_docs/example-add-torrent-menu.jpg\" height=\"450\"/\u003e\n\u003cimg src=\"_docs/example-filter-state.jpg\" height=\"450\"/\u003e\n\u003c/p\u003e\n\n#### Usage\n\n```\ndocker run --name storm \\\n  --network deluge \\\n  -p 8221:8221 \\\n  -e DELUGE_RPC_HOSTNAME=deluge \\\n  -e DELUGE_RPC_USERNAME=username \\\n  -e DELUGE_RPC_PASSWORD=password \\\n  ghcr.io/relvacode/storm\n```\n\n\nThe recommended way to run Storm is with a Docker image. \n\nYou'll need a Deluge container running with a valid [auth configuration](https://dev.deluge-torrent.org/wiki/UserGuide/Authentication). \nStorm needs a way to contact the Deluge RPC daemon so it's best that you create a [Docker network](https://docs.docker.com/engine/tutorials/networkingcontainers/) and attach the Storm container to that network.\n\nOnce that's setup you'll need to configure Deluge to allow remote RPC connections:\n\nOpen up `core.conf` in your Deluge configuration folder and set\n\n```\n\"allow_remote\": true\n```\n\nThen you can use the following environment variables to configure Storm\n\n| Environment | Description |\n| ----------- | ----------- |\n| `DELUGE_RPC_HOSTNAME` | The Deluge RPC hostname |\n| `DELUGE_RPC_PORT` | The Deluge RPC port |\n| `DELUGE_RPC_USERNAME` | The username from Deluge auth |\n| `DELUGE_RPC_PASSWORD` | The password from Deluge auth |\n| `DELUGE_RPC_VERSION` | `v1` or `v2` depending on your Deluge version |\n| `STORM_API_KEY` | Enable authentication for the Storm API |\n| `STORM_BASE_PATH` | Set the base URL path. Defaults to `/` |\n\n##### Security\n\nBy default, Storm does not authenticate requests made to the API. When serving Storm over the public internet you should ensure access to your Deluge daemon is properly secured.\n\nStorm comes with a simple built-in authentication mechanism which can be enabled with the environment variable `STORM_API_KEY` or the command-line option `--api-key`.\n\nSet this to a reasonably secure password. Any requests made to Storm must now provide the API key in the request.\n\nYou should also seriously consider the use of HTTPS over the internet, with services like LetsEncrypt it's relatively easy to get a valid SSL certificate for free.\n\n##### Deluge Version\n\nDeluge has a different interface between versions 1 and 2. You must set `DELUGE_RPC_VERSION` to either `v1` or `v2` based on the version you have installed. Storm defaults to `v1`.\n\nNote that in version 2, different RPC users are not able to see torrents created by another user [(#38)](https://github.com/relvacode/storm/issues/38). If you're using multiple Deluge clients (such as the vanilla Web UI, or Sonarr, etc) you should make sure they're all using the same Deluge RPC account to connect to Deluge.\n\n#### Development\n\nThe application is split into two parts, the frontend Angular code and the backend Go API adapter.\n\nThe backend API is presented as an HTTP REST api which talks directly to the Deluge RPC daemon.\nIt also has the frontend code embedded directly into the binary so the application can be distributed as a single binary.\n\nTo start a development environment you must first install the node modules\n\n```\ncd frontend\nnpm install\n```\n\nThen start the Angular build server in watch mode. This will output the frontend distributable into `frontend/dist` and watch for changes.\n\n```\ncd frontend\nnpm run build -- --watch --configuration=development\n```\n\nIn a separate terminal you can now start the main Storm binary in development mode.\nIn development mode, instead of serving the frontend from the binary embedded source it will instead serve directly from the filesystem.\n\n```\ngo run github.com/relvacode/storm/cmd/storm --listen=127.0.0.1:8221 --dev-mode [OPTIONS...]\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frelvacode%2Fstorm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frelvacode%2Fstorm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frelvacode%2Fstorm/lists"}