Homebrew pkHouse - Local Bank System for Pokémon Switch games

  • Thread starter Thread starter Insektaure
  • Start date Start date
  • Views Views 4,469
  • Replies Replies 16
  • Likes Likes 10

Insektaure

Well-Known Member
Member
Joined
Aug 31, 2024
Messages
125
Reaction score
108
Trophies
1
Age
40
XP
563
Country
France

Been working on this for a while, just finished the "polished" version and pushed to github.

Feedback welcomed !

pkHouse​


A local bank system for Pokemon games on Nintendo Switch.

Move Pokemon between your save files and local bank storage.

Disclaimer​


This software is provided "as-is" without any warranty.
While the app has been tested, it may contain bugs that could corrupt or damage your save files.


Use at your own risk and always backup first !


The author is not responsible for any data loss or damage to your save data.

This is why the automatic backup system exists — always verify your backups before making changes.

If you need to restore a backup, use a save manager such as Checkpoint or JKSV to import the backup files back onto your Switch.

Supported Games​

GameTested VersionSave FormatBoxesSlots/Box
Pokemon Let's Go Pikachu1.0.2BEEF blocks (savedata.bin)4025
Pokemon Let's Go Eevee1.0.2BEEF blocks (savedata.bin)4025
Pokemon Sword1.3.2SCBlock (main)3230
Pokemon Shield1.3.2SCBlock (main)3230
Pokemon Brilliant Diamond1.3.0Flat binary (SaveData.bin)4030
Pokemon Shining Pearl1.3.0Flat binary (SaveData.bin)4030
Pokemon Legends: Arceus1.1.1SCBlock (main)3230
Pokemon Scarlet4.0.0SCBlock (main)3230
Pokemon Violet4.0.0SCBlock (main)3230
Pokemon Legends: Z-A2.0.1SCBlock (main)3230


Each box holds 30 Pokemon slots.

Note: Moving Pokemon between different games is not supported. Banks are separated by game family because transferred Pokemon would lack the HOME Tracker ID required for cross-game compatibility.

Features​

Profile Selection​

On Switch, pkHouse loads all user profiles from the system.
Select your profile, then choose a game.
The app detects which games have save data for the selected profile.
Your profile name is shown alongside the game name in all views.

Two-Panel Box Viewer​

The main view displays your game save on the left and your bank on the right, side by side.
Navigate freely between both panels to move Pokemon back and forth.

Pick & Place​

Press A on a Pokemon to pick it up, navigate to any slot (in either panel), and press A again to place it.
Placing on an occupied slot swaps the two Pokemon.
Press B to cancel and return the Pokemon to its original slot.

Multi-Select​

Toggle selection on individual Pokemon in the current box with Y.
Selected slots display a numbered badge showing the pick-up order.
Press A to pick up all selected Pokemon, then navigate to another box and press A to place them into the first available empty slots (in selection order).
The destination must have enough empty slots for the entire group.
Press B to cancel and return all Pokemon to their original positions.
Selection is cleared when switching boxes or panels.

Pokemon Details​

Press X on any Pokemon to view detailed information:
  • Species, level, gender
  • National Pokedex number
  • Original Trainer (OT) and Trainer ID
  • Nature and Ability
  • All 4 moves
  • IVs (perfect 31s highlighted in gold)
  • EVs
Shiny Pokemon names are displayed in gold. Alpha Pokemon (Legends: Arceus / Z-A) show a dedicated icon.

Bank System​

Banks are local .bin files stored per game family.
Paired games share the same bank folder, so you can move Pokemon between versions (e.g. Sword and Shield).

Game FamilyBank Folder
Let's Go Pikachu / Eeveebanks/LetsGo/
Sword / Shieldbanks/SwordShield/
Brilliant Diamond / Shining Pearlbanks/BDSP/
Legends: Arceusbanks/LegendsArceus/
Scarlet / Violetbanks/ScarletViolet/
Legends: Z-Abanks/LegendsZA/


From the bank selector you can:
  • Create a new bank (up to 32-character name)
  • Rename an existing bank
  • Delete a bank (with confirmation)
Each bank has the same box capacity as its game family (32 or 40 boxes).
The bank list shows the number of occupied slots for each bank.
You can switch between banks from the main view via the menu, with or without saving first.

