CameraK Documentation¶
Modern camera SDK for Kotlin Multiplatform — Android, iOS, and Desktop with a unified API.
Get Started in 60 Seconds¶
dependencies {
implementation("io.github.kashif-mehmood-km:camerak:0.2.0")
}
@Composable
fun CameraScreen() {
val permissions = providePermissions()
val scope = rememberCoroutineScope()
val cameraState by rememberCameraKState(permissions = permissions).cameraState.collectAsStateWithLifecycle()
CameraKScreen(
cameraState = cameraState,
showPreview = true
) { readyState ->
// Camera preview shown automatically
FloatingActionButton(
onClick = {
scope.launch {
readyState.controller.takePictureToFile()
}
}
) {
Icon(Icons.Default.CameraAlt, "Capture")
}
}
}
That's it! CameraKScreen handles all state management automatically.
Features¶
- Cross-Platform: Single API works on Android, iOS, and Desktop
- Compose-First: Built for Jetpack Compose with reactive StateFlow
- Plugin System: Add QR scanning, OCR, and custom processing
- Performance: Direct file capture avoids memory overhead
- Type-Safe: Sealed classes for errors, no runtime surprises
Installation¶
Start with installation and configuration:
- Installation — Add CameraK to your project
- Quick Start — Build your first camera app in 5 minutes
- Configuration — Customize camera behavior
- Android Example — Android-specific setup
Core Concepts¶
State Management¶
CameraK uses reactive state management via CameraKStateHolder:
sealed class CameraKState {
object Initializing : CameraKState()
data class Ready(val controller: CameraController) : CameraKState()
data class Error(val exception: Exception) : CameraKState()
}
State flows automatically: Initializing → Ready → capture photos.
Camera Controller¶
Low-level camera operations exposed when state is Ready:
interface CameraController {
suspend fun takePictureToFile(): ImageCaptureResult
fun setZoom(zoom: Float)
fun setFlashMode(mode: FlashMode)
fun toggleCameraLens()
}
Plugins¶
Extend camera functionality modularly:
val stateHolder = rememberCameraKState(
permissions = permissions,
plugins = listOf(
rememberQRScannerPlugin(),
rememberOcrPlugin()
)
)
// QR codes available automatically
val qrCodes by stateHolder.qrCodeFlow.collectAsStateWithLifecycle()
Quick Links¶
Getting Started - Installation - Quick Start - Configuration
Guides - Camera Capture - Flash and Torch - Zoom Control - Camera Switching - Plugins
API Reference - CameraKStateHolder - CameraController
Plugins - Plugin System — Using and creating plugins
Platform Requirements¶
| Platform | Minimum Version | Backend |
|---|---|---|
| Android | API 21 (5.0) | CameraX |
| iOS | 13.0 | AVFoundation |
| Desktop | JDK 11+ | JavaCV |
Support¶
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Examples: Sample Projects
License¶
Apache 2.0 — View License