Troubleshooting
symptom, cause, fix.
The problems you are most likely to meet, grouped by where they show up. Search with / for the exact error text.
01Build and run
Error: app_localizations.dart not found / AppLocalizations undefined
The translations are generated, not stored. Run flutter gen-l10n, then build again. Repeat it after every flutter clean.
flutter pub get fails on the SDK version
pubspec.yaml needs Dart 3.2 or newer. Update Flutter to a current stable release (flutter upgrade). Verified with Flutter 3.41.4.
Android build says "no google-services.json — building without Firebase"
That is a notice, not an error. Firebase is optional; the build continues without it. Run flutterfire configure if you want push, crash reports or the Firebase config channel (how).
Google Play rejects the upload as debug-signed
android/key.properties is missing or incomplete, so the release build used the debug key. Set all four signing values (how).
iOS: CocoaPods or signing errors
Run cd ios && pod install, open ios/Runner.xcworkspace (not the .xcodeproj) and pick your team under Signing & Capabilities.
"FirebaseService: dev placeholder credentials detected" in the log
Expected while lib/firebase_options.dart is the shipped placeholder. The app runs without Firebase.
02Trading
New orders are refused; closing still works
Perps are off. hyperliquid_perps_enabled ships false. Publish true in your config, or switch it on for one device in Operator console → Surfaces.
Prices look wrong, volumes are tiny
The build is on testnet. Check the network badge in the header and Operator console → Network. A build started with --dart-define=HYPERLIQUID_NETWORK=testnet, or a device switched to testnet in the console, stays there until changed back.
Stock / commodity markets (TSLA, GOLD) are missing
stocks_enabled is off, either in your published config or in the operator console on that device.
A deposit was sent but the balance did not change
Deposits bridge native USDC on Arbitrum to Hyperliquid. Amounts below 5 USDC are not credited, and bridged USDC.e is not accepted. Crediting usually takes about a minute and can take a few; the app keeps checking and says so if it is still waiting.
A withdrawal is smaller than requested
Hyperliquid charges a flat 1 USDC withdrawal fee, shown in the withdraw sheet. Withdrawals arrive on Arbitrum after a few minutes.
Market data stops updating
The live data comes over Hyperliquid's WebSocket. Check the connection, firewalls and ad blockers that block wss://api.hyperliquid.xyz/ws, then reload.
03Earnings
Earnings says NO BUILDER CODE
The builder fee is off, the address is empty or malformed, or the fee is 0 or above 100. Fix the values in your published config; the console shows the reason for a rejected value.
Orders carry the fee, but nothing arrives
Your builder address holds less than 100 USDC of perps collateral, or it is not in standard account mode. Check Earnings → Prerequisites (details).
ORDERS WITHOUT THE FEE is above zero
Those orders left without your code: the wallet had not approved your rate, the approval lookup failed, or the approval was revoked. The screen names the reason. Raising your fee makes every wallet approve again.
My users are not paying the fee I set in the console
The operator console changes only the device it is used on. Publish the builder fee in config.json or Firebase (why).
04Configuration
My config.json changes do not appear
Check in order: kAdminConfigUrl in lib/core/config/app_config.dart holds your address (not kAxisAdminConfigUrl, which nothing reads) and you rebuilt after setting it; the URL opens in a browser and returns valid JSON with status 200; on the web, the host sends a CORS header for your terminal's origin; the value is not overridden on that device (console tag OPERATOR → press CLEAR). The app fetches in the background, so the change shows on the next cold start.
Values keep changing back
With Firebase configured, the Firestore document app_config/runtime_admin_config is watched live and replaces the settings when it changes. Keep one channel, or keep both identical.
A device is stuck on the maintenance screen
maintenance_mode is on. Publish false. If it was set in the console on that device, the override stays until the app's data is cleared (web: clear the site data; mobile: reinstall), because the console is not reachable from the maintenance screen.
WalletConnect screen says it is unavailable
No Reown project ID. Set walletconnect_project_id or build with --dart-define=REOWN_PROJECT_ID=…, and check walletconnect_enabled is not false.
05Still stuck?
See Support. Include the version, the platform, the output of flutter --version, the exact command and the full error text.