Repository navigation
v0.2.0 — Pre-release hardening
Highlights
Pre-release hardening based on code review feedback (#11). 29 atomic commits across reproducibility, security, functional correctness, operability, and developer experience.
- Reproducibility: uv-generated lockfiles for the backend;
yt-dlppinned to2026.3.17; pinned base image patch versions. - Security: per-IP rate limiting (slowapi + nginx
limit_req), nginx security headers (CSP / X-Frame-Options / etc.), non-root container, mandatoryALLOWED_ORIGINSin production, masked yt-dlp errors whenDEBUG=false, frontendnpm auditclean. - Functional correctness: Deno bundled into the runtime image so yt-dlp can solve YouTube JS challenges (full format coverage); quality fallback now respects the requested height ceiling.
- Operability: Docker
HEALTHCHECK; entrypoint signal trap sodocker stopis graceful; subprocess stderr forwarded to logger and return-code monitored. - CVE patches:
starletteCVE-2025-62727 (viafastapi>=0.121,<0.124),pytestCVE-2025-71176,vite/postcssaudit fixes. - Dev experience: full README, MIT LICENSE, LEGAL.md, CI security audits (
npm audit+pip-audit), CI dependency caching, vitest with frontend tests.
Breaking changes
ALLOWED_ORIGINSmust be set whenDEBUG=false;compose.yamlno longer defaults to*.GET /api/formatsremoved; the same data is onGET /api/info(formatsfield).- Uvicorn now boots via
--factory app.main:create_appinstead ofapp.main:app.
Pull the image
docker pull ghcr.io/fdff87554/youtube-downloader:0.2.0
# or, for the floating minor tag:
docker pull ghcr.io/fdff87554/youtube-downloader:0.2Run with the new mandatory configuration:
docker run -d \
-p 8080:8080 \
-e ALLOWED_ORIGINS="https://your-frontend.example.com" \
--name youtube-downloader \
ghcr.io/fdff87554/youtube-downloader:0.2.0For local exploration, use DEBUG=true instead of ALLOWED_ORIGINS. See the README for the full configuration reference and LEGAL.md for the usage notice.
Verify
curl http://localhost:8080/api/health
# -> {"status":"ok"}