Open-source project
matanki-saito/EU4dll avatar
matanki-saito/EU4dll

EU4DLL: a Windows shim that lets Europa Universalis IV draw double-byte characters

Europa Universalis IV double byte language patch; master:1.34.2, dev:1.37.5.0

1,194 stars113 forksC++MIT

At a glance

What is it?
EU4DLL is an unofficial C++ DLL that makes Europa Universalis IV render double-byte characters, with 32 and 64 bit builds, a plugin.ini configuration file, an automatic updater, and a name-ordering feature that handles dynasty names in Japanese style. It is Windows and Steam only, and the project forked from EU4CHS.
Who is it for?
EU4DLL fits a player of Europa Universalis IV on Windows who has subscribed to a multibyte localisation mod and needs the game to render Japanese or Chinese text, and who accepts that the fix is an injected DLL rather than a game patch. It is the wrong tool for a macOS or Linux player, for an offline session without a manual step, or for anyone who needs a fix that ships with the game.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 147 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem is a font and a text engine, not a translation

EU4DLL is a DLL that makes it possible to display double-byte characters on Europa Universalis IV. That is the whole premise, and it is narrower than it might first appear.

The game ships with a text rendering stack that assumes single-byte character encodings, so a Japanese or Chinese localisation mod produces text the game cannot draw. The characters come out as mojibake, as blanks, or as a crash. The translation exists, the scripts exist, and the font exists, and the game still cannot show them. That is the gap this project fills.

The approach is a DLL that the game loads, with the code in C++ and the topics listing `dll-injection`, `x86-64`, and `multibyte`. The repository layout shows both architectures side by side, with `Plugin/` and `Plugin64/` directories holding the 32 and 64 bit builds, and the `d3d9/` directory pointing at the Direct3D 9 layer. `resource/` holds the resources the DLL needs, `version/` holds version information, and `EU4JPS.sln` is the Visual Studio solution that builds it.

The project summary also gives the version alignment in the repository description, master at 1.34.2 and dev at 1.37.5.0, which is the kind of detail that tells you the DLL is tied to specific game builds. The default branch is `master`, and the last push was on 2026-05-29.

The project is explicit that it is unofficial, and that it was forked from EU4CHS, with a thank you note to that project and a link to its source. The licence is MIT.

Windows and Steam only, and the alternatives are named

The notice section at the top of the project is short and answers the practical questions first.

The project is unofficial. Windows is supported and the DLL only works on Steam. macOS is not supported, and the author says plainly that they do not have those plans. Linux is not supported. For macOS users the pointer is to a separate project, eu4dll_mac, maintained elsewhere.

The Steam-only constraint is the one that catches people out, and it is a consequence of how the DLL is delivered. The mod files themselves come from the Steam workshop or from the Paradox user directory in your documents folder, and the DLL that renders them has to be in the game directory. On Steam, the game directory is where the executable lives, so the DLL is found. On a non-Steam copy the paths differ, and the project does not claim to support that.

The macOS answer is a different project rather than a different build, and the Linux answer is nothing at all. That is a limitation of the approach rather than of the author, and it is worth understanding that this is a platform-specific fix for a Windows-specific problem.

One failure mode is documented with an issue link. Displaying very long tooltips can cause CTD, which is the game's shorthand for a crash to desktop. A tooltip long enough to trigger it is an edge case that the project has not eliminated, and knowing it exists before you file a bug is useful.

Two install routes, one of them a separate installer project

The install instructions come in two forms, and the choice between them is a matter of how much you want to do by hand.

The manual install is five steps. Download the latest release zipped file and unpack it. Put all files into the game directory. Subscribe to multibyte mods from Steam, or add mods to the Paradox user directory in your documents folder. Enable the mods on the game launcher. Then play.

The automatic install is four steps and uses a separate project, Simple Installer, which the project links as a separate repository with its own install guide hosted on a Paradox mod community site. The remaining steps are the same, subscribing to or adding the mods and enabling them on the launcher.

The key thing both routes share is that the DLL goes into the game directory and the content mods go somewhere else. That split is easy to get wrong, and it is why the instructions enumerate it as separate steps rather than as one action. The DLL is the part that makes the rendering work, the mod is the part that supplies the text, and neither does anything without the other.

There is also a slide for Japanese users, a Google Slides deck, which is the project's way of walking through the same steps in a form that suits a reader who prefers pictures to a numbered list.

For bug reports, the instruction is straightforward: if you find a bug, create an issue in the repository. There is no separate tracker and no separate form.

plugin.ini is the whole configuration surface

The specification section describes a single configuration file, `plugins/plugin.ini`, and the project calls it a spec rather than a set of options.

Three settings are documented. `ERROR_TEST` is for the alert debug. `SEPARATE_CHARACTER_CODE_POINT` changes the character that connects the region name and the country name, and it points at an issue for context. `REVERSING_WORDS_BATTLE_OF_AREA` changes the words ordering, and it has three concrete examples of what it does:

- Battle of / xxx becomes xxx / Battle of - Siege of / xxx becomes xxx / Siege of - Occupation of xxx becomes xxx / Occupation of

That last feature is a language-specific hack and it is worth understanding what it is for. In Japanese, a place name and a country name are conventionally written with the region first and the country after, and in English the order is the reverse. So a Japanese localisation of a battle name has the pieces in an order that reads wrong in English, and this setting flips them.

