Migrate from downloading pre-patched server JARs from CDN to downloading
the DualAuth ByteBuddy Agent from GitHub releases. The server JAR stays
pristine - auth patching happens at runtime via -javaagent: flag.
clientPatcher.js:
- Replace patchServer() with ensureAgentAvailable()
- Download dualauth-agent.jar to Server/ directory
- Remove serverJarContainsDualAuth() and validateServerJarSize()
gameLauncher.js:
- Set JAVA_TOOL_OPTIONS env var with -javaagent: for runtime patching
- Update logging to show agent status instead of server patch count
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Discord button to server cards when discord link is present in API data
- Remove HF2P Servers section to use full width for featured servers
- Increase server card size (300x180px banner, larger fonts and spacing)
- Simplify layout from 2-column grid to single full-width container
- Discord button opens external browser with server invite link
Major Bug Fix in v2.2.0: HytaleClient did not launch in Windows especially Laptop, Ghost Processes on game/launcher exit, and EPERM in Repair Game Button
* fix: comprehensive UUID/username persistence bug fixes
Major fixes for UUID/skin reset issues that caused players to lose cosmetics:
Core fixes:
- Username rename now preserves UUID (atomic rename, not new identity)
- Atomic config writes with backup/recovery system
- Case-insensitive UUID lookup with case-preserving storage
- Pre-launch validation blocks play if no username configured
- Removed saveUsername calls from launch/install flows
UUID Modal fixes:
- Fixed isCurrent badge showing on wrong user
- Added switch identity button to change between saved usernames
- Fixed custom UUID input using unsaved DOM username
- UUID list now refreshes when player name changes
- Enabled copy/paste in custom UUID input field
UI/UX improvements:
- Added translation keys for switch username functionality
- CSS user-select fix for UUID input fields
- Allowed Ctrl+V/C/X/A shortcuts in Electron
Files: config.js, gameLauncher.js, gameManager.js, playerManager.js,
launcher.js, settings.js, main.js, preload.js, style.css, en.json
See UUID_BUGS_FIX_PLAN.md for detailed bug list (18 bugs, 16 fixed)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(i18n): add switch username translations to all locales
Added translation keys for username switching functionality:
- notifications.noUsername
- notifications.switchUsernameSuccess
- notifications.switchUsernameFailed
- notifications.playerNameTooLong
- confirm.switchUsernameTitle
- confirm.switchUsernameMessage
- confirm.switchUsernameButton
Languages updated: de-DE, es-ES, fr-FR, id-ID, pl-PL, pt-BR, ru-RU, sv-SE, tr-TR
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* docs: move UUID_BUGS_FIX_PLAN.md to docs folder
* docs: update UUID_BUGS_FIX_PLAN with complete fix details
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Added a maxlength attribute to the player name input and enforced a 16-character limit in both install and settings scripts, providing user feedback if exceeded. Refactored modManager.js to replace symlink-based mod management with a copy-based system, copying enabled mods to HytaleSaves\Mods and removing legacy symlink logic to improve compatibility and avoid permission issues.
* Update German (Germany) localization
* Update Español (España) localization
* Update French (France) localization
* Update Polish (Poland) localization
* Update Portuguese (Brazil) localization
* Update Russian (Russia) localization
* Update Swedish (Sweden) localization
* Update Turkish (Turkey) localization
* Update language codes, names and alphabetical in i18n system
* Changed Spanish language name to the Formal name "Spanish (Spain)"
Update System Improvements:
- Fix duplicate update popups by disabling legacy updater.js
- Add skip button to update popup (shows after 30s, on error, or after download)
- Add macOS-specific handling with manual download as primary option
- Add missing open-download-page IPC handler
- Add missing unblockInterface() method to properly clean up after popup close
- Add quitAndInstallUpdate alias in preload for compatibility
- Remove pulse animation when download completes
- Fix manual download button to show correct status and close popup
- Sync player name to settings input after first install
Client Patcher Cleanup:
- Remove server patching code (server uses pre-patched JAR from CDN)
- Simplify to client-only patching
- Remove unused imports (crypto, AdmZip, execSync, spawn, javaManager)
- Remove unused methods (stringToUtf8, findAndReplaceDomainUtf8)
- Move localhost dev code to backup file for reference
Code Quality Fixes:
- Fix duplicate DOMContentLoaded handlers in install.js
- Fix duplicate checkForUpdates definition in preload.js
- Fix redundant if/else in onProgressUpdate callback
- Fix typo "Harwadre" -> "Hardware" in preload.js
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The bundled libzstd.so is incompatible with glibc 2.41's stricter heap
validation, causing "free(): invalid pointer" crashes.
Solution: Automatically replace bundled libzstd.so with system version
on Linux. The launcher detects and symlinks to /usr/lib/libzstd.so.1.
- Auto-detect system libzstd at common paths (Arch, Debian, Fedora)
- Backup bundled version as libzstd.so.bundled
- Create symlink to system version
- Add HYTALE_NO_LIBZSTD_FIX=1 to disable if needed
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added de.json and sv.json locale files for German and Swedish language support. Updated i18n.js to register 'de' and 'sv' as available languages in the launcher.
this PKGBUILD intended for CI and GitHub release artifacts. targets tagged releases only and uses a fixed pkgver that matches the corresponding git tag. all of the VCS logic has been removed to PKGBUILD-git to ensure reproducible builds and stable versioning suitable for binary distribution.
the build process relies on electron-builder directory output (--dir) and packages only the unpacked application into a standard Arch Linux package (.pkg.tar.zst). other distro format are excluded from this path and handled separately.
this change establishes a clear separation between:
- rolling AUR development builds (-git)
- CI-generated, versioned Arch Linux release packages
the result is predictable artifact naming, correct version alignment, and Arch-compliant packaging for downstream users.
created clean VCS-based PKGBUILD following arch packaging conventions.
this explicitly marked as a rolling (-git) build and derives its version dynamically from git tags and commit history via pkgver(). previous hybrid approach has been changed.
key changes:
- use -git suffix to clearly indicate rolling source builds
- set pkgver=0 and compute the actual version via pkgver()
- build only a directory layout using electron-builder (--dir)
- avoid generating AppImage, deb, rpm, or pacman installers
- align build and package steps with Arch packaging guidelines
note: this PKGBUILD is intended for development and AUR use only and is not suitable for binary redistribution or release artifacts.
* build-arch job now only build arch .pkg.tar.zst package instead of the whole generic linux.
* build-linux job now exclude .pacman package since its deprecated and should not be used.
modManager.js:
- Switch from hardcoded 'junction' to dynamic symlink type based on OS (fixing Linux EPERM).
- Add retry logic for directory removal to handle file locking race conditions.
- Improve broken symlink detection during profile sync.
gameManager.js:
- Implement retry loop (3 attempts) for game directory removal in updateGameFiles to prevent EBUSY/EPERM errors on Windows.
paths.js:
- Prevent fs.mkdirSync failure in getModsPath by pre-checking for broken symbolic links.
2026-01-26 08:19:13 +08:00
7 changed files with 56 additions and 337 deletions
* [A. Host Your Singleplayer World](#a-host-your-singleplayer-world)
* [1. Using Online-Play Feature In-Game Invite Code](#1-using-online-play-feature--in-game-invite-code)
* [A. Online Play Feature](#a-online-play-feature)
* [1. Host Your Singleplayer World using In-Game Invite Code](#1-host-your-singleplayer-world-using-in-game-invite-code)
* [Common Issues (UPnP/NAT/STUN) on Online Play](#common-issues-upnpnatstun-on-online-play)
* [2. Using Tailscale](#2-using-tailscale)
* [3. Using Radmin VPN](#3-using-radmin-vpn)
* [2. Host Your Singleplayer World using Tailscale](#2-host-your-singleplayer-world-using-tailscale)
* [B. Local Dedicated Server](#b-local-dedicated-server)
* [1. Using Playit.gg (Recommended) ✅](#1-using-playitgg-recommended-)
* [2. Using Radmin VPN](#2-using-radmin-vpn)
* [C. 24/7 Dedicated Server (Advanced)](#c-247-dedicated-server-advanced)
* [Step 1: Get the Files Ready](#step-1-get-the-files-ready)
* [Step 2: Place HytaleServer.jar in the Server directory](#step-2-place-hytaleserverjar-in-the-server-directory)
@@ -33,69 +32,6 @@ Play with friends online! This guide covers both easy in-game hosting and advanc
* [10. Getting Help](#10-getting-help)
---
<div align='center'>
<h3>
<b>
Do you want to create Hytale Game Server with EASY SETUP, AFFORDABLE PRICE, AND 24/7 SUPPORT?
</b>
</h3>
<h2>
<b>
<a href="https://cloudnord.net/hytale-server-hosting">CLOUDNORD</a> is the ANSWER! HF2P Server is available!
</b>
</h2>
</div>
**CloudNord's Hytale, Minecraft, and Game Hosting** is at the core of our Server Hosting business. Join our Gaming community and experience our large choice of premium game servers, we’ve got you covered with super high-performance hardware, fantastic support options, and powerful server hosting to build and explore your worlds without limits!
**Order your Hytale, Minecraft, or other game servers today!**
Choose Java Edition, Bedrock Edition, Cross-Play, or any of our additional supported games.
Enjoy **20% OFF** all new game servers, **available now for a limited time!** Don’t miss out.
* [Hytale-Server-Docker by Sanasol](https://github.com/sanasol/hytale-server-docker/tree/main?tab=readme-ov-file#dual-authentication)
**Requirements:**
* Using the patched HytaleServer.jar
* Has Official Account with Purchased status on Official Hytale Website.
* This official account holder can be the server hoster or one of the players.
**Steps:**
1. Running the patched HytaleServer.jar with either [B. Local Dedicated Server](#b-local-dedicated-server) or [C. 24/7 Dedicated Server (Advanced)](#c-247-dedicated-server-advanced) successfully.
2. On the server's console/terminal/CMD, server admin **MUST RUN THIS EACH BOOT** to allow players with Official Hytale game license to connect on the server:
```
/auth logout
/auth persistence Encrypted
/auth login device
```
3. Server console will show instructions, an URL and a code; these will be revoked after 10 minutes if not authorized.
4. The server hoster can open the URL directly to browser by holding Ctrl then Click on it, or copy and send it to the player with official account.
5. Once it authorized, the official accounts can join server with F2P players.
6. If you want to modify anything, look at the [Hytale-Server-Docker](https://github.com/sanasol/hytale-server-docker/) above, give the repo a STAR too.
---
### "Server" Term and Definiton
"HytaleServer.jar", which called as "Server", functions as the place of authentication of the client that supposed to go to Hytale Official Authentication System but we managed our way to redirect it on our service (Thanks to Sanasol), handling approximately thousands of players worldwide to play this game for free.
@@ -105,15 +41,14 @@ Kindly support us via [our Buy Me a Coffee link](https://buymeacoffee.com/hf2p)
### Server Directory Location
Here are the directory locations of Server folder if you have installed it on default instalation location:
Here are the directory locations of Server folder if you have installed
> This location only exists if the user installed the game using our launcher.
> The `Server` folder needed to auth the HytaleClient to play Hytale in Singleplayer/Multiplayer for now.
> (We planned to add offline mode in later version of our launcher).
> This location only exists if the user installed the game using our launcher. The `Server` folder needed to auth the HytaleClient to play Hytale online
> (for now; we planned to add offline mode in later version of our launcher).
> [!IMPORTANT]
> Hosting a dedicated Hytale server will not need the exact similar tree. You can put it anywhere, as long as the directory has `Assets.zip` which
@@ -129,7 +64,6 @@ Terms and conditions applies.
## 1. Using Online-Play Feature / In-Game Invite Code
The easiest way to play with friends - no manual server setup required!
*The game automatically handles networking using UPnP/STUN/NAT traversal.*
**For Online Play to work, you need:**
@@ -178,7 +112,6 @@ Warning: Your network configuration may prevent other players from connecting.
</details>
<details><summary><b>b. "UPnP Failed" or "Port Mapping Failed" Warning</b></summary>
**Check your router:**
1. Log into router admin panel (usually `192.168.1.1` or `192.168.0.1`)
2. Find UPnP settings (often under "Advanced" or "NAT")
@@ -190,8 +123,7 @@ Warning: Your network configuration may prevent other players from connecting.
- See "Port Forwarding" or "Workarounds or NAT/CGNAT" sections below
</details>
<details><summary><b>c. "Connected via STUN", "Strict NAT" or "Symmetric NAT" Warning</b></summary>
<details><summary><b>c. "Strict NAT" or "Symmetric NAT" Warning</b></summary>
Some routers have restrictive NAT that blocks peer connections.
**Try:**
@@ -201,7 +133,6 @@ Some routers have restrictive NAT that blocks peer connections.
</details>
## 2. Using Tailscale
Tailscale creates mesh VPN service that streamlines connecting devices and services securely across different networks. And **works crossplatform!!**
1. All members are required to download [Tailscale](https://tailscale.com/download) on your device.
@@ -217,17 +148,6 @@ Tailscale creates mesh VPN service that streamlines connecting devices and servi
* Use the new share code to connect
* To test your connection, ping the host's ipv4 mentioned in Tailscale
## 3. Using Radmin VPN
Creates a virtual LAN - all players need to install it:
1. Download [Radmin VPN](https://www.radmin-vpn.com/) - All players install it
2. One person create a room/network, others join with network name/password
3. Host joined the world, others will connect to it.
4. Open Hytale Game > Servers > Add Servers > Direct Connect > Type IP Address of the Host from Radmin.
These options bypass all NAT/CGNAT issues. But for **Windows machines only!**
---
# B. Local Dedicated Server
@@ -246,13 +166,12 @@ Free tunneling service - only the host needs to install it:
* Linux:
* Right-click file > Properties > Turn on 'Executable as a Program' | or `chmod +x playit-linux-amd64` on terminal
* Run by double-clicking the file or `./playit-linux-amd64` via terminal
5. Open the URL/link by `Ctrl+Click` it. If unable, select the URL, then Right-Click to Copy (`Ctrl+Shift+C` for Linux) then Paste the URL into your browser to link it with your created account.
6.Once it done, download the `run_server_with_tokens (1)` script file (`.BAT` for Windows, `.SH` for Linux) from our Discord server > channel `#open-public-server`
7.Put the script file to the `Server` folder in`HytaleF2P` directory (`%localappdata%\HytaleF2P\release\package\game\latest\Server`)
8.Rename the script file to `run_server_with_tokens` to make it easier if you run it with Terminal, then do Method A or B.
9.If you put it in `Server` folder in `HytaleF2P` launcher, change `ASSETS_PATH="${ASSETS_PATH:-./Assets.zip}"` inside the script to be `ASSETS_PATH="${ASSETS_PATH:-../Assets.zip}"`. NOTICE THE `./` and `../` DIFFERENCE.
10.Copy the `Assets.zip` from the `%localappdata%\HytaleF2P\release\package\game\latest\` folder to the `Server\` folder. (TIP: You can use Symlink of that file to reduce disk usage!)
11. Double-click the .BAT file to host your server, wait until it shows:
5. Open the URL/link by `Ctrl+Click` it. If unable, select the URL, then Right-Click to Copy (`Ctrl+Shift+C` for Linux) then Paste the URL into your browser to link it with your created account.
6.**WARNING: Do not close the terminal if you are still playing or hosting the server**
7.Once it done, download the `run_server_with_tokens` script file (`.BAT` for Windows, `.SH` for Linux) from our Discord server > channel `#open-public-server`
8.Put the script file to the `Server` folder in `HytaleF2P` directory (`%localappdata%\HytaleF2P\release\package\game\latest\Server`)
9.Copy the `Assets.zip` from the `%localappdata%\HytaleF2P\release\package\game\latest\` folder to the `Server\` folder. (TIP: You can use Symlink of that file to reduce disk usage!)
10.Double-click the .BAT file to host your server, wait until it shows:
Hytale Server Booted! [Multiplayer, Fresh Universe]
@@ -261,12 +180,16 @@ Hytale Server Booted! [Multiplayer, Fresh Universe]
11. Connect to the server by go to `Servers` in your game client, press `Add Server`, type `localhost` in the address box, use any name for your server.
12. Send the public address in Step 3 to your friends.
> [!CAUTION]
> Do not close the Playit.gg Terminal OR HytaleServer Terminal if you are still playing or hosting the server.
## 2. Using Radmin VPN
## 2. Using Tailscale [DRAFT]
Creates a virtual LAN - all players need to install it:
Tailscale
1. Download [Radmin VPN](https://www.radmin-vpn.com/) - All players install it
2. One person create a room/network, others join with network name/password
3. Host joined the world, others will connect to it.
4. Open Hytale Game > Servers > Add Servers > Direct Connect > Type IP Address of the Host from Radmin.
These options bypass all NAT/CGNAT issues. But for **Windows machines only!**
---
@@ -305,12 +228,12 @@ For 24/7 servers, custom configurations, or hosting on a VPS/dedicated machine.
**Windows:**
```batch
run_server_with_token.bat
run_server.bat
```
**macOS / Linux:**
```bash
./run_server_with_token.sh
./run_server.sh
```
---
@@ -580,6 +503,3 @@ See [Docker documentation](https://github.com/Hybrowse/hytale-server-docker) for
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.