Carrying 20+ years of community work forward into modern times — with evidence from the code and git history
📅 2026-05-16 🚧 PRE-ALPHA — Active Development
HLStatsX has been a labour of love for over 20 years. From its original authors to every contributor
who filed issues, submitted patches, and kept servers running — the whole community deserves full credit
for what it became. HLStatsX.NET carries that work forward: the same game tracking,
the same skill system, the same data model — modernised, not replaced.
The legacy codebase was used as the authoritative specification throughout, ensuring every feature,
edge case, and design decision carries forward faithfully.
HLStatsX.NET is a drop-in replacement for the original PHP site and Perl daemon —
the same database, the same game server log format, the same stat output.
No data migration. No reconfiguration. Just a modern foundation that can be maintained and extended going forward.
The original team built something that ran reliably on thousands of servers for over two decades. That is the definition of success. HLStatsX.NET starts from a position of deep respect for that achievement — the goal is to take everything they figured out about stat tracking, skill ranking, and game event processing, and give it a home where it can be properly maintained, extended, and secured going forward.
Joel Spolsky's classic essay argues that the original code, however ugly, contains years of accumulated bug fixes and hard-won knowledge. Throwing it away risks rediscovering all those bugs from scratch. That concern is taken seriously here — the original PHP and Perl code is referred to in depth to ensure compatibility at every level.
These aren't theoretical concerns. Each one is grounded in specific code from the legacy source.
Rewriting from scratch isn't just about cleaning up old code — it's an opportunity to add things that were never feasible in the original architecture. These are already shipped.
Some features in the legacy installation are actively broken for many users today — not just outdated. These are restored in HLStatsX.NET.
The original was built in a simpler time, before modern web security practices were established. HLStatsX.NET treats security as a first-class concern, not an afterthought.
Feature parity with the PHP frontend is at ~97%, the daemon covers the full event pipeline including RCON broadcasting, and in-game pages are complete. A small number of admin tools remain. Below is an honest picture of what hasn't been done yet — and what's planned beyond mere parity.
Completing parity with the original
Planned improvements beyond the original
| Aspect | Legacy PHP + Perl | HLStatsX.NET |
|---|---|---|
| Maintenance | Lovingly built by a chain of contributors since 2001. No active maintainer today — kept alive by community dedication alone. | Actively maintained. Issues tracked. Contributions welcome. A path forward exists. |
| SQL safety | User input mixed into query strings. Relies on consistent sanitisation by every contributor on every code path. | Safe queries are the only option — injection is structurally prevented by the framework. |
| Performance | Blocking, sequential. Pages wait for every query and external call before rendering. | Fully asynchronous. All independent work runs in parallel. Pages render as data arrives. |
| Architecture | Database queries, business logic, and HTML mixed together. Global shared state throughout. Untestable by design. | Clean layered architecture. Every component independently testable. |
| Error handling | Database errors expose server details to every visitor in the browser. | Safe error pages in production. Full details go to the application log only. |
| Log daemon | A single large Perl script. No tests. No strict typing. Circa 2001. | Structured async worker service. Typed event handlers. Full test coverage. |
| Deployment | Multiple runtimes to install and configure. Credentials pasted into source files. | Starts with a single command. Secrets kept outside the source tree. |
| Tests | None. Bugs are found in production by players noticing wrong stats. | Hundreds of automated tests. Regressions caught before they ship. |
| Open source | GPL-2.0. No active contribution workflow or community review process. | MIT licensed. Source publishing coming soon. Contributions welcome. |
| Charts | Server-generated static images. Broken on many shared hosting setups. | Client-side, interactive, and responsive. No server requirements. |
| JavaScript | Legacy framework from 2006. Silently broken in modern browsers. | No legacy framework dependencies. |
HLStatsX was built and sustained by a community that cared enough to keep it running. HLStatsX.NET carries that spirit forward with proper tooling, reviewed contributions, and tracked issues. The source will be published publicly once the project reaches a suitable milestone. If you run a Half-Life server community and want a modern stats platform, this is being built for you.