Backup System​


When loading a game save on Switch, an automatic backup is created before any modifications:

backups/<profile>/<game>/<profile>_YYYY-MM-DD_HH-MM-SS/

This is a full copy of the mounted save directory.
The backup is only created once when initially selecting a game — switching banks does not trigger additional backups.

Running​

Applet mode is not supported due to memory constraints.
Launch in Title Override mode.
Launching in Applet mode will simply tell you it can't run in this mode.

Save Integrity​

  • SCBlock saves (ZA, SV, SwSh, PLA): Decrypted, modified, and re-encrypted. A round-trip verification runs on load to confirm the cycle is lossless.
  • BDSP saves: Flat binary with MD5 checksum, recalculated on every save.
  • All saves are written in-place to preserve the Switch filesystem journal.

Credits​

  • PKHeX by kwsch — PokeCrypto research and save structure reference
  • JKSV by J-D-K — Save backup and write logic reference
  • Built with libnx and SDL2
Download

https://github.com/Insektaure/pkHouse
Screenshots below !
 

Attachments

  • 001.jpg
    001.jpg
    51.1 KB · Views: 38
  • 014.jpg
    014.jpg
    82.3 KB · Views: 25
  • 013.jpg
    013.jpg
    76.5 KB · Views: 19
  • 012.jpg
    012.jpg
    70 KB · Views: 39
  • 011.jpg
    011.jpg
    99.5 KB · Views: 23
  • 010.jpg
    010.jpg
    82.9 KB · Views: 25
  • 009.jpg
    009.jpg
    99.8 KB · Views: 17
  • 008.jpg
    008.jpg
    99.6 KB · Views: 21
  • 007.jpg
    007.jpg
    95.6 KB · Views: 30
  • 006.jpg
    006.jpg
    99.4 KB · Views: 36
  • 005.jpg
    005.jpg
    28.7 KB · Views: 29
  • 004.jpg
    004.jpg
    25 KB · Views: 36
  • 003.jpg
    003.jpg
    81.3 KB · Views: 22
  • 002.jpg
    002.jpg
    36.2 KB · Views: 22
Last edited by Insektaure,
1.1.0 Released !

- Now support Let's Go Pikachu / Eevee games

1.2.0 Released !

- Implement all boxes overview for Save and Bank boxes (access with ZL / ZR)

1.3.0 Released !

Improvements & Fixes :
  • New Applet mode (album/HB menu): Bank-only access — All Games — two banks side by side for bank-to-bank transfers. Save data is not accessible in this mode.
  • Banks that are currently in use cannot be deleted.
  • When switching banks, the selector appears on the side being switched while the other panel stays visible.
  • Bank switching now always saves your game and bank together to prevent data corruption.
Multi-Select Improvements :
  • Drag selection : Hold Y and move with the D-Pad to select a rectangular group of Pokemon at once, instead of selecting them one by one.
  • Select all : Double-tap Y to select every Pokemon in the current box. Selected slots are highlighted in green instead of cyan.
  • Position-preserving placement : When using "select all" (green), Pokemon are placed at their original slot positions in the target box, allowing you to move an entire box layout as-is. All matching slots in the target must be empty.
  • Regular selections (individual toggle and drag) continue to fill the first available empty slots as before.

1.3.1 Released !

Save Backup Safety Checks
  • Before backing up your save data, the app now checks if your SD card has enough free space (requires 2x the save file size).
  • If space is low, a warning dialog shows how much space is available vs. needed, with the option to continue without a backup or cancel.
  • If a backup fails for any other reason, you'll get a similar prompt before proceeding — no more silent failures.

Bank Creation Space Check
  • Creating a new bank now checks available SD card space first.
  • If there isn't enough room, an error dialog shows the free and required amounts instead of attempting (and potentially failing) the write.
  • Overwrite / save of existing banks remains unchanged.

1.4.0 Released !

New Theme System
  • 7 selectable color themes
  • Theme selector accessible from the main view menu (+ button → Theme)
  • Quick theme switching with Y button on profile and game selection screens
  • Theme choice is saved automatically and persists across sessions
  • Preview theme live when scrolling the list

