kmp-kaiteki
1.6.0indexedLightweight modular core offering utility APIs and opinionated abstractions for common app tasks, with CI automation and Maven Central distribution for easy integration.
0
Stars
—
Used by
dependents
—
Health
/ 100
Lightweight modular core offering utility APIs and opinionated abstractions for common app tasks, with CI automation and Maven Central distribution for easy integration.
A set of helper classes for modern Kotlin multiplatform projects.
[versions]
kaiteki = "x.y.z"
[libraries]
kaiteki-core = { module = "com.kroegerama.kmp.kaiteki:kaiteki-core", version.ref = "kaiteki" }
kaiteki-compose = { module = , version.ref = }
= { module = , version.ref = }
= { module = , version.ref = }
= { module = , version.ref = }
dependencies {
implementation(libs.kaiteki.core)
implementation(libs.kaiteki.compose)
implementation(libs.kaiteki.paging)
implementation(libs.kaiteki.camera)
implementation(libs.kaiteki.permissions)
}
State & events
Lifecycle & ViewModel
Platform & storage
Formatting, locale & date/time
Modifiers
Modifier.dashedBorder() - dashed border with an optional animated "marching ants" effectModifier.checkerboard() - checkerboard background to visualize transparencyComponents
Graphics
rememberBlurHashPainter() / rememberBlurHash() - BlurHash placeholders as a PainterrememberAnimatedShape() - morphs between corner-based shapes; ListItemShapes.rememberShapeForInteraction() follows press, drag, focus and hoverPath.strokeToFill() - converts a stroke centerline into its filled outlineText fields
rememberValidatingTextFieldState() / - declarative validation with an error DSL (, );
aggregates multiple sNavigation 3
rememberScaffoldSceneDecorator() - wraps every scene in a Scaffold and shares one top app bar across destinationsrememberBottomSheetSceneStrategy() / rememberAlertDialogSceneStrategy() - show entries in a modal bottom sheet or alert dialogPaging
pagingHeaders / pagingFooters - render refresh / prepend / append / empty states in LazyList, LazyGrid and LazyStaggeredGridlazyPagingItemsOfData() - preview/mock LazyPagingItemsFormatting & locale
rememberDecimalFormatter(), LocalDecimalFormatterrememberLocalizedDateTimeFormatter(), LocalLocalizedDateTimeFormatter, formatFancyAsState() for self-updating relative timesLocale.asPlatformLocale(), LocalPlatformLocaleMisc
ConsumableState<T> + Consume { } - channel-backed one-shot event consumption (e.g. snackbar, navigation)rememberTintedVectorPainter() - recolor a vector as a PainterrememberPermissionState(permission) - returns a PermissionState for observing and requesting a runtime permissionPermissionStatus - sealed interface (Granted / )Copyright 2026 kroegerama
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https:
Unless applicable law agreed to writing, software
distributed under the License distributed an BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied.
See the License the specific language governing permissions
limitations under the License.
| Module | Description |
|---|
| core | Load-state & event flows, lifecycle collection, DataStore, locale-aware formatting, date/time, serialization |
| compose | Compose Multiplatform UI utilities, Material 3 helpers, navigation support |
| paging | Paging integration with Arrow and ViewModel support |
| camera (experimental) | Camera integration with barcode scanning and text recognition |
| permissions (experimental) | Multiplatform runtime permission handling for Compose |
LoadState<E, T> - sealed class with Idle, Loading, Success, Error states, stale-data support, and Arrow Either integrationLoadStateFlow - reactive wrapper around LoadState with refresh, parameter flows, and ViewModel scope supportEventFlow - fire-and-forget event bus backed by SharedFlowConsumableEventFlow - single-consumption event flow for one-shot effects (snackbar, navigation)observeFlow, observeWithLifecycle, observeMultipleFlowslaunchWithCreated / launchWithStateAtLeast - run a coroutine once a lifecycle state is reachedSavedStateHandle.field() - property delegate for ViewModel saved state (natively supported types; use AndroidX saved() for @Serializable
types)SavedStateHandle.stateField() - like field(), but exposes a MutableStateFlow for observable saved statePlatform.name, platformContext - platform info and the shared application context (JVM: id detected from kaiteki.applicationId, jpackage
launcher, main class or jar name; override via PlatformContext.initialize(applicationId))platformContext.dataDirectory / cacheDirectory - okio Paths to the app's persistent and cache directories, resolved per OS on the JVMInitializer - marker interface for DI-driven startup logicDataStore<Preferences>: get / set operators, flow, removeDecimalFormatter, LocalizedDateTimeFormatter (incl. relative/"fancy" formatting), Long.asHumanReadableBytes()PlatformLocale with Locales constants, display names, isoCountryCodeToFlag, unicodeFlagMonth / DayOfWeek / YearMonth displayName, LocalDate/Time.now(), toMinuteOfDay(), Julian days and dayDistanceToBlurHash.decode() - decode BlurHash image placeholdersenumValueOfSerialName, serialName()Modifier.pressAndHold() - repeats a click while pressed, accelerating over timeModifier.keepScreenOn() - keeps the screen awake (Android flag / iOS idleTimerDisabled)Modifier.cacheSize() - reuses a previously measured size, e.g. for moveable contentModifier.blurHash() - draws a BlurHash placeholder behind the contentButtonExtraSmall to ButtonExtraLarge, likewise for Outlined, Elevated, FilledTonal and Text
buttons, with optional start/end iconsIconButton*, FilledIconButton*, FilledTonalIconButton*, OutlinedIconButton* and the matching
*IconToggleButton* variantsSegmentedListItemColumn - column of SegmentedListItems and Cards shaped for their position in the groupExpressivePullToRefreshBox - pull-to-refresh with the Expressive loading indicatorResideLayout + rememberResideLayoutState() - side-menu layout where the content pane slides aside with a 3D scale/tilt effect to reveal a menuVerticalScrollbar / HorizontalScrollbar - lightweight scrollbar thumbs for a ScrollStateBracketsOverlay / BracketsShape - rounded corner brackets like a QR or document scanner frameStyledSnackbarHost + SnackbarController - send SnackbarEvents from anywhere, e.g. a ViewModel, rendered with custom shape, colors and layoutrememberSimpleValidatingState()raiserequirevalidate(...)ValidatorInputTransformation.decimalInput() / DecimalInputTransformation - locale-aware decimal inputTextFieldState.string, textAsFlow(), trim()rememberCustomTabsUriHandler() - open links in-app (Chrome Custom Tabs on Android, SFSafariViewController on iOS)KaitekiIcon - the Kaiteki logo as an ImageVectorPagerHolder - wrapper around Pager with refresh, retry, cachedIn, and reactive parameter supportPagingSource implementations based on Arrow Either error handling and duplicate detection
(configurable DuplicateStrategy: invalidate on shifted data, or filter duplicates from non-deterministic backends):
PageSizePagingSource - page/size paginationOffsetLimitPagingSource - offset/limit pagination
ItemKeyedPagingSource - cursor/item-keyed paginationContinuationTokenPagingSource - token-based paginationSinglePagePagingSource - non-paginated single-page datapagingDataOf(), emptyPagingSource(), emptyItemSnapshotList() - static data for previews and testsCameraView - Compose camera preview (Android: CameraX, iOS: AVFoundation)rememberCameraController() - zoom, torch, focus controlCameraController.bindBarcodeAnalyzerFlow(formats) - real-time barcode scanning with configurable formatsCameraController.bindTextAnalyzerFlow(minConfidence) - live text recognition (OCR)Flow<OCRResult>.stabilized() - suppresses OCR flicker by merging results across framesAnalysisRegion - restricts barcode/OCR results to the part of the frame visible in the viewfinder, via
CameraView(analysisRegion = AnalysisRegion.VisibleArea(inset)); default FullFrameBarcodeResult - includes the normalized bounding box of the detected code (relativeX/Y/Width/Height)CameraController.analysisRegionRect - the active analysis region in viewfinder coordinates, e.g. for drawing scan bracketsDenied(shouldShowRationale)PermissionState.launchPermissionRequest() / openSystemPreferences() - request the permission or deep-link to app settingsSurfaced from shared tags and platforms — no rankings paid for.