SOLSCOPE docs
v0.1.0
Live demo Get help
● Start · About 30 minutes

Installation
your RPC, your keys, your config.

The full setup, in order: build the app, add your own credentials, publish your admin config and turn on your fee. Every step can be done without editing source code.

01Build it

  1. Install packages
    flutter pub get
  2. Verify the project
    flutter analyze      # expect: No issues found!
    flutter test         # expect: All tests passed! (449 tests at the time of writing)
  3. Run it
    flutter run -d chrome          # or -d <device> for a phone or simulator

The tests that matter most to an operator: test/jupiter_fee_wiring_test.dart (your fee reaches Jupiter in both halves, and a fee-free build sends neither), test/swap_preview_test.dart (the fee is visible before signing) and test/pnl_test.dart (PnL is net of fees and slippage actually paid).

02Add your credentials

There are two ways. Either works; a value set at build time wins and cannot be edited in the app.

In the app — Setup → Data sources

Paste the value. It is written to the platform keystore (flutter_secure_storage) and never shown again: the screen reports Set or Not set, never the value.

At build time

flutter build web --release \
  --dart-define=SOLSCOPE_RPC_URL=https://<your-rpc-endpoint> \
  --dart-define=SOLSCOPE_HELIUS_API_KEY=<your-helius-key> \
  --dart-define=SOLSCOPE_COINGECKO_DEMO_KEY=<your-coingecko-key> \
  --dart-define=SOLSCOPE_ADMIN_CONFIG_URL=https://<your-host>/solscope.json

Or keep the values in a file: copy .env.example to .env, fill it in, and pass the file. .env is already in .gitignore.

cp .env.example .env
flutter build web --release --dart-define-from-file=.env
Build-time values are public on the web

A --dart-define is compiled into main.dart.js and anyone can read it. Do not put a Helius key into a public web build; use an origin-restricted endpoint, or enter keys in Setup on a device you control. The full list of settings is in Configuration.

03Set your own RPC

Before launch Without SOLSCOPE_RPC_URL the app falls back to a public endpoint, which is rate limited and not meant for production traffic. On the web, api.mainnet-beta.solana.com refuses any request that carries an Origin header (HTTP 403), so it cannot be used from a browser at all; a web build therefore falls back to https://solana-rpc.publicnode.com only (lib/core/solana/solana_rpc_service.dart).

Free public endpoints refuse the indexed calls getTokenLargestAccounts and getTokenSupply. SOLSCOPE does not send a request it knows will be refused: the token page shows which figure is missing and what unlocks it. An RPC that serves indexed reads restores the top-holder list.

Check the result in Setup → Data sources → What is answering right now: Active RPC and Indexed reads (Served / Refused).

04Publish your admin config (optional)

If you run more than one install, host one JSON file anywhere — a static file, a Worker, a Firebase Remote Config export — and point SOLSCOPE_ADMIN_CONFIG_URL (or Setup → Config source) at it. The file format is in Configuration → Admin JSON.

  1. Configure one install by handUse the Setup tab (Operator console).
  2. Copy your settingsSetup → Effective configuration → Copy as JSON gives you exactly the document to serve.
  3. Host it over HTTPSSave it as, for example, solscope.json on your host.
  4. Point the app at itBuild with --dart-define=SOLSCOPE_ADMIN_CONFIG_URL=https://<your-host>/solscope.json.

With no config URL the app runs on its shipped defaults and charges no fee. A failed fetch keeps the last good config instead of switching anything on.

05Turn on your fee

The fee needs two values that travel together: a rate and a token account. Read Setting up earnings → The fee account before you fill it; a plain wallet address is accepted by the form and rejected by Jupiter.

{
  "fee_bps": 25,
  "fee_account": "<your Jupiter fee token account>"
}

Setup → What this terminal earns shows Earning only when the rate and the account are both valid.

06Change the identity

Before you publish anything, give the app your own name, bundle ID, icon and deep-link scheme. The checklist is in Rebranding.