You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is the landing page for anyone who wants to contribute. Everything open is listed below, ranked by size, with the two things that actually matter up front: how hard it is, and whether you need Windows.
MoonDownloader runs on Windows, but almost none of the open work requires it. Documentation, CI, tests and dependency work all run on Linux and macOS, and the test suite stubs Chrome and the network at the moon_extract boundary so it runs anywhere. Exactly one open issue needs a Windows machine, and it says so.
Most of the bugs below were found by using the program, not by reading it. Several come with measurements from real runs in the issue itself, so you can check the fix against a number instead of a feeling.
Last checked against the repository: 6 August 2026.
Never contributed to open source before?
Three issues are reserved for people who have never had a pull request merged anywhere. All three are done entirely in the browser — no install, no command line, nothing to run.
One line so a CI workflow watches its own file on pull requests, as it already does on push
The work is deliberately small. The point is to get you through fork → edit → pull request once, with every step written out. If you get stuck halfway, say so on the issue — that is what it is there for.
If you have contributed before, please leave these three and take something below.
Free right now
Nothing here is claimed. No Windows machine needed unless the row says so.
Extractors sits under "COMMON — BOTH METHODS" but datanodes is hard-capped at 8 lanes. Measured: fuckingfast keeps ~40 of 48 download slots busy, datanodes keeps ~4
moon_cli.py exits non-zero on a missing URL file and on a crash, but a run that completes always exits 0 — whether one file failed or all of them did. Ctrl-C also exits 0. A script cannot tell success from total failure
aiohttp.BasicAuth is deprecated and goes away in 4.0. One call site — but the fix the warning suggests is the wrong header for a proxy, and the replacement function does not exist at the declared version floor
moon_cli.py keeps its own progress accounting instead of using Engine.snapshot() — including a character-for-character copy of the speed expression from #84
A square backdrop appears behind the progress rings during a run
GUI/CSS
Yes
#85 is the most valuable one free. It is on screen for the whole run, and the fix is arithmetic plus a decision about what to show when the estimate is not yet meaningful — no engine internals required.
Claimed, in progress
Listed so nobody duplicates the work. If one has gone quiet for five days it goes back to the free table above, and returning is always welcome.
V4 repaired both providers after they changed how they hand out links.
How to claim one
Comment on the issue saying you are taking it. You will be assigned, usually within a few hours. You do not need to ask permission first, and you do not need to have a plan — saying "taking this, not sure yet how" is fine and gets you the same answer.
A claim holds for five days. After that the issue goes back to the free table so it is not parked indefinitely — no blame attached, and you are welcome to pick it up again.
Two things worth knowing before you start:
Read the function, not the description. Issue bodies here are written by the maintainer and have been wrong before — docs(cli): fix stale --proxies row and document the actual warning behavior #63 was merged partly because it corrected a mistake in the issue that opened it. If the code disagrees with the issue, the code wins and I would rather hear it.
Keep the diff to the issue. Reformatting, renaming and "while I was in there" edits are the most common reason a pull request needs a second round, even when each change is harmless on its own.
CONTRIBUTING.md has the verification commands. Everything else — architecture, style, the rules that are not preferences — is in there too, and nothing in this issue repeats it.
This is the landing page for anyone who wants to contribute. Everything open is listed below, ranked by size, with the two things that actually matter up front: how hard it is, and whether you need Windows.
MoonDownloader runs on Windows, but almost none of the open work requires it. Documentation, CI, tests and dependency work all run on Linux and macOS, and the test suite stubs Chrome and the network at the
moon_extractboundary so it runs anywhere. Exactly one open issue needs a Windows machine, and it says so.Most of the bugs below were found by using the program, not by reading it. Several come with measurements from real runs in the issue itself, so you can check the fix against a number instead of a feeling.
Last checked against the repository: 6 August 2026.
Never contributed to open source before?
Three issues are reserved for people who have never had a pull request merged anywhere. All three are done entirely in the browser — no install, no command line, nothing to run.
ruff.tomlthat describes its own effect incorrectlymoon_engine.pyThe work is deliberately small. The point is to get you through fork → edit → pull request once, with every step written out. If you get stuck halfway, say so on the issue — that is what it is there for.
If you have contributed before, please leave these three and take something below.
Free right now
Nothing here is claimed. No Windows machine needed unless the row says so.
Extractorssits under "COMMON — BOTH METHODS" but datanodes is hard-capped at 8 lanes. Measured: fuckingfast keeps ~40 of 48 download slots busy, datanodes keeps ~4moon_cli.pyexits non-zero on a missing URL file and on a crash, but a run that completes always exits 0 — whether one file failed or all of them did. Ctrl-C also exits 0. A script cannot tell success from total failureaiohttp.BasicAuthis deprecated and goes away in 4.0. One call site — but the fix the warning suggests is the wrong header for a proxy, and the replacement function does not exist at the declared version floormoon_cli.pykeeps its own progress accounting instead of usingEngine.snapshot()— including a character-for-character copy of the speed expression from #84#85 is the most valuable one free. It is on screen for the whole run, and the fix is arithmetic plus a decision about what to show when the estimate is not yet meaningful — no engine internals required.
Claimed, in progress
Listed so nobody duplicates the work. If one has gone quiet for five days it goes back to the free table above, and returning is always welcome.
ruffrunning three times per pull requestEngine.snapshot()Recently shipped
Some context on what the work here looks like when it lands:
loop.call_soon_threadsafe; a user stop is recorded asstoppedso the retry path cannot re-queue it and undo the stop.How to claim one
Comment on the issue saying you are taking it. You will be assigned, usually within a few hours. You do not need to ask permission first, and you do not need to have a plan — saying "taking this, not sure yet how" is fine and gets you the same answer.
A claim holds for five days. After that the issue goes back to the free table so it is not parked indefinitely — no blame attached, and you are welcome to pick it up again.
Two things worth knowing before you start:
CONTRIBUTING.mdhas the verification commands. Everything else — architecture, style, the rules that are not preferences — is in there too, and nothing in this issue repeats it.