# zsmb.co

Published articles for zsmb.co.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Setting up Compose Multiplatform previews

DevFeed: [Setting up Compose Multiplatform previews](<https://devfeed.tech/articles/setting-up-compose-multiplatform-previews-27055.md>)

Original publisher: [Read original article](<https://zsmb.co/compose-multiplatform-preview-setup/>)

Author: Márton Braun

Published: 2025-07-29T07:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [IntelliJ IDEA](<https://devfeed.tech/topics/intellij-idea.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [intellij](<https://devfeed.tech/tags/intellij.md>), [intellij-idea](<https://devfeed.tech/tags/intellij-idea.md>), [kmp](<https://devfeed.tech/tags/kmp.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [tooling](<https://devfeed.tech/tags/tooling.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A tutorial on setting up Compose Multiplatform previews for common code. It explains how to install the Kotlin Multiplatform IDE plugin, create a correctly configured project with the KMP wizard, and use previews in IntelliJ IDEA or Android Studio. An Android target is required.

### Source excerpt

Compose Multiplatform now has support for previews in common code. Here's how you can get started with using them.

## How I Finally Memorized Modifier Ordering in Compose

DevFeed: [How I Finally Memorized Modifier Ordering in Compose](<https://devfeed.tech/articles/how-i-finally-memorized-modifier-ordering-in-compose-27080.md>)

Original publisher: [Read original article](<https://zsmb.co/remembering-modifier-order/>)

Author: Márton Braun

Published: 2024-06-04T09:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [ordering](<https://devfeed.tech/topics/ordering.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [ordering](<https://devfeed.tech/tags/ordering.md>), [ui](<https://devfeed.tech/tags/ui.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A tutorial explains how to remember modifier ordering in Jetpack Compose. It connects component APIs that accept a Modifier parameter with the way modifiers are applied, concluding that modifiers are applied last-to-first and inside-to-outside.

### Source excerpt

For the longest time, I proudly had no idea of how Modifier ordering works, and would just guess and then guess again when something didn't look quite right. Here's how I finally ended up remembering how the ordering works.

## Building a macOS screen saver in Kotlin

DevFeed: [Building a macOS screen saver in Kotlin](<https://devfeed.tech/articles/building-a-macos-screen-saver-in-kotlin-27054.md>)

Original publisher: [Read original article](<https://zsmb.co/building-a-macos-screen-saver-in-kotlin/>)

Author: Márton Braun

Published: 2024-03-05T12:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [kotlin-multiplatform-libraries](<https://devfeed.tech/topics/kotlin-multiplatform-libraries.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [Code](<https://devfeed.tech/topics/code.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [binaries](<https://devfeed.tech/tags/binaries.md>), [build](<https://devfeed.tech/tags/build.md>), [code](<https://devfeed.tech/tags/code.md>), [contributions](<https://devfeed.tech/tags/contributions.md>), [development](<https://devfeed.tech/tags/development.md>), [github](<https://devfeed.tech/tags/github.md>), [installation](<https://devfeed.tech/tags/installation.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [macos](<https://devfeed.tech/tags/macos.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This tutorial documents the creation of a custom macOS screen saver built almost entirely in Kotlin with Kotlin Multiplatform. It covers customization options, release binaries, installation, and the challenges of working with macOS screen saver APIs and interoperability.

### Source excerpt

This article documents how I created my own custom screen saver for macOS, built almost entirely in Kotlin, using the powers of Kotlin Multiplatform compiled to macOS. Join me for a tale of Kotlin success and macOS failures.

## The conflation problem of testing StateFlows

DevFeed: [The conflation problem of testing StateFlows](<https://devfeed.tech/articles/the-conflation-problem-of-testing-stateflows-27057.md>)

Original publisher: [Read original article](<https://zsmb.co/conflating-stateflows/>)

Author: Márton Braun

Published: 2023-08-15T14:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [coroutine-testing](<https://devfeed.tech/tags/coroutine-testing.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlinx](<https://devfeed.tech/tags/kotlinx.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [stateflow](<https://devfeed.tech/tags/stateflow.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [ui](<https://devfeed.tech/tags/ui.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This article explains how StateFlow conflation affects tests. It compares asserting on the StateFlow state property with collecting emitted values, and discusses testing intermediate values when rapid updates may be skipped by slow collectors.

### Source excerpt

StateFlow behaves as a state holder and a Flow of values at the same time. Due to conflation, a collector of a StateFlow might not receive all values that it holds over time. This article covers what that means for your tests.

## Wrap-up 2021

DevFeed: [Wrap-up 2021](<https://devfeed.tech/articles/wrap-up-2021-27095.md>)

Original publisher: [Read original article](<https://zsmb.co/wrap-up-2021/>)

Author: Márton Braun

Published: 2021-12-31T09:00:00Z

Content type: opinion

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [devrel](<https://devfeed.tech/topics/devrel.md>), [Android](<https://devfeed.tech/topics/android.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>), [XML](<https://devfeed.tech/topics/xml.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-engineer](<https://devfeed.tech/tags/android-engineer.md>), [compose](<https://devfeed.tech/tags/compose.md>), [devrel](<https://devfeed.tech/tags/devrel.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [xml](<https://devfeed.tech/tags/xml.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A personal 2021 wrap-up describing Márton Braun's work at Stream, including his transition from Android Engineer to Android Developer Advocate, contributions to Android teams and tooling, and departure from the company in December.

### Source excerpt

Another year over, a new one's almost begun. Here's a brief summary of what I've done in this one.

## All About Opt-In Annotations

DevFeed: [All About Opt-In Annotations](<https://devfeed.tech/articles/all-about-opt-in-annotations-27075.md>)

Original publisher: [Read original article](<https://zsmb.co/opt-in-annotations/>)

Author: Márton Braun

Published: 2021-09-28T15:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [article](<https://devfeed.tech/tags/article.md>), [code](<https://devfeed.tech/tags/code.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [compilation-error](<https://devfeed.tech/tags/compilation-error.md>), [guide](<https://devfeed.tech/tags/guide.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [visibility](<https://devfeed.tech/tags/visibility.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A guide to Kotlin opt-in annotations, explaining how to create opt-in marker annotations, mark APIs as requiring opt-in, and use those APIs correctly. It also discusses severity levels, compilation behavior, and applications in libraries and multi-module projects.

### Source excerpt

Have you ever encountered APIs that show warnings or errors when you use them, saying that they're internal or experimental? In this guide, you'll learn everything you need to know about opt-in APIs in Kotlin: how to create and use them, and all their nuances.

## A Bit of Gradle Housekeeping

DevFeed: [A Bit of Gradle Housekeeping](<https://devfeed.tech/articles/a-bit-of-gradle-housekeeping-27046.md>)

Original publisher: [Read original article](<https://zsmb.co/a-bit-of-gradle-housekeeping/>)

Author: Márton Braun

Published: 2021-09-01T20:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Android](<https://devfeed.tech/topics/android.md>), [Android Gradle Plugin](<https://devfeed.tech/topics/android-gradle-plugin.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-gradle-plugin](<https://devfeed.tech/tags/android-gradle-plugin.md>), [build](<https://devfeed.tech/tags/build.md>), [build-tools](<https://devfeed.tech/tags/build-tools.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [deprecated](<https://devfeed.tech/tags/deprecated.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [groovy](<https://devfeed.tech/tags/groovy.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [properties](<https://devfeed.tech/tags/properties.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This tutorial explains how to simplify Android Gradle project configuration by removing obsolete build-tool, Java, and Kotlin JVM target settings and replacing deprecated SDK version properties. It also discusses keeping project source-set configuration simple.

### Source excerpt

While cleaning is traditionally a spring activity, let me invite you to do it at the end of summer this time around. In this article, we'll take a look at some Gradle configuration that you can probably clean up in your Android project.

## Announcing requireKTX

DevFeed: [Announcing requireKTX](<https://devfeed.tech/articles/announcing-requirektx-27052.md>)

Original publisher: [Read original article](<https://zsmb.co/announcing-requirektx/>)

Author: Márton Braun

Published: 2021-06-17T18:00:00Z

Content type: release

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Library](<https://devfeed.tech/topics/library.md>), [Android](<https://devfeed.tech/topics/android.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [error-messages](<https://devfeed.tech/tags/error-messages.md>), [errors](<https://devfeed.tech/tags/errors.md>), [github](<https://devfeed.tech/tags/github.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [library](<https://devfeed.tech/tags/library.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This article announces requireKTX, a library that adds extensions for conveniently requiring values from common Android types and data sources. Instead of returning nullable types or default values, the extensions throw meaningful exceptions with explanatory error messages.

### Source excerpt

Introducing a new library to conveniently require values from common Android types.

## Pi Practice App in Compose

DevFeed: [Pi Practice App in Compose](<https://devfeed.tech/articles/pi-practice-app-in-compose-27076.md>)

Original publisher: [Read original article](<https://zsmb.co/pi-practice-app-in-compose/>)

Author: Márton Braun

Published: 2021-04-18T18:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [ui](<https://devfeed.tech/topics/ui.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [deprecated](<https://devfeed.tech/topics/deprecated.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [deprecated](<https://devfeed.tech/tags/deprecated.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [ui](<https://devfeed.tech/tags/ui.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A Jetpack Compose walkthrough that rebuilds a simple Android app for practicing the digits of pi. It covers project setup, navigation, a keypad, progress display, and a high-scores screen, while comparing parts of the implementation with the older deprecated Anko Layouts approach.

### Source excerpt

In another detailed Jetpack Compose walkthrough, we'll look at implementing a simple app for practicing the digits of pi!

## Prime Table Generator in Jetpack Compose

DevFeed: [Prime Table Generator in Jetpack Compose](<https://devfeed.tech/articles/prime-table-generator-in-jetpack-compose-27079.md>)

Original publisher: [Read original article](<https://zsmb.co/prime-table-generator-jetpack-compose/>)

Author: Márton Braun

Published: 2021-03-25T16:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [coding](<https://devfeed.tech/tags/coding.md>), [compose](<https://devfeed.tech/tags/compose.md>), [exercise](<https://devfeed.tech/tags/exercise.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [projects](<https://devfeed.tech/tags/projects.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A tutorial that revisits a prime-number visualization project and rebuilds it for Android using Jetpack Compose. It explains the prime table design, creates a grid of squares, and begins implementing individual square rendering with Compose APIs.

### Source excerpt

I've dusted off one of my oldest (and favourite) coding projects, and rewrote it in Jetpack Compose as a nice little practice exercise.

## Compose O'Clock

DevFeed: [Compose O'Clock](<https://devfeed.tech/articles/compose-o-clock-27056.md>)

Original publisher: [Read original article](<https://zsmb.co/compose-o-clock/>)

Author: Márton Braun

Published: 2021-03-02T16:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [github](<https://devfeed.tech/tags/github.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A step-by-step tutorial showing how to build a clock design with Jetpack Compose, including composables for digits, columns, styling, layout, and time data.

### Source excerpt

I started learning Jetpack Compose this week. Two days into that adventure, here's a quick look at how a neat clock design can be built up in Compose, step-by-step.

## Sealed goodies coming in Kotlin 1.5

DevFeed: [Sealed goodies coming in Kotlin 1.5](<https://devfeed.tech/articles/sealed-goodies-coming-in-kotlin-1-5-27082.md>)

Original publisher: [Read original article](<https://zsmb.co/sealed-goodies-coming-in-kotlin-1-5/>)

Author: Márton Braun

Published: 2021-01-19T14:00:00Z

Content type: article

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [interfaces](<https://devfeed.tech/topics/interfaces.md>), [Inheritance](<https://devfeed.tech/topics/inheritance.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [classes](<https://devfeed.tech/tags/classes.md>), [inheritance](<https://devfeed.tech/tags/inheritance.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [pattern-matching](<https://devfeed.tech/tags/pattern-matching.md>), [preview](<https://devfeed.tech/tags/preview.md>), [sealed](<https://devfeed.tech/tags/sealed.md>), [sealed-classes](<https://devfeed.tech/tags/sealed-classes.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This article explains Kotlin sealed classes and previews planned Kotlin 1.5 improvements, including relaxed inheritance restrictions and the introduction of sealed interfaces. It also discusses interoperability with newer Java sealed constructs.

### Source excerpt

Kotlin 1.5 will bring exciting new features, among them improvements to sealed classes and an introduction of sealed interfaces. Let's take a look at what that will look like!

## Wrap-up 2020

DevFeed: [Wrap-up 2020](<https://devfeed.tech/articles/wrap-up-2020-27094.md>)

Original publisher: [Read original article](<https://zsmb.co/wrap-up-2020/>)

Author: Márton Braun

Published: 2020-12-30T20:00:00Z

Content type: opinion

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Job](<https://devfeed.tech/topics/job.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [career](<https://devfeed.tech/tags/career.md>), [interviews](<https://devfeed.tech/tags/interviews.md>), [job-search](<https://devfeed.tech/tags/job-search.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [personal](<https://devfeed.tech/tags/personal.md>), [work](<https://devfeed.tech/tags/work.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A personal 2020 year-in-review covering the author's experiences during the pandemic, job changes, work at Skyscanner, charitable donations, and reflections on engineering culture and learning.

### Source excerpt

Let's send this one off so that we can get started on a better one. The "usual" recap of what I've done this year.

## Mastering API Visibility in Kotlin

DevFeed: [Mastering API Visibility in Kotlin](<https://devfeed.tech/articles/mastering-api-visibility-in-kotlin-27073.md>)

Original publisher: [Read original article](<https://zsmb.co/mastering-api-visibility-in-kotlin/>)

Author: Márton Braun

Published: 2020-11-04T17:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [API](<https://devfeed.tech/topics/api.md>), [Library](<https://devfeed.tech/topics/library.md>), [modules](<https://devfeed.tech/topics/modules.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [multi-module-project](<https://devfeed.tech/tags/multi-module-project.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This article explains how minimizing API visibility in Kotlin libraries and multi-module projects reduces the declarations that must be maintained, limits compatibility concerns, and makes APIs easier to learn and use.

### Source excerpt

When designing a library, minimizing your API surface - the types, methods, properties, and functions you expose to the outside world - is a great idea. This doesn't apply to just libraries: it's a consideration you should make for every module in a multi-module project.

## Effective Class Delegation

DevFeed: [Effective Class Delegation](<https://devfeed.tech/articles/effective-class-delegation-27061.md>)

Original publisher: [Read original article](<https://zsmb.co/effective-class-delegation/>)

Author: Márton Braun

Published: 2020-09-29T20:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Inheritance](<https://devfeed.tech/topics/inheritance.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [delegation](<https://devfeed.tech/tags/delegation.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [inheritance](<https://devfeed.tech/tags/inheritance.md>), [interface](<https://devfeed.tech/tags/interface.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [override](<https://devfeed.tech/tags/override.md>), [subclass](<https://devfeed.tech/tags/subclass.md>), [superclass](<https://devfeed.tech/tags/superclass.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This tutorial explains how Kotlin class delegation can implement an interface by forwarding calls to a contained object. It contrasts this concise approach with Java solutions motivated by Effective Java's recommendation to favor composition over inheritance.

### Source excerpt

One of the most significant items of the Effective Java book is Item 18: Favor composition over inheritance. Let's see how Kotlin promotes this with class delegation.

## Krate, a better SharedPreferences experience

DevFeed: [Krate, a better SharedPreferences experience](<https://devfeed.tech/articles/krate-a-better-sharedpreferences-experience-27069.md>)

Original publisher: [Read original article](<https://zsmb.co/krate-a-better-sharedpreferences-experience/>)

Author: Márton Braun

Published: 2020-09-09T16:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Library](<https://devfeed.tech/topics/library.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [delegates](<https://devfeed.tech/tags/delegates.md>), [getting-started](<https://devfeed.tech/tags/getting-started.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [library](<https://devfeed.tech/tags/library.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [property](<https://devfeed.tech/tags/property.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

Krate is a Kotlin wrapper library for SharedPreferences that uses delegated properties to make persistent key-value storage simpler. The article explains its basic usage, nullability and default values, and custom implementations.

### Source excerpt

Accessing SharedPreferences using its API directly can be somewhat inconvenient. Krate is a library built on Kotlin delegates to simplify the use of SharedPreferences.

## Introducing 🌈RainbowCake

DevFeed: [Introducing 🌈RainbowCake](<https://devfeed.tech/articles/introducing-rainbowcake-27064.md>)

Original publisher: [Read original article](<https://zsmb.co/introducing-rainbowcake/>)

Author: Márton Braun

Published: 2020-06-29T15:00:00Z

Content type: release

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [Development](<https://devfeed.tech/topics/development.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-architecture](<https://devfeed.tech/tags/android-architecture.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [development](<https://devfeed.tech/tags/development.md>), [framework](<https://devfeed.tech/tags/framework.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [ui](<https://devfeed.tech/tags/ui.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

The article introduces RainbowCake, an Android architecture framework that builds on Jetpack and provides tools and guidance for structuring modern Android applications. It describes layers including Views, ViewModels, Presenters, and Interactors, with goals such as separation of concerns, state management, graceful handling of configuration changes and process death, and background work.

### Source excerpt

RainbowCake is an Android architecture framework, providing tools and guidance for building modern Android applications.

## Fragment Lifecycles in the Age of Jetpack

DevFeed: [Fragment Lifecycles in the Age of Jetpack](<https://devfeed.tech/articles/fragment-lifecycles-in-the-age-of-jetpack-27062.md>)

Original publisher: [Read original article](<https://zsmb.co/fragment-lifecycles-in-the-age-of-jetpack/>)

Author: Márton Braun

Published: 2020-06-18T16:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [App](<https://devfeed.tech/topics/app.md>), [Dark Mode](<https://devfeed.tech/topics/dark-mode.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [code](<https://devfeed.tech/tags/code.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [dark-mode](<https://devfeed.tech/tags/dark-mode.md>), [fragment](<https://devfeed.tech/tags/fragment.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [livedata](<https://devfeed.tech/tags/livedata.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [scope](<https://devfeed.tech/tags/scope.md>), [ui](<https://devfeed.tech/tags/ui.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This article explains Android Fragment lifecycles in the Jetpack ecosystem, covering the Fragment instance lifecycle and the nested view lifecycle. It describes recreation during state restoration, configuration changes, and process death, along with lifecycle methods, state handling, and resource management.

### Source excerpt

Fragments have... Complicated lifecycles, to say the least. Let's take a look at these, and how they all fit into the world of Jetpack today, with LifecycleOwners, LiveData, and coroutines.

## Thoughts about Event Handling on Android

DevFeed: [Thoughts about Event Handling on Android](<https://devfeed.tech/articles/thoughts-about-event-handling-on-android-27087.md>)

Original publisher: [Read original article](<https://zsmb.co/thoughts-about-event-handling-on-android/>)

Author: Márton Braun

Published: 2020-06-09T18:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [navigation](<https://devfeed.tech/topics/navigation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [event](<https://devfeed.tech/tags/event.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [mvvm](<https://devfeed.tech/tags/mvvm.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [ui](<https://devfeed.tech/tags/ui.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This theoretical introduction explains why ViewState alone cannot represent one-time communication from an Android ViewModel to a View. It presents events, also called view effects, for messages and navigation triggers that should be processed only once, and discusses lifecycle awareness and sticky state as related challenges.

### Source excerpt

In MVVM-like view architectures, view state isn't enough to communicate from the ViewModel to the View. They have to be supplemented by some kind of events, which come with several challenges you should be aware of.

## Thoughts about State Handling on Android

DevFeed: [Thoughts about State Handling on Android](<https://devfeed.tech/articles/thoughts-about-state-handling-on-android-27088.md>)

Original publisher: [Read original article](<https://zsmb.co/thoughts-about-state-handling-on-android/>)

Author: Márton Braun

Published: 2020-06-04T14:00:00Z

Content type: opinion

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [App](<https://devfeed.tech/topics/app.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [applications](<https://devfeed.tech/tags/applications.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [ui](<https://devfeed.tech/tags/ui.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This subjective introduction examines the challenge of maintaining consistent UI state in Android applications. It discusses mutable widget hierarchies, the MVP architecture, and how Presenter assumptions can lead to inconsistent or conflicting UI updates. Jetpack Compose is presented as a possible future way to reduce these problems.

### Source excerpt

Handling the state of UI correctly is one of the prominent challenges of Android apps. Here are my subjective thoughts about some different approaches, which ones I tend to choose, and why.

## Designing and Working with Single View States on Android

DevFeed: [Designing and Working with Single View States on Android](<https://devfeed.tech/articles/designing-and-working-with-single-view-states-on-android-27060.md>)

Original publisher: [Read original article](<https://zsmb.co/designing-and-working-with-single-view-states-on-android/>)

Author: Márton Braun

Published: 2020-05-25T17:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [App](<https://devfeed.tech/topics/app.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [mvi](<https://devfeed.tech/tags/mvi.md>), [mvvm](<https://devfeed.tech/tags/mvvm.md>), [network](<https://devfeed.tech/tags/network.md>), [sealed-classes](<https://devfeed.tech/tags/sealed-classes.md>), [state](<https://devfeed.tech/tags/state.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This tutorial explains how to represent Android screen state with a single ViewState object. It compares a single data class with a hierarchy of sealed classes, emphasizing how sealed classes can better model mutually exclusive states such as loading, content, and error.

### Source excerpt

Describing the state of a screen is a common practice these days thanks to MVI popularizing the concept. Let's take a look at some examples of how you can design your state objects neatly using data classes and sealed classes, and how you can put them into practice.

## The Single-cable Dream

DevFeed: [The Single-cable Dream](<https://devfeed.tech/articles/the-single-cable-dream-27086.md>)

Original publisher: [Read original article](<https://zsmb.co/the-single-cable-dream/>)

Author: Márton Braun

Published: 2020-05-10T09:00:00Z

Content type: opinion

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Hardware](<https://devfeed.tech/topics/hardware.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [Windows](<https://devfeed.tech/topics/windows.md>), [pc](<https://devfeed.tech/topics/pc.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [computer](<https://devfeed.tech/tags/computer.md>), [desktop](<https://devfeed.tech/tags/desktop.md>), [devices](<https://devfeed.tech/tags/devices.md>), [display](<https://devfeed.tech/tags/display.md>), [external](<https://devfeed.tech/tags/external.md>), [hdmi](<https://devfeed.tech/tags/hdmi.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [laptop](<https://devfeed.tech/tags/laptop.md>), [laptops](<https://devfeed.tech/tags/laptops.md>), [macos](<https://devfeed.tech/tags/macos.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [pc](<https://devfeed.tech/tags/pc.md>), [peripheral](<https://devfeed.tech/tags/peripheral.md>), [platforms](<https://devfeed.tech/tags/platforms.md>), [project](<https://devfeed.tech/tags/project.md>), [side-projects](<https://devfeed.tech/tags/side-projects.md>), [thunderbolt](<https://devfeed.tech/tags/thunderbolt.md>), [wifi](<https://devfeed.tech/tags/wifi.md>), [windows](<https://devfeed.tech/tags/windows.md>), [xps](<https://devfeed.tech/tags/xps.md>), [zoom](<https://devfeed.tech/tags/zoom.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

The author describes redesigning a home desk so its displays, peripherals, speakers, wired internet, and charging can be switched between a Dell XPS 13, a 15-inch MacBook Pro, and a desktop PC using a single Thunderbolt 3 cable. The project addresses the inconvenience of manually moving equipment between machines and unreliable Wi-Fi during Zoom calls.

### Source excerpt

Here's the story of how I moved my entire desk setup to be attachable to a computer via a single Thunderbolt 3 cable. It was quite the adventure, and 100% worth it.

## Anecdotes about web APIs

DevFeed: [Anecdotes about web APIs](<https://devfeed.tech/articles/anecdotes-about-web-apis-27051.md>)

Original publisher: [Read original article](<https://zsmb.co/anecdotes-about-web-apis/>)

Author: Márton Braun

Published: 2020-04-11T10:00:00Z

Content type: opinion

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Web APIs](<https://devfeed.tech/topics/web-apis.md>), [X (Twitter)](<https://devfeed.tech/topics/twitter.md>), [android-development](<https://devfeed.tech/topics/android-development.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [api](<https://devfeed.tech/tags/api.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [twitter](<https://devfeed.tech/tags/twitter.md>), [web-apis](<https://devfeed.tech/tags/web-apis.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A personal commentary on the importance of web APIs, illustrated through experiences with Twitter's API and an Android learning project. It focuses on the difficulty of retrieving tweet replies and following reply threads when the API lacked a direct query for replies.

### Source excerpt

I think any respectable service these days should offer a web API to paying customers, so that power users of the service can integrate it with other services, and have reliable, trustworthy programmatic access to their data. Here are some anecdotes about services and APIs.

## Coroutine Cancellation 101

DevFeed: [Coroutine Cancellation 101](<https://devfeed.tech/articles/coroutine-cancellation-101-27058.md>)

Original publisher: [Read original article](<https://zsmb.co/coroutine-cancellation-101/>)

Author: Márton Braun

Published: 2020-03-04T19:00:00Z

Content type: tutorial

Language: en

Sources: [zsmb.co](<https://devfeed.tech/sources/zsmb-co.md>)

Topics: [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [blocking](<https://devfeed.tech/tags/blocking.md>), [cancellation](<https://devfeed.tech/tags/cancellation.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [execution](<https://devfeed.tech/tags/execution.md>), [function](<https://devfeed.tech/tags/function.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lambda](<https://devfeed.tech/tags/lambda.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [run](<https://devfeed.tech/tags/run.md>), [running](<https://devfeed.tech/tags/running.md>), [time](<https://devfeed.tech/tags/time.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

A tutorial on coroutine cancellation explains coroutine builders, asynchronous execution, cancellable lifecycle tracking, and cooperative cancellation. It shows why cancellation does not work during continuously blocking code and why forcibly stopping such code can be dangerous.

### Source excerpt

A brief introduction to the basics of coroutine cancellation.

[Next page](<https://devfeed.tech/tags/zsmb-co.md?cursor=WyIyMDIwLTAzLTA0VDE5OjAwOjAwKzAwOjAwIiwgImQ3YmIwYTRkLWI1MWUtNDViNi04NTA5LTgwMjAyYzg2MWEzZiJd>)