Configuration
every key, every default.
The runtime settings you publish in config.json (or Firebase), the build settings you pass as Dart defines, and the identity constants you edit in code. Every name on this page was checked against the 1.0.0 source.
01Where a value comes from
Highest wins: operator (this device's console) → remote (your published config) → built-in default. How to publish a remote config is in Installation. The console shows the source of each value next to it: OPERATOR, REMOTE CONFIG or BUILT-IN DEFAULT.
Remote sources, in the order the app tries them (lib/main.dart):
- Local file, debug builds only on iOS / Android:
~/.axis/admin_config.json, or the path in theAXIS_LOCAL_CONFIGenvironment variable. Ignored in release builds and on the web. - Hosted JSON at
kAdminConfigUrl(lib/core/config/app_config.dart), when not empty. - Firestore document
app_config/runtime_admin_config, when Firebase is configured. - Remote Config parameter
admin_config(a JSON string), when Firebase is configured.
02Runtime settings (config keys)
The keys AXIS 1.0.0 reads and acts on. Each can be published remotely or set in the operator console.
| Key | Default | What it does |
|---|---|---|
hyperliquid_perps_enabled | false | Master switch for trading. Off refuses new positions and transfers to the stock dex; closing and withdrawing stay available. |
stocks_enabled | true | Shows the stock / commodity (xyz) markets. |
builder_fee_enabled | false | Attaches your builder code to orders. See Earnings. |
builder_address | empty | The address Hyperliquid pays. 0x + 40 hex characters, not the zero address. |
builder_fee_tenths_bps | 0 | Perps fee in tenths of a basis point, 1 to 100 (100 = 0.1 %, the protocol cap). |
builder_fee_stock_tenths_bps | 0 | Same units for the xyz markets. 0 = use the perps fee. |
app_name | AXIS | Window / task title and the About screen. |
primary_color | #7CF5D5 | Accent colour, as #RRGGBB. Invalid values fall back to the default mint. |
tagline | empty | Shown on the About screen. |
support_email | empty | Used by the Support screen. Empty = kAxisSupportEmail from axis_identity.dart. |
support_url, website | empty | Links on the About screen. |
twitter, discord, telegram | empty | Optional social links on the About screen; hidden when empty. |
walletconnect_project_id | empty | Reown project ID for dApp connections (or use the REOWN_PROJECT_ID build setting). |
walletconnect_enabled | true | Turns the WalletConnect screen on or off. |
maintenance_mode | false | Replaces the whole app with the maintenance screen. |
maintenance_message | "We'll be back soon…" | Text on the maintenance screen. |
min_app_version | empty | Forces an update below this version (for example 1.2.0). Empty disables the check. |
Most keys also accept camelCase (builderAddress, hyperliquidPerpsEnabled …).
Keys that do nothing yet
Not active in this version The model and the console still carry keys from the wallet engine AXIS grew from. No AXIS screen reads them: swap_enabled, bridge_enabled, buy_enabled, sell_enabled, send_enabled, discover_enabled, and the swap fee (fee_enabled, fee_wallet_address, fee_bps). Leave them at their defaults.
The network is not a config key
Mainnet / testnet is chosen at build time (HYPERLIQUID_NETWORK, below) or per device in the operator console. A published config cannot move a build between networks, on purpose.
03Example config.json
Example only: replace the address with one you control, and choose your own rate.
{
"hyperliquid_perps_enabled": true,
"stocks_enabled": true,
"builder_fee_enabled": true,
"builder_address": "0x<your-40-hex-character-address>",
"builder_fee_tenths_bps": 10,
"builder_fee_stock_tenths_bps": 0,
"app_name": "<Your Terminal>",
"primary_color": "#7CF5D5",
"support_email": "support@<your-domain>",
"website": "https://<your-domain>",
"maintenance_mode": false,
"min_app_version": ""
}
Keys you leave out keep their built-in default. A value that fails validation (a malformed address, a fee above 100) is not applied: the build falls back to no builder code rather than blocking trading.
04Build settings (Dart defines)
Passed as --dart-define=NAME=value or in a file with --dart-define-from-file=<file>. They are compiled in; changing one needs a new build.
| Name | Default | Purpose | Where to get it |
|---|---|---|---|
HYPERLIQUID_NETWORK | mainnet | mainnet or testnet. Anything unrecognised resolves to mainnet. | Your choice |
REOWN_PROJECT_ID | empty | WalletConnect (Reown). Empty = dApp connections unavailable. | cloud.reown.com |
AXIS_DEMO | false | Seeds sample data for a demo site. Never for a real build (why). | — |
WEB_PUSH_VAPID_KEY | empty | Web push through Firebase Cloud Messaging. | Firebase console → Project settings → Cloud Messaging |
APP_STORE_URL, PLAY_STORE_URL | empty | Store links used by the update prompt. | Your store listings |
APP_VERSION, APP_BUILD, APP_PACKAGE | 1.0.0, 1, com.axisterminal.app | Shown on the About screen. | Match pubspec.yaml and your IDs |
REMOTE_CONFIG_URL | empty | Optional JSON for the client feature flags on Account → Operator flags (a separate, inherited system). | Your hosting |
The define list in the code also contains explorer, swap, on-ramp and data-provider keys (ETHERSCAN_API_KEY, ZEROX_API_KEY, MOONPAY_API_KEY, COINGECKO_API_KEY and others in lib/core/config/api_key_repository.dart). They belong to the inherited wallet engine; the Hyperliquid client and the perps screens do not use them.
05Identity constants (code)
lib/core/config/axis_identity.dart. Edit, then rebuild.
| Constant | Used for |
|---|---|
kAxisAppName, kAxisTagline | Product name and one-line description |
kAxisWebsiteUrl, kAxisIconUrl | Your site, and the icon other apps see over WalletConnect |
kAxisSupportEmail | Support screen fallback when support_email is empty |
kAxisPrivacyUrl, kAxisTermsUrl, kAxisRiskUrl | Legal links on Account. All three must exist before store submission. |
kAxisApplicationId | Shown on the About screen; keep equal to your real app ID |
Other hard-coded addresses to change are listed in Rebranding → URLs.
06RPC endpoints
Hyperliquid's endpoints are fixed per network in lib/core/hyperliquid/hyperliquid_env.dart and need no key. Deposits and withdrawals use Arbitrum One; its default public RPC endpoints are in lib/core/chains.dart. Users can add their own RPC under Account → Networks. For production traffic, use an RPC provider account of your own: provider terms generally forbid sharing keys.
