Cryptocurrency Tracker docs
v2.0.0
Live demoConsole demo Get help
● Ship · 1.x → 2.0.0

Upgrading from 1.x
what changes for you.

Version 2.0.0 is not a patch on top of 1.x: it replaces the Kotlin Android app with a new Flutter app, a Firebase backend and an operator console. This page lists what that means for your settings, your data and your store listing, and what you must check yourself.

No in-place upgradeNo data migrationKeep your application id to update the same listing

01What we know, and what you must check

The 2.0.0 repository starts with the 2.0 rewrite (first commit: "Cryptocurrency Tracker 2.0: repository and the shared contract"). The history of 1.x is not in it, so this page compares 2.0.0 with the last 1.x package we have: version 1.3 (versionCode 6), a Kotlin Android app. If you changed your 1.x copy, compare against your own copy too.

1.x (last: 1.3)2.0.0
CodeKotlin, Android onlyFlutter app for Android and iOS (plus a web demo), TypeScript Cloud Functions, Node console. Nothing is reused from 1.x.
BackendNone: the app called the data APIs directlyYour own Firebase project (Blaze plan) with Cloud Functions; the app calls only your API
Data sourcesCryptoCompare (prices, charts, news), CryptoPanic (news), CoinGecko (coin descriptions)CoinGecko, CoinMarketCap as failover, RSS feeds, Alternative.me, public RPC nodes
Where keys liveIn the app source (a CryptoPanic token in the API client)Only in the operator console, encrypted, and in Firestore config/private; never in the app
User dataOn the phone only (a local Room database and shared preferences)On the phone, plus optional cloud backup, alerts and account data in Firestore
SettingsCompiled in (for example the AdMob ids in res/values/strings.xml)Changed live in the operator console
Android minimumminSdk 23 (Android 6.0), targetSdk 30minSdk 24 (Android 7.0), targetSdk 36
Version code6 (version 1.3)200 (version: 2.0.0+200 in app/pubspec.yaml)
Revoke old keys

The 1.x source contained a CryptoPanic API token in its network code. If you used it, or put your own keys into your 1.x copy, revoke them with the provider and delete them from your old repositories. CryptoCompare's API now requires a key and CryptoPanic ended its free plan, which is why 1.x data stopped loading.

02Environment variables and configuration

1.x had no environment variables, no server and no configuration files outside the Android project, so there is nothing to carry over. Everything below is new in 2.0.0:

WhereNew in 2.0.0Details
Operator console, admin/.envADMIN_SECRET_KEY (required), GOOGLE_APPLICATION_CREDENTIALS, FIREBASE_PROJECT_ID, FIRESTORE_EMULATOR_HOST, ADMIN_DATA, ADMIN_DEMO_PASSWORD, PORT, DATABASE_URLOperator console
Cloud Functions, firebase/functions/.envFUNCTIONS_REGION (default us-central1)Firebase backend
App build switches (--dart-define)API_BASE_URL (required), DEMO_MODE, USE_EMULATOR, EMULATOR_HOSTInstallation
App Firebase configapp/lib/firebase_options.dart, written by flutterfire configureConnect the app to Firebase

Within 2.0.0 these names are the ones in the shipped .env.example files and app/lib/core/env.dart. There is no earlier 2.x version, so no variable has been renamed or removed yet.

03Firestore document structure

1.x used no Firestore, so there is no document to migrate. On first start the console creates config/public and config/private; the backend creates everything else as users arrive. The full layout is in Firestore collections and docs/CONTRACT.md.

Use a fresh project, or a clean one

If you reuse a Firebase project that already holds other data, make sure it has no collections with the same names (config, users, alerts, purchases, stats and the others in that list), and remember that firebase deploy --only firestore:rules replaces the project's security rules with the ones in firebase/firestore.rules.

04Console configuration

The operator console is new in 2.0.0. Settings you used to change in code now live there:

In 1.x you editedIn 2.0.0 you set
AdMob banner and interstitial unit ids in res/values/strings.xmlConsole → AdMob ids (and the other networks), switched on under Console → Ads. The AdMob app id still goes into the native files as well (Ads).
API keys in the sourceConsole → Data providers and AI summaries, with Test buttons
App name in strings.xmlConsole → Brand for the name inside the app; the name under the icon is still a build setting (What the console changes)

Every setting that earns or costs money starts off. Your 1.x ad setup does not carry over: ads stay off until you switch them on and enter the ids.

05Upgrade steps

  1. Keep your 1.x copyArchive it. Note your published application id (Play Console → your app → Dashboard) and keep your upload key (keystore) and its passwords.
  2. Set up 2.0.0 as a new installFollow Step-by-step setup or Installation: Firebase backend, console, then the app.
  3. Use your 1.x application idBefore flutterfire configure, set applicationId in app/android/app/build.gradle.kts to your published id (Rebranding). With a different id Google Play treats it as a new app.
  4. Sign with the same upload keySet up key.properties with your existing keystore (Android signing). If you use Play App Signing, Google holds the app signing key and you keep uploading with your upload key.
  5. Version code2.0.0 ships with build number 200, above 1.3's version code 6. If you published your own 1.x builds with a higher code, raise it in app/pubspec.yaml (Version number).
  6. Tell your users2.0 cannot read what 1.x stored on the phone (watchlist, transactions). Say in the release notes that they need to add their coins and transactions again. Users on Android 6.0 (API 23) will not receive the update, since 2.0.0 needs Android 7.0 or newer.
  7. Update the store listingNew screenshots, the new data safety and privacy answers (2.0.0 adds accounts, push, optional ads and purchases; Privacy forms), and your privacy policy.
Or publish as a new app

You can also publish 2.0.0 under a new application id as a separate app. Then you need none of steps 3 to 5, but your existing users and ratings stay with the old listing.

06Not covered by this page

  • Changes you made to your own 1.x copy (other data sources, extra screens, other ad networks). Compare them with the feature list in the Changelog.
  • iOS: 1.x had no iOS app, so the iOS app is always a new App Store listing.

For later 2.x updates, see Applying future 2.x updates.