Buyer's guide ยท Tide
Solana wallet app source code with a follow feed and Jupiter swaps
TIDE is complete Flutter source code for a self-custodial Solana wallet built around a feed. Users create a wallet on the device, follow public Solana addresses and see what those addresses did on-chain, and swap through Jupiter with every fee shown before they sign. It has no server and no keys in the code, and runs on iOS, Android and the web. The feed reports observed activity and never gives advice.
What you get
The full source code
The Flutter app for iOS, Android and the web, a README, a locked pubspec and the HTML documentation (requirements, install, configuration, operator panel, swap fee, rebranding, deployment, compliance, FAQ).
Self-custodial wallet
BIP-39 generation and import, an AES-256-GCM vault in the Android Keystore or iOS Keychain, SOL and SPL balances, and receive by address and QR.
Web vault passphrase
The web build wraps the vault key with a passphrase (PBKDF2-HMAC-SHA256, 600,000 iterations). The passphrase is never stored and is asked again before the recovery phrase is shown and before every signature.
Follow feed
Follow up to 25 public addresses. Activity is classified from on-chain balance changes, with wording limited to what happened. A test scans every user-facing string on the feed for words that read as a recommendation.
Jupiter swaps
Swaps with slippage control. The operator fee, if you set one, is shown on the quote before the user confirms.
Themes and design
A true light theme and a dark theme with a warm coral accent. A test asserts better than 7:1 text contrast in both.
Starts empty
No seeded data: the feed, watchlist and profile start empty, and the token directory ships SOL and USDC only.
How you run it as an operator
Swap fee
You can set a Jupiter platform fee in basis points, capped at 200 (2 %) by a constant in the code. It ships empty (rate zero, no destination wallet). Jupiter pays it on-chain into your own token account for the token the user receives.
Where the fee does not apply
If your fee wallet has no token account for the output token, or the output is a Token-2022 token, the swap goes through without a fee and the quote says so.
Operator panel
The panel exists only in operator builds, unlocked by your own passcode. It validates settings and has Copy as JSON. End-user builds read your hosted configuration file, which outranks anything stored on the device, so the fee and switches can change without a rebuild.
Rebranding
Name, links and switches change in the panel or your hosted file; your domain, bundle ids and icons need a new build.
What it needs to run
- Flutter 3.41 or newer (stable), which ships the Dart 3.11 the locked packages need; Android Studio with the Android SDK; Google Chrome for the local web build
- A Mac with Xcode 15 or newer and CocoaPods for iOS builds, with an iOS deployment target of 15.0
- A Solana RPC endpoint of your own for production. The app starts on public keyless endpoints, which are rate limited, and the web build needs your own RPC to show SPL balances
- Optional static hosting and a domain for the web build and your hosted configuration file; no Node.js, Firebase CLI or server is required
- An Apple Developer Program account enrolled as an organisation (Apple requires this for wallet apps) and a Google Play Console account to publish
What it does not do
- It is Solana only in this version. There is no Ethereum or other chain support.
- There is no send screen. The app creates and imports wallets, shows balances, receives, swaps and follows wallets.
- There are no push notifications. The app raises notifications on the device when it reads the wallets the user follows.
- The app is in English only, and there is no localisation setup.
- Copy execution is a separate module, off in the shipped configuration. It is gated on a region the user declares in Settings, which is self-declared and not detected or verified. US, CA, GB, SG, HK, MY and an undeclared region are refused, and you can add regions but not remove them. Removing the module is a code change in several files, not a folder deletion. Get legal advice for your markets before enabling it.
- The optional Realised tab is off by default, lists followed wallets in follow order and never ranks them.
- It is non-custodial: you cannot see or recover a user's seed phrase. If a user loses both the phone and the phrase, nobody can restore the wallet. Swaps can fail or fill at a worse price, and this is software, not financial advice.
- Solana network fees are paid by your users. RPC, hosting and developer accounts are billed to you by their providers.
Questions
Is it custodial?
No. Seeds are generated and encrypted on the device. There is no backend, no analytics endpoint and no telemetry, and no key, seed or signature leaves the device.
How does the swap fee work?
You set a rate up to 2 % and your own fee wallet. It is sent to Jupiter as a platform fee and shown on the quote before the user confirms. It is off until you set both. There is no referral or cashback programme.
Does the feed give trading advice?
No. It reports activity already recorded on a public blockchain, and the app says so on the feed itself.
Do I need a server or Firebase?
No. TIDE has no backend. A shared configuration file on any static host is optional, and Firebase is only needed if you choose to keep that configuration in Firestore.
Which platforms does it target?
iOS, Android and the web. There is no desktop app.
How much does Tide cost, and what does the licence allow?
$209, one payment, no subscription. One licence, no tiers: any number of projects and clients, a paid SaaS, every line changed. The only limit is reselling or publishing the source code itself. The services you connect bill you directly. See the licence.
Is setup included?
Yes. We install Tide for you and put in your logo, colours and texts. Bigger changes or new features get a fixed price before we start.
What if it does not work?
Write to us within 14 days. We fix it, usually the same day. If we cannot fix it within 7 days, you get your money back. See the refund policy.