1.5.0 Released !

New : Search / Filter
  • Search for Pokemon across both panels (save and bank) from the menu (+ → Search)
  • Filter by species name, OT name, shiny, egg, alpha, gender, level range, and perfect IVs
  • Alpha filter only shown for Legends: Arceus and Legends: Z-A
  • Results displayed as a scrollable list with status badges: shiny, [A] alpha, [E] egg
  • Press A to jump directly to a Pokemon in the box view
  • Press L/R to skip 10 results at a time
  • Press X to go back and adjust filters
New : Delete Pokemon
  • Press X while holding Pokemon (single or multi-select) to delete them
  • Confirmation dialog prevents accidental deletion
  • Useful for clearing boxes of rejected eggs or unwanted Pokemon

1.5.1 Released !

Box Switching
  • Hold L / R shoulder buttons to auto-repeat box switching (no more mashing!)
  • Hold L / R in search results list to fast-scroll through pages
New: Search Highlight Mode
  • Search result modes: Choose between two ways to view search results
  • Highlight (default): Returns to the box view with matching Pokemon outlined and non-matches dimmed
  • List: Scrollable result list with jump-to — same as before
  • Mode selector: Use Left / Right on the Mode row in the search filter to switch between List and Highlight
  • Live highlight tracking: Moving, swapping, or deleting Pokemon while highlights are active updates the highlights in real-time
  • Dismiss highlights: Press B to clear highlights and return to normal view
New: Search Highlight in Box View
  • Boxes containing search matches are outlined in the box view (ZL / ZR)
  • Matching Pokemon highlighted in the mini box preview
  • Non-matching Pokemon dimmed in the mini preview

1.5.2 Released !

New: Bank Box Renaming
  • Rename bank boxes from the box view (ZL / ZR) — press Y on any box to set a custom name (max 16 characters)
  • Names are saved in the bank file and persist across sessions
  • Existing banks are fully backward compatible — unnamed boxes display as "Bank 1", "Bank 2", etc.
  • Box view overlay now shows a subtitle: bank file name for bank panels, profile and game name for save panels
  • Long bank file names are truncated with (..) in the panel header to prevent overflow

1.6.0 Released !
  • Add FireRed / LeafGreen support (game version 1.0.0)

1.6.1 Released !
  • Forbid LGPE party members to be able to move to bank (could make save-file invalid)

1.6.2 Released !
  • Forbid releasing LGPE party members
  • Remove selected slots from multi-select when releasing individual selected Pokemon from details view

1.6.3 Released !
  • Add radar chart visualization for IVs and EVs
  • Add bank count display for each game in UI
  • Display correct TID and SID in Pokemon details (miscalculated before)
  • Fix wrong gender calculation & display for Gen 9

1.7.0 Released !

New: Wondercard Injection
  • Inject event wondercard files directly into your saves / banks as fully formed Pokemon
  • Support : LGPE / SWSH / BDSP / PLA / SV / LZA
  • Fully generates the Pokemon from wondercard data (PID, IVs, nature, ability, moves, OT, ribbons, ...)
  • Matches official distribution behavior — shiny locks, fixed IVs, ability restrictions, and date windows are all respected
  • Game-specific stat calculations are handled correctly (LGPE awakening values + CP, PLA ganbaru values, ...)

1.7.1 Released !

Improvements:
  • Pokemon details now show all ribbons and marks as sprite icons with names
  • Pokemon details now display Held item
  • Use L / R to jump to the previous / next non-empty slot without closing the detail popup
  • Filter Pokemon by Has Ribbon, Has Mark, or Has Any in the search menu
New: Export Pokemon to file
  • Export individual Pokemon as PKHeX-compatible .pk files from the detail view (X button)
  • Select multiple Pokemon and export them all at once from the menu
  • Exported filenames include human-readable form names (Alolan, Galarian, Origin, etc.) instead of numeric form IDs

1.7.2 Released !
  • Ball Icon — The Poke Ball used to catch the Pokemon is displayed next to the species name in the detail view
  • Move Type Icons — Each move in the detail view now shows its type icon
  • Moves in 2-Column Layout — Moves display in a 2x2 grid, matching the in-game battle layout
  • Technical Data — PID, EC, raw TID/SID, and TSV shown at the bottom of the detail view
  • Hold L / R shoulder buttons to auto-repeat navigating in detail view (no more mashing!)

