Repository navigation
Release 0.38.0 - #41
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A minor release: security fixes from a review of the upstream project, a fairer sign-in lockout, seed time credited at its real rate, and the October 2026 major dependency updates (Node 26, Go 1.27, Tailwind CSS 4). No migrations. Several settings and one behaviour deserve a look before upgrading: see Upgrading at the end.
Security
.torrentfiles were readable by any signed-in member through another member's upload list. Files uploaded before 0.35.0 still carried their uploader's announce URL, passkey included. The list no longer serves them, and a background sweep cleans every stored file.access.logand drops them, and the identifiers that link announces, fromtracker.log.rediss://password; a"in a Telegram notification link broke its markup; the tracker and the relay setX-Content-Type-Options: nosniffthemselves; the api and web images give their user as65532:65532, whichrunAsNonRootcan check.Sign-in: a lockout per account that spares members' own browsers
Ten failed sign-ins in fifteen minutes hold a username out of password sign-in, from every address. That stops guessing spread across addresses. On its own, it would also let anyone who knows a username keep its owner out. So a browser that completes a sign-in now receives a known-device cookie (
trackarr_kd, six months), and the account's count does not apply to it: a member's own browsers keep signing in. The cookie skips nothing — not the password, not the second factor — and "sign out everywhere", a ban or a password change voids every one at once. The sign-in page says which limit was hit.Seeding and the tracker
left=0got around the minimum ratio and earned seed bonus. A seeder is now told about leechers only, and the bonus pays peers seen within the hour..torrentcarried a UDP tier no listener answered. UDP is now off unless enabled, in the tracker and the API alike.Also fixed
NUXT_SESSION_SECRET_FILEand the other*_FILEsecrets passed the boot check and were then ignored.Platform
Node 26 and pnpm 12, Go 1.27, TypeScript 6 and Tailwind CSS 4 (the interface is unchanged, except date inputs that are now as tall as the text inputs beside them). In the compose file, PgBouncer 1.26.1, whose security fixes reach this stack, Redis 8.10.2 and Caddy 2.11.7. In the Helm chart, the CloudNativePG, Valkey and RustFS subcharts (RustFS moves from a beta to 1.0.3),
externalRedis.tlsfor a Redis reached over TLS, and resources for Valkey's init container.Verified
Typecheck, the API's 630 unit and 486 integration tests, the web's 1,245 unit tests, the tracker and the relay under the race detector,
helm lintand the chart's render checks, the six images, and the end-to-end suite (558 checks over 14 scenarios). A container scan of the tree (semgrep, trivy, gitleaks, gosec, hadolint, actionlint, zizmor, govulncheck, osv-scanner) reports nothing left untriaged.Upgrading
Swap the six images and, with Docker Compose, take the new
docker-compose.prod.ymlanddocker/caddy/Caddyfile(new PgBouncer, Redis and Caddy tags, and the log changes above). With Helm, runhelm dependency updatefor the new subcharts. No migrations.TRACKER_UDP_ENABLED=true(Compose hands it to both the tracker and the API) andNUXT_PUBLIC_TRACKER_UDP_URL; with Helm,tracker.udp.enabled: trueandsite.trackerUdpUrl. Otherwise.torrentfiles no longer carry a UDP tier.NUXT_SESSION_SECRETmust be at least 32 characters: a shorter one now stops the API at boot, where it used to fail every sign-in.ADMIN_API_KEYwas documented as required; no route uses it, and the reference now says so.access.logandtracker.logkeep what they recorded; rotate or delete them if that matters to you..torrentfiles (200 a minute) and credentials still encrypted under an old key or not at all (500 a minute).ANTICHEAT_MAX_BYTES_PER_SECOND(80 MiB/s by default) is now read: uploads faster than that are flagged for review, never refused.🤖 Generated with Claude Code