Skip to content

v2.0.0-beta.2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Nov 17:14
· 34 commits to main since this release
Immutable release. Only release title and notes can be modified.
v2.0.0-beta.2
db82dc6

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.Bs is 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 in Sign.PlatformUserIdExceptions get 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 BattleServerReplays key.
  • [EXPERIMENTAL]🔝 Enhancement: Implemented AoE 2: DE 1v1 matchmaking with persistence, leaderboard completeness and protocol fixes. If using GeneratePlatformUserId as true it 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 (auto by 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 getNews endpoint so the server can serve news to clients.
  • 🔝 Enhancement: Serve multiplayer savegames and replays via /api/MatchContent/ (upload and download endpoints). Configurable in CustomFiles section. 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 source and mtype and never persists the transient is_new flag. 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 KeyUsage and ExtKeyUsage; generated private keys are owner-only (0600).

🎮 Launcher

  • 🔝 Enhancement: Added option (and flag) CanUseInternet (default true) 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 CanUseDialogs to false.
  • 🔝 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: postAgentStart polling is bounded and reports failure instead of hanging forever.
  • 🪟🐛 Fix: ShellExecuteExW no 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 ValidData length 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 quotes GAME_ID.
  • 🐛 Fix: .gitignore now separates go.work.sum and adds coverage and userData/ patterns.
  • 🚧 Update: Go from 1.26.9 to 1.27.3.
  • 🚧 Update: Renamed task build to task build-all.
  • 🔝Enhancement: task build now 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
    • Linux:
      • x86-64: ..._full_v2.0.0_linux_x86-64.tar.gz
      • ARM64: ..._full_v2.0.0_linux_arm64.tar.gz
    • macOS: ..._full_v2.0.0_mac.tar.gz
  • 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
    • Linux:
      • x86-64: ..._launcher_v2.0.0_linux_x86-64.tar.gz
      • ARM64: ..._launcher_v2.0.0_linux_arm64.tar.gz
    • macOS: ..._launcher_v2.0.0_mac.tar.gz
  • 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
    • 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
    • macOS: ..._battle-server-manager_v2.0.0_mac.tar.gz
  • 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
    • 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
      • x86-64: ..._server_v2.0.0_linux_x86-64.tar.gz
      • x86-32: ..._server_v2.0.0_linux_x86-32.tar.gz
    • macOS: ..._server_v2.0.0_mac.tar.gz

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.

  1. Download the ageBattleServer_2.0.0_checksums.txt and ageBattleServer_2.0.0_checksums.txt.sig files.
  2. Import the release public key and import it to your keyring if you haven't already.
  3. Verify the ageBattleServer_2.0.0_checksums.txt file with the ageBattleServer_2.0.0_checksums.txt.sig file.
  4. Verify the SHA-256 checksum list inside ageBattleServer_1.0.0_checksums.txt with the downloaded archives.

Help

Create an issue or look for other related issues.