1.7.3 Released !

Performance Improvements:
  • Reduced input lag and improved frame responsiveness across all screens
  • Pokemon data is now cached per box, eliminating repeated decryption overhead
  • Text and UI labels are now cached, reducing rendering workload
  • Slot display info (species, name, level, shiny, etc.) is pre-computed and cached per box
  • Screen only redraws when something actually changes, saving CPU/GPU cycles
  • App should now be smoother !

1.7.4 Released !
  • LED Activity Indicator: the controller LED now blinks during save and backup operations (save writes, bank saves, backup creation, ...). On Switch Lite, the built-in notification LED lights up during writes instead.
  • Optimized UI Rendering: text measurement now uses the rendering cache, eliminating redundant FreeType glyph shaping.

1.7.5 Released !
  • Shiny Sprites: shiny Pokemon now display their actual shiny color sprites
  • Form-Aware Sprites: alternate forms (Alolan, Galarian, Hisuian, Paldean, Origin, Therian, Unown letters, and 140+ others) now show their correct sprite
  • LED Activity Indicator: can now be disabled by placing a noled.cfg file in the pkHouse folder

1.7.6 Released !
New "View All Banks" option
  • On the game selector screen - navigate below the game cards to access it
  • Banks are displayed in a grouped list with game headers (e.g. "Sword / Shield", "Scarlet / Violet")
  • Selecting a bank opens it in dual-bank mode - no save file needed, just like applet mode
  • After picking your first bank, you're prompted to pick a second bank from the same game for side-by-side management
  • Full bank management (create, rename, delete) available once a bank is opened
  • Theme selector accessible from the all-banks list via Y
Navigation Improvements
  • Cursor now wraps between panels - pressing left at the edge of the left panel jumps to the right panel, and vice versa
  • When only one panel is loaded, the cursor wraps within it instead of getting stuck at the edge
Bug Fixes
  • Fixed bank list scroll not resetting when the cursor wraps around (top to bottom or bottom to top)
  • Fixed left panel showing stale Pokemon data from a previously loaded bank when no left bank is loaded in dual-bank mode

1.8.0 Released !

Species Search Overhaul
  • Replaced the free-text keyboard species search with a visual two-step picker
  • First screen: alphabetical letter grid - select a letter to filter species
  • Second screen: species list with sprites, sorted alphabetically - select to set the filter
  • Only species available in the current game are shown
  • Letters with no matching species are dimmed and cannot be selected
  • Selected species appears with its sprite on the search filter screen
  • Select "-" to clear the species filter back to "any"

1.9.0 Released !

New: Pokedex Auto-Registration

Pokemon transferred from the bank or wondercard to a save file are now automatically registered in the Pokedex as caught.
This fixes the potential issue where version-exclusive Pokemon transferred between dual games would not appear in the Pokedex.

Supported games:
  • Scarlet / Violet (+DLCs)
  • Sword / Shield (+DLCs)
  • Brilliant Diamond / Shining Pearl
  • Let's Go Pikachu / Eevee
  • FireRed / LeafGreen
Legends: Arceus & Legends: Z-A are excluded since all Pokemon are available (no version exclusive).

What gets registered:
  • Caught & Seen status
  • Gender, Language, and shiny flags
  • Form tracking (BDSP alternate forms, SwSh Alcremie decorations, Eternatus Gigantamax)
  • Display entry (form, gender, shiny) on first registration
  • Size data and capture count (LGPE)
  • Seen copies sync (FRLG)
  • Neighbor discovery / "heard" entries (SV)
  • Battled count (SwSh)

1.9.1 Released !

FireRed / LeafGreen Multiple Version Support
  • All regional versions of FireRed / LeafGreen are now supported (English, Spanish, French, German, Italian, and Japanese)
  • Each version is detected automatically by title ID
  • All FRLG versions share the same bank folder, so Pokemon can be moved freely between any language version via the bank
  • Japanese character encoding support
  • Nicknames and OT names from Japanese FRLG saves now display correctly in hiragana / katakana
  • Uses the per-Pokemon language byte, so Japanese Pokemon traded into other language saves (or stored in the bank) are always decoded correctly
  • Box names in Japanese saves also display properly
