4.20.0 (2026-07-09)
4.19.0 (2026-07-08)
- deps: update dependency fastify to v5.10.0 (1bb41fb)
- add ultiduo queue config (#731) (856ee85), closes #728
- all-time game activity heatmap on the statistics page (#730) (1f35cad)
4.18.3 (2026-07-08)
- deps: update dependency type-fest to v5.8.0 (2ae6efa)
- deps: update opentelemetry-js-contrib monorepo (ccd9a51)
- harden against recon/injection activity from security review (#728) (de59644)
4.18.2 (2026-07-06)
- deps: update dependency @napi-rs/canvas to v1.0.2 (28f7af1)
- deps: update dependency country-flag-icons to v1.6.20 (773af2d)
- deps: update dependency csv-parse to v7.0.1 (0173b2b)
- deps: update dependency csv-stringify to v6.8.1 (68d021e)
- deps: update dependency fastify to v5.9.0 (#723) (9d93d1d)
- deps: update dependency motion to v12.42.2 (209d6ec)
- deps: update dependency openid to v2.0.17 (#724) (6d9ad00)
- deps: update tailwindcss monorepo to v4.3.2 (c109fa2)
- html: revamp mobile UI (#725) (448e9ad)
4.18.1 (2026-07-02)
- deps: pin dependency @napi-rs/canvas to v1.0.1 (#721) (ff1814c)
- queue: warn Chrome users when the browser blocks the ready-up sound (#722) (d6cdc86)
4.18.0 (2026-07-02)
- deps: update dependency @fastify/rate-limit to v11.1.0 (110f8e5)
- deps: update dependency postcss to v8.5.16 (0ed0090)
- atlas: report 30-day active players (#720) (2879cc7), closes tf2pickup-org/atlas#3
4.17.2 (2026-06-30)
4.17.1 (2026-06-30)
- deps: update dependency mongodb to v7.4.0 (fc0e408)
4.17.0 (2026-06-29)
- logging: record real client IP and User-Agent on request logs (#713) (03a8369)
- queue: mark admins in the online player list (#714) (9c154ac)
- report anonymous instance telemetry (#702) (0e79485)
4.16.1 (2026-06-29)
- branding: standardize favicon resolutions across instances (#710) (a22eeef)
- deps: update dependency country-flag-icons to v1.6.19 (11ea678)
- deps: update dependency es-toolkit to v1.49.0 (708f096)
- deps: update dependency fastify-type-provider-zod to v7 (#709) (c82ddcd)
- deps: update dependency motion to v12.41.0 (fe46943)
- deps: update dependency motion to v12.42.0 (3e2754c)
- deps: update dependency nanoid to v5.1.16 (00905f6)
- logging: right-size noisy warn/error logs and guard match end/restart (#712) (fe7676a)
4.16.0 (2026-06-26)
4.15.0 (2026-06-26)
- analytics: expand umami tracking coverage (#706) (8ecb710)
- deps: update dependency country-flag-icons to v1.6.18 (4902750)
- deps: update dependency es-toolkit to v1.48.1 (96cc070)
- deps: update dependency nanoid to v5.1.15 (ed45ac4)
- keep game connect info visible to admins when hidden from spectators (#699) (957b08b), closes #697 #698
- players: make steam id confirmation input visible (#701) (aea3483)
- queue: match stream list to Figma design (#705) (bc1e822)
- tolerate null tags in Twitch streams response (#700) (d7f240c)
- players: allow super-users to delete player profiles (#684) (4764c32)
- players: periodically re-sync player avatars from Steam (#680) (07481c8), closes #679 #679 #679
4.14.1 (2026-06-23)
- hide game server info from spectators to mitigate DDoS (#697) (c9688ff)
- key rate limiter on real client IP (#696) (b929f97)
4.14.0 (2026-06-23)
- group Cyrillic player names under their own alphabet (#692) (39403da)
- stop logging routine queue and match events as errors (#694) (9e26269), closes hi#volume
- report daily game launch counts to atlas (#695) (d1a3228), closes atlas#1 tf2pickup-org/atlas#1
4.13.0 (2026-06-22)
4.12.3 (2026-06-22)
- deps: update dependency nanoid to v5.1.14 (0c408ba)
- etf2l: surface the real cause in scheduled task error logs (#685) (41ca07c), closes #671
4.12.2 (2026-06-18)
- await reply.html/send/redirect to prevent double-send errors (#677) (74ca722)
- compute correct final score on attack/defend payload maps (#672) (76bc4c1)
- deps: update dependency @fastify/otel to v0.19.0 (3efa2bf)
- deps: update dependency csv-parse to v7 (#682) (a74bc69)
- deps: update dependency csv-stringify to v6.8.0 (4a14679)
- logger: use pino-princess as inline stream in dev (#683) (04f4d92)
- players: fall back to default Steam avatar when avatar is missing (#679) (f51fac8)
4.12.1 (2026-06-16)
- deps: update dependency es-toolkit to v1.47.1 (788286e)
- deps: update dependency form-data to v4.0.6 [security] (506d76f)
- deps: update tailwindcss monorepo to v4.3.1 (20d7bb6)
4.12.0 (2026-06-15)
- deps: update dependency @fastify/rate-limit to v11 (#662) (83ddc6e)
- deps: update dependency @fastify/request-context to v7 (#663) (a639568)
- deps: update dependency cssnano to v8.0.2 (5c2c3cc)
- deps: update dependency esbuild to v0.28.1 [security] (#667) (66ad51f)
- deps: update dependency fastify-plugin to v6 (#664) (d8d4680)
- deps: update dependency mongodb to v7.3.0 (f5f3f73)
- deps: update dependency sanitize-html to v2.17.5 (5ddc35c)
- deps: update opentelemetry-js monorepo (a7aa835)
- deps: update opentelemetry-js-contrib monorepo (#670) (c7f045b)
- notify on chat mutes and chat mute revokes (#668) (d33ef35)
- prevent banned players from taking substitute spots (#669) (0cefef9)
4.11.1 (2026-06-12)
- atlas: report live games count in the heartbeat (#660) (a822101)
- deps: update dependency @tailwindcss/typography to v0.5.20 (1667e39)
4.11.0 (2026-06-10)
- register instance on the atlas dashboard (#658) (6a338a4)
- serveme-tf: add preferred gameserver configuration (#659) (5785fe0)
4.10.2 (2026-06-09)
4.10.1 (2026-06-08)
4.10.0 (2026-06-08)
4.9.2 (2026-06-08)
- deps: update dependency marked to v18.0.5 (a24a263)
4.9.1 (2026-06-06)
- add registration issue log context (#652) (a6b5064)
- deps: update dependency type-fest to v5.7.0 (d69669b)
4.9.0 (2026-06-03)
4.8.2 (2026-06-02)
- address dependabot alerts (#644) (4cb2d28)
- deps: update dependency date-fns to v4.4.0 (fba1b4e)
- players: move player verified checkbox into admin toolbox header (#641) (92a4f46)
4.8.1 (2026-06-01)
- deps: update dependency es-toolkit to v1.47.0 (8fd8393)
- fix headers sent after reply warning (#635) (e55f9f2)
4.8.0 (2026-05-28)
- deps: update dependency openid to v2.0.16 (6e8ae83)
- admin: add experimental skill suggestions to admin toolbox (#589) (922805e)
- players: overlay skill history on ELO chart (#592) (de3d44b)
4.7.15 (2026-05-27)
- deps: update dependency date-fns to v4.3.0 (5186f2c)
- deps: update dependency ws to v8.21.0 (42fbf69)
- pre-load sounds via data-sound-src, play via data-sound-play (#634) (59fb72f)
4.7.14 (2026-05-25)
- deps: update dependency marked to v18.0.4 (#622) (0126db6)
- deps: update dependency motion to v12.40.0 (08a5aaf)
- deps: update dependency postcss to v8.5.15 (5772529)
- retry mumble client on socket errors (#600) (effd4f0)
4.7.13 (2026-05-22)
- add migration to fix players with missing avatar fields (#630) (cae01ab)
- batch actor lookup in sync-clients (#606) (3e713b2)
- deps: update dependency date-fns to v4.2.1 (#615) (64c9e66)
- deps: update dependency motion to v12.39.0 (#616) (1e1012f)
- retry server configuration up to 3 times on error (#628) (053afed)
4.7.12 (2026-05-20)
- get rid of reply was already sent error (#625) (6a32284)
- play ready-up sound in background tabs (#627) (c0d3332), closes #623
4.7.11 (2026-05-19)
- cleanupFriendships() performance improvements (#620) (f315175)
- exclude tsx@4.22.2 from minimumReleaseAge policy (#624) (7d822f0)
- play mention notification sound in background tabs (#623) (14537d1)
- speed up player action logs with fast counts and indexes (#601) (7e83943)
4.7.10 (2026-05-19)
4.7.9 (2026-05-18)
4.7.8 (2026-05-18)
4.7.7 (2026-05-16)
- add OTEL metrics for queue hot path latency (#609) (92c6fe3)
- deps: update dependency sanitize-html to v2.17.4 (#603) (9294ffd)
- deps: update opentelemetry-js monorepo to v0.218.0 (a27e8e7)
- deps: update opentelemetry-js-contrib monorepo (4c01eb2)
4.7.6 (2026-05-13)
- deps: update dependency @opentelemetry/semantic-conventions to v1.41.1 (fd8b9b7)
- deps: update dependency ws to v8.20.1 (ca63299)
- deps: update linkifyjs monorepo to v4.3.3 (a17363e)
- remove hyperscript dependency and replace usages (#596) (dd4fb3c)
4.7.5 (2026-05-11)
- deps: update dependency cssnano to v8 (#593) (a2f77f3)
- deps: update dependency cssnano to v8.0.1 (9fd0dbf)
- deps: update opentelemetry-js monorepo to v0.217.0 (8cfdcc1)
- deps: update opentelemetry-js-contrib monorepo (c50f7d4)
- deps: update tailwindcss monorepo to v4.3.0 (133cb9f)
4.7.4 (2026-05-06)
- deps: update dependency cssnano to v7.1.9 (92d855f)
- deps: update dependency postcss to v8.5.14 (ee4549a)
- deps: update dependency zod to v4.4.3 (1e20d0f)
- players: show skill history per class, not per latest entry (#590) (4f46d54)
- replace BEM-style CSS notation with attribute-driven variants (#591) (f685f93)
4.7.3 (2026-05-04)
- countdown: use server-rendered relative duration to avoid client clock skew (#588) (96b26bc), closes #577
4.7.2 (2026-05-04)
- deps: update dependency country-flag-icons to v1.6.17 (0c3a0a3)
- deps: update dependency cssnano to v7.1.8 (95d5c53)
- deps: update dependency discord.js to v14.26.4 (d1d00df)
- deps: update dependency marked to v18.0.3 (6c66533)
- deps: update dependency nanoid to v5.1.11 (8270431)
- deps: update dependency postcss to v8.5.13 (9882402)
- deps: update dependency umzug to v3.8.3 (3c677d4)
- deps: update dependency zod to v4.4.2 (b554e59)
- lint: remove unnecessary type assertions flagged by typescript-eslint v8.59 (#587) (9ea3f40)
4.7.1 (2026-04-30)
- deps: update dependency es-toolkit to v1.46.1 (d20b9df)
- deps: update dependency zod to v4.4.1 (056d8f1)
- deps: update opentelemetry-js monorepo (f05cc63)
- deps: update opentelemetry-js-contrib monorepo (f3090d3)
- redesign admin toolbox on player profile page (#582) (bd3d1fd)
4.7.0 (2026-04-29)
4.6.1 (2026-04-27)
- deps: update dependency @fastify/static to v9.1.2 (a336f4c)
- deps: update dependency @fastify/static to v9.1.3 (#585) (7b66e90)
- deps: update dependency cssnano to v7.1.7 (d41ff49)
- deps: update dependency es-toolkit to v1.46.0 (1aa7c1c)
- deps: update dependency htmx.org to v2.0.10 (#583) (5f5a3e2)
- deps: update dependency mongodb to v7.2.0 (ed54a86)
- deps: update dependency postcss to v8.5.12 (69db732)
- deps: update tailwindcss monorepo to v4.2.3 (202cc1e)
- deps: update tailwindcss monorepo to v4.2.4 (af04d0a)
4.6.0 (2026-04-19)
- deps: update dependency marked to v18.0.2 (da41ae8)
- remove avatar view-transition animation (#581) (44bc83e)
4.5.5 (2026-04-18)
- deps: update dependency @fastify/multipart to v10 (#572) (ba58c84)
- deps: update dependency @fastify/static to v9.1.1 (5a95bab)
- deps: update dependency cssnano to v7.1.5 (c5d5c14)
- deps: update dependency discord.js to v14.26.3 (ce73624)
- deps: update dependency fastify to v5.8.5 (#575) (eac8f92)
- deps: update dependency hyperscript.org to v0.9.91 (#574) (6ddc8d7)
- deps: update dependency marked to v18 (#571) (362925a)
- deps: update dependency marked to v18.0.1 (060b6e6)
- deps: update dependency nanoid to v5.1.9 (5a891ff)
- deps: update dependency postcss to v8.5.10 (d3d3a9e)
- deps: update dependency sanitize-html to v2.17.3 [security] (185948e)
- deps: update dependency type-fest to v5.6.0 (16dea7d)
- deps: update opentelemetry-js monorepo (d26c948)
- deps: update opentelemetry-js-contrib monorepo (535d89f)
- use absolute deadline timestamp to prevent flicker on htmx swap (#577) (d810c63)
4.5.4 (2026-04-13)
- deps: update dependency @fastify/otel to v0.18.1 (a8491ce)
- deps: update dependency @fastify/static to v9.1.0 (3bcbfaf)
- deps: update dependency country-flag-icons to v1.6.16 (a5981ed)
- deps: update dependency dotenv to v17.4.2 (45acefd)
- deps: update dependency postcss to v8.5.9 (#573) (3e2d98a)
4.5.3 (2026-04-06)
- deps: update dependency cssnano to v7.1.4 (1d1de5f)
- deps: update dependency discord.js to v14.26.0 (80ba96f)
- deps: update dependency discord.js to v14.26.2 (12770da)
- deps: update dependency dotenv to v17.4.0 (2b60d84)
- deps: update dependency dotenv to v17.4.1 (9e98d1b)
- deps: update dependency esbuild to v0.27.5 (ab80967)
- deps: update dependency esbuild to v0.28.0 (fa6c586)
- deps: update dependency marked to v17.0.6 (41c8701)
4.5.2 (2026-03-29)
- apply queue join cooldown to self-substituting players (#567) (1d302bb)
- queue: prevent FUOC in sidebar tabs (#568) (4e0759b)
4.5.1 (2026-03-27)
- ci: skip deploy for pull request builds (ec07b16)
- extend configure timeout for quickserver servers (#566) (ae9109a)
4.5.0 (2026-03-27)
- deps: update dependency @fastify/otel to v0.18.0 (086bfbf)
- deps: update dependency fastify to v5.8.4 (d7e661e)
- deps: update dependency mongodb to v7.1.1 (6391130)
- deps: update dependency type-fest to v5.5.0 (#558) (7c784d7)
- deps: update opentelemetry-js monorepo (ec2d5ad)
- deps: update opentelemetry-js-contrib monorepo (8d5085e)
4.4.3 (2026-03-23)
- deps: update dependency csv-parse to v6.2.1 (3e9d17f)
- deps: update dependency marked to v17.0.5 (204f62d)
- deps: update dependency ws to v8.20.0 (75410dd)
4.4.2 (2026-03-20)
- add missing return before reply in route handlers (#559) (a7684e8)
- ci: use github.token instead of RELEASE_TOKEN for workflow dispatch (1274d06)
- quickserver: wait for STV to end before reusing server (#561) (5ed86d3)
- styles: fix range input slider rendering across browsers (#563) (4eafd80)
- twitch-tv: exclude banned players' streams from queue page (#562) (3a036c2)
4.4.1 (2026-03-20)
- deps: update dependency @fastify/otel to v0.17.1 (9b6eb1a)
- deps: update dependency @tf2pickup-org/mumble-client to v0.13.0 (950243f)
- deps: update dependency csv-parse to v6.2.0 (c969b49)
- deps: update dependency csv-stringify to v6.7.0 (de18252)
- deps: update dependency motion to v12.38.0 (8182b0c)
- deps: update dependency sanitize-html to v2.17.2 (3703a34)
- deps: update opentelemetry-js monorepo (e2733bc)
- deps: update opentelemetry-js-contrib monorepo (36c3863)
- deps: update tailwindcss monorepo to v4.2.2 (defce24)
- pick-teams: add missing team-swap permutations for 4-player classes (#560) (7dd76bc)
- quickserver: initializes quickserver server with the map of the first lobby (#556) (79312a1)
4.4.0 (2026-03-16)
- deps: update dependency cssnano to v7.1.3 (4f23a87)
- deps: update dependency es-toolkit to v1.45.1 (#547) (89c96e6)
- deps: update dependency esbuild to v0.27.4 (c362b47)
- deps: update dependency fastify to v5.8.2 (7bf7a34)
- deps: update dependency marked to v17.0.4 (ba7a4a7)
- deps: update dependency nanoid to v5.1.7 (a092465)
- record game server reassignment actor (#552) (241df43)
4.3.0 (2026-03-14)
4.2.0 (2026-03-13)
- add tf2-quick-server integration (#543) (c6a1b37)
- queue: add admin-only clear queue button (#542) (d3227c1)
4.1.2 (2026-03-11)
- static-game-servers: backfill missing ids (#539) (5378da8)
- static-game-servers: use real IP detection via proxy headers (#541) (4c6948c)
4.1.1 (2026-03-11)
4.1.0 (2026-03-11)
- announcements: sanitize HTML output to prevent XSS (#537) (62ede2c)
- ci: fetch full git history for release workflow (#533) (19f72e9)
- discord: prevent duplicate queue prompt messages via shared mutex (#536) (ad5f669)
- fix thumbnail url default value (#532) (6750876)
- games: prevent long game server names from breaking game page layout (#534) (d703e65)