Dfx generated internet identity on dfx.json no longer working

"internet_identity": {
      "candid": "https://github.com/dfinity/internet-identity/releases/latest/download/internet_identity.did",
      "frontend": {},
      "remote": {
        "id": {
          "ic": "rdmx6-jaaaa-aaaaa-aaadq-cai"
        }
      },
      "type": "custom",
      "wasm": "https://github.com/dfinity/internet-identity/releases/latest/download/internet_identity_dev.wasm.gz"
    }

my dfx version is 0.30.2
what will be the new json?
is this due to the frontend & backend split?

Hey @kayicp (and others running into this),

I’m on the same dfx version as you and got it working again by pointing to a specific recent release that still ships the dev build.

Update your dfx.jsoninternet_identity section to this (adjust the new_flow_origins if your frontend port is different):

"internet_identity": {
  "wasm": "https://github.com/dfinity/internet-identity/releases/download/release-2026-03-09/internet_identity_dev.wasm.gz",
  "candid": "https://github.com/dfinity/internet-identity/releases/download/release-2026-03-09/internet_identity.did",
  "type": "custom",
  "init_arg": "(opt record { new_flow_origins = opt vec { \"http://rdmx6-jaaaa-aaaaa-aaadq-cai.localhost:4943\" } })",
  "specified_id": "rdmx6-jaaaa-aaaaa-aaadq-cai",
  "remote": {
    "id": {
      "ic": "rdmx6-jaaaa-aaaaa-aaadq-cai"
    }
  }
}

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

2 Likes

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.

2 Likes

TL;DR

  • Please use the dfx.json below as a template until further notice.
  • Let us know if something is broken in your local development.
  • We’re in a transition phase, so please be patient. :slight_smile:
{
  "dfx": "0.31.0",
  "canisters": {
    "internet_identity": {
      "type": "pull",
      "id": "rdmx6-jaaaa-aaaaa-aaadq-cai"
    },
    "internet_identity_frontend": {
      "type": "custom",
      "specified_id": "uqzsh-gqaaa-aaaaq-qaada-cai",
      "candid": "https://github.com/dfinity/internet-identity/releases/download/release-2026-03-16/internet_identity_frontend.did",
      "wasm": "https://github.com/dfinity/internet-identity/releases/download/release-2026-03-16/internet_identity_frontend_dev.wasm.gz",
      "init_arg": "(record { fetch_root_key = opt true; backend_canister_id = principal \"rdmx6-jaaaa-aaaaa-aaadq-cai\"; analytics_config = null; related_origins = opt vec { \"http://uqzsh-gqaaa-aaaaq-qaada-cai.localhost:8080\" }; backend_origin = \"http://rdmx6-jaaaa-aaaaa-aaadq-cai.localhost:8080\"; captcha_config = opt record { max_unsolved_captchas = 50 : nat64; captcha_trigger = variant { Static = variant { CaptchaDisabled } } }})"
    }
  },
  "networks": {
    "local": {
      "bind": "127.0.0.1:8080",
      "replica": {
        "subnet_type": "system"
      }
    },
    "ic": {
      "providers": [
        "https://icp-api.io"
      ],
      "type": "persistent"
    }
  },
  "version": 1
}

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:

identityProvider: "http://uqzsh-gqaaa-aaaaq-qaada-cai.localhost:8080"
3 Likes