A collection of hand-crafted extensions for your Kotlin projects.

Last update: Jun 23, 2022

Splitties

Splitties is a collection of small Kotlin multiplatform libraries (with Android as first target).

These libraries are intended to reduce the amount of code you have to write, freeing code reading and writing time, so you can focus more on what you want to build for your users (even if you're the only one), or have more time to have fun.

This project is named "Splitties" because it is split in small modules, distributed as independent libraries, so you can add only the ones you need to your project/module, helping reduce the size of the final binary that users devices will need to download and keep in the limited storage (BTW, everything is limited).

Some Android targeting modules have a content similar to what Anko offers. See a short comparison of Splitties with Anko here.

Each module has been designed to have a small footprint and be as efficient as possible.

All the multiplatform splits (Kotlin 1.4.10)

  • Bit Flags: hasFlag, withFlag and minusFlag extensions on Long, Int, Short, Byte, and their unsigned counterparts.
  • Collections: forEach for Lists without Iterator allocation.
  • Coroutines: General purpose extensions to kotlinx.coroutines.
  • Main Thread: Properties and precondition checkers related to the main thread.
  • Preferences: Property syntax for Android's SharedPreferences and macOS/iOS/watchOS NSUserDefaults.

All the Android splits

Download

Gradle instructions

Make sure you have jcenter() in the repositories defined in your project's (root) build.gradle file (default for new Android Studio projects).

To make is easier to take advantage of the contents of Splitties for your Android projects, there are grouping artifacts that include most splits.

Android base

These 2 packs don't include AppCompat and are suitable for WearOS apps.

Includes the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01")

There's also a version with Views DSL. It additionally includes the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-base-with-views-dsl:3.0.0-beta01")

Android AppCompat

These 2 packs include the Android base pack, and the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-appcompat:3.0.0-beta01")

There's also a version with Views DSL. It additionally includes the Views DSL version of the Android base pack and the following module:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-appcompat-with-views-dsl:3.0.0-beta01")

Android Material Components

These 2 packs include the Android AppCompat pack, and the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-material-components:3.0.0-beta01")

There's also a version with Views DSL. It additionally includes the Views DSL version of the Android AppCompat pack and the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-material-components-with-views-dsl:3.0.0-beta01")

All the artifacts (47)

Add the version of the library to not repeat yourself if you use multiple artifacts, and make sure their versions are in sync by adding an ext property into your root project build.gradle file:

allProjects {
    ext {
        splitties_version = "3.0.0-beta01"
    }
}
Here are all the artifacts of this library. Just use the ones you need. (Click to expand)
implementation("com.louiscad.splitties:splitties-activities:$splitties_version")
implementation("com.louiscad.splitties:splitties-alertdialog:$splitties_version")
implementation("com.louiscad.splitties:splitties-alertdialog-appcompat:$splitties_version")
implementation("com.louiscad.splitties:splitties-alertdialog-appcompat-coroutines:$splitties_version")
implementation("com.louiscad.splitties:splitties-appctx:$splitties_version")
implementation("com.louiscad.splitties:splitties-arch-lifecycle:$splitties_version")
implementation("com.louiscad.splitties:splitties-arch-room:$splitties_version")
implementation("com.louiscad.splitties:splitties-bitflags:$splitties_version")
implementation("com.louiscad.splitties:splitties-bundle:$splitties_version")
implementation("com.louiscad.splitties:splitties-checkedlazy:$splitties_version")
implementation("com.louiscad.splitties:splitties-collections:$splitties_version")
implementation("com.louiscad.splitties:splitties-coroutines:$splitties_version")
implementation("com.louiscad.splitties:splitties-dimensions:$splitties_version")
implementation("com.louiscad.splitties:splitties-exceptions:$splitties_version")
implementation("com.louiscad.splitties:splitties-fragments:$splitties_version")
implementation("com.louiscad.splitties:splitties-fragmentargs:$splitties_version")
implementation("com.louiscad.splitties:splitties-initprovider:$splitties_version")
implementation("com.louiscad.splitties:splitties-intents:$splitties_version")
implementation("com.louiscad.splitties:splitties-lifecycle-coroutines:$splitties_version")
implementation("com.louiscad.splitties:splitties-mainhandler:$splitties_version")
implementation("com.louiscad.splitties:splitties-mainthread:$splitties_version")
implementation("com.louiscad.splitties:splitties-material-colors:$splitties_version")
implementation("com.louiscad.splitties:splitties-material-lists:$splitties_version")
implementation("com.louiscad.splitties:splitties-permissions:$splitties_version")
implementation("com.louiscad.splitties:splitties-preferences:$splitties_version")
implementation("com.louiscad.splitties:splitties-resources:$splitties_version")
implementation("com.louiscad.splitties:splitties-snackbar:$splitties_version")
debugImplementation("com.louiscad.splitties:splitties-stetho-init:$splitties_version")
implementation("com.louiscad.splitties:splitties-systemservices:$splitties_version")
implementation("com.louiscad.splitties:splitties-toast:$splitties_version")
implementation("com.louiscad.splitties:splitties-typesaferecyclerview:$splitties_version")
implementation("com.louiscad.splitties:splitties-views:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-appcompat:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-cardview:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-coroutines:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-coroutines-material:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-dsl:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-dsl-appcompat:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-dsl-constraintlayout:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-dsl-coordinatorlayout:$splitties_version")
debugImplementation("com.louiscad.splitties:splitties-views-dsl-ide-preview:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-dsl-material:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-dsl-recyclerview:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-material:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-recyclerview:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-selectable:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-selectable-appcompat:$splitties_version")
implementation("com.louiscad.splitties:splitties-views-selectable-constraintlayout:$splitties_version")

Dev versions

Let's say you need a new feature or a fix that did not make it to a release yet:

You can grab it in the latest dev version by adding the corresponding repository and changing the library version to the dev version you need in your root project build.gradle file:

allProjects {
    repositories {
        google()
        jcenter() // Add dev versions repo below
        maven(url = "https://dl.bintray.com/louiscad/splitties-dev")
    }
    ext {
        splitties_version = '3.0.0-dev-107'
    }
}

Other build systems

For maven and alternative build-systems, check the Bintray page.

New versions notifications

Releases are announced on GitHub, you can subscribe by clicking on "Watch", then "Releases only".

Improve this library

If you want this library to have a new feature or an improvement in a new or in an existing module, please, open an issue or vote/comment a similar one first, so it can be discussed.

Documentation contributions are also welcome. For typos or other small improvements, feel free to submit a PR (pull request) directly. For more significant doc contributions, please, open an issue first so it can be discussed.

If you find a bug, please open an issue with all the important details. If you know a simple fix that is not API breaking and that does not have side-effects that need to be considered, you may also directly submit a PR.

You can also join the discussion on Kotlin's Slack in the #splitties channel (you can get an invitation here).

What is a split

A "split" is a module of the Splitties library that you can add as a dependency. It only includes the required transitive dependencies. This allows you to only add what you need in your app or library module, so the final apk/ipa/app is as small as possible and doesn't include stuff not used by your app.

Let's say you're build a Wear OS app using the Views DSL. Wear OS apps don't need AppCompat. Including it would be a waste of bandwidth and storage. The Views DSL core module relies on the Android SDK but not on AppCompat, so you don't bloat your wrist app with AppCompat by using Views DSL. However, if you are building a phone, tablet or computer Android app, there's a Views DSL AppCompat split with a few extensions for you to use.

Credits

Special thanks to Jovche Mitrejchevski for helping in taking decisions for this project.

Thanks to JetBrains and the contributors for Anko, which was a great source of inspiration, especially for Views DSL, and of course thanks for the excellent Kotlin programming language that makes this project possible.

Thanks to Doug Stevenson for his articles "Kotlin & Android: A Brass Tacks Experiment". It is fair to say that Views DSL has its root in this experiment.

License

This library is published under Apache License version 2.0 which you can see here.

GitHub

https://github.com/LouisCAD/Splitties
Comments
  • 1. Cannot clone on Windows

    fatal: cannot create directory at 'gradle_templates/Splitties Android library module/src/androidTest/kotlin/|template|package name': Invalid argument
    
    Reviewed by msink at 2019-01-04 10:09
  • 2. Weird NoClassDefFoundError: kotlin.collections.EmptyList under api 21

    After upgraded to Kotlin 1.5.21, I came into this error with com.louiscad.splitties:splitties-appctx:3.0.0-beta02:

    E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to get provider androidx.startup.InitializationProvider: androidx.startup.StartupException: java.lang.NoClassDefFoundError: kotlin.collections.EmptyList at android.app.ActivityThread.installProvider(ActivityThread.java:4563) at android.app.ActivityThread.installContentProviders(ActivityThread.java:4190) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4132) at android.app.ActivityThread.access$1300(ActivityThread.java:130) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: androidx.startup.StartupException: java.lang.NoClassDefFoundError: kotlin.collections.EmptyList at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:162) at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:198) at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:38) at android.content.ContentProvider.attachInfo(ContentProvider.java:1058) at android.app.ActivityThread.installProvider(ActivityThread.java:4560) at android.app.ActivityThread.installContentProviders(ActivityThread.java:4190)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4132)  at android.app.ActivityThread.access$1300(ActivityThread.java:130)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)  at android.os.Handler.dispatchMessage(Handler.java:99)  at android.os.Looper.loop(Looper.java:137)  at android.app.ActivityThread.main(ActivityThread.java:4745)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:511)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.NoClassDefFoundError: kotlin.collections.EmptyList at kotlin.collections.CollectionsKt__CollectionsKt.emptyList(Collections.kt:71) at splitties.init.AppCtxInitializer.dependencies(AppCtxInitializer.kt:30) at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:143) at androidx.startup.AppInitializer.discoverAndInitialize(AppInitializer.java:198)  at androidx.startup.InitializationProvider.onCreate(InitializationProvider.java:38)  at android.content.ContentProvider.attachInfo(ContentProvider.java:1058)  at android.app.ActivityThread.installProvider(ActivityThread.java:4560)  at android.app.ActivityThread.installContentProviders(ActivityThread.java:4190)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4132)  at android.app.ActivityThread.access$1300(ActivityThread.java:130)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)  at android.os.Handler.dispatchMessage(Handler.java:99)  at android.os.Looper.loop(Looper.java:137)  at android.app.ActivityThread.main(ActivityThread.java:4745)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:511)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)  at dalvik.system.NativeStart.main(Native Method) 

    Reviewed by RavioliWonton at 2021-07-14 06:59
  • 3. Add LiveData observables for SharedPreferences

    I'd like to be able to get a LiveData observable for any individual Preferences key. Here is the example implementation: https://gist.github.com/rharter/1df1cd72ce4e9d1801bd2d49f2a96810

    Reviewed by gajicm93 at 2020-01-24 22:54
  • 4. Multiplatform publishing not working on 3.0.0-beta02 & 3.0.0-beta03

    When I update my multiplatform dependencies to use the new versions of splitties from maven central I get the following build error:

    * What went wrong:
    Execution failed for task ':compileKotlinIos'.
    > Could not resolve all files for configuration ':iosCompileKlibraries'.
       > Could not find com.louiscad.splitties:bitflags-iosx64:3.0.0-beta02.
         Searched in the following locations:
           - https://dl.google.com/dl/android/maven2/com/louiscad/splitties/bitflags-iosx64/3.0.0-beta02/bitflags-iosx64-3.0.0-beta02.pom
           - https://repo.maven.apache.org/maven2/com/louiscad/splitties/bitflags-iosx64/3.0.0-beta02/bitflags-iosx64-3.0.0-beta02.pom
         Required by:
             project : > com.louiscad.splitties:splitties-bitflags:3.0.0-beta02
    

    it appears that the main module found here has the following invalid relative url defined in it:

        {
          "name": "iosX64ApiElements-published",
          "attributes": {...},
          "available-at": {
            "url": "../../bitflags-iosx64/3.0.0-beta03/bitflags-iosx64-3.0.0-beta03.module",
            "group": "com.louiscad.splitties",
            "module": "bitflags-iosx64",
            "version": "3.0.0-beta03"
          }
        },
    
    Reviewed by frett at 2021-07-21 18:41
  • 5. Build Error

    I cant build project. what's the problem? the error is: Execution failed for task ':modules:mainthread:runCommonizer'.

    Could not resolve all files for configuration ':modules:mainthread:kotlinKlibCommonizerClasspath'. Cannot resolve external dependency org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.4.10 because no repositories are defined. Required by: project :modules:mainthread

    Reviewed by MohamadKaramiDarabi at 2021-06-25 17:38
  • 6. AppCompat factory affects the whole app behavior

    https://github.com/LouisCAD/Splitties/blob/3df895ad88d273eede629733739efe09b63960b9/modules/views-dsl-appcompat/src/androidMain/AndroidManifest.xml#L10

    Hello. I've added splitties-views-dsl-appcompat and this affected all views on all activities. Every EditText became AppCompatEditText, even within non-AppCompatActivity, losing its appearance and behaviour.

    We've talked about theming some time ago on Slack. Well, that's why I don't use implicit themes, implicit injections, implicit initializations :)

    Reviewed by Miha-x64 at 2020-08-05 15:53
  • 7. Material dialog split

    As noted in the corresponding issue LouisCAD/Splitties#168 MaterialDialogAlertBuilder isn't available in a stable release of material components yet. I'll update this once it's out. I'm opening this now so you can take a look. Closes #168

    Reviewed by ivoberger at 2019-06-07 09:12
  • 8. Meta artifact containing all the splits

    I'm aware that the whole point of this library is that you use the modules you need to keep apk size down. The thing is, when using lots of the splitties like I do in several projects it would be more convenient to be able do add one meta dependency containing all splits. Cleans up the build.gradle and with Proguard/R8 everything thats not used it thrown out for release builds anyway.

    Reviewed by ivoberger at 2019-03-04 13:03
  • 9. Make use of reified type parameters for View DSL to allow factories installation

    Here's some inspiration: https://helw.net/2018/08/06/appcompat-view-inflation/

    Here's how it could look: v<TextView>(…) { … }, and it'd check the type and delegate instantiation to installed factories. There could also be a way to scope View types delegates (not the same as Kotlin property delegates).

    Reviewed by LouisCAD at 2018-08-06 19:44
  • 10. Create a module for material design colors

    Reviewed by LouisCAD at 2018-01-31 15:21
  • 11. Version 3.0.0 blockers

    • [x] Setup GitHub Actions to publish on all platforms
    • [x] Implement dependencies refresh (#215)
    • [x] Update AndroidX dependencies to latest stable versions
    • [x] Remove overlap with latest AndroidX KTX dependencies (with deprecation cycle in alpha/beta versions)
    • [x] Have dp and dip overloads simplified. Takes Int, returns Int, takes Float, returns Float.
    • [x] Review documentation and clean outdated content
    • [x] Update documentation to cover the new features and changes ~Polish Gradle plugin (#214)~
    Reviewed by LouisCAD at 2019-10-11 07:47
  • 12. QUESTION - Use EncryptedSharedPreferences through a Preference split?

    Hi, is there any way to use an EncryptedSharedPreferences (part of JetPack Security) as a "backend" for Preferences split so I can still have the benefit of all the features like Flow preferences, etc..? Thanks.

    Also even better, is there a smart way to use encrypted DataStore storage?

    Reviewed by gajicm93 at 2022-03-17 12:18
  • 13. Add out variance to the type of the class in IntentSpec

    If it doesn't introduce regressions, it'd be great to have that because it'd allow to have subclasses of a component (e.g. because you need different metadata in the AndroidManifest.xml file), that can be launched with one ActivityIntentSpec that returns a different component based on some condition in the app.

    Reviewed by LouisCAD at 2022-02-08 14:34
  • 14. Jetpack Compose stable, View DSL Docs should be updated

    In the current documentation of the View DSL, it still says that Jetpack Compose is "not stable" and "still in alpha". However, I guess it should be encouraged to use it as it is now already stable, and highly recommended by Android Developers.

    Reviewed by Skaldebane at 2021-09-14 01:43
  • 15. Make release script handle case of expired GPG alias

    When that case will happen, less than a year from now, it's important that it is not considered as requiring new commits, but instead walks me through these steps:

    1. Generate a new GPG alias (bonus points for giving the commands to run, or have a script in the repo for that purpose)
    2. Update the secrets on GitHub
    3. Retry the workflow
    Reviewed by LouisCAD at 2021-08-23 14:48
  • 16. Cannot compile with custom buildType

    Hi! I have buildType named 'dev' and can't compile my project with splitters library com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01.

    StackTrace: Execution failed for task ':app:dataBindingMergeDependencyArtifactsDev'.

    Could not resolve all files for configuration ':app:devCompileClasspath'. Could not resolve com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01. Required by: project :app > No matching variant of com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01 was found. The consumer was configured to find an API of a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'dev', attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' but: - Variant 'android-debugApiElements' capability com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01 declares an API of a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm': - Incompatible because this component declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug' and the consumer needed a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'dev' - Variant 'android-debugRuntimeElements' capability com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01 declares a runtime of a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm': - Incompatible because this component declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'debug' and the consumer needed a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'dev' - Variant 'android-releaseApiElements' capability com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01 declares an API of a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm': - Incompatible because this component declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release' and the consumer needed a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'dev' - Variant 'android-releaseRuntimeElements' capability com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01 declares a runtime of a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm': - Incompatible because this component declares a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'release' and the consumer needed a component, as well as attribute 'com.android.build.api.attributes.BuildTypeAttr' with value 'dev' - Variant 'metadata-api' capability com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01: - Incompatible because this component declares a usage of 'kotlin-metadata' of a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'common' and the consumer needed an API of a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' - Other compatible attribute: - Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'dev') - Variant 'metadata-commonMainMetadataElements' capability com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0-beta01: - Incompatible because this component declares a usage of 'kotlin-api' of a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'common' and the consumer needed an API of a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'androidJvm' - Other compatible attribute: - Doesn't say anything about com.android.build.api.attributes.BuildTypeAttr (required 'dev')

    With debug and release types the project is compiling.

    Reviewed by axrkozlov at 2021-04-01 11:18
KaMP Kit by Touchlab is a collection of code and tools designed to get your mobile team started quickly with Kotlin Multiplatform.
KaMP Kit by Touchlab is a collection of code and tools designed to get your mobile team started quickly with Kotlin Multiplatform.

KaMP Kit Welcome to the KaMP Kit! About Goal The goal of the KaMP Kit is to facilitate your evaluation of Kotlin Multiplatform (aka KMP). It is a coll

Jun 24, 2022
Reapp is everything you need to build amazing apps with React: a collection of packages that work together, our UI kit, and a CLI that scaffolds your app and includes a server and build system.
Reapp is everything you need to build amazing apps with React: a collection of packages that work together, our UI kit, and a CLI that scaffolds your app and includes a server and build system.

What is it? Reapp is everything you need to build amazing apps with React: a collection of packages that work together, our UI kit, and a CLI that sca

May 6, 2022
Common Android/Kotlin extensions

Common Android/Kotlin extensions Gradle implementation "com.github.javokhirsavriev:common-extensions:1.0.1" License Copyright 2022 Javokhir Savriev L

Feb 15, 2022
Various experimental proposals and extensions to Javalin 4.x used in Reposilite 3.x

Javalin RFCs Various experimental extensions to Javalin 4.x used in Reposilite 3.x. Provides basic support for Kotlin coroutines and async routes with

Feb 22, 2022
Automatic CoroutineDispatcher injection and extensions for kotlinx.coroutines

Dispatch Utilities for kotlinx.coroutines which make them type-safe, easier to test, and more expressive. Use the predefined types and factories or de

Jun 17, 2022
Android View Lifecycle Extensions

Android View Lifecycle Extensions Extensions for Android View class that let you access a view lifecycle without having to create a custom view (exten

May 11, 2022
Actions are things that run, with parameters. Serves as a common dependency for a variety of Cepi extensions.

Actions Actions that take in customizable paramaters, an optional target, and do things. Installation Download the jar from Releases OR compile it you

Jan 9, 2022
An Easy-to-use Kotlin based Customizable Modules Collection with Material Layouts by BlackBeared.
An Easy-to-use Kotlin based Customizable Modules Collection with Material Layouts by BlackBeared.

Fusion By BlackBeared An Easy-to-use Kotlin based Customizable Library with Material Layouts by @blackbeared. Features Custom Floating Action Buttons

Mar 4, 2022
A collection of useful Kotlin extension for Android

karamba A collection of useful Kotlin extension for Android Install Add to gradle in allprojects maven { url 'https://jitpack.io' } then add this com

Jan 15, 2022
A curated collection of splendid gradients made in Kotlin
A curated collection of splendid gradients made in Kotlin

Gradients A curated collection of splendid gradients made in Kotlin (port of https://webgradients.com for Android). Only linear gradients included for

May 21, 2022
An awesome collaborative collection of Kotlin Multiplatform libraries

Awesome Kotlin Multiplatform Awesome Projects Updated 33 November 21, 2021 Contents Guides Dependency Injection Database NoSQL SQL Extension Reactive

Apr 25, 2022
A set of highly-opinionated, batteries-included gradle plugins to get you started building delicious multi-module Kotlin projects

Sourdough Gradle What is Sourdough Gradle? Sourdough is a set of highly opinionated gradle plugins that aim to act as the starter for your Kotlin proj

Jan 10, 2022
kinstall is an easy way to install gradle-based command-line kotlin projects that use the application plugin.

kinstall kinstall is an easy way to install gradle-based command-line kotlin projects that use the application plugin. use First, install kinstall its

Apr 24, 2022
A collection of useful extension methods for Android

Kotlin Jetpack A collection of useful extension methods for Android Arguments Bindings Preferences Bindings Resources Bindings Arguments Bindings publ

Apr 16, 2022
A collection of small utility functions to make it easier to deal with some otherwise nullable APIs on Android.

requireKTX requireKTX is a collection of small utility functions to make it easier to deal with some otherwise nullable APIs on Android, using the sam

Apr 30, 2022
A collection of plugins for Aliucord.

Aliucord Plugins collection Plugins for Aliucord Download Download from here AttachmentUtils Adds a context menu to attachments. Gnuify Appends "GNU/"

Jun 18, 2022
Starter Kit for Android projects.

About Android Starter Kit was created as a way to save time when starting a new Android project. It is a simple native single-module app based on MVVM

Oct 12, 2021
This program will read from your android application string.xml file and generate translated strings.xml files in your preferred languages using google sheet.
This program will read from your android application string.xml file and generate translated strings.xml files in your preferred languages using google sheet.

Localize your application content This program will read from your application string.xml file and generate translated strings.xml files in your prefe

Dec 21, 2021