Skip to content

Releases: GZTimeWalker/GZCTF

Version: 1.8.2

26 Feb 16:34
9d92b8e

Choose a tag to compare

1.8.2 - 2026-02-26

Feel free to ♥️ sponsor GZCTF ♥️!

This is a maintenance release that updates dependencies and fix a bug about team ranking.

🐛 Bug Fixes

  • (game) flush cache after transaction committed - (9d92b8) by GZTime
  • (game) prevent incorrectly team ranking with ineligible submissions - (05d04a) by GZTime

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.8.1..v1.8.2

Version: 1.8.1

05 Jan 14:12
4712e5f

Choose a tag to compare

1.8.1 - 2026-01-05

Feel free to ♥️ sponsor GZCTF ♥️!

This is a maintenance release that updates dependencies and improves the user registration experience.

⛰️ Features & Improvements

  • Docker Engine Support: Updated to Docker Engine API v29 for better compatibility and performance.
  • Registration Flow: Added an email verification pending page after registration to provide clear guidance to users awaiting email confirmation (#539).

📦 Dependencies

  • Updated all backend dependencies (ASP.NET Core, EF Core, and related packages).
  • Updated all frontend dependencies (React, Vite, Mantine, and related packages).
  • Updated GitHub Actions workflow dependencies for integration tests.

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.8.0..v1.8.1

Version: 1.8.0

11 Dec 12:25
b7b5cd7

Choose a tag to compare

1.8.0 - 2025-12-10

Feel free to ♥️ sponsor GZCTF ♥️!

Warning

Breaking Changes & Migration Required
This release introduces significant changes to the container network architecture and database schema.

  • Database Schema: A database migration is required to support the new Network Mode features.
  • Docker Swarm: Support for Docker Swarm has been removed. Please migrate to Kubernetes for better security and scalability.
  • Configuration: The behavior of ChallengeNetwork and Kubernetes network policies has changed. Please review the Upgrade Notes carefully.

✨ Highlights

  • Network Modes: Introduced the concept of "Network Mode" for challenges, supporting Open, Isolated, and Custom modes to provide finer control over challenge network isolation.
  • Enhanced Proxy Configuration: Updated ForwardedOptions to support KnownProxies and KnownIPNetworks for more robust reverse proxy handling.

⛰️ Features & Improvements

  • Custom Network Mode: Added support for configuring network modes per challenge, allowing for complex network topologies (#534).
  • Transfer Support: Updated TransferChallenge model to include NetworkMode information during import/export.
  • Proxy Configuration: Enhanced ForwardedOptions with KnownProxies and KnownIPNetworks to better support complex reverse proxy environments.

🐛 Bug Fixes

  • Cache Consistency: Reordered cache flushing calls in GameRepository to ensure data consistency.
  • Challenge Preview: Fixed an issue where the default score was not correctly set to 0 in the challenge preview.
  • Configuration: Updated ForwardedOptions binding to correctly support new proxy and network properties.
  • Frontend: Excluded isPinned from the post update payload to prevent unintended state changes.

🔧 Refactor

  • Core Optimization: Improved index cache control, CSP generation, and language extraction logic for better performance and security.

✅ Upgrade Notes

1. Database Migration

This release includes changes to the database schema. Ensure you run dotnet ef database update or let the application apply migrations automatically on startup.

2. Container Network Configuration (Important)

  • Docker Swarm Removed: The Docker Swarm provider is no longer supported.
  • ChallengeNetwork (Docker):
    • Old behavior: Specified the exact network name.
    • New behavior: Now treated as a prefix. GZCTF will automatically create <ChallengeNetwork>-open and <ChallengeNetwork>-isolated. You can manually create <ChallengeNetwork>-custom for custom network requirements.
  • Kubernetes Network Policies:
    • GZCTF now automatically manages gzctf-network-open and gzctf-network-isolated NetworkPolicies.
    • Do not modify these auto-generated policies.
    • For custom isolation, create additional NetworkPolicies in the same namespace using the label gzctf.gzti.me/NetworkMode.
    • Refer to the Container Provider Configuration for details.

3. Reverse Proxy Configuration

  • While ForwardedOptions maintains backward compatibility, it is strongly recommended to use the new KnownProxies (IP/Domain list) and KnownIPNetworks (CIDR list) configuration items for defining trusted proxies.

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.7.2..v1.8.0

Version: 1.7.2

18 Nov 14:14
ecd0c6e

Choose a tag to compare

1.7.2 - 2025-11-18

Feel free to ♥️ sponsor GZCTF ♥️!

Important

This release continues hardening import/export and division workflows, focusing on edge-case fixes, improved error visibility, and increased stability for container proxy and challenge instance handling.

✨ Highlights

  • Addressed several edge cases in the import/export flow (dynamic flag handling, file size limits, and metadata preservation).
  • Improved stability and error visibility for the TCP-over-WebSocket container proxy and challenge instance lifecycle.

⛰️ Features & Improvements

  • Stricter division validation and clearer messaging during game join to reduce accidental misjoins.
  • Improved game export/import error reporting and boundary handling to preserve more original metadata (including division names and attachment references).
  • Frontend UX improvements for invitation code usage and admin division management modals.

🐛 Bug Fixes

Stability and compatibility fixes across multiple subsystems:

  • Import/export: fixed exceptional cases in dynamic flag injection/recovery and enforced reliable file-size checks.
  • Division joinability logic: corrected incorrect availability checks under certain conditions.
  • Challenge editing: fixed an issue where saving edits could drop fields when no new instances exist.
  • Invitation codes: fixed display and application issues in the game join modal and admin division UI.
  • HTTP method handling: endpoints now return proper 405 Method Not Allowed for unsupported methods.
  • Tooltip and anchor styling: fixed display glitches and anchor font-size inconsistencies on game pages.
  • Post editing: improved edit/save/rollback consistency.
  • Missing prelaunch XorKey: surface clear errors when expected startup keys are absent.
  • Content-Disposition filename extraction: made parsing more robust for cross-browser compatibility.

🎨 Styling

  • Added IconBadge for clearer display of user/team events and improved visual hierarchy.

🔧 Refactor

  • Admin tables now use a fixed layout to ensure consistent column widths and reduce layout shifts.

🧪 Tests

  • Added and strengthened tests for division invitations, leave-game flows, and import/export scenarios to increase CI coverage and reduce regressions.

✅ Upgrade Notes

  • No breaking schema changes.
  • Recommended upgrade if you rely on export/import workflows or division management — this release improves migration robustness and error visibility.

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.7.1..v1.7.2

Version: 1.7.1

11 Nov 15:39
6943c3b

Choose a tag to compare

1.7.1 - 2025-11-11

Feel free to ♥️ sponsor GZCTF ♥️!

Important

This release introduces the first iteration of structured game export & import (including transfer models), making it easier to migrate or replicate competitions across environments.

✨ Highlights

  • Game export / import support with new transfer models (#512) — a foundation for portable competition workflows.

⛰️ Features

  • Division validation & required messaging during game joining.
  • Prevent unintended flag trimming.
  • Game export / import (transfer models) (#512).

🐛 Bug Fixes

Improved stability across:

  • Import/export (dynamic flag handling, file size limits, division name preservation #514).
  • Division joinability logic.
  • Challenge editing when no new instances are present.
  • Invitation code handling in game join modal & admin division management.
  • HTTP method handling now returns proper 405.
  • Tooltip styling and game page anchor font sizing.
  • Post editing logic clarity.
  • Error surfaced for missing prelaunch XorKey.
  • Content‑Disposition filename extraction.

🎨 Styling

  • Added IconBadge for clearer user/team event display.

🔧 Refactor

  • Admin tables now use fixed layout for consistent column widths.

🧪 Tests

  • Added leave‑game test coverage.
  • Added division invitation code integration tests.

✅ Upgrade Notes

  • No breaking schema changes.
  • Recommended if you plan to reuse or archive game configurations.

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.7.0..v1.7.1

Version: 1.7.0

01 Nov 07:09
643300f

Choose a tag to compare

1.7.0 - 2025-11-01

Feel free to ♥️ sponsor GZCTF ♥️ if you like it!

Important

This release introduces groundbreaking multi-division support and challenge deadline management for enhanced competition flexibility. Key highlights:

  1. 🎯 Division System: Full-featured division management with per-division challenge visibility, configuration, and independent scoring—enabling complex competition structures, regional divisions, and skill-based categories all within a single game.
  2. ⏰ Challenge Deadlines: Configure submission cutoff times per challenge per division for precise control over competition timelines and staggered challenge releases.
  3. 📦 .NET Aspire Integration: Simplified deployment and enhanced observability with automatic service discovery and configuration.
  4. 🧪 Comprehensive Testing: Full integration test suite with Testcontainers for Docker/Kubernetes and dynamic challenge validation.
  5. 💾 Self-Maintenance Storage: Enhanced S3/MinIO storage implementation with automatic cleanup and consistency management.
  6. 🛡️ Enhanced Permissions: New RequireReview and AffectDynamicScore permissions for fine-grained access control.

⛰️ Features

Division System & Challenge Management

  • (api) Implement Division Management in Game Controller - (96dc27) by GZTime
  • (division) add challenge configs to division create and edit models - (52472d) by GZTime
  • (division) update participation model to use divisionId - (8ad697) by GZTime
  • (division) update division logic - (430b78) by GZTime
  • (frontend) add division management functionality - (836e49) by GZTime
  • (model) Enhance division permissions and challenge visibility in game logic - (039c7c) by GZTime
  • (migrations) migrate divisions from JSON to new Divisions table - (c2597c) by GZTime
  • (game) add game join check info model and API endpoint - (3388ce) by GZTime

Challenge Deadline & Submission Control

  • (challenge) add deadline feature to challenges modal - (dbbb98) by GZTime
  • (deadline) add logic for challenge deadline - (c13a91) by GZTime
  • (countdown) improve timeout handling in Countdown component - (e19679) by GZTime

Scoreboard & Competition Infrastructure

  • (scoreboard) refactor scoreboard components to use divisionId and improve data handling - (2d0e4e) by GZTime
  • (scoreboard) update division mapping and improve rank display - (5d2572) by GZTime
  • (scoreboard) replace Input component with ScrollingText for title display - (cbca52) by GZTime
  • (game) flush scoreboard cache - (192c9c) by GZTime
  • add FirstSolves table and refactor challenge submission logic (#500) - (53c6b0) by GZTime

Storage & Deployment

  • (storage) switch to self-maintenance underlying storage implementation - (731f08) by GZTime
  • (storage) update package versions and improve S3BlobStorage implementation - (79642b) by GZTime
  • Add .NET Aspire support for automatic deployment and enhanced observability (#503) - (c4fd0f) by Copilot
  • (aspire) add minio support - (de0c11) by Steven He
  • (aspire) configure minio service discovery and default bucket - (92c5b3) by Steven He
  • (aspire) auto create bucket - (8e3450) by Steven He

Permissions & Access Control

  • (permission) add RequireReview permission - (d9a0e5) by GZTime
  • (permission) add AffectDynamicScore - (7e27ea) by GZTime

System Enhancements

  • (task-status) add 'Degraded' status to TaskStatus enum and update color mapping - (adf4e6) by GZTime
  • (task-status) add 'Unhealthy' status to TaskStatus enum - (28b3a2) by GZTime
  • (instance) optimize instance creation for game challenges and participations - (a82f10) by GZTime
  • (integration) enhance logging and initialization for K3s and MinIO containers - (ec4e1b) by GZTime
  • (practice) update practice mode functionality - (9ee56c) by GZTime
  • improved cache handling and detailed game info retrieval - (2f30c4) by GZTime
  • always flush scoreboard cache after submission processing - (30514a) by GZTime
  • add pingfall settings - (8d0cff) by Reverier-Xu

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.6.2..v1.7.0

Version: 1.6.1

11 Sep 06:17
144ee63

Choose a tag to compare

1.6.1 - 2025-09-11

Feel free to ♥️ sponsor GZCTF ♥️ if you like it!

Important

This release updates several dependencies (including patches that address potential denial-of-service vectors). Key highlights:

  1. Feature: [Challenge submission attempt limits] you can now configure per‑challenge submission quotas to curb brute‑force or guess-heavy traffic.
  2. Performance: substantial server-side and client-side optimizations-enhanced in‑memory + HTTP caching (ETag/304) + caching with IndexedDB and leaner render paths—reduce latency and eliminate most redundant bandwidth.
  3. Refactors: multiple front-end pages and shared components have been reorganized.
  4. License: Introduce dual-licensing model and clarify usage terms.

⛰️ Features

  • (cache) implement persistent caching with IndexedDB and localStorage - (9ccb9a) by GZTime
  • (shiki) use fine-grained bundle - (fb1ff5) by GZTime

🐛 Bug Fixes

  • (carousel) incorrect style import order - (4e4424) by GZTime
  • (deps) update mantine monorepo to v8.3.1 (#470) - (71e07e) by renovate[bot]

🎨 Styling

  • make team name in TeamWriteupCard scrolling - (c76051) by GZTime

🚀 Performances

  • (bundle) optimize bundle splitting and reduce small files - (014643) by GZTime

🔨 Refactor

  • (scrolling-text) only scrolling when hover, improve rendering performance - (588b78) by GZTime
  • (shiki) reorganize language imports and remove unused ones - (b58ce7) by GZTime

📦 Other Changes

  • Introduce dual-licensing model and clarify usage terms - (2b925a) by GZTime

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.6.0..v1.6.1

Version: 1.6.0

06 Sep 14:28
dfe2224

Choose a tag to compare

1.6.0 - 2025-09-06

Feel free to ♥️ sponsor GZCTF ♥️ if you like it!

Important

This release updates several dependencies (including patches that address potential denial-of-service vectors). Key highlights:

  1. Feature: [Challenge submission attempt limits] you can now configure per‑challenge submission quotas to curb brute‑force or guess-heavy traffic.
  2. Performance: substantial server-side and client-side optimizations-enhanced in‑memory + HTTP caching (ETag/304) and leaner render paths—reduce latency and eliminate most redundant bandwidth.
  3. Refactors: multiple front-end pages and shared components have been reorganized.

⛰️ Features

  • (ScrollingText) add scrolling text component and integrate into ChallengeCard and ScoreboardTable - (a55c38) by GZTime
  • (TeamCard) enhance TeamCard layout - (d1781d) by GZTime
  • (challenge) allow recalculate submission count for teams - (c63ef1) by GZTime
  • (contributors) enhance About page layout - (f3bea8) by GZTime
  • (logging) enhance logging configuration for EF Core queries - (5f2213) by GZTime
  • (submission) add submission limit for challenges (#450) - (f65090) by Copilot

🐛 Bug Fixes

  • (batch-user-create) correct validation to use MaxTeamNameLength (#445) - (3821e4) by Dang Minh Tri
  • (gantt) wrong alignment when overflow - (cb2a20) by GZTime

🎨 Styling

  • (TeamEditModal) add CSS styles for team member and captain group - (c8b1de) by GZTime
  • (components) update styles in ChallengePanel and Scoreboard components - (10c3eb) by GZTime
  • (game) improve card layout - (4fb797) by GZTime
  • (hover) add no-move data attribute for hover effect - (8ed4a9) by GZTime
  • (scoreboard) imporve render for item modal - (31bb5c) by GZTime

🚀 Performances

  • (cache) implement ETag and caching headers - (649867) by GZTime

🔨 Refactor

  • (about) add contributors and resources - (94e1c4) by GZTime
  • (caching) add memory cache layer to CacheHelper - (ea9078) by GZTime
  • (charts) replace ReactEcharts with EchartsContainer - (0feaae) by GZTime

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.5.0..v1.6.0

Version: 1.5.0

19 Aug 17:21
740129a

Choose a tag to compare

1.5.0 - 2025-08-19

Feel free to ♥️ sponsor GZCTF ♥️ if you like it!

Important

This update comes with dependency updates that includes some fixes that may lead to DOS.

⛰️ Features

  • Add API token management - (613530) by GZTime

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.4.3..v1.5.0

Version: 1.4.3

23 Jul 13:37
e048ab9

Choose a tag to compare

1.4.3 - 2025-07-22

Feel free to ♥️ sponsor GZCTF ♥️ if you like it!

⛰️ Features

  • (charts) add MemberContributionPie component - (a462cc) by GZTime
  • (shiki) synchronized rendering of markdown as wasm engine is not used - (a8f326) by GZTime
image

Changelog: https://github.com/GZTimeWalker/GZCTF/blob/HEAD/CHANGELOG.md
Commits: https://github.com/GZTimeWalker/GZCTF/compare/v1.4.2..v1.4.3