10 · Troubleshooting and FAQ
Status: manual chapter. Audience: users and developers. Last updated: 2026-10-05.
Every symptom below is stated as symptom → cause → fix. Run the two diagnostics first; they resolve most situations on their own:
$ igit doctor # or: igit doctor --clone / --push / --json
$ igit suite verify # or: igit suite info --json
Installation and PATH
git clone igit://… fails with "not a git command" / "unknown remote
helper".
git-remote-igit is not on PATH. Git discovers remote helpers by the
git-remote-<scheme> naming convention. Install both binaries from the same
release and re-open the shell so PATH changes take effect.
igit runs, but push/clone behave like plain Git.
Unknown subcommands are forwarded to Git by design. Confirm you spelled the
subcommand exactly (clone, push, pull); igit help prints the full
command surface.
Windows reports access denied under ~/.igit/.
The keystore and config are written under a protected DACL (current user and
SYSTEM only). Do not relax the permissions; run as the same user that created
the files, or move the keystore with evm_keystore_dir and re-protect.
Suite verification
igit suite verify fails with a chain-ID mismatch.
The configured RPC belongs to a different network than evm_chain_id. Reset
the profile atomically — igit config set network injective-testnet — rather
than editing fields individually; a mixed-network configuration is exactly
what profile selection prevents.
"SuiteDirectory has no code" / version predates the first EVM suite.
The configured address is not a deployed Suite on this chain (wrong network,
typo, or a v1-era address). Use the documented testnet addresses —
0xf987396475d0a4c96b722e993a95d8720a6292ad (v4) or
0xf8844F90887731FFd607E1f59e39a3918F6eAb35 (v3) — and remember the CLI
points at exactly one Directory at a time.
Verification is slow against the public testnet RPC. Full verification is a long chain of dependent reads (about a minute against the public RPC). Results are cached for 30 seconds. A first success after a timeout is normal — retry once before investigating further.
The web shows "EVM Suite is not configured" or "verification failed". On public deployments the Settings form is read-only by design; the built-in profile supplies the addresses. A verification failure there means the configured Directory is not a valid active Suite for the network — re-check the address in Settings (local deployments only).
Keys and gas
"missing config: key_name".
Create or import a key first: igit key new <name> or
igit key import <name>, or pass --create-key <name> to igit setup push.
Transactions are rejected for insufficient funds / low gas price.
Fund the signing address shown by igit key show with testnet INJ
(faucet). All writes enforce a
minimum gas price of 160000000 wei; the client applies the floor
automatically when the RPC quotes less.
A write finished with "receipt was not confirmed". The transaction was broadcast but its receipt did not land within the ~2 minute window. The CLI retains the transaction hash and discards its cached nonce. Look the hash up on testnet Blockscout; if it reverted or never landed, simply retry the command — do not attempt manual nonce juggling.
Suite v3 (IPFS) push and read
igit doctor --push reports Kubo CLI / local Kubo API as FAIL.
v3 push requires the pinned local Kubo. Re-run igit setup push (or
--force); the API must be loopback-only (http://127.0.0.1:5001). If you
are deliberately working on Suite v4, run igit setup push --no-kubo and
expect these checks to SKIP.
Push fails while requesting upload authorization or replication.
The v3 rail depends on the configured upload service endpoints and the
read/write gateways. Check igit gateway status, and verify
upload.endpoint / upload.authorization_endpoint appear in
igit config list --internal (defaults come with the network profile).
Clone/fetch is slow or times out on a pack.
The helper health-ranks the hk/us gateways and falls back to ipfs.io.
Inspect with igit gateway status / igit gateway select; a pack that is
only cold on the public fallback may need a retry while the hot tier fetches
it.
Suite v4 (BYOS) push and read
"no storage profile bound to this repository (chainId/directory/repoId);
run igit storage add".
The storage reference file has no binding for this repository. Read the
repository's repoId from RepositoryCore.resolveRepository(owner, name)
(e.g. Blockscout's Read Contract pane), add a repositories entry with
chainId as a decimal string, and re-run igit storage add.
igit storage doctor fails on a file you believe is correct.
The checks are strict on purpose: profiles are a map (not a list), writer
and reader must be different profiles, the writer needs a credentialRef,
the reader needs a credentialRef or a publicReadBase, reader credentials
must not reuse the writer's variable names, S3 needs a commercial region and
no accountId, R2 needs region: "auto" and a 32-hex accountId. Compare
against the schema in Chapter 08.
Push fails with a credential resolution error.
A named environment variable is unset in the shell running the push.
Export both accessKeyEnv and secretKeyEnv (and sessionTokenEnv if
declared) in that shell and retry.
Push reverts with CommitmentMismatch.
The ref moved between your read and your write. Fetch, re-apply, push again.
Do not force blindly — on v4, force never waives the CAS.
Read-back digest or size mismatch after upload. The object stored is not the object uploaded. Look for a bucket lifecycle rule, a transforming proxy, or an intermediary rewriting objects. The client refuses to publish a ref to bytes it could not verify.
The web shows a repository but files/commits fail to load on v4.
The manifest or packs are not anonymously reachable, or CORS blocks the
browser. Ensure publicReadBase (or bucket public read) answers plain GET
and the bucket's CORS allows the application origin. The CLI reader will
still work through its own reader profile.
"Invalid manifest JSON, schema, context, commitment or limits" in the web. The browser bundle is older than the manifest schema (schema 2 landed 2026-10-05). A hard refresh picks up the deployed front end; the CLI from the same release reads both schemas.
Cloning and URLs
"invalid remote URL … expected igit://inj1… address or a registered username (3–32 chars,
[a-z0-9-], not starting with inj1); Git flags go after the repository
argument (igit clone owner/repo -q), because the first positional selects
the repository.
The same <owner>/<repo> opens a different repository than expected.
The name exists in more than one generation. In the web, add ?suite=4
(latest EVM) or ?suite=3 (earlier EVM), or use the archive path for V1. In
the CLI, point evm_suite_directory_address at the matching generation.
Web and wallets
No supported EVM wallet was detected. Install one of the supported EVM wallets (MetaMask, Rabby, OKX Wallet, Bitget, Trust, Coinbase, Brave, Keplr's EVM provider, Compass) or use WalletConnect. A Cosmos-only wallet cannot sign the EVM path.
Connect succeeds but every write says wrong network.
The session must be on Injective EVM chain 1439. The app attempts to switch
or add the chain automatically; if the wallet refuses (4902 path failed),
add the network manually: RPC https://k8s.testnet.json-rpc.injective.network/,
chain ID 1439, symbol INJ, explorer
https://testnet.blockscout.injective.network/.
WalletConnect QR cannot complete the EVM session.
The paired wallet must advertise eip155:1439. Keplr Mobile currently does
not, and is therefore not offered as compatible on this path.
Search finds nothing for a repository you just pushed.
The browser builds its repository index from chain events and direct contract
reads; give it a moment or search owner/name directly. The contract read is
always authoritative — the index is navigation-only.
CosmWasm v1 archive
An archived repository shows "Migration to EVM V2 or newer required". Expected. The V1 archive is read-only; editing and current features require a future migration that is not implemented. Browse, clone history out of it, and continue work on an EVM generation.
The archive page intermittently fails to load.
Archive reads go through Cosmos LCD endpoints with bounded retries and a
community fallback; the official sentry drops a share of browser
connections. Retry, or verify the same fact yourself with
igit archive query --lcd … --contract inj1mg6x7ht3zyyszed9aq67q6kd0y5rtq7wf756jh --height <N> '<query>'.
FAQ
Is igit a GitHub replacement?
It is decentralized code hosting that keeps the Git workflow: ordinary
git push / git clone / git fetch through the igit:// remote helper,
plus repository features (collaborators, transfers, guardians, moderation,
sponsorship, splits, usernames, badges, release checksums) on Injective. It
does not have issues/CI/pull-request workflows today.
What actually lives on chain? The control plane: repository identity, metadata, refs (commit pointers and storage commitments), permissions, moderation, economics. Packfile bytes live in the data plane — IPFS (Suite v3) or your own S3/R2 bucket (Suite v4).
Which generation should I use? Suite v4 (Chapter 04) for anything new — no Kubo, no IPFS dependency, your own bucket. Suite v3 if you maintain an existing IPFS repository. V1 is read-only history.
Can the same repository name exist in several generations?
Yes — they are distinct repositories with distinct repoIds. That is exactly
what the ?suite= URL parameter disambiguates in the web application.
Is mainnet supported?
Not yet. A mainnet profile exists in the code, but published profiles keep
SuiteDirectory empty until deployment, migration verification, security
review, and cutover evidence are approved. Testnet is the live environment.
Who pays for storage? On v4, you do — it is your bucket (storage, requests, egress, and verification read-backs). On v3, packs ride the project's IPFS data plane.
Is my private bucket a private repository? No. Private buckets are not anonymously readable, so the web cannot render them; authenticated reads require your own CLI reader profile. Private repositories and end-to-end encryption are future scope, not current features.
Can I use an S3-compatible provider other than AWS or Cloudflare R2?
No. Production supports aws-s3 and cloudflare-r2 only. The mainland-China
providers in the roadmap document are roadmap candidates — not supported, not
integrated — and must not appear in any configuration.
Is there gas sponsorship?
No. Every write is paid by its signer (minimum gas price 160000000 wei).
The sponsor command is repository revenue for maintainers, not transaction
fee sponsorship.
What do PASS / FAIL / BLOCKED / NOT PROVEN / HISTORICAL mean?
The project's bounded status vocabulary. PASS — verified with retained
evidence. FAIL — attempted and failed. BLOCKED — cannot be attempted in
the current environment. NOT PROVEN — not demonstrated yet, however likely
it seems. HISTORICAL — a frozen past record that is not current acceptance.
The labels are used verbatim and never softened; see
project status.
Next
- Full command surface → Chapter 02 · CLI reference
- Web screens → Chapter 03 · Web guide
- Contract model → Chapter 07
- Manual home → manual.md