DEV Community

Cover image for How we ship a native macOS client for classic MU Online Season 6 (Zenaria x40)
Zenaria
Zenaria

Posted on

How we ship a native macOS client for classic MU Online Season 6 (Zenaria x40)

MU Online is a Windows-only game from the early 2000s. On a Mac people have usually tried CrossOver (CodeWeavers lists MU as "Installs, Will Not Run") or a Windows VM in Parallels, which tends to lag on Apple Silicon. I run a classic Season 6 server called Zenaria, and we ship a native macOS client for it. Here is how it is put together and what had to be fixed along the way.

Disclosure: this is my own project, the server is Zenaria x40.

Starting point: not from scratch

I did not write a client from zero. There is an open-source project, MuMain: the Season 5.2 client source code that the community has been cleaning up and bringing to Season 6 for years. One of its main changes is that rendering moved to SDL GPU, a layer that talks DirectX 12 on Windows and Metal on macOS. Shaders are written once and compiled to several formats (Metal, Vulkan, DirectX). Thanks to that community work, the client can be built for macOS on Apple Silicon at all. The network code was rewritten as well: a C# (.NET) library compiled to native code replaces the old networking.

What I had to build myself

Getting it to compile is not enough: ordinary players, not programmers, have to be able to use it.

  • A small app, data separate. The game data is over a gigabyte, and shipping it inside the .app would force a full download for every update. So the app is light (about 14 MB .dmg) and the world (about 1.3 GB) lives in Application Support and is downloaded on first launch.
  • Own updater. On launch the client reads a file list from the server, downloads only what changed and verifies checksums. The list is signed with a key and the client refuses an update with a bad signature, which protects against tampering on the way. On errors it retries and shows a readable message instead of a system dialog.
  • Small things that never showed up on Windows. The experience line used a number format that only Windows understood, so XP looked wrong on Mac. Cyrillic text needed separate fixing. The F12 key hides the game to the tray on Windows; on Mac it now minimizes to the Dock. The icon did not refresh in Finder and Launchpad after an update.
  • Crash reports. On Windows there is an exception handler; on Mac I had to install a signal handler. Now a crash writes the stack and the last 64 actions and packets to a log, which is usually enough to find the cause.
  • Game speed. Original MU is tuned for 25 FPS, while modern displays run at 60 Hz and above. Some effects flew several times faster than intended (the Dark Lord's fire shot across the whole screen). Particle speeds had to be recalculated for the original 25 frames.

The result

Download the .dmg, drag it to Applications, launch. It runs on M1 and newer, macOS 12 Monterey or later. The account is shared with the Windows client, so you can start on a work laptop and continue on a PC at home.

Honest downsides: the app is not signed with a paid Apple developer certificate yet, so on first launch macOS complains and you have to allow it once in System Settings → Privacy & Security → "Open Anyway". Intel Macs are not supported.

Thanks

Most of the hard work, moving the old renderer to a modern API, was done by the authors and contributors of MuMain and OpenMU. Without them none of this would exist. My part is the updater, the Mac packaging and many fixes for our server.

The server

Zenaria x40 is classic Season 6: EXP x40, Master x20, opened on October 16, 2026 at 19:00 MSK, Happy Hours every day 20:00–21:00 MSK. Clients for Windows and a native one for macOS.

If you have a Mac and ever played MU, I would love to hear how it runs on your hardware: performance, scaling, anything that breaks.

Website: https://zenaria.ru/?lang=en&utm_source=devto&utm_medium=listing&utm_campaign=x40
Mac client: https://zenaria.ru/mac?lang=en&utm_source=devto&utm_medium=listing&utm_campaign=x40

Top comments (0)