Operator panel
set up everything.
TIDE's admin is a screen inside your own operator build: Settings → Operator panel, behind a passcode you compile in. The build you give users has no panel. This page walks through each section in screen order, with what to set on day one and the limits the code enforces.
01Opening the panel
Everything on this page changes without code and without a new build: names, links, messages, the fee, feature switches and endpoints. Only the three --dart-define values (domain, configuration URL, operator passcode) and the app ID, icon and colours need a rebuild (Rebranding).

The panel sets the fee, the fee wallet and the feature switches, so it is never part of the app your users install. It exists only in a build you make for yourself with an operator passcode (6 characters or more):
# your operator build (macOS / Linux shell; on Windows the same line works in PowerShell)
flutter run -d chrome --dart-define=TIDE_OPERATOR_PASSCODE=choose-your-own
- Open SettingsThe gear icon in the top bar (wide screens) or the Settings entry on phones.
- Tap Operator panelType the passcode you compiled in. After every third wrong attempt entry pauses (3 s, 6 s, 12 s …). The unlock is kept in memory only; leaving the panel locks it again.
- Set your values, then Copy as JSONHost that file and build the app for your users with
TIDE_CONFIG_URLand withoutTIDE_OPERATOR_PASSCODE(how).
Without TIDE_OPERATOR_PASSCODE there is no Operator entry in Settings, no route to the panel, and no panel values stored on a device are read. Your hosted configuration always outranks anything stored on a device, so nobody can change the fee or the fee wallet on their own phone. The passcode is a lock on a local screen, not a server password, and it does not protect funds: the user's own wallet signs every transaction (lib/core/config/operator_access.dart).

02Day-one order
- Identity: name, support address, terms and privacy.
- Endpoints and credentials: your Solana RPC URL.
- Swap fee: your Solana wallet and a rate.
- Save and apply, then check In force right now.
- Copy as JSON and host it for every install (how).
03Identity
App name, Tagline, Support email, Website, Terms URL, Privacy URL. Links must be HTTPS; each field says what is wrong. Empty website, terms and privacy fields fall back to addresses built from TIDE_HOST (Configuration). The name under the app icon is set at build time (Rebranding).
04Messages
- Announcement: a banner shown to every user. Users can dismiss it; a new text shows again.
- Minimum app version: older builds are asked to update. Empty turns it off. This notice cannot be dismissed.
05Swap fee — what you earn
- Charge a swap fee: the switch. Off in the shipped build.
- Fee rate (bps): 100 bps = 1.00 %. Maximum 200.
- Fee minimum (USD): leave it empty. Jupiter only takes a percentage, so a minimum cannot be collected (why).
- Solana fee wallet: a Solana address you control. It receives the fee.
- EVM fee wallet: Not active in this version No EVM quote source is wired.
The full walkthrough is on Setting up earnings.
06Trading
- Default slippage: what the swap screen starts at. Maximum 5 %.
- Extra restricted regions: two-letter country codes where copy execution is refused, on top of the six built-in ones (Compliance).
07Features
One switch per feature flag, listed by key. A switch the build cannot honour (evm_chain_enabled) shows the reason and has no effect. The table of flags is in Configuration.
08Endpoints and credentials
- Solana RPC URL: your endpoint. The shipped public node refuses token-balance calls; your own endpoint lifts that.
- Helius API key: Not active in this version Stored, but no network call reads it. Put a full Helius URL in Solana RPC URL instead.
- 0x API key: Not active in this version No EVM quote source is wired.

10In force right now, and warnings
In force right now lists every value the app is running on and the layer it came from: default, cached, remote or this device. If a change did not take, this list shows why. Warnings from the last load lists fee problems and switches the build cannot deliver. The same warnings appear under Settings → About.
11Limits the code enforces
A hosted document cannot raise a value past its cap; values are clamped when they are read.
| Field | Cap | Where |
|---|---|---|
fee.fee_bps | 200 (2.00 %) | SwapFeeConfig.maxFeeBps |
fee.min_fee_usd | $2.00 | SwapFeeConfig.maxMinimumFeeUsd |
default_slippage_pct | 5.0 | AdminConfigModel.fromJson |
| Copy execution per trade / per 24 h | $1,000 / $5,000 | CopyRule |
| Followed wallets | 25 | WatchlistService.maxWallets |
Not configurable on purpose: the six baseline restricted regions, every ceiling above, ranking in the Realised tab, and anything that maps a user to a wallet address.