Game selector pagination
  • When more than 12 games are available, the selector is paginated across multiple pages
  • Navigate pages with L / R shoulder buttons or buttons on the left and right edges

1.10.0 Released !

Multi-Language Support
  • Internationalization (i18n): the app now supports 9 languages, with automatic detection based on the Switch system language.
  • Support English, Deutsch, Español, Français, Italiano, Nederlands, Português, Русский, 日本語
  • Language Selector: New "Language" option in the menu (+) to manually override the language at any time. Your choice is saved and persists across sessions.
Note : languages files are machine translated. Feedback is welcome !

1.10.1 Released !

- Add box-state icons in ZL/ZR all-boxes overview (box cell now shows a small icon on the left indicating its state).

1.10.2 Released !

- Add Wondercard support for Shiny Volcanion (Legends Z-A)
 

Attachments

  • 011_1.jpg
    011_1.jpg
    114.8 KB · Views: 27
  • 011_2.jpg
    011_2.jpg
    111.7 KB · Views: 27
Last edited by Insektaure,
Good idea !

I'll try to implement that in a future version.

I don't think it will be complicated since the move logic is done, I just need to think of something convenient & easy to use !
 
I dont play Pokemon, but this looks like an incredible tool! Great addition to the community, thank you!
 
1.3.0 Released !

Improvements & Fixes :
  • New Applet mode (album/HB menu): Bank-only access — All Games — two banks side by side for bank-to-bank transfers. Save data is not accessible in this mode.
  • Banks that are currently in use cannot be deleted.
  • When switching banks, the selector appears on the side being switched while the other panel stays visible.
  • Bank switching now always saves your game and bank together to prevent data corruption.
Multi-Select Improvements :
  • Drag selection : Hold Y and move with the D-Pad to select a rectangular group of Pokemon at once, instead of selecting them one by one.
  • Select all : Double-tap Y to select every Pokemon in the current box. Selected slots are highlighted in green instead of cyan.
  • Position-preserving placement : When using "select all" (green), Pokemon are placed at their original slot positions in the target box, allowing you to move an entire box layout as-is. All matching slots in the target must be empty.
  • Regular selections (individual toggle and drag) continue to fill the first available empty slots as before.
 
  • Like
Reactions: digdat0
1.3.1 Released !

Save Backup Safety Checks
  • Before backing up your save data, the app now checks if your SD card has enough free space (requires 2x the save file size).
  • If space is low, a warning dialog shows how much space is available vs. needed, with the option to continue without a backup or cancel.
  • If a backup fails for any other reason, you'll get a similar prompt before proceeding — no more silent failures.

Bank Creation Space Check

  • Creating a new bank now checks available SD card space first.
  • If there isn't enough room, an error dialog shows the free and required amounts instead of attempting (and potentially failing) the write.
  • Overwrite / save of existing banks remains unchanged.
 
Note: Moving Pokemon between different games is not supported. Banks are separated by game family because transferred Pokemon would lack the HOME Tracker ID required for cross-game compatibility.

Hello and thank you for your work!

I have a question regarding cross game Pokemon storage. I understand that moving Pokemon between different games isn't supported due to the transferred Pokemon lacking the proper home tracker ID.

That said, would it be possible to implement an optional, opt-in feature that allows cross game Pokemon storage anyway? My understanding (which is admittedly surface level) is that the primary issue would only arise if those Pokemon were later transferred into Pokemon HOME. If that’s the case, many users of this homebrew may not have access to Pokemon HOME in the first place, so the risk might be limited to a smaller group of users.

I completely agree that transferring into different games could cause issues to missing information from game to game. But perhaps one solution could be allowing a shared storage bank while restricting those Pokemon from being injected directly into incompatible games unless they came from that game in the first place.

I completely understand the risks and technical limitations involved, but I wanted to ask whether such a feature, clearly marked and used at the user’s own risk, might be feasible so that a living dex could completed and stored locally.

If I’m misunderstanding any technical details, I’d genuinely appreciate any clarification. Thank you again for your time and for all your hard work!
 
  • Like
Reactions: troytheboy
Hey man, i apreciate it, in 2025 i was trying to find something like this and its perfect! Just one question, how do i move pokemon from one game to another (e.g: PLA to PZA), im trying but i cant find an option/way to do that, thanks in advance!

Edit: one thing that i think its missing is a way to look at all your banks from all your games, maybe a button as the same as the games one
 
Hello and thank you for your work!

I have a question regarding cross game Pokemon storage. I understand that moving Pokemon between different games isn't supported due to the transferred Pokemon lacking the proper home tracker ID.

That said, would it be possible to implement an optional, opt-in feature that allows cross game Pokemon storage anyway? My understanding (which is admittedly surface level) is that the primary issue would only arise if those Pokemon were later transferred into Pokemon HOME. If that’s the case, many users of this homebrew may not have access to Pokemon HOME in the first place, so the risk might be limited to a smaller group of users.

I completely agree that transferring into different games could cause issues to missing information from game to game. But perhaps one solution could be allowing a shared storage bank while restricting those Pokemon from being injected directly into incompatible games unless they came from that game in the first place.

I completely understand the risks and technical limitations involved, but I wanted to ask whether such a feature, clearly marked and used at the user’s own risk, might be feasible so that a living dex could completed and stored locally.

If I’m misunderstanding any technical details, I’d genuinely appreciate any clarification. Thank you again for your time and for all your hard work!
Hey man, i apreciate it, in 2025 i was trying to find something like this and its perfect! Just one question, how do i move pokemon from one game to another (e.g: PLA to PZA), im trying but i cant find an option/way to do that, thanks in advance!

Edit: one thing that i think its missing is a way to look at all your banks from all your games, maybe a button as the same as the games one
their is an app called pokeswitch that works for this
 
  • Wow
Reactions: TeriyakiThames
I understand the need for cross gen bank / game transfer, but it involve gen conversion scripts to keep them compatible from one game to another.

Unfortunately it's not like "copy paste" from one save to another, there are different encryption system per games and not all data are "as-is" (multiple offset, blank data, in game calculation,...). If not implemented correctly this would lead to savefile corruption among other things.

I could do it but it's not what the app was suppose to do in the first place (i'll check things up just in case).

I'm currently working with other devs to port the 3DS PKSM app to the switch with full support, I think it will cover these cases.

On the option to look at all your bank list at once, I'll try to think of something !
 
I understand the need for cross gen bank / game transfer, but it involve gen conversion scripts to keep them compatible from one game to another.

Unfortunately it's not like "copy paste" from one save to another, there are different encryption system per games and not all data are "as-is" (multiple offset, blank data, in game calculation,...). If not implemented correctly this would lead to savefile corruption among other things.

I could do it but it's not what the app was suppose to do in the first place (i'll check things up just in case).

I'm currently working with other devs to port the 3DS PKSM app to the switch with full support, I think it will cover these cases.

On the option to look at all your bank list at once, I'll try to think of something !
Ah I see, thanks for the clarifications! Also thank you Wentar, I'll check it out.
 
Hi, I have been using the bank a lot with FRLG and it has been a real time saver when transfering from one game to another!
The only two pet peeves I found while using the app its the pokedex not being uptaded when moving a new species to a game and accidentaly triggering the select all when spaming "y" to select multiple pokemons in a box lol
Again I really apreciate the time you gave it to make this app and I look foward to what improvements you will add in the future
 
  • Like
Reactions: Insektaure
I haven't considered this before but it's a great suggestion.

As we manipulate only the boxes content and we are not mimicking a natural exchange transfer like we have ingame, the pokedex is not being updated / triggered.

I'll look into it and see what I can do (should be relatively easy to implement since we know how the save block works, but I'll need to do heavy testing before shipping this update).
 
Hello, when I enter the Pokémon selection box, I can't go back to the menu where I select the games. How do I go back? I press B, but it doesn't go back.
 
When you are on the box view, you must press the PLUS (+) button to open the menu, then select "Change Game".

It will save whatever changes you made before switching to another one.
 
  • Like
Reactions: RuanSantos

Site & Scene News

Popular threads in this forum