Repository navigation
v2.0.0-beta.2
Pre-release
Pre-release
·
34 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
What's Changed
Note: Beta 1 release was removed due to serious bugs.
Since last stable version
🎮 General
- 🚧 Update: Renamed project to Age Server. This change was made in order to clarify the server works outside LAN too.
- 🚧 Update: Lifted TOS restriction to use the game only in a LAN environment.
- 🚧 Update: Removed unimplemented features section in main README.md as now everything in the API is in scope.
- 🐛 Fix: Properly handle environment variable keys with mixed case (e.g.
Ports.Bsis preserved instead of lowercased). - 🐛 Fix: Handle unhandled errors and resource leaks across cmdlog, config service, announce and match content download.
🖥️ Server
Warning
Don't port over the user data, let the server create it from scratch.
- [EXPERIMENTAL]🔝 Enhancement: Embedded Battle Server reimplementation with auto-start. Have a look at the project in here. Configurable via the config in
[Games.<game>.EmbeddedBattleServer]. The server can now start a Battle Server inside its own process when no external one is configured or discovered. This means for the 'Online-like' variant:- Simplicity: Battle Server Manager or manually running Battle Server is no longer needed.
- Native (More compatibility and performance):
- Non-Windows OSes no longer need a Windows compatibility layer (like Wine) to run a Battle Server.
- Non-x86_64 CPU archs no longer need to emulate the CPU instructions (for example, using Prism on Windows, FEX on Linux or Rosetta 2 on Mac) of x86_64.
- Up-to-date: not relying on game-provided battle servers that are outdated with missing features.
- Open-source: can improve our battle server reimplementation as needed.
- Reliability: not relying on game-provided battle servers that are, sometimes, buggy.
- [EXPERIMENTAL]🔝 Enhancement: Signing the catalogues is now a config option (
Sign.Enabled), off by default. When on, the server re-signs catalogues it serves; users inSign.PlatformUserIdExceptionsget the opposite behavior. Signing allows for the catalogues to be dynamic. GenCert now generated the signing public and private keys. **In order for the client to accept the new signature you must use AgeFakeSignature.dll of https://github.com/luskaner/ageServerLauncherCompanion. - [EXPERIMENTAL]🔝 Enhancement: Optional replay recording for matches handled by the embedded Battle Server. Configurable in
BattleServerReplayskey. - [EXPERIMENTAL]🔝 Enhancement: Implemented AoE 2: DE 1v1 matchmaking with persistence, leaderboard completeness and protocol fixes. If using
GeneratePlatformUserIdastrueit may show a user with multiple entries. Thanks to @Chichimokers. - [EXPERIMENTAL]🔝 Enhancement: Implemented config GUI. Thanks to @AlvaroGReg.
- 🔝 Enhancement: Improved support for Age of Empires 4: Raiders of the North DLC including the new Crucible COOP mode and civs.
- 🔝 Enhancement: Added configuration option
Internet.IP(autoby default) to set a static WAN IP instead of relying of apify service. Only relevant if the server is accessed from the WAN side. Thanks to @bgstack15. - 🔝 Enhancement: Added configuration option (and flag)
Internet.Enabled(enabled by default) to disable the use of features that always require internet. Thanks to @bgstack15. - 🔝 Enhancement: New icons available for all compatible games. Thanks to anonymous person.
- 🔝 Enhancement: Implemented
getNewsendpoint so the server can serve news to clients. - 🔝 Enhancement: Serve multiplayer savegames and replays via
/api/MatchContent/(upload and download endpoints). Configurable inCustomFilessection. Matches can now be restored to be played. Thanks to @DrA1ex - 🔝Enhancement: AoE 4 now allows to change and save profile. Thanks to anonymous person.
- Enhancement: Migrated to more performance Websocket library.
- 🐛 Fix: AoE 4 no longer crashes when customizing the profile. Thanks to anonymous person.
- 🐛 Fix: multiple websocket fixes.
- 🐛 Fix: Item metadata persistence now keeps
sourceandmtypeand never persists the transientis_newflag. Thanks to anonymous person. - 🐛 Fix: Challenge progress routes covered for AoE 4. Thanks to anonymous person.
- 🐛 Fix: gen-cert self-signed certificates now assign correct
KeyUsageandExtKeyUsage; generated private keys are owner-only (0600).
🎮 Launcher
- 🔝 Enhancement: Added option (and flag)
CanUseInternet(defaulttrue) to disable the use of features that always require internet. - 🔝 Enhancement: Moved the text to different sections like Init (implied), Configuration,
Initial teardown, Execution and final teardown to make operations more understandable. - 🔝 Enhancement: Make use of modern terminal features like emojis and format with fallback for legacy terminals.
- 🔝 Enhancement: Use a GUI dialog to select server or start one. Can be disabled by setting
CanUseDialogstofalse. - 🔝 Enhancement: agent now makes use of the system tray with Exit action and activity status.
- 🔝 Enhancement: agent now shows a notification to indicate the status when exiting.
- 🐛 Fix: A run no longer inherits anything from the previous run and reverts when it should.
- 🐛 Fix: Stop leaking an elevated config-admin-agent after the game exits.
- 🐛 Fix: Session state globals are now protected against data races from signal goroutines.
- 🐛 Fix: response body leak when reading certificate from server.
- 🐛 Fix: UDP server discovery race on shared sockets.
- 🐛 Fix: launcher logger (prefix contamination, swallowed errors, case-sensitive DNS matching, nondeterministic order).
- 🐛 Fix: infinite loop on stdin EOF during server selection.
- 🐛 Fix: Kill fallback no longer pretends to be a second attempt on slow machines.
- 🐛 Fix:
postAgentStartpolling is bounded and reports failure instead of hanging forever. - 🪟🐛 Fix:
ShellExecuteExWno longer writes into a stack-allocated struct and releases the process handle.
🖥️ Battle Server Manager
- Enhancement: Deterministic non-loopback IP selection for broadcast.
- Enhancement: Port generation and allocation reworked to be more robust and testable.
- 🐛 Fix: Null-safety in broadcast IP calculation and
ValidDatalength checks. - 🐛 Fix: battle-server-manager bugs covered by a new unit test suite.
Developer changes
- 🔝 Enhancement: Docker compose server and battle-server-manager now use
restart: unless-stopped; the Docker entrypoint validates and quotesGAME_ID. - 🐛 Fix:
.gitignorenow separatesgo.work.sumand adds coverage anduserData/patterns. - 🚧 Update: Go from 1.26.9 to 1.27.3.
- 🚧 Update: Renamed
task buildtotask build-all. - 🔝Enhancement:
task buildnow builds only the host platform with--single-target. - 🚧 Update: Removed the standalone battle-server mock (functionality absorbed by the embedded Battle Server). Thanks to @Chichimokers.
- 🔝Enhancement: Dependency injection pattern applied to admin client, revert/executor, config-helper and
runRoot, with comprehensive test suites. - 🔝Enhancement: Exhaustive httptest coverage added for all server routes, models, playfab, textmoderation and WSS.
- Enhancement: Battle server PID check is now optional (
ignorePid) to support Docker-like containers in host-like network mode.
See Github differences in v1.15.6...v2.0.0
What's coming in the future?
See this.
First time contributors
Sponsors/Donations
- @codabrink (GitHub monthly sponsor).
- B. Stack (one-time donation).
- Skoop (one-time donation).
- Ghoulette (one-time donation).
There are multiples ways to help: starring the repo, spreading the word, contributing to the repository, making an issue report, sponsoring me monthly or a one-time donation!
Files
The following assets are directly compiled and listed next to the release notes:
-
Full:
- Windows:
- 10 on x86-64:
..._full_v2.0.0_win10_x86-64.zip - 7 on x86-64:
..._full_v2.0.0_win7_x86-64.zip - 11 on ARM:
..._full_v2.0.0_win11_arm64.zip
- 10 on x86-64:
- Linux:
- x86-64:
..._full_v2.0.0_linux_x86-64.tar.gz - ARM64:
..._full_v2.0.0_linux_arm64.tar.gz
- x86-64:
- macOS:
..._full_v2.0.0_mac.tar.gz
- Windows:
-
Launcher:
- Windows:
- 10 on x86-64:
..._launcher_v2.0.0_win10_x86-64.zip - 7 on x86-64:
..._launcher_v2.0.0_win7_x86-64.zip - 11 on ARM:
..._launcher_v2.0.0_win11_arm64.zip
- 10 on x86-64:
- Linux:
- x86-64:
..._launcher_v2.0.0_linux_x86-64.tar.gz - ARM64:
..._launcher_v2.0.0_linux_arm64.tar.gz
- x86-64:
- macOS:
..._launcher_v2.0.0_mac.tar.gz
- Windows:
-
Battle Server Manager:
- Windows:
- 10 on x86-64:
..._battle-server-manager_v2.0.0_win10_x86-64.zip - 7 on x86-64:
..._battle-server-manager_v2.0.0_win7_x86-64.zip - 11 on ARM:
..._battle-server-manager_v2.0.0_win11_arm64.zip
- 10 on x86-64:
- Linux:
- x86-64:
..._battle-server-manager_v2.0.0_linux_x86-64.tar.gz - ARM64:
..._battle-server-manager_v2.0.0_linux_arm64.tar.gz
- x86-64:
- macOS:
..._battle-server-manager_v2.0.0_mac.tar.gz
- Windows:
-
Server:
- Windows:
- 10 (IoT), Server (IoT) 2025 on ARM64:
..._server_v2.0.0_win10_arm64.zip - 10 (IoT), (Storage) Server 2016, Server IoT 2019 on x86-64:
..._server_v2.0.0_win10_x86-64.zip - 7, Server 2008 R2, Home Server 2011, Embedded 7 on x86-64:
..._server_v2.0.0_win7_x86-64.zip - 10 (IoT) on x86-32:
..._server_v2.0.0_win10_x86-32.zip - 7, Embedded 7, Thin PC on x86-32:
..._server_v2.0.0_win7_x86-32.zip
- 10 (IoT), Server (IoT) 2025 on ARM64:
- Linux:
- ARM64:
..._server_v2.0.0_linux_arm64.tar.gz - ARM32:
- ARMv5 (armel):
..._server_v2.0.0_linux_arm-5.tar.gz - ARMv6 (sometimes called armhf):
..._server_v2.0.0_linux_arm-6.tar.gz
- ARMv5 (armel):
- x86-64:
..._server_v2.0.0_linux_x86-64.tar.gz - x86-32:
..._server_v2.0.0_linux_x86-32.tar.gz
- ARM64:
- macOS:
..._server_v2.0.0_mac.tar.gz
- Windows:
Note: If you are using Antivirus it may flag one or more executables as virus, this is a false positive.
Verification
The verification process ensures that the files you download are the same as the ones that were uploaded by the maintainer.
- Download the
ageBattleServer_2.0.0_checksums.txtandageBattleServer_2.0.0_checksums.txt.sigfiles. - Import the release public key and import it to your keyring if you haven't already.
- Verify the
ageBattleServer_2.0.0_checksums.txtfile with theageBattleServer_2.0.0_checksums.txt.sigfile. - Verify the SHA-256 checksum list inside
ageBattleServer_1.0.0_checksums.txtwith the downloaded archives.