Hi spiffamani, welcome to the forum nice writeup, this really does look version-related rather than a setup issue.
I dug into the actual create-mn-app@0.5.1 template (still the current latest on npm, so you’re on the right version there ignore the 1.0.x line if you spot it, that’s a stale numbering track from October 2025 with an older, pre-consolidation dependency set) and compared it against what @midnight-ntwrk/midnight-js-protocol@4.1.1 actually publishes. Both of your errors trace back to the same underlying issue.
The stock scaffold never depends on @midnight-ntwrk/compact-js directly. midnight-js-protocol@4.1.1 bundles it internally as an exact-pinned dependency, alongside ledger-v8@8.1.0, and re-exposes both through subpath exports like @midnight-ntwrk/midnight-js-protocol/compact-js and /ledger. The scaffold’s own deploy.ts imports CompiledContract from that subpath, never from a standalone compact-js package. So if your project ended up with @midnight-ntwrk/compact-js as a top-level dependency, that’s not something the scaffold put there it likely came in from a manual add, an older tutorial, or a stale lockfile entry.
Once that happened, you had two live copies of compact-js in the tree that npm couldn’t dedupe against each other, which is a classic dual-package hazard: an object built with one copy’s classes gets handed to a function from the other copy, an identity or branded-type check silently fails, and you get undefined instead of a clear error. That’s exactly your decodeZswapLocalState / coinPublicKey failure.
The overrides fix unfortunately traded that problem for a worse one. Forcing every resolution of compact-js to 2.5.5-rc.8 does dedupe the module, but it also stomps on midnight-js-protocol@4.1.1’s own pinned compact-js@2.5.1. That 2.5.5-rc.x line is built against ledger-v9, which right now only exists on npm as a release candidate (1.0.0-rc.4) nothing stable has shipped yet. midnight-js-protocol@4.1.1 and wallet-sdk@1.2.0 are both built against ledger-v8@8.1.0. So after the override, ledger-v8-shaped key and authority objects from midnight-js-protocol get passed into compact-js@2.5.5-rc.8’s createMaintenanceAuthority, which expects ledger-v9 shapes, its scheme-tag lookup comes up empty, and it falls back to undefined that’s your “Unsupported signature scheme” error.
So the real fix isn’t picking a different compact-js version at all, it’s removing it as a top-level concern entirely. Delete node_modules and your lockfile, drop the overrides block targeting compact-js or either ledger package, and check your package.json for a stray top-level @midnight-ntwrk/compact-js entry it shouldn’t be there, and if you find one, remove it. If your own code needs compact-js or ledger types directly, pull them from @midnight-ntwrk/midnight-js-protocol/compact-js (or /ledger, /compact-js/effect) rather than installing compact-js separately, since that guarantees you’re using the same instance the rest of the SDK uses internally. After a clean reinstall, npm ls @midnight-ntwrk/compact-js should show exactly one resolution, nested under midnight-js-protocol, and not a top-level entry at all.
For reference, the confirmed-current matching set from the live 0.5.1 template is compact-runtime@0.16.0, all the midnight-js-* packages (contracts, http-client-proof-provider, indexer-public-data-provider, level-private-state-provider, network-id, node-zk-config-provider, protocol, types, utils) at 4.1.1, and wallet-sdk@1.2.0. Compact compiler 0.34.0 is fine as-is since the hello-world contract’s pragma is >= 0.22.