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.
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 | |
|---|---|---|
| Code | Kotlin, Android only | Flutter app for Android and iOS (plus a web demo), TypeScript Cloud Functions, Node console. Nothing is reused from 1.x. |
| Backend | None: the app called the data APIs directly | Your own Firebase project (Blaze plan) with Cloud Functions; the app calls only your API |
| Data sources | CryptoCompare (prices, charts, news), CryptoPanic (news), CoinGecko (coin descriptions) | CoinGecko, CoinMarketCap as failover, RSS feeds, Alternative.me, public RPC nodes |
| Where keys live | In 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 data | On the phone only (a local Room database and shared preferences) | On the phone, plus optional cloud backup, alerts and account data in Firestore |
| Settings | Compiled in (for example the AdMob ids in res/values/strings.xml) | Changed live in the operator console |
| Android minimum | minSdk 23 (Android 6.0), targetSdk 30 | minSdk 24 (Android 7.0), targetSdk 36 |
| Version code | 6 (version 1.3) | 200 (version: 2.0.0+200 in app/pubspec.yaml) |
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:
| Where | New in 2.0.0 | Details |
|---|---|---|
Operator console, admin/.env | ADMIN_SECRET_KEY (required), GOOGLE_APPLICATION_CREDENTIALS, FIREBASE_PROJECT_ID, FIRESTORE_EMULATOR_HOST, ADMIN_DATA, ADMIN_DEMO_PASSWORD, PORT, DATABASE_URL | Operator console |
Cloud Functions, firebase/functions/.env | FUNCTIONS_REGION (default us-central1) | Firebase backend |
App build switches (--dart-define) | API_BASE_URL (required), DEMO_MODE, USE_EMULATOR, EMULATOR_HOST | Installation |
| App Firebase config | app/lib/firebase_options.dart, written by flutterfire configure | Connect 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.
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 edited | In 2.0.0 you set |
|---|---|
AdMob banner and interstitial unit ids in res/values/strings.xml | Console → 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 source | Console → Data providers and AI summaries, with Test buttons |
App name in strings.xml | Console → 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
- 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.
- Set up 2.0.0 as a new installFollow Step-by-step setup or Installation: Firebase backend, console, then the app.
- Use your 1.x application idBefore
flutterfire configure, setapplicationIdinapp/android/app/build.gradle.ktsto your published id (Rebranding). With a different id Google Play treats it as a new app. - Sign with the same upload keySet up
key.propertieswith 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. - 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). - 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.
- 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.
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.