# PKHeX: a Windows Forms save editor for Pokémon core series games

> PKHeX reads and rewrites save files, individual Pokémon entity files and Mystery Gifts across generations, and converts between formats. It runs on Windows Forms and needs .NET 10, which decides most of the platform questions people ask about it.

**kwsch/PKHeX** — Pokémon Save File Editor

- Repository: https://github.com/kwsch/PKHeX
- Website: https://projectpokemon.org/pkhex/
- Stars: 5,156 · Forks: 936
- Language: C#
- License: NOASSERTION
- Published: 2026-09-23 · Updated: 2026-09-23 · Language: en
- Canonical page: https://hysenlabs.com/projects/kwsch-pkhex

## What PKHeX edits, and who actually needs it

PKHeX is a save file editor for the Pokémon core series, written in C#. The file list in the README is broader than the word "save editor" suggests: it takes console save files named main, *.sav, *.dsv, *.dat, *.gci and *.bin, GameCube Memory Card images (*.raw, *.bin) that contain GC Pokémon savegames, individual Pokémon entity files with extensions like .pk*, .ck3, .xk3, .pb7, .sk2, .bk4 and .rk4, Mystery Gift files (*.pgt, *.pcd, *.pgf, .wc*) with conversion into .pk* form, GO Park entities (*.gp1) converted to .pb7, and teams extracted from decrypted 3DS Battle Videos.

The audience is narrower than the download count implies. You need a save file that has already been pulled off a console and decrypted; PKHeX expects saves that are not encrypted with console-specific keys, and the README points at savedata managers (Checkpoint, save_manager, JKSM, SaveDataFiler) for the import and export step. That division of labour is the whole shape of the tool: PKHeX never talks to hardware. If your save is still on the cartridge or the system memory, this is the wrong program to start with.

The second job is validation and conversion. Transferring from one generation to another converts formats along the way, and the repository topics list both converter and validator alongside save-editor. That matters for anyone moving a collection forward rather than just changing a level.

## How the editor is put together: Core, Drawing, WinForms

The top level of the repository splits into PKHeX.Core, PKHeX.Drawing, PKHeX.Drawing.Misc, PKHeX.Drawing.PokeSprite, PKHeX.WinForms and Tests. That layout tells you where the boundaries are. PKHeX.Core holds the format handling: parsing saves, representing Pokémon entities, converting between generation formats, and the validation the topics list advertises. The Drawing projects hold sprite and QR rendering. PKHeX.WinForms is the desktop shell that presents the data in a view you can edit and save.

Because the split is real, the core is usable as a class library by other C# code, which is consistent with the class-library topic on the repository. The README itself does not document a public API surface, so anyone embedding PKHeX.Core is working from the source rather than from written guidance.

The data flow in the application is straightforward: a save file is loaded and parsed into an editable model, the WinForms view displays it, edits mutate the model, and saving writes the format back out. Conversion between generations happens inside that model, which is why importing a .gp1 or a Mystery Gift can produce a .pk* entity as a side effect. The README also notes that the interface can be translated through resource or external text files, so strings are not hard-coded into the view logic.

## Installing PKHeX and opening a save file for the first time

The README's build section is explicit: PKHeX is a Windows Forms application which requires .NET 10, and the executable can be built with any compiler that supports C# 14. There is no documented installer, package manager entry or portable archive in the README, so the practical path is to get the .NET SDK and build the solution yourself.

Install .NET 10 from the download page the README links, then open the solution. The repository carries both PKHeX.sln and PKHeX.slnx, and the README says to use the Debug or Release build configurations, adding that there is no platform-specific code to worry about. It also notes the solution can be opened with an IDE such as Visual Studio by opening the .sln or .csproj file.

A successful build produces the WinForms executable. The README does not name the output path, so read the build log rather than guessing it.

Before you launch anything, get a decrypted save. The README directs you to a savedata manager (Checkpoint, save_manager, JKSM or SaveDataFiler) to import and export savedata from the console. Once you have a file, open it in PKHeX; the data appears in the main view, which you can edit and save. If the file was still encrypted with console-specific keys, it will not load as a save, and that is the first thing to check when a file is rejected.

## The Windows Forms constraint, and the platforms that follow from it

PKHeX is a WinForms desktop application, and the README says so in the first line of the build section. That single sentence answers most of the platform questions people arrive with. There is no Android build, no iOS build, no browser build and no macOS build described anywhere in the README. The related searches around Android, Mac, mobile, web and APK have no counterpart in the README or the repository layout, which contains only WinForms and Drawing projects.

A second constraint is the toolchain. .NET 10 and a C# 14 capable compiler are requirements, not suggestions, and they are recent enough that a machine with an older SDK will fail at build time rather than at runtime. If you are on a distribution or a CI image that ships an older .NET, that is your first obstacle, and the README offers no workaround.

The third constraint is the input. PKHeX expects decrypted saves. Everything about importing and exporting from the console is delegated to other tools, and those tools are named but not bundled. A user who has never dumped a save before is being asked to learn a second program before this one becomes useful.

Finally, the README carries an explicit stance: the project does not support or condone cheating at the expense of others, and asks that significantly hacked Pokémon not be used in battle or in trades with people who are unaware. That is a usage boundary stated by the maintainers, not a technical one, and it is worth reading as part of the tool's scope.

## Where PKHeX stops and another tool should start

The clearest alternative is one the README itself names: a savedata manager. Checkpoint, save_manager, JKSM and SaveDataFiler do the job PKHeX deliberately does not do, which is move data between a console and a filesystem. The difference in approach is not cosmetic. A savedata manager works against the console's storage and produces a file; PKHeX works on that file afterwards, with no knowledge of the console it came from. If your problem is "the save is on the system and I need it on my PC", a savedata manager is the correct tool and PKHeX is not.

For the Pokémon-specific side, the README mentions Pokémon Showdown sets and QR codes being imported and exported to assist in sharing. That is a lighter-weight exchange format than a full save, and for someone who only wants to move a team between people, it avoids handling save files at all.

The repository also ships a Tests project. For a developer who wants to check whether a format conversion behaves as expected, running the test suite is a more direct route than opening the GUI and inspecting the result by eye. The README does not document how to run the tests, so the project files are the reference.

## Licence, dependencies and what upgrading involves

The README displays a GPLv3 badge and the repository has a LICENSE file at the top level. The repository metadata reports the licence as NOASSERTION, which means an automated classifier did not match it to a known identifier. Those two signals disagree, and the LICENSE file is the one to read. This is a description of what the README says, not legal advice; if you plan to redistribute a build or link PKHeX.Core into your own product, the GPLv3 badge has obvious implications that a lawyer should assess.

Bundled third-party code carries its own terms. The QR code generation code comes from QRCoder under the MIT licence, and the shiny sprite collection comes from pokesprite, also MIT. The Legends: Arceus sprite collection comes from the National Pokédex - Icon Dex project on DeviantArt and its collaborators; the README does not state a licence for that collection, which is a gap worth noting if you intend to reuse the artwork.

Upgrade cost is dominated by the .NET requirement. Recent releases are dated 2026-08-27, 2026-07-08 and 2026-05-05, so the cadence is roughly monthly, and the most recent push to the repository was on 2026-09-21. A project that tracks a current .NET version will move its minimum SDK forward, and the README's build section is the place that changes. Pinning a specific release tag rather than following master is the only way to keep a build reproducible when the target framework moves.

## Conclusion

Adopt PKHeX if you already have a decrypted save exported from a console with a savedata manager such as Checkpoint, JKSM or SaveDataFiler, and you are comfortable building a Windows Forms application on .NET 10 with a C# 14 compiler. Do not adopt it if you need a browser tool, an Android or iOS app, or anything that talks to a console directly: the README documents no such interface, and the repository is a WinForms desktop solution. Before you rely on it, confirm three things for yourself: that your save is not encrypted with console-specific keys, that your .NET SDK satisfies the .NET 10 requirement, and that you have a second copy of the original save file, because the README does not document any rollback or undo path.

## FAQ

### What is PKHeX for?

It is a Pokémon core series save editor written in C#. It reads save files, individual Pokémon entity files and Mystery Gift files, displays the data in an editable view, and can transfer Pokémon from one generation to another while converting formats.

### Can you get PKHeX on 3DS?

No. PKHeX is a Windows Forms application and the README documents no 3DS build. The 3DS connection is indirect: you export savedata from the console with a savedata manager such as Checkpoint, JKSM or SaveDataFiler, then open that decrypted file in PKHeX.

### How do you install PKHeX?

The README gives a build path rather than an installer: install .NET 10, then build PKHeX.sln with a compiler that supports C# 14, using the Debug or Release configuration. There is no documented package manager or portable download in the README.

### How do you use PKHeX on a Switch?

The README does not describe a Switch workflow. It only states that PKHeX expects save files not encrypted with console-specific keys and that a savedata manager is used to import and export savedata from the console, so the console side is handled outside PKHeX.

### Is it safe to use PKHeX?

The README does not make a safety claim. It states that the project does not support or condone cheating at the expense of others and asks that significantly hacked Pokémon not be used in battle or in trades with people who are unaware. It also does not document any rollback or undo path, so keep a copy of the original save.

### How do you use PKHeX on a Mac?

The README describes only a Windows Forms application requiring .NET 10, with no macOS target anywhere in the repository layout. On a Mac the documented route is to build the solution yourself with a compiler that supports C# 14.

## Sources

- [Issues](https://github.com/kwsch/PKHeX/issues)
- [kwsch/PKHeX on GitHub](https://github.com/kwsch/PKHeX)
- [Project website](https://projectpokemon.org/pkhex/)
- [README](https://github.com/kwsch/PKHeX/blob/master/README.md)
- [Releases](https://github.com/kwsch/PKHeX/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/kwsch-pkhex
