# Create-mn-app Hello World scaffold: cascading version errors on local devnet deploy (compact-js/ledger-v9)

**URL:** <https://forum.midnight.network/t/create-mn-app-hello-world-scaffold-cascading-version-errors-on-local-devnet-deploy-compact-js-ledger-v9/1335>\
**Category:** Technical Questions\
**Created:** [September 6, 2026, 9:49pm UTC](https://forum.midnight.network/t/create-mn-app-hello-world-scaffold-cascading-version-errors-on-local-devnet-deploy-compact-js-ledger-v9/1335 "2026-09-06T21:49:17Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![spiffamani](https://avatars.discourse-cdn.com/v4/letter/s/f07891/32.png) [@spiffamani](https://forum.midnight.network/u/spiffamani)\
**Post date:** [September 6, 2026, 9:49pm UTC](https://forum.midnight.network/t/create-mn-app-hello-world-scaffold-cascading-version-errors-on-local-devnet-deploy-compact-js-ledger-v9/1335/1 "2026-09-06T21:49:17Z")

</div>

Hi all — hitting a chain of dependency issues trying to deploy the default Hello World template from create-mn-app@0.5.1 to the local devnet. Posting the full error sequence in case others are hitting the same thing, since it looks version-related rather than something in my setup.

Environment: Windows 11 + WSL2/Ubuntu, Node 22.23.2, Docker Desktop with WSL integration, Compact compiler 0.34.0.

Sequence of errors:

1. Fresh scaffold (compact-runtime@^0.19.0, midnight-js-\*@4.1.1, wallet-sdk@1.2.0) fails with:  
ContractConfigurationError: Failed to configure constructor context with coin public key  
Cause: Cannot read properties of undefined (reading ‘coinPublicKey’)  
at decodeZswapLocalState (…/compact-js/src/effect/ContractExecutable.ts)

Root cause turned out to be a duplicate nested copy of compact-js@2.5.1 under midnight-js-protocol’s own node\_modules, separate from the top-level version.

1. Forcing a single version via “overrides”: { “@midnight-ntwrk/compact-js”: “2.5.5-rc.8” } and reinstalling fixed that error, but surfaced a new one at the deploy step:  
ContractConfigurationError: Unsupported signature scheme ‘undefined’ for a contract maintenance authority; supported schemes are: schnorr, ecdsa  
at createMaintenanceAuthority (…/compact-js/src/effect/ContractExecutable.ts:683)

No signing key is explicitly passed to deployContract() (using the scaffold’s default deploy.ts), so I’d expect an auto-generated one, but the scheme comes back undefined.

Question: Is this a known compatibility gap between wallet-sdk@1.2.0 and compact-js@2.5.5-rc.x, and is there a currently-recommended matching version set for the Hello World scaffold? Happy to share full logs/package.json if useful.

Thanks!

---

<div class="post-metadata">

**Author:** ![nasihudeenJ](https://avatars.discourse-cdn.com/v4/letter/n/51bf81/32.png) [@nasihudeenJ](https://forum.midnight.network/u/nasihudeenJ)\
**Post date:** [September 9, 2026, 7:43am UTC](https://forum.midnight.network/t/create-mn-app-hello-world-scaffold-cascading-version-errors-on-local-devnet-deploy-compact-js-ledger-v9/1335/2 "2026-09-09T07:43:40Z")

</div>

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.`