The `SEPARATE_CHARACTER_CODE_POINT` setting is the companion to that. When a word is moved to the front of a string, it needs something to attach to, and a separate character is used as the joining character, which is why the setting changes which character that is. The reason it is configurable rather than fixed is that different fonts have different coverage, so a Japanese font may not include the character the game picks by default, and the user can point it at one that their font does have.

The practical reference is the config file itself, and the settings above are the ones a user is likely to need to change.

The inverted question mark is a hack, and the README says so

The name order feature is the most interesting thing in the project, because it is a solution built out of a bug, and the documentation is honest about that.

Attaching an Inverted Question Mark to the dynasty causes the first name and last name to be reversed. The Paradox script format example in the project summary makes it concrete:

paradox
1534.6.23 = {
  heir = {
    name = "Nobunaga"  # Nobunaga
    monarch_name = "Nobunaga"  # Nobunaga
    dynasty = "¿Oda"  # Oda
    birth_date = 1534.6.23
    death_date = 1582.6.21
    claim = 90
    adm = 5
    dip = 5
    mil = 6
  }
}
# Nobunaga Oda -> Oda Nobunaga

So the game sees a dynasty named with the inverted question mark in front of it and a given name, and the DLL strips the inverted question mark and puts the dynasty after the name, producing Oda Nobunaga rather than Nobunaga Oda. The character is a sentinel: it marks the field as one that should be reordered.

The cost is stated immediately afterwards. When you use this feature, please exclude the Inverted Question Mark from all fonts.

That is a genuine constraint on the user, and it is the kind of thing that is easy to miss. The character has to be in the string for the mechanism to work, and it has to be absent from every font, because otherwise it renders as a visible question mark in the middle of the name. So the person using this feature has to edit their font assets as well as their mod files, and the README is telling you so.

The alternative reading is that the inverted question mark is a repurposed glyph that is unlikely to appear in Japanese text, which makes it a reasonably safe sentinel, and the fact that it is a printable character rather than a control code is what lets it survive a round trip through the game's own file format.

The updater phones home, and the project tells you how to turn it off

The autoupdate section is short and it is the one place where the project asks the user to make a decision about network behaviour.

Plugin.dll and Plugin64.dll will be updated automatically, and it requires an Internet connection at game run. If you do not need it, or play the game offline, please DELETE the `plugins/autoupdate.bat` file.

Read that carefully, because the phrasing inverts the usual default. The condition is not the wish to get automatic updates, it is the need to play offline. So the shipped default is that the updater runs and fetches new builds, and the offline player is the one who has to act.

The mechanism is a batch file in the plugins directory, `autoupdate.bat`, invoked at game start. It updates both the 32 bit and the 64 bit plugin, which is the pair of files the game directory holds. Deleting the batch file disables it, and since the update is delivered as a new plugin DLL, the removal is what stops the fetch rather than a setting.

The reasoning behind the design is straightforward. The DLL is tied to specific game versions, as the master and dev version numbers in the repository description show, and a user who installs it once and then plays for a year will eventually hit a game update that the old DLL does not support. An automatic update keeps the fix working without the user having to notice that a release exists. The release history is consistent with that, with tagged releases 91, 92, and 93, the last of them from 2026-03-30.

The downside is a network request on every launch for players who do not need it, which is why the offline instruction exists and why it is worded as a delete rather than a configuration change.

Editorial conclusion

EU4DLL fits a player of Europa Universalis IV on Windows who has subscribed to a multibyte localisation mod and needs the game to render Japanese or Chinese text, and who accepts that the fix is an injected DLL rather than a game patch. It is the wrong tool for a macOS or Linux player, for an offline session without a manual step, or for anyone who needs a fix that ships with the game. Check three things before you install it: that you are on Windows and running the Steam version, since the project says the DLL only works on Steam, that you are comfortable with an installer that places files into the game directory, and that you read the autoupdate note, because the updater needs a network connection at game start and there is a documented instruction to delete it if you play offline.

Frequently asked questions

What does EU4DLL do and which platforms does it support?

It is a DLL that makes it possible to display double-byte characters on Europa Universalis IV, for players using a Japanese or other multibyte localisation mod. Windows is supported and the DLL only works on Steam, macOS is not supported and is pointed at a separate eu4dll_mac project, and Linux is not supported.

How do I install EU4DLL for Europa Universalis IV?

Manually, download the latest release zipped file, unpack it, and put all files into the game directory, then subscribe to multibyte mods from Steam or add them to the Paradox user directory, and enable the mods on the game launcher. There is also a separate Simple Installer project that automates the file placement.

What is the plugins/plugin.ini file used for?

It holds the configuration, with three documented settings: `ERROR_TEST` for the alert debug, `SEPARATE_CHARACTER_CODE_POINT` to change the character that connects the region name and the country name, and `REVERSING_WORDS_BATTLE_OF_AREA` to change the words ordering for battle, siege, and occupation names.

How does EU4DLL handle Japanese name order, and what is the catch?

Attaching an Inverted Question Mark to the dynasty makes the first name and last name be reversed, so a dynasty written as `¿Oda` with the name `Nobunaga` is displayed as Oda Nobunaga. When you use this feature you must exclude the Inverted Question Mark from all fonts, or it will render visibly in the name.

Official sources

  1. License: MIT
  2. matanki-saito/EU4dll on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/matanki-saito-eu4dll.svg)](https://hysenlabs.com/projects/matanki-saito-eu4dll)

Was this useful?