eoweb eoweb screenshot

a browser-based client for the classic 2d mmorpg Endless Online

eoweb brings a legacy 2d mmorpg to the modern web by faithfully reimplementing the original 0.0.28 network protocol in typescript. it connects to classic eo servers via websocket, handling the full game lifecycle — from account creation and character selection to real-time multiplayer gameplay — all inside the browser with no plugins or downloads required.

the technical centerpiece is a two-layer rendering architecture: a high-performance pixi.js engine renders the isometric game world with interpolated animation at 120ms ticks, while a lightweight preact ui overlays the hud, inventory, chat, and draggable dialog windows. game assets are dynamically assembled at runtime through a custom atlas system powered by web workers, and all game data (maps, sprites, dialogs) is cached in indexeddb for instant reloads. a modular controller architecture with 40+ domain-specific modules and a centralized event bus keeps the codebase maintainable despite the complexity of a full mmorpg client.

built with vite, typescript, tailwind css, and daisyui, eoweb delivers a polished, themeable experience that rivals native clients — proving that even decades-old game protocols can live beautifully on the modern web.

reoserv reoserv screenshot

High-performance, Rust-powered server emulator for the classic 2d mmorpg Endless Online

Built with Rust's async runtime (Tokio), it delivers a modern, production-grade reimplementation of the original game server, supporting both traditional TCP sockets and WebSocket connections for browser-based clients. The emulator handles the full game loop including world simulation, character progression, combat formulas, NPC AI, quests, shops, spells, and guild systems.

The architecture leverages Rust's memory safety and zero-cost abstractions to achieve high throughput with minimal resource usage. Key technical achievements include: an actor-based world simulation with configurable tick rates; automatic database migrations supporting both MySQL/MariaDB and SQLite; hot-reloadable configuration via file watchers (settings, commands, formulas, arenas, packet rate limits, and localization); connection rate limiting and per-IP throttling; and Argon2 password hashing;