Mobile App
The Flutter client for the platform. What it is, what it deliberately leaves out, and the publishing obligations that fall on you rather than on us.
The mobile app is a Flutter client for your own deployment. You configure it against your backend, brand it, build it, and publish it under your Apple and Google developer accounts. There is no hosted build service and no shared account: the app in the store is yours, submitted by you.
That last sentence is the whole reason this section exists. Every store rule that matters attaches to the developer of record, and the developer of record is you. A rejection, a takedown or an account termination lands on your account, not on ours, and neither store accepts "the template did it" as an answer.
Read Before you buy first if you are an individual rather than a company. Apple and Google both require an organisation account for a crypto app. An individual developer account cannot publish this app at all — not with more configuration, and not with our help.
What ships
The app follows your platform. Which modules a customer can open is decided by
your server, not by the build: GET /api/user/modules is the app's only source
of truth for them. It answers from which addons you have installed,
switched on and licensed, from your operational switches, from each
customer's KYC level and — once you turn attestation enforcement on — from the
countries you have recorded a licence for. A module the server does not report
as available is a screen the app will not open, including in builds already on
customers' phones.
The Home, Market, Trade and Wallet tabs are always there. What the server decides is the spot order ticket inside Trade, the Futures tab, the tiles on Home and the Help Centre link in the profile. A tile for a module that exists but is closed to this customer — for their KYC level or their country — stays on Home, locked, and says why when tapped.
Seven modules are core and need no addon:
| In the app | Module id | Notes |
|---|---|---|
| Wallet — balances, deposit, withdraw, transfer, history | wallet |
The Wallet tab. Deposits cover fiat, spot and ECO wallets. |
| Markets and charts | markets |
The Market tab and the chart screen. |
| Spot trading | trade |
The order ticket on the Trade tab. The tab itself is always there; the ticket is what the server can withhold. |
| Account | account |
Profile, security and two-factor, identity verification, notifications, account deletion. |
| Support | support |
Support tickets and live chat. |
| Blog | blog |
Your own posts, from your server. |
| Market news | news |
The news feed your server publishes at /api/news, from the providers you configure. The app holds no news key of its own. |
The rest follow the addons you have licensed on the web platform:
| In the app | Module id | Needs on your server |
|---|---|---|
| P2P trading | p2p |
P2P Trading |
| Staking | staking |
Staking; the on-chain mode also needs Exchange Engine and Web3 Wallet & On-Chain Trading |
| Token offerings — investor side only, on the Launchpad tile | ico |
ICO Launchpad |
| Store — the E-commerce tile, physical goods only | ecommerce |
E-commerce |
| Futures — its own tab, shown only when your server offers it | futures |
Futures Trading and Exchange Engine |
| Help centre | faq |
FAQ & Knowledge Base |
| Bot console — watch and stop Hummingbot bots | hummingbot |
Hummingbot Connector |
Nine modules can additionally be limited country by country with licence attestations — spot trading, futures, ecosystem wallets, P2P, staking, token offerings, copy trading, Merchant and AI Investment. That gate is a switch, off by default, and it applies to the app only. See Licence attestations for the console and Licences by country for what the stores ask of you.
The server's module list also names the NFT marketplace, copy trading, ecosystem wallets and the support assistant, because the website uses the same list of addons. The app has no screens for them. ECO tokens still appear in the Wallet's deposit flow, but there is no separate ecosystem section.
Three modules you have to opt in to
Merchant (the Payment Gateway addon), AI Investment (AI Investments) and Affiliate (MLM & Affiliate System) are left out of a normal build. They run into app-store rules on crypto apps, so each takes two deliberate decisions rather than none:
- Build with them. Pass
--dart-define=STORE_RESTRICTED_MODULES=truetoflutter build. Without it their screens are not compiled into the app at all. See Merchant, AI Investment and Affiliate. - For AI Investment and Affiliate, allow them on the server. Switch on
Allow AI Investment & MLM in the Mobile App
(
mobileAllowRestrictedProducts, off by default) under Admin → System → Platform Settings, tab Features, group Verification. While it is off, both tiles stay hidden and the server refuses AI Investment requests from the app with a 403. Merchant has no switch of its own: in a build made with the flag it follows the Payment Gateway addon like any other module.
The website is unaffected either way. The admin description of that switch says it plainly: App Store and Google Play rules do not permit fixed-return investment products or paying currency for recruiting users, and the rejection risk is yours as the publisher.
What does not ship, and will not
Some products in the web platform cannot appear in a published app under Apple's or Google's rules. They are not behind a toggle, because the mechanism lives in our code and a switch would distribute the problem across every operator. Your server also answers any request that identifies itself as the app with a 403 and a plain explanation, so the refusal is a fact about the server rather than only a missing screen:
| Not in the app | The rule |
|---|---|
| Binary options | Apple 3.2.2(viii): "Apps that facilitate binary options trading are not permitted on the App Store." Play has no declaration path for them. |
| Forex / CFD investment plans | Same clause: trading in CFDs or other derivatives "must be properly licensed in all jurisdictions where the service is available". The legacy plan also settles on an admin-set result. |
| The ICO creator side | Its launch step debited a platform wallet to unlock a listing — the mechanism Apple 3.1.1 names. The investor side ships. |
| The trading-strategy marketplace | Buying and selling strategies is a digital purchase; Apple 3.1.1 requires in-app purchase for it. |
| Digital downloads in the store | A downloadable file is not a physical good, so Apple 3.1.1 applies and in-app purchase becomes mandatory — and the store charges a platform wallet. Physical products are unaffected. |
Your web platform keeps all of them. This is a statement about one build, not about your business.
What it deliberately does not do
Being clear about this now saves a support ticket later.
- It does not administer the platform. There are no admin screens in the app. Staff accounts use it like customers; everything in this documentation marked Admin happens on the website.
- It does not let anyone in without an account. Every screen is behind sign-in, so a store reviewer needs working credentials on your server — see App review access.
- It speaks English only. There is no in-app language picker, and most of its screens are not set up for translation.
- It opens no links. There are no deep links or universal links: a link in an email — email verification, password reset — opens your website, and no URL opens a screen in the app.
- It reports nothing about itself. No analytics, crash-reporting or advertising SDK ships, and nothing is logged to your server. Whatever crash information you get comes from the stores' own consoles, not from the app.
- It cannot force an update. The admin panel has Minimum iOS App Version and Minimum Android App Version settings, but the app does not read them. An old build keeps running until its user updates from the store, which matters most if you ever move your backend to a new address — the address is compiled into every build.
- It cannot close a password-less account. Customers who signed up on the
website with Google and never set a password cannot finish
Delete Account
in the app, because the final step asks for their password. Those deletions
go through your support team, which is also what the website's public
/account-deletionpage tells anyone who cannot use the app. The app itself never creates such an account: its Google sign-in only signs in accounts already linked to Google. - It does not issue API keys. The bot console can stop a bot and disable or revoke a key; creating or rotating one is refused to the app and stays on the website.
Where to start
If you have not decided yet whether you can publish at all, start with Before you buy. Otherwise:
What you need on your computer, unpacking the source, the few settings a first build needs, and your first run on a phone.
Name, Android and iOS identifiers, brand colours and icon — all from one file, and what changing each one means once you have published.
How app_config.json is read, what happens when a value is wrong, and every
group of settings it holds.
Signing, versioning and the upload for Google Play. For the App Store, see Building for iOS.
The admin settings and screens on your platform that decide what the app shows and what it may do.
Developer accounts, licences by country, being the submitter, data safety and the differentiation the stores require.
Plain answers for the people using your app, written so your support assistant can quote them.
Symptoms operators actually report — empty screens, missing tiles, builds that refuse — and the check that proves each cause.
Every configuration key with its type, default and effect.