Jump to content

Recommended Posts

Posted

Hi, do you have a discord or something? Im loving using pkvault and im trying to create a more "immersive" experience by syncing save files across devices and emulators. Id love to chat and see what other people are doing with it

Posted (edited)

New major update: PKVault 2.0 is available !

Full redesign, better UI/UX, made for SteamDeck as for Desktop,

Full support of gamepad & keyboard navigation.

Add dark mode, & sprite resizing.

A maximum of 2 storages can be opened side-by-side now.
This constraint comes with a better ability to switch saves & boxes, and a global better usage.

---

image.thumb.png.bef87c01c23f7ae8cff64f4774042690.png

image.thumb.png.c63696630bed87802e844b5006e2f9c1.png

image.thumb.png.cc648fe92615c0d584bf458b2366d092.png

---

I put a lot of work in this update, I hope you'll like it.
Please give your feedback, bug report or any issue !

Now that this major part is complete, here are most of next small steps for the short-term:

  • Update PKHeX to 26.07.07
  • Fix small issues reported here & on GitHub
  • Fix most of duplicate/ID-conflicts cases (common cases in gen5)
  • Allow edit some settings even with actions to save
  • Fill Pokédex details content (moves, evolves, locations, etc)
  • Add some flags (N, Mega)
  • Misc:
    • Deploy PKVault in other stores (like Flathub) if possible
    • Check if can be runnable on a modded Switch (small expectation)
    • Check if can be runnable on Android

Next relevant feature will probably be storage filters/sort & presets.

@hexanomalous I don't have a discord, but there is the one of ProjectPokemon: https://discord.gg/66PzPgD

Edited by chnapy
Answer hexanomalous
  • Ditto 1
Posted (edited)

Brother, I’m doing my bit by adding the Spanish translation to PkVault; I’d like to know how I can apply to become a contributor once I finish creating and translating all the files for this language.

Captura.PNG

Edited by Felxnord
Posted

@Felxnord Contributions are very welcomed !
I suggest you to check CONTRIBUTING.md and Technical README which includes how to add new language.
If you have any question it's best to use GitHub discussion since it's technical.

@PedroKeitawa You can. One of main PKVault feature is to passing a pkm from any Gen to any other Gen (if species is compatible with target save).

PKVault uses a logic of "variants". When you move a Pikachu from Gen2 to Gen3, a new "variant" of Pikachu is created for this generation (and attached to your pikachu, keeping them synchronized).
This logic of variants is required to avoid any data loss, like when you're doing Gen3 -> Gen2 (losing nature, ability, etc).

You can see more in the app: Help -> Storage -> Attached pokémons. Or here

 

  • Like 1
Posted
On 8/8/2026 at 2:21 PM, chnapy said:

@Felxnord Contributions are very welcomed !
I suggest you to check CONTRIBUTING.md and Technical README which includes how to add new language.
If you have any question it's best to use GitHub discussion since it's technical.

@PedroKeitawa You can. One of main PKVault feature is to passing a pkm from any Gen to any other Gen (if species is compatible with target save).

PKVault uses a logic of "variants". When you move a Pikachu from Gen2 to Gen3, a new "variant" of Pikachu is created for this generation (and attached to your pikachu, keeping them synchronized).
This logic of variants is required to avoid any data loss, like when you're doing Gen3 -> Gen2 (losing nature, ability, etc).

You can see more in the app: Help -> Storage -> Attached pokémons. Or here

 

Thank you for your answer. Im gonna check out the link.

Posted

Minor update 2.1.0.

A long-awaited major fix addressing the duplicate Pokémon that prevented transfer of certain Pokémon to PKVault storage (G5 games, and Ninjask/Shedinja) @axeil @Andrebarrzz91 @yeyizo

Multiple Pokédex adds: moves/evolutions/locations in details, and Mega.

Some bugs fix post-2.0, and a new language: Brazilian Portuguese !

Posted

Hi

Sorry, I’ve been using your program since yesterday, but I’m having some issues managing my save paths in Docker.

Currently, I have them configured as follows:

- /srv/dev-disk-by-uuid-75350116-06ce-4d31-9975-2c539bde1f99/D-BACKUPS/saved-games/saved-emulators/roms-gba:/data/saves
- /srv/dev-disk-by-uuid-75350116-06ce-4d31-9975-2c539bde1f99/D-BACKUPS/saved-games/saved-emulators/roms-nds:/data/saves-nds

The problem is that these folders do not appear in the PkVaul interface, so I cannot access them through the application. I currently have to manually copy my save files.

My idea was to use Syncthing on my local server and point it to the folder that is synchronized with Docker.

Is there a way to make these folders accessible through the PkVaul interface?

Posted (edited)
On 8/11/2026 at 9:00 AM, onyx3242 said:

Hi

Sorry, I’ve been using your program since yesterday, but I’m having some issues managing my save paths in Docker.

Currently, I have them configured as follows:

- /srv/dev-disk-by-uuid-75350116-06ce-4d31-9975-2c539bde1f99/D-BACKUPS/saved-games/saved-emulators/roms-gba:/data/saves
- /srv/dev-disk-by-uuid-75350116-06ce-4d31-9975-2c539bde1f99/D-BACKUPS/saved-games/saved-emulators/roms-nds:/data/saves-nds

