This project was developed entirely with AI assistance: analysis, code, tests, and documentation. The released versions are tried on real consoles, without any problems so far. Still, it has not had the review a conventionally developed tool would have. Use it at your own risk and keep backups.
Two Luma3DS patches that make Pokémon Bank 1.5 and Poké Transporter 1.5 work without Nintendo's servers. Bank keeps its boxes on the SD card, and Transporter moves Pokémon from Gen 1, 2 and 5 games into Bank's transport box, so that they can still reach Gen 6 and 7 games after the official servers go offline.
Status: early release. Data storage is considered to be stable, while only one additional feature is planned before v1.0.0.
- All 100 boxes, with the original box, search, and group screens, without an online connection.
- Transfers to and from X, Y, Omega Ruby, Alpha Sapphire, Sun, Moon, Ultra Sun, and Ultra Moon.
- Starts straight at game selection, without the main menu or the first-start questions.
- National Pokédex and adventure records, taken over in the records screen as in the original.
- Poké Miles earned locally at a lossless rate and redeemed through the respective screens, with the welcome gift of 100 Miles (details).
- A damaged game save is refused before it is loaded. The original loaded and wrote it back.
- Saves are journaled: an interrupted Save and Quit leaves either the old or the new boxes (details).
Details: docs/bank.md.
- Works with wireless off: connection and server checks are removed.
- Reads Gen 5 cartridges and Gen 1/2 Virtual Console games and converts the Pokémon with Transporter's own code.
- Also lists Black, White, Black 2 and White 2 saves that TWiLight Menu++ or an nds-bootstrap forwarder keeps on the SD card, beside a cartridge and the Virtual Console titles (details).
- The language screen chooses which language's games are listed, so the list stays short (details).
- Writes the Pokémon into Bank's transport box first, then removes them from the source game. A power cut in between never loses a Pokémon.
- Contains a shining Easter egg for Gen 1 Virtual Console transfers, based on content that was lost to time.
Details: docs/transporter.md.
Each release on the Releases page has the file offline_bank-<version>.zip, laid out like the SD card:
offline_bank-<version>.zip
├── README.txt
└── luma/
└── titles/
├── 00040000000C9B00/ Pokémon Bank
│ ├── code.ips
│ └── exheader.bin
└── 00040000000C9C00/ Poké Transporter
├── code.ips
└── exheader.bin
The repository itself holds no patch files. Without a release, build them yourself.
You need a 3DS with Luma3DS v10.0 or later, Pokémon Bank and Poké Transporter installed in version 1.5, their final updates.
- Back up your game saves. If you are updating, back up Bank's extra data too: the offline Bank keeps its boxes in Bank's extdata, not in its save (how to back them up).
- Extract the zip and copy its
lumafolder to the root of the SD card, merging it with the one that is there. - Hold SELECT while powering on, switch on Enable game patching, and save. Wireless can stay off.
- Start Bank once before using Transporter.
The two files of a title only work as a pair and should never mix files from different releases. If something does not work, see the troubleshooting of Bank and Transporter.
Both programs deliberately stay as close to the original as possible: the same screens, messages and flow, all on the console, with no other device needed. The improvements are in the lists above, each beside what the original did. Most remove limits that only made sense online, like the HOME button and sleep mechanism being blocked while connected. Both now work on every screen that waits for your input.
The patches stay small, a few percent of the original programs, because they bring no resources of their own. The original texts and screens already say everything needed, while the patches reuse them with other available parts for a complete experience.
A power cut during the few seconds of Save and Quit is very unlikely, but if it happens, start Bank again with the same game, before you play that game. Bank sees how far the save got and finishes or undoes it on its own.
In rare cases Bank needs one more step from you: inserting the right game, or answering a question in Poké Transporter. Everything is done on the console, and the Bank guide has the steps.
A transfer cut off in Transporter never loses a Pokémon. At worst it is in Bank and still in the game.
Transporter lists the games of one language at a time, and starts with the console's language. As an example, Pokémon Green exists in Japanese only. Press L on Transporter's start screen to open the language screen and choose Japanese to show Japanese titles on the game list. The same goes for any other game in a language that is not the console's: cartridge, save on the SD card, or Virtual Console title.
The language choice lasts until Transporter is closed. A save on the SD card is only listed under its exact name.
While the official service runs, yes. It ends on February 25, 2027. A release made before then ships a separate download patch. It only works when no offline Bank is on the SD card yet, and your Pokémon stay on the server as well: you start Bank with this patch once, it signs in as the original does, fetches your boxes into a new offline Bank and says it succeeded. Then you put the normal patch in its place. The steps are in the notes of that release and in the README.txt of its zip.
Getting Pokémon from the offline Bank onto a Switch is possible in principle, and I have looked into it (details). The problem is Pokémon Home: its servers decide which Pokémon they accept, and they can already tell when one did not come through Bank. The Pokémon Company could start refusing such Pokémon at any time, so I have decided against building it for now.
The patches are here to keep Bank and Transporter working once their servers are gone, not to bring back events that already ended.
These distributions only ran for a limited time. Offering them again would not save anything that would otherwise be lost. It would just hand out the same Pokémon again, as often as you like, which is no different from using tools to edit them in.
The normal patches read only the files of their own version, so that they stay free of code for earlier save formats. Such code would never go away, and it would sit on the path that loads and saves your Pokémon.
A Bank that an earlier release stored differently is converted once by a separate migration patch, which every release below v1.0.0 ships, with the steps in its release notes. You start Bank with it once and then put the normal patch in its place. v1.0.0 will read the Bank of the latest pre-release and ship no more migrations.
- docs/bank.md and docs/transporter.md: using each patch. What changes, install, troubleshooting, limits.
- docs/errors.md: every error case of both patches as a flow, with each message and both error numbers.
- docs/internals.md: how they work, in three parts: Bank, storage, Transporter.
- docs/building.md: building from source, verifying, and packing a release.
- docs/testing.md: the checks that need a console, as steps and what is expected to be seen.
- docs/home.md: what was found about reaching Pokémon Home and the Switch games without Bank.
Something does not work or behaves oddly? Please open an issue in this repository. Include:
- what you did, step by step, and what happened instead of what you expected,
- the two numbers of any error shown in Bank or Transporter, or a photo of that screen,
- which games were involved, and whether cartridge, digital, or a save on the SD card,
- the release you used, your console model, and your Luma3DS version.
With enough information I will look into it, but this is a hobby project and I cannot promise a fix or a date.
Feature requests will most likely not be taken up. The project is open source under the GPL: if you want it to do more, you are welcome to fork it.
Pokémon Home (why), purchases, server-side legality checks, and event gifts (why).
The Transporter patch would not exist without zaksabeast. He worked out how Poké Transporter works inside, showed that it can run offline, and published all of it openly. The patches in the following repositories are not compatible with the ones released here and cannot be combined with them, but this project builds on what they worked out, so they are listed here with many thanks to him:
- Transporter-Offline-Patch: the edits that let Transporter run without servers. The offline flow here follows them.
- Transporter-PKSM-Bank-Patch: his notes on Transporter's state machine, and the points where a patch can take over the Bank check and the transfer.
- DreamRadarCartRedirect: the functions through which Transporter reads and writes a DS cartridge, and the idea of pointing them at a file. Reading saves from the SD card is built on it.
The source code of this project is licensed under GPL-3.0-or-later.
This is an unofficial, non-commercial fan project.
- It is not affiliated with, endorsed, sponsored, or approved by Nintendo Co., Ltd., The Pokémon Company, GAME FREAK inc., Creatures Inc., or any of their affiliates. It is not an official product or service of any of them and does not restore or replace one.
- Pokémon, Pokémon Bank, Poké Transporter, Nintendo 3DS, and all related names are trademarks of their respective owners. They are used here only to say what the patches are for.
- The repository contains no game files, no Nintendo code, and no keys. To build the patches you must supply your own copies of software you legally own.
- The patches only work on a console that already runs custom firmware, with your own installed copies of the two applications. They do not provide, unlock, or pay for any software or service.
- The software is provided as is, without warranty of any kind, as set out in the licence. You use it at your own risk; the author is not responsible for lost Pokémon, damaged saves, or any other damage. Whether using it is permitted where you live is your own responsibility.
