{"id":21214462,"url":"https://github.com/slice/scoop","last_synced_at":"2026-07-01T03:32:00.962Z","repository":{"id":83250397,"uuid":"402693792","full_name":"slice/scoop","owner":"slice","description":"superfast discord client downloader","archived":false,"fork":false,"pushed_at":"2021-09-04T04:45:56.000Z","size":9,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-23T19:05:20.813Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Scala","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/slice.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2021-09-03T08:04:47.000Z","updated_at":"2022-01-10T09:42:11.000Z","dependencies_parsed_at":"2023-03-01T02:45:56.359Z","dependency_job_id":null,"html_url":"https://github.com/slice/scoop","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/slice/scoop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slice%2Fscoop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slice%2Fscoop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slice%2Fscoop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slice%2Fscoop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/slice","download_url":"https://codeload.github.com/slice/scoop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/slice%2Fscoop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34992071,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-11-20T21:28:01.646Z","updated_at":"2026-07-01T03:32:00.940Z","avatar_url":"https://github.com/slice.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# scoop\n\nscoop is a command line tool written in Scala that aims to quickly download a\nfull copy of the currently deployed [Discord] frontend client. On a decent\nconnection, scoop is able to download an entire client in about 20 seconds,\ntransferring about 70 MB in that period of time.\n\n```sh\n$ java -jar scoop.jar --branch canary\n[100.00%] 3908 fetched + 99 skipped = 4007/4007 (69.8972 MB dl'ed)\n```\n\nIt's worth clarifying that scoop downloads the frontend client, not the desktop\nclient. The latter is an Electron application that loads the former alongside\nseveral other native modules that enable features such as Krisp noise\ncancellation, accelerated audio encoding, and spellcheck.\n\n## Usage\n\nPrebuilt artifacts are currently unavailable. Make sure you have JDK 11\ninstalled. JDK 8 or newer versions will probably work, but are completely\nuntested. If you don't already [sbt] installed, you can easily get it with\n[Coursier]. Follow\n[these instructions](https://get-coursier.io/docs/cli-installation) to install\nthe Coursier CLI (make sure it's available in your `PATH` when doing so).\n\nThen, run these commands to install `scala`, `scalac`, `sbt`, and other tools:\n\n```\ncs setup\n```\n\nAlternatively, you can install sbt manually yourself.\n\nAfter sbt is ready to go, run `sbt assembly` in the repository directory and a\nJAR file will be present at `target/scala-2.13/scoop-assembly-0.0.0.jar` after\nsome time.\n\n## Operation\n\nscoop predominantly works by searching for asset hashes inside of the client\nHTML and JavaScript and downloading everything it can find. Assets are pushed\nonto a bounded queue, which are concurrently consumed by multiple downloader\ntasks that stream the asset content directly to disk. The queue size and number\nof concurrent downloaders can be tweaked through command line flags.\n\nAll output is stored in a folder created in the current working directory named\n`scoop-output/`. Files that have already been downloaded are skipped, so make\nsure to rename the folder to something more meaningful before running the\ndownloader again. In the future, scoop will give the output folder a more\ndescriptive name.\n\n### Points of discovery\n\nOperation begins by requesting the base page of the specified branch (by\ndefault, stable). That URL looks like this: https://discord.com/channels/@me.\nAll referenced assets (JS, CSS, images) are downloaded. Then, the first script\nis downloaded. At the time of writing, this first script is always the chunk\nloader, which is responsible for conditionally loading small JavaScript chunks\nat runtime depending on user preferences an actions. All chunks are\nunconditionally downloaded.\n\nAfterwards, the fourth script is downloaded, which is the entrypoint of the\nclient and is where the bulk of the JS rests. All referenced assets are then\ndownloaded.\n\n[coursier]: https://get-coursier.io\n[sbt]: https://www.scala-sbt.org\n[discord]: https://discord.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslice%2Fscoop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fslice%2Fscoop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fslice%2Fscoop/lists"}