The problem is that these folders do not appear in the PkVaul interface, so I cannot access them through the application. I currently have to manually copy my save files.

My idea was to use Syncthing on my local server and point it to the folder that is synchronized with Docker.

Is there a way to make these folders accessible through the PkVaul interface?

when you add a save directory, you need to add the closing 

/

so for example, you'll want to add a save directory in the pkvault GUI as follows:

/data/saves/
/data/saves-nds/

 I did find the save path editor to be a little wonky, if you delete the first character, the interface to add a path just disappears.

Additionally, before i submit an issue in Git, i noticed my Japanese Green save file is being identified as Blue version. Is there any plan to update so Green works?


Last, it would be awesome if we could have version/generation specific sprites.


Just found this project as i was seeking out alternatives for the ever looming pokemon Bank closure. Love what i'm seeing so far!

 

Edited by IMI4tth3w
  • 2 weeks later...
Posted

I just downloaded pkvault but I can't figure out why my moon save isn't working. I tried saving again ingame and I deleted every pokemon pkhex marked illegal. (save file is working there)

image.thumb.png.7a10d111c612e61084fff570bbe9be51.pngimage.thumb.png.e9b715fe4b0e1e9719a03b3384529c8e.pngmain

Posted (edited)

Please look into Let's Go -> Sword & Shield transfer compatibility. I tried to transfer Meltan from Let's Go Eevee into Sword and this is the error code that I got, saying it is incompatible with the save file (which couldn't be true since Meltan exists in Sword & Shield):

System.InvalidOperationException: Species incompatible: 808 > 807
   at PKMConverterUtils.CopyCommonPropertiesFrom(PKM pkm, PKM pkmSrc, Byte generation, PKMRndValues rndValues)
   at PK7Converter.ConvertToPK7(PB7 pb7, PKMRndValues rndValues)
   at PkmConvertService.TryVariantToPK(PKM source, PKMRndValues rndValues)
   at PkmConvertService.TryForwardConversion(PKM source, LanguageID fallbackLang, PKMRndValues rndValues)
   at PkmConvertService.ConvertRecursive(PKM current, Type targetType, LanguageID fallbackLang, PKMRndValues rndValues)
   at PkmConvertService.ConvertTo(ImmutablePKM sourcePkm, Type targetPkmType, PKMRndValues rndValues, SaveFile targetSave)
   at PkmConvertService.ConvertTo(ImmutablePKM sourcePkm, EntityContext context)
   at MainCreatePkmVariantAction.Execute(MainCreatePkmVariantActionInput input, DataUpdateFlags flags)
   at DataAction`1.ExecuteWithPayload(I input, DataUpdateFlags flags)
   at MovePkmAction.MainToSave(MovePkmActionInput input, DataUpdateFlags flags, String pkmVariantId, BoxDTO sourceBox, BoxDTO targetBox, Int32 targetBoxSlot)
   at MovePkmAction.<>c__DisplayClass8_0.<<Execute>g__act|0>d.MoveNext()
--- End of stack trace from previous location ---
   at MovePkmAction.Execute(MovePkmActionInput input, DataUpdateFlags flags)
   at DataAction`1.ExecuteWithPayload(I input, DataUpdateFlags flags)
   at ActionService.<>c__DisplayClass31_0`1.<<AddAction>g__applyFn|0>d.MoveNext()
--- End of stack trace from previous location ---
   at ActionService.ApplyAction(IServiceScope scope, Func`3 actionFn, DataUpdateFlags flags)
   at ActionService.AddActionInner(IServiceScope scope, Func`3 actionFn, DataUpdateFlags flags)
   at ActionService.AddAction[I](IServiceScope scope, Func`2 getScopedAction, I input, DataUpdateFlags _flags)
   at ActionService.AddAction[I](IServiceScope scope, Func`2 getScopedAction, I input, DataUpdateFlags _flags)
   at ActionService.MovePkm(String[] pkmIds, Nullable`1 sourceSaveId, Nullable`1 targetSaveId, String targetBoxId, Int32[] targetBoxSlots, Boolean attached)
   at PKVault.Backend.storage.routes.StorageController.MovePkm(String[] pkmIds, Nullable`1 sourceSaveId, Nullable`1 targetSaveId, String targetBoxId, Int32[] targetBoxSlots, Boolean attached)
   at lambda_method705(Closure, Object)
   at Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult()
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at ExceptionHandlingMiddleware.Invoke(HttpContext context)

Trying to transfer Melmetal gave me the same result. Additionally, when trying to transfer any other Pokemon from LGPE, their data gets jumbled up with their origin game getting changed (usually to SM/USUM or FRLG), which causes serious legality issues. This does not happen with Pokemon transferred from Gen 6 or SM/USUM, they are converted just fine with the only legality issue being the missing Home tracker (obviously). Also, when trying to "transfer" Pokemon from LGPE into SwSh via PKHeX, it works just fine, unlike in PKVault, so it looks like it's specifically a PKVault issue.

Edited by STikER

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...