This works for me right now (March 2026) — screenshot of a working local todo app using this exact config + ic-reactor attached below.
The issue seems to be that very recent releases (like release-2026-03-13 and probably newer ones) no longer include the internet_identity_dev.wasm.gz asset — only the production wasm is published. That’s why /latest/download/internet_identity_dev.wasm.gz 404s now.
It’s a bit strange/annoying for local dev — cc @aterga@sea-snake — any plan to bring back publishing the dev variant in every release, or is there a new recommended way to run a dev-mode II locally?
In the meantime, sticking to release-2026-03-09 (or any March 9 or earlier that has the _dev file) gets you going quickly.
Here’s a minimal working example repo I just threw together with ic-reactor + this II config → Todo App
We’re gradually phasing out the dev build in favor or deploy arguments that do the same, the current dev experience might be a bit messy at the moment.
You can deploy the production wasm with the following options:
dummy_auth = opt opt record { prompt_for_index = false }
Replaces passkey interaction with zero bytes private key, set to true to prompt for an index, in case you want multiple identities with different passkeys.
fetch_root_key = opt true
Fetches the local DFX root key instead of using the hardcoded mainnet one.
Currently the backend wasm still serves the frontend, but moving forward you’ll soon need to deploy two wasms for II (backend and frontend). We’ll post an update on the forum with details for once this is the case.
There’s also dfx pull which should work if you point to the production canister id (rdmx6-jaaaa-aaaaa-aaadq-cai). This avoids the need to manually having to configure the wasm location and deploy arguments.
Since we’re in middle of the canister split, it’s not entirely clear yet if dfx pull is going to be compatible with multiple canisters, meanwhile there’s also the question about the new icp cli. It’s on our backlog to look into these details and update documentation accordingly.
If you use a local port different from 8080, you have to adjust it in all places inside init_arg, not just in the bind URL.
While initializing your authClient, you need to set uqzsh-gqaaa-aaaaq-qaada-cai (the II frontend) in place of rdmx6-jaaaa-aaaaa-aaadq-cai for the identity provider. For example: