Configuration
every setting and where it lives.
Three places hold settings: build-time VITE_* values for the dApp, environment variables for the operator server, and the console. This page lists every variable with its default and where to get the value.
01Where settings live
| Place | What goes there | When it applies |
|---|---|---|
.env.local (from .env.example) | Build-time VITE_* values for the dApp: RPC, WalletConnect, static fee, stock module build flag, router, IPFS gateway, operator server URLs. | At npm run build (or npm run dev). Change = rebuild. |
| Server environment | ADMIN_SECRET_KEY, PORT, HOST, data and dist folders, a locked server RPC. | When npm run server starts. Change = restart. |
Console (/admin) | Fee, referrals, brand, legal, access, trading safety, sponsored slots, moderation, integrations, notifications. | Live. Open tabs pick it up within about 5 minutes (Operator console). |
Vite compiles every VITE_* value into the JavaScript bundle that every visitor downloads, including a key written inside an RPC URL. Never put a secret in .env.local. Use provider keys that are restricted to your domain.
.env.local is ignored by git (.gitignore). A malformed value never turns into a guess: the feature it controls is switched off and the problem is listed on the dApp's /settings page.
02dApp build variables
| Variable | Default | What it does | Where to get the value |
|---|---|---|---|
VITE_RPC_URL | https://rpc.mainnet.chain.robinhood.com (public, keyless, rate-limited, HTTP only) | The Robinhood Chain mainnet JSON-RPC endpoint. One URL, or a comma-separated failover list: requests go to the first and move to the next when one fails. Entries that are not http(s):// URLs are ignored and listed on /settings. | Your RPC provider's dashboard (RPC). |
VITE_WALLETCONNECT_PROJECT_ID | empty = WalletConnect off | Enables WalletConnect in the connect sheet. Injected browser wallets (EIP-6963 and window.ethereum) always work without it. | Your WalletConnect / Reown project. Read the licence note below first. |
VITE_FEE_RECIPIENT | empty | Static-only fee wallet (used when VITE_PUBLIC_CONFIG_URL=off). Must be a valid non-zero EVM address. | A wallet you control on Robinhood Chain (public address only). |
VITE_FEE_BPS | 0 | Static-only fee in basis points (100 = 1%). Whole number, at most 100. Needs VITE_FEE_RECIPIENT too; otherwise no fee is charged. | Your decision (Earnings). |
VITE_STOCKS_ENABLED | false | Compiles the tokenized-stock module in. With an operator server, the console switch must also be on. Only the exact value true enables it. | Your decision after legal review (Stock module). |
VITE_UNIVERSAL_ROUTER | empty = Uniswap Universal Router 2.1.2 at 0x204FAca1764B154221e35c0d20aBb3c525710498 | Overrides the router address. An override is shown as a warning on /settings. If you run the operator server, give the server the same value so its revenue view reads the right router. | Leave empty unless you know why (FACTS.md §2). |
VITE_IPFS_GATEWAY | empty | A keyless IPFS gateway URL prefix tried first for token logos, for example https://my-gateway.example/ipfs/. Public gateways are used as fallbacks. | Your IPFS gateway provider. |
VITE_PUBLIC_CONFIG_URL | /api/public-config (same origin) | Where the dApp reads the operator's public settings. off = no request at all; the app runs on the build-time values. Must be a same-origin path or an https:// URL. | off for a static host; empty when the operator server serves the dApp. |
VITE_REFERRAL_URL | /api/referral | Where the dApp resolves one referral code to its payout wallet (GET <url>/<code>). Ignored when the config URL is off. | Leave empty when the operator server serves the dApp. |
During npm run dev only: if VITE_PUBLIC_CONFIG_URL is not set and PARACHUTE_SERVER is not set, the dev server behaves as off so it does not request a config that is not there (vite.config.ts).
03WalletConnect and its licence
The WalletConnect provider package (@walletconnect/ethereum-provider) ships under the proprietary WalletConnect Community License (Reown). That licence does not allow it to be resold inside this item, so it is not bundled. vite.config.ts replaces it with a small shim while it is absent. To enable WalletConnect:
- Read and accept the WalletConnect licenceThis is your decision; it is between you and Reown.
- Install the package
npm i @walletconnect/ethereum-provider - Set your project IDIn
.env.local:VITE_WALLETCONNECT_PROJECT_ID=<your-project-id> - Build again
The shim is dropped automatically once the package is installed.npm run build
04Operator server variables
| Variable | Default | What it does |
|---|---|---|
ADMIN_SECRET_KEY | Required | 32 bytes, hex or base64 (openssl rand -hex 32). Encrypts the console's secrets at rest. Keep it out of git and back it up. |
PORT | 8787 | Listen port. |
HOST | 127.0.0.1 | Listen address. Keep 127.0.0.1 behind a reverse proxy on the same machine. |
PARACHUTE_DATA_DIR | server/data | Holds admin.sqlite (settings, accounts, audit log) and fee-ledger.json (fee revenue read from the chain). Created with owner-only permissions. Back it up. |
PARACHUTE_DIST_DIR | dist | The built dApp the server serves. Missing = the server answers only /admin and /api, and / says the dApp is not built yet. |
PARACHUTE_RPC_URL | empty | Locks the console's Integrations → Robinhood Chain RPC URL (server) field to this URL. The server uses it for the revenue view and status checks. Empty field = the public RPC. |
VITE_UNIVERSAL_ROUTER | empty | Only if you overrode it in the dApp build: the revenue view then reads fees paid by the same router. |
The server reads the environment of the process that starts it. It does not read .env.local. Set these in your shell, your process manager or your host's settings.
05Variables used by the scripts
| Variable | Used by | What it does |
|---|---|---|
PARACHUTE_SERVER | npm run dev | Proxies /api to a running operator server, for example http://127.0.0.1:8787. |
VITE_RPC_URL | scripts/admin/volume-split.mjs and other read-only scripts | RPC to read from (default: the public RPC). |
06A typical .env.local
# your provider first, the public RPC as the fallback
VITE_RPC_URL=https://<your-provider-url>,https://rpc.mainnet.chain.robinhood.com
VITE_WALLETCONNECT_PROJECT_ID=
# fee: set in the console when you run the operator server
VITE_FEE_RECIPIENT=
VITE_FEE_BPS=0
VITE_STOCKS_ENABLED=false
VITE_UNIVERSAL_ROUTER=
VITE_IPFS_GATEWAY=
VITE_PUBLIC_CONFIG_URL=
VITE_REFERRAL_URL=
07Check what is active
- Open
/settingsin the dApp: the RPC endpoints in use (primary and failover order; your own provider is shown by host only), the interface fee and its recipient, the contracts including the router, the stock module state, and every problem found in the build values, in plain words. - The status strip at the bottom of every page shows the config version and the fee in force, and
read-onlywhen trading is paused. - With the operator server:
curl https://<your-domain>/api/public-configshows exactly what every browser receives.