All articles
Technical history

RPG Maker XP in 2026: the limits of a 2004 engine

RPG Maker XP was a brilliant tool for its time. Twenty years later, its distribution model, runtime and graphics architecture show why preserving its games requires evolving far beyond the original executable.

The RPG Maker XP icon leading to the Kirin logo, representing the evolution from a 2004 environment to a modern platform
Kirin's goal is not to freeze RPG Maker XP in 2004, but to preserve its games while the platform running them continues to advance.

Calling RPG Maker XP obsolete does not mean calling its games useless. It means recognizing that it was designed around the technical assumptions of 2004, many of which no longer describe the hardware, operating systems or software distribution of 2026.

RPG Maker XP arrived when Windows XP was a natural reference point, home computers might still have 128 or 256 MB of RAM, and a Pentium III could appear in a commercial product's requirements. The product's official page preserves that context: Windows 2000/XP as its minimum platform, processors measured in hundreds of megahertz, DirectSound, and a warning that 64-bit operating systems were not officially supported.

None of that was a flaw at the time. The problem appears when a project born inside that architecture keeps growing for twenty years and eventually needs to run on Android, ARM64, high-density displays and GPUs whose programming model did not even exist when RPG Maker XP was designed.

Obsolete does not mean useless. It means the original architecture can no longer carry every responsibility expected of a modern platform by itself.

RPG Maker XP was designed for a much smaller world

One of RPG Maker XP's greatest strengths was reducing complexity. A developer could build maps, events, databases, graphics and scripts in a relatively compact tool, then produce a game for the same kind of PC the editor itself targeted.

That model worked because there were few variables. One primary platform; input understood mainly as keyboard and gamepad; conventional file-system storage; windows and audio tied to desktop APIs; a fixed game resolution; and distribution that could be imagined as copying files to a disk or packaging them for another Windows user.

The official documentation still speaks of creating a “game disk.” The phrase captures the period perfectly: the finished product was conceived as a desktop application carrying its data to a compatible PC.

01Windows as the primary target
02An RGSS runtime tied to its generation
03Traditional desktop distribution

In 2026, every one of those assumptions needs either a translation layer or a new architecture.

Modern distribution is part of the engine

In a current engine, finishing a game is no longer just generating a folder with an executable. The engine must understand the target: Windows, Linux, macOS, Android, iOS, the web or a console. Every platform has its own package format, CPU architecture, signing rules, permissions, storage model and lifecycle.

Android is a clear example. An app lives in a sandbox, installs as an APK or AAB, declares permissions, responds to system pauses and resumes, shares the display with system bars and gestures, follows Android storage policies, and may be removed from memory whenever the system needs resources.

An RPG Maker XP executable knows none of this because it never needed to.

Modern engines treat it as a central responsibility. Godot distinguishes renderers and desktop or mobile platforms; Unity maintains a multi-target export architecture; and Unreal Engine treats packaging for desktop, mobile, consoles and XR as a normal production step.

Not because every game needs the same features, but because a contemporary engine can no longer assume there is only one machine underneath.

The difference from Godot, Unity and Unreal is not “better graphics”

Comparing RPG Maker XP with present-day engines only by visual quality would tell us very little. Unreal can solve lighting, material and 3D scene problems far beyond RPG Maker XP's purpose. The deeper difference is architectural.

GODOTForward+, Mobile and Compatibility renderers; Vulkan or OpenGL according to the target
UNITYMultiple platforms and configurable graphics APIs, including Vulkan and OpenGL ES on Android
UNREALDesktop, mobile, console and XR packaging through platform-specific paths

All three are built around an idea that now feels ordinary: the game expresses its intent and the engine translates it for the available hardware and operating system.

A texture should not force game code to understand how a GPU allocates memory. A button should not force deep gameplay layers to distinguish keyboard, touchscreen and gamepad. A scene should not need a full rewrite merely because the graphics API changes.

RPG Maker XP predates the device diversity that made this separation essential. Kirin cannot avoid it.

RGSS was revolutionary, but its runtime remained anchored to its era

RPG Maker XP introduced RGSS and made Ruby one of its greatest strengths. Instead of confining developers to a fixed list of events, it let them replace windows, menus, battle systems and much of a game's behavior with code.

That freedom allowed projects such as Pokémon Essentials to grow far beyond a traditional RPG. But freedom at the language level does not automatically modernize the machine executing it.

Historical projects were written around the Ruby 1.8 generation and specific RGSS behavior. Since then, the language, virtual machine, garbage collector, string handling, parser and CRuby's execution strategy have all changed substantially.

Keeping that runtime literally intact may increase immediate compatibility, but it freezes its costs as well. It forgoes modern optimizations and binds the project's future to an implementation whose original context has disappeared.

Ruby 1.8 / RGSS→Compatibility→Modern Ruby→JIT / ARM64

For Kirin, the question is not “how do we keep Ruby 1.8 forever?” It is “what behavior does the game need, and how do we preserve it on a runtime that can keep evolving?”

Graphics carry twenty years of history too

RPG Maker XP works with an essentially 2D scene: bitmaps, sprites, tilemaps, windows, planes and viewports. Those semantics remain valid. What ages is the implementation underneath.

A modern mobile GPU operates through an ecosystem of drivers and APIs such as OpenGL ES or Vulkan. Current engines usually insulate the game from that choice with a renderer and an abstraction layer. Godot, for example, has an OpenGL-based Compatibility renderer and Mobile and Forward+ renderers aimed at modern APIs such as Vulkan. Unity and Unreal also offer different graphics paths according to platform and hardware.

For Kirin, proper evolution is not replacing one label with another and declaring Vulkan automatically better. A 2D renderer has its own bottlenecks: texture uploads, state changes, small draw calls, CPU/GPU synchronization, resource creation, caches, image decoding and sprite order.

  • Fewer repeated texture transfers
  • Fewer unnecessary synchronization points
  • Persistent resources and predictable caches
  • Less work per frame
  • OpenGL ES 3 compatibility
  • A boundary ready for other backends

Renderer modernization must therefore be measured through real behavior. OpenGL ES 3 can be an excellent foundation for a 2D Android engine. Vulkan can provide more control along certain paths, but it also adds complexity. The right architecture allows either choice without exposing it to RGSS scripts.

mkxp made the first great leap: separating the game from its original executable

Before discussing Kirin, mkxp's value deserves recognition. Its conceptual contribution was enormous: it showed that an RGSS game could run without RPG Maker XP's original runtime.

That changed the question. Not every part of the 2004 program had to be preserved; the contract expected by the game could be reproduced while a different implementation was built below it.

mkxp-z took that idea further. Its README explains that it began as an mkxp fork intended to run Pokémon Essentials games correctly—an especially difficult case because of their dependence on Windows APIs. The project considers that mission complete and currently supports Windows, Linux and macOS.

This makes mkxp-z a decisive step, not a failure. It kept an enormous body of RGSS code usable outside its original environment.

But a compatibility runtime is not necessarily a modern engine

This is where Kirin draws a fundamental distinction. mkxp-z is primarily concerned with reproducing the behavior existing games need. That is the right priority for its purpose. But a compatibility runtime and an engine designed around Android from the outset do not carry the same responsibilities.

Android requires lifecycle integration, storage, touch input, gamepads, mobile audio, ARM64 architectures, memory-pressure handling, packaging and a specific graphics stack. Kirin also wants to experiment with much newer Ruby execution, JIT profiles and a renderer whose evolution is not constrained by historical desktop decisions.

mkxp-z proved the past could keep working. Kirin takes that compatibility as its starting point and asks what the platform should become if it is also meant to have a future.

Reducing Kirin to “mkxp-z ported to Android” describes only the first technical step and misses the architectural objective.

Porting and evolving are different problems

A port moves an implementation to another platform while retaining as much of its structure as possible. Sometimes that is exactly the right approach. Evolution, however, permits that structure to be questioned.

Porting

  1. Compile for Android
  2. Resolve dependencies
  3. Adapt input and files
  4. Preserve the architecture
  5. Find equivalents

Evolving

  1. Preserve RGSS semantics
  2. Modernize Ruby
  3. Redesign the renderer
  4. Integrate Android as a native platform
  5. Measure and replace bottlenecks

Kirin needs both processes. The project could not exist without compatibility. But if every internal decision were subordinate to leaving mkxp-z's design untouched, it would also inherit limits that belong to another stage of the evolution.

Kirin does not need to become Godot, Unity or Unreal

Modernizing the engine does not mean copying today's largest engines. Kirin does not need a 3D editor, physically based materials, global illumination or an Unreal-like scene hierarchy. Nor does it need to replace the way an RPG Maker XP game defines maps and events.

Its problem is narrower and, precisely for that reason, it can be more aggressive elsewhere. It can preserve RGSS semantics and focus on the areas that truly constrain these games:

  • Ruby and historical compatibility
  • JIT on ARM64 processors
  • A specialized 2D renderer
  • Asset and texture management
  • Touch and gamepad input
  • Android audio and lifecycle
  • Modern storage
  • Profiling real games

The comparison with Godot, Unity and Unreal is useful as a philosophy, not as an instruction to turn Kirin into one of them: a modern platform should abstract the hardware and operating system without forcing its content to understand every implementation detail.

The games are not obsolete

This distinction matters because it is easy to misdiagnose the problem. A map designed twenty years ago does not become wrong because Vulkan exists. A battle written in Ruby does not stop being interesting because it was made for RGSS. A complete project does not need to migrate to Unity or Godot simply because its original runtime has aged.

The content and the machine that runs it are different problems.

Kirin's goal is to preserve the game while replacing, one by one, the historical limitations that no longer need to accompany it.

RPG Maker XP was sufficient to create those games. mkxp showed that they could survive outside the original executable. mkxp-z showed that even highly complex projects could remain functional through a much more capable compatibility layer.

Kirin builds on that work, but does not consider it the end of the story.

Twenty years later, the objective is no longer to keep a 2004 engine breathing inside a modern phone. It is to build a modern platform that thoroughly understands what a 2004 game expects.

The difference sounds small. Technically, it changes everything.

Try Kirin on Android

Read the installation guide and add a compatible project to your library.

View installation guide