PARACHUTE docs
v1.0.0
Live demo Get help
● Set up · .env.local · environment

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

PlaceWhat goes thereWhen 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 environmentADMIN_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_ values are public

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

VariableDefaultWhat it doesWhere to get the value
VITE_RPC_URLhttps://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_IDempty = WalletConnect offEnables 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_RECIPIENTemptyStatic-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_BPS0Static-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_ENABLEDfalseCompiles 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_ROUTERempty = Uniswap Universal Router 2.1.2 at 0x204FAca1764B154221e35c0d20aBb3c525710498Overrides 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_GATEWAYemptyA 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/referralWhere 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:

  1. Read and accept the WalletConnect licenceThis is your decision; it is between you and Reown.
  2. Install the package
    npm i @walletconnect/ethereum-provider
  3. Set your project IDIn .env.local: VITE_WALLETCONNECT_PROJECT_ID=<your-project-id>
  4. Build again
    npm run build
    The shim is dropped automatically once the package is installed.

04Operator server variables

VariableDefaultWhat it does
ADMIN_SECRET_KEYRequired32 bytes, hex or base64 (openssl rand -hex 32). Encrypts the console's secrets at rest. Keep it out of git and back it up.
PORT8787Listen port.
HOST127.0.0.1Listen address. Keep 127.0.0.1 behind a reverse proxy on the same machine.
PARACHUTE_DATA_DIRserver/dataHolds 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_DIRdistThe built dApp the server serves. Missing = the server answers only /admin and /api, and / says the dApp is not built yet.
PARACHUTE_RPC_URLemptyLocks 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_ROUTERemptyOnly 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

VariableUsed byWhat it does
PARACHUTE_SERVERnpm run devProxies /api to a running operator server, for example http://127.0.0.1:8787.
VITE_RPC_URLscripts/admin/volume-split.mjs and other read-only scriptsRPC 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 /settings in 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-only when trading is paused.
  • With the operator server: curl https://<your-domain>/api/public-config shows exactly what every browser receives.