firebase-kmp
Open-source Kotlin Multiplatform (Android/Apple/JVM) wrapper library for Firebase APIs.
Language:
- English (this file)
- Korean:
README.ko.md
Why firebase-kmp?
- Use Firebase from shared KMP code with Firebase-like APIs.
- Keep Android, Apple, and JVM behavior aligned as much as possible.
- Support JVM server-side workflows in modules that provide JVM targets.
Module Matrix
Targets
Note:
- visionOS target is planned once Firebase SDK parity and KMP interop stability are verified.
firebase-message currently supports Android/Apple targets only.
Compatibility Coverage (Updated: 2026-02-16)
Goal:
100% Firebase API compatibility coverage for KMP.
100% public API coverage for each supported Firebase product module.
Coverage model:
- Product-family coverage = implemented Firebase product families / target product families
- Public API coverage = implemented public APIs / target public APIs (per product, per platform)
- API-depth status =
not started, partial, near parity, parity
Current snapshot:
- Product-family coverage:
3 / 18 = 16.7%
- Public API catalog:
docs/public-api/README.md
Target product families (18):
- Core, Cloud Messaging, Cloud Storage, Authentication, Cloud Firestore, Realtime Database, Cloud Functions, Analytics, Crashlytics, Performance Monitoring, Remote Config, App Check, In-App Messaging, Dynamic Links, Installations, ML, Data Connect, Vertex AI in Firebase
Installation
Maven coordinates (example version: 0.0.1):
dependencies {
implementation("io.github.big-gates:firebase-common:0.0.1")
implementation("io.github.big-gates:firebase-message:0.0.1")
implementation("io.github.big-gates:firebase-storage:0.0.1")
}
Quick Start (JVM)
1) Initialize Firebase
import com.biggates.firebase.common.Firebase
import com.biggates.firebase.common.FirebaseOptions
import com.biggates.firebase.common.PlatformContext
fun initFirebaseOnJvm() {
Firebase.initializeApp(
context = PlatformContext(),
options = FirebaseOptions(
applicationId = "your-app-id",
apiKey = "your-api-key",
projectId = "your-project-id",
storageBucket = "your-project-id.appspot.com",
serviceAccountPath = "/absolute/path/service-account.json"
)
)
}
2) Messaging on JVM
firebase-message does not provide a JVM target at this time. Use Android/Apple targets for Messaging APIs.
3) Storage (Reference + Bytes)
import com.biggates.firebase.common.Firebase
import com.biggates.firebase.storage.storage
suspend {
storage = Firebase.storage
ref = storage.reference()
ref.putBytes(.encodeToByteArray())
bytes = ref.getBytes(maxDownloadSizeBytes = * )
downloadUrl = ref.getDownloadUrl()
ref.delete()
gsRef = storage.referenceFromUrl()
childRef = gsRef.child()
storage.useEmulator(, )
}
Important Notes
- On JVM, calling only
initializeApp(context) fails. Use initializeApp(context, options).
- If
serviceAccountPath is omitted on JVM, ADC (Application Default Credentials) is used.
Build Verification
./gradlew :firebase-common:check :firebase-message:check :firebase-storage:check
./gradlew :firebase-common:compileKotlinJvm :firebase-storage:compileKotlinJvm
Project Docs
- Public API catalog:
docs/public-api/README.md
- Repository agent guide:
AGENTS.md