• Stars
    star
    564
  • Rank 76,020 (Top 2 %)
  • Language
    Kotlin
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Kotlin Multiplatform State Library

Stately

Stately is a state utility library to facilitate state management in Kotlin Multiplatform. It was originally written to facilitate development with the strick Kotlin/Native memory model. As of Kotlin 1.7.20, the strict model is deprecated, and the releveant modules of Stately have also been deprecated but are still published and available.

Stately currently provides concurrencly primitives and concurrent collections.

stately-concurrency

stately-concurrency includes some concurrency support classes. These include a set of Atomicxxx classes, a Lock, a ThreadLocal container, a Synchronizable type, and a class ThreadRef that allows you to hold a thread id.

Much of the functionality of this module is similar to atomic-fu. They differ in some ways, so while they both cover much of the same ground, Stately's version still has some use.

ThreadRef is unique to Stately. It allows you to capture a reference to the id of the thread in which it was created, and ask if the current thread is the same. Just FYI, it does not keep a reference to the actual thread. Just an id. Usage looks like this:

fun useRef(){
  val threadRef = ThreadRef()
  threadRef.same() // <- true
  backgrundThread {
    threadRef.same() // <- false
  }
}

The Synchronizable type allows us to use the JVM's synchronized but in common, and with Kotlin/Native which doesn't natively support it.

class MyMutableData(private var count: Int = 0) : Synchronizable() {
    fun add() {
        synchronize { count++ }
    }

    val myCount: Int
        get() = synchronize { count }
}

Your type should extend Synchronizable, which on the JVM is typealiased to Any. Then you can use synchronize as in the example above.

Config

commonMain {
    dependencies {
        implementation("co.touchlab:stately-concurrency:2.0.0")
    }
}

stately-concurrent-collections

A set of relatively simple mutable collections that are thread safe.

val list = ConcurrentMutableList<Int>()
val list.add(42)

Config

commonMain {
    dependencies {
        implementation("co.touchlab:stately-concurrent-collections:2.0.0")
    }
}

Subscribe!

We build solutions that get teams started smoothly with Kotlin Multiplatform Mobile and ensure their success in production. Join our community to learn how your peers are adopting KMM. Sign up here!

Primary Maintainer

Kevin Galligan

Image of Kevin

Ping me on twitter @kpgalligan if you don't get a timely reply! -Kevin

License

Copyright 2022 Touchlab, Inc.

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

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Repositories

1

KaMPKit

KaMP Kit by Touchlab. A collection of code & tools designed to get your mobile team started quickly w/Kotlin Multiplatform
Kotlin
2,069
star
2

xcode-kotlin

Kotlin Native Xcode Plugin
Kotlin
1,027
star
3

DroidconKotlin

Kotlin Multiplatfom app for Droidcon Events
Kotlin
980
star
4

Kermit

Kermit by Touchlab is a Kotlin Multiplatform centralized logging utility.
JavaScript
603
star
5

SKIE

SKIE - Swift Kotlin Interface Enhancer
Kotlin
555
star
6

KMMBridge

KMMBridge is a set of Gradle tooling that facilitates publishing and consuming pre-built KMM (Kotlin Multiplatform Mobile) Xcode Framework binaries. See https://kmmbridge.touchlab.co/docs to get started.
JavaScript
317
star
7

CrashKiOS

Crash reporting for Kotlin/Native iOS applications
JavaScript
249
star
8

SQLiter

Minimal multiplatform sqlite library
C
166
star
9

cklib

Kotlin
87
star
10

SwiftCoroutines

Swift
57
star
11

KMMBridgeKickStart

Kotlin
32
star
12

SKIEDemoSample

SKIE Demo Application
Swift
20
star
13

Karmok

Kotlin
15
star
14

KMMBridgeSampleKotlin

Kotlin
14
star
15

TestHelp

Some Kotlin Multiplatform test utilites
Kotlin
12
star
16

KMMBridgeSKIETemplate

Kotlin
11
star
17

KMMWorker

Basic background threading for Kotlin Mobile Multiplatform
Kotlin
8
star
18

KMMBridgeKickStart-Android

Kotlin
4
star
19

KMMBridgeGithubWorkflow

4
star
20

KmmBridgeIntegrationTest

Swift
2
star
21

KMMBridgeKickStart-iOS

Swift
2
star
22

schrodinger

What's this? Stay tuned...
2
star
23

fkaction-installation-info

TypeScript
1
star
24

KMMBridgeSampleSpm

Swift
1
star
25

KMMBridgeGitHubReleaseVersionTest

Swift
1
star
26

fkaction-merge-branch

TypeScript
1
star
27

KMMBridgeSampleCocoaPods

Swift
1
star
28

homebrew-touchlab

Ruby
1
star