Agent skill

State And Background Footguns

by maxrave-dev in maxrave-dev/kotlin-footguns

Reactive state and background-work traps: StateFlow conflation, flatMapLatest, job lifecycles, ViewModel bases, WorkManager, backups, crash reporting, logging, Glance widgets.

GPL-3.0Auto-check passedMobile

Install State And Background Footguns

skills CLI
$ npx skills add maxrave-dev/kotlin-footguns --skill state-and-background-footguns -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install maxrave-dev/kotlin-footguns state-and-background-footguns --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/maxrave-dev/kotlin-footguns.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/state-and-background-footguns .claude/skills/state-and-background-footguns && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
state-and-background-footguns
GitHub stars
1.1k
Token cost
~3.9k tokens
SKILL.md length
2,192 words
Files
24 (incl. references)
Skills in repo
10
Repo updated
First seen
Licence
GPL-3.0

At a glance

Reactive state and background-work traps: StateFlow conflation, flatMapLatest, job lifecycles, ViewModel bases, WorkManager, backups, crash reporting, logging, Glance widgets.

  • Work runs twice
  • SKILL.md covers Reactive state: Flow,… and Background work, services and…
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Tasks that involve Backup and disaster recovery

What it does

State And Background Footguns is an agent skill from maxrave-dev/kotlin-footguns. Reactive state and background-work traps: StateFlow conflation, flatMapLatest, job lifecycles, ViewModel bases, WorkManager, backups, crash reporting, logging, Glance widgets. Use when state lags or flips, or work runs twice or never.

Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 24 other files, including reference files (for example `references/app-backup-to-zip-mediastore.md`, `references/combine-two-flags-to-gate.md` and `references/compose-desktop-runtime-hardening.md`).

It sits in Mobile, covering Backup and disaster recovery and Android development. It works with Jetpack Compose and Kotlin. The repository describes itself as: Battle-tested agent skills mapping the footguns of Kotlin, Compose Multiplatform and the desktop JVM — mined from a production music app, not from documentation. The licence is GPL-3.0.

When your agent uses it

  • Work runs twice
  • Tasks that involve Backup and disaster recovery
  • Tasks that involve Android development

Example prompts

  • “/state-and-background-footguns”

What it can do on your machine

Read from SKILL.md and the folder at commit f5f0b49. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

State And Background Footguns loads about 3.9k tokens when it runs, and up to ~44k if it reads all its reference files. Until then it costs about 66 tokens; SKILL.md has 2,192 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~66
When it runs · the whole SKILL.md, loaded when a task matches
~3.9k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~44k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from maxrave-dev/kotlin-footguns at commit f5f0b49, republished under its GPL-3.0 licence (© maxrave-dev). 2,192 words, ~3,858 tokens.

Download SKILL.mdSave it as .claude/skills/state-and-background-footguns/SKILL.md (or your agent's skills folder). This skill also uses 23 other files; get the full folder from GitHub.
name
state-and-background-footguns
description
Reactive state and background-work traps: StateFlow conflation, flatMapLatest, job lifecycles, ViewModel bases, WorkManager, backups, crash reporting, logging, Glance widgets. Use when state lags or flips, or work runs twice or never.

Reactive state and background work footguns

23 traps mined from a production Kotlin and Compose Multiplatform app, one short file each under references/. Every file gives the working pattern, the Traps (the specific ways it fails in practice, and why), and a Verifying it section with commands to run against the user's own tree.

How to use this index. Match the code about to be written, or the symptom being chased, against the entries below: each names its topic and the symptom that should send you to it. Read every file that plausibly applies with the Read tool before proposing code or a fix; each is under 150 lines. Where a Verifying command names the source project's paths, substitute the equivalent paths in the user's tree.

Cross-references. A backticked trap name inside a file that is not listed here lives in a sibling area skill: glob ../*/references/<name>.md to open it.

Reactive state: Flow, StateFlow and ViewModel

  • stateflow-conflation-inverts-state — A conflating state holder keeps one slot, so a callback that writes it several times per event makes write ORDER the correctness question — collectors see only the last write. Use when a spinner sits over content that is already loaded, when a loading flag clears at the wrong moment, or when a screen shows the state that was true one step ago.
  • named-job-lifecycle-discipline — One var xJob: Job? field per concern, cancel-before-relaunch as an invariant at every launch site, and teardown writes wrapped so a cancellation cannot stop them halfway. Use when periodic updates arrive several times per tick, when stale results from a previous item overwrite the current one, or when a long-lived object keeps working after it was released.
  • readonly-stateflow-cold-to-hot — Expose state through asStateFlow() rather than an upcast of the mutable holder, and turn a cold source flow hot with stateIn(scope, WhileSubscribed(timeout), initial) so it survives collector churn without running forever. Use when a screen re-queries its source on every rotation or navigation, when work continues after the last collector leaves, or when something outside the owner is writing state it should only be reading.
  • flatmaplatest-resubscribe-composite-key — Re-subscribe a downstream flow whenever a key flow changes using flatMapLatest, then collapse the resulting high-frequency stream to a composite key with distinctUntilChanged before firing expensive one-shot work. Use when a fetch re-runs on every progress tick, when it fires for the wrong item after a fast switch, or when a side effect never runs because one of its inputs arrives last.
  • distinct-by-key-reset-cancel-per-item — Per-item pipelines that key on the item id with distinctUntilChangedBy, cancel the previous item's in-flight work before starting the next, and reset the visible state before filling it — so nothing from the previous item can appear under the new one. Use when a detail screen briefly shows the last item's artwork or text, when a slow response overwrites a newer one, or when a field stays populated after moving to an item that has no value for it.
  • combine-two-flags-to-gate — Turn several independent condition flows into one on/off gate with combine + distinctUntilChanged + collectLatest, make both the start and the teardown branch idempotent, and run teardown uncancellably. Use when a subsystem starts before it is fully configured, keeps running after one of its preconditions is withdrawn, or ends up half-started after a fast toggle.
  • compose-multiplatform-viewmodel-base — A shared ViewModel base class for Compose Multiplatform — container-aware so subclasses can pull extra dependencies without constructor threading, with one loading/error surface for every screen — and the blocking resource-lookup hazard that such a base almost always grows. Use when every screen is re-implementing its own loading dialog, when a base class needs a dependency only some subclasses use, or when app start stutters on the main thread before anything is drawn.
  • dual-mode-persist-blocking-or-async — One suspend persistence body driven two ways — blocking on the shutdown path, where the write must complete before the scope dies, and fire-and-forget on periodic ticks — instead of two copies that drift apart. Use when saved state is correct while the app runs but wrong after a hard quit, when a teardown save silently does nothing, or when two save functions have grown different guards.
  • pending-state-makes-waiting-legible — Model "asked, and not yet answered" as its own field, because without it a rejected request and a peer who simply has not looked at their screen are indistinguishable — both look like nothing happened. Covers the one set against many clears, clearing locally when no answer will ever come, and giving the user a way out. Use when an action appears to do nothing, when a screen can get stuck waiting forever, or when an error message has no place to appear.
  • preset-identity-read-back-from-value — Derive "which preset is this" by comparing the presets against the value in force instead of storing a label beside it, so editing drops to Custom by itself and returning re-selects — and derive any per-preset field that is a function of the preset's own numbers rather than writing it out per row. Use when a preset picker keeps showing a stale name, when a preset never re-selects itself, or when a per-row constant has drifted in one row out of twenty.
  • one-snapshot-per-period-not-many-flows — Return a whole period's figures as one immutable snapshot from a single suspend call, rather than as a dozen independent flows the screen has to line up — a screen comparing two spans needs each span coherent, and separate emissions let a count from this period render beside a total from the last. Covers when a single-emission flow is a suspend function in costume, which derived figures belong on the snapshot, and why a rate needs the denominator a human means. Use when a comparison screen briefly shows mismatched numbers while reloading, when adding the tenth flow to one screen's repository, or when two places compute the same average differently.
  • derive-the-flag-dont-store-and-correct-it — A boolean that is a pure function of state already being collected gets stored as its own mutableStateOf anyway, seeded with a guess and corrected a frame later by a LaunchedEffect — so the first frame renders the guess, and later changing only the seed value does nothing once rememberSaveable has already saved the old one. Use when a UI element visibly flashes shown-then-hidden-then-shown on cold start, or when editing a remember/rememberSaveable initializer doesn't change what a warm app already shows.
Show full SKILL.md (1,159 more words)Show less

Background work, services and platform runtime

  • app-backup-to-zip-mediastore — Back an app up into one zip that lands in the user's own Downloads folder with no storage permission, keeping only the newest N archives. Covers checkpointing the database's write-ahead log before the file is copied, assembling the archive in cache first, inserting through the system media store, and pruning old archives with a query over that same collection. Android only. Use when a restored backup is missing the most recent writes, when the backup file is invisible to the user's file manager, or when old backups accumulate forever.
  • datastore-driven-workmanager — Drive periodic background work straight from the settings store, so a toggle or an interval change takes effect immediately without a restart. Covers combining several preference flows into one scheduling decision, the update-in-place enqueue policy that lets a changed interval actually change, cancelling by unique name on disable, and why the worker must re-read the same settings itself. Android only. Use when changing a backup or sync interval does nothing until reinstall, when work keeps running after the user turned it off, or when two schedules end up stacked.
  • periodic-worker-dedup — Build a periodic notifier that never misses an item when a run is delayed, and whose only way to repeat one is a kill inside a single narrow window. Covers keeping the "already handled" record in the database rather than in the worker, scanning a time window deliberately wider than the scheduling interval so a skipped run catches up, and processing oldest-first so an interrupted run loses the newest item rather than a random slice. Android only. Use when users report duplicate notifications after a device restart, when items are missed while the device is idle, or when a first run floods the user with the whole back catalogue.
  • desktop-single-instance-before-di — Order a desktop app's startup so the single-instance guard runs before the dependency container and before anything opens on-disk state. Covers forwarding a second launch's arguments to the running instance and exiting, bridging a restore request from outside the UI framework into the live window, and the platforms where a second launch never produces a second process at all. Use when launching the app a second time crashes or corrupts settings, when a link opened while the app is running does nothing, or when the second window steals a file the first one owns.
  • compose-desktop-runtime-hardening — The ordered list of probes, system properties and platform gates a Compose desktop entry point must run before its first window exists. Covers warming the JDK's desktop-integration API ahead of any native load, renderer and interop properties that are read once at start-up, turning off vsync where the wait can park the UI thread, gating transparency and a custom titlebar on virtual-machine detection, and setting the Linux window-class name reflectively so the desktop entry binds. Use when the UI freezes while audio keeps playing after moving the window to another monitor, when the window never appears in a virtual machine, or when the Linux dock shows a class name instead of your app.
  • swappable-crash-reporting-and-dialog — Ship a build with crash reporting and a build with none from one codebase, by swapping a module that exposes three top-level functions instead of an interface, so call sites are byte-identical and the no-tracking build provably contains no reporting code. Also covers a desktop crash dialog built on the older widget toolkit, because the modern UI may be exactly what just died, and how to marshal it onto that toolkit's event thread. Use when a privacy build must contain no reporting dependency at all, when a swapped implementation is drifting from its counterpart, or when the app dies with no visible error and no way for a user to send you the details.
  • kmp-logger-facade — Put one small logging object in the shared module between every call site and the logging library, so a chatty subsystem can be silenced in one line and the library can be replaced without touching call sites. Covers the muted-tag set, a level-as-a-value enum for callers that pick severity at runtime, and why a single direct import of the library anywhere defeats both. Use when one subsystem drowns the log, when swapping or upgrading a logging library means editing hundreds of files, or when muting a tag has no effect on some of its output.
  • glance-widget-over-existing-state — Build a home-screen widget that renders the app's existing state holder rather than a parallel copy of it, by injecting the same shared state object and the same long-lived scope the app already uses and re-issuing the widget update whenever that state changes. Covers dispatching the app's own UI events from widget buttons, why the injection target must be a singleton rather than a screen-scoped definition, making the whole widget a tap target, turning off hardware bitmaps for artwork the widget must read, and the leak to avoid when starting those collectors from the widget's provide-glance callback. Android only. Use when a widget shows stale playback or session state, when its artwork is blank, when a tap on it opens the launcher's menu or does nothing at all, or when its buttons need their own duplicate logic.
  • remoteviews-bitmap-budget — Every bitmap a home-screen widget draws is copied into the RemoteViews payload handed across a process boundary, and the platform rejects an update whose bitmaps exceed a fixed budget — so decoding each image at the size it is drawn is not an optimisation, it is what keeps the widget on screen. Covers the pixel arithmetic that decides how many images fit, why the failure is invisible outside the system log, and why every surface reading the same image must agree on both its cache key and its decode size. Android only. Use when a widget shows the framework's error placeholder, when it renders on one device and not another, or when adding one more tile empties the whole widget.
  • glance-layout-vocabulary — The composable widget toolkit is not Compose with a different import — it has no aspect ratio, its weight is always 1 so an even split is the entire vocabulary, its corner radius only applies from API 31, and a widget always fills the launcher's cell so the spare height must be spent deliberately. Covers the weighted-spacer trick that keeps square tiles square, and where a fill modifier swallows a whole band. Android only. Use when a square tile renders as a rectangle, when a widget shows a block of dead colour below its content, or when corners are round on one device and square on another.
  • on-demand-dictionary-asset — A tokenizer, spellchecker or analyzer needs a multi-megabyte dictionary that would bloat every install for a feature most users leave off — fetch it once, on opt-in, into a plain directory, and make every consumer ask the filesystem "am I ready" rather than trust a flag. Use when a per-language asset inflates a package on only one target, when a half-downloaded asset must never look installed, or when a feature stays broken even after its download reports success.

© maxrave-dev, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 23 other files (references) in skills/state-and-background-footguns of maxrave-dev/kotlin-footguns.

  • SKILL.md
  • references/app-backup-to-zip-mediastore.md
  • references/combine-two-flags-to-gate.md
  • references/compose-desktop-runtime-hardening.md
  • references/compose-multiplatform-viewmodel-base.md
  • references/datastore-driven-workmanager.md
  • references/derive-the-flag-dont-store-and-correct-it.md
  • references/desktop-single-instance-before-di.md
  • references/distinct-by-key-reset-cancel-per-item.md
  • references/dual-mode-persist-blocking-or-async.md
  • references/flatmaplatest-resubscribe-composite-key.md
  • references/glance-layout-vocabulary.md
  • references/glance-widget-over-existing-state.md
  • references/kmp-logger-facade.md
  • references/named-job-lifecycle-discipline.md
  • references/on-demand-dictionary-asset.md
  • references/one-snapshot-per-period-not-many-flows.md
  • references/pending-state-makes-waiting-legible.md
  • references/periodic-worker-dedup.md
  • references/preset-identity-read-back-from-value.md
  • … and 4 more

Open the folder on GitHubat commit f5f0b49

Compare with similar skills

State And Background Footguns next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

State And Background Footguns compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
State And Background Footguns this skillmaxrave-dev/kotlin-footguns1.1k—~3.9kAutomated safety check: PassGPL-3.0
Compose Multiplatform Patternsmonta-app/ocpp-emulator1805 repos~2kAutomated safety check: PassApache-2.0
Android Developmentdpconde/claude-android-skill337—~1.7kAutomated safety check: PassMIT
Diagnosing Compose StabilityrosuH/EasyWatermark1.9k1 repos~3.3kAutomated safety check: PassApache-2.0
Claude Android NinjaDrjacky/claude-android-ninja124—~5.2kAutomated safety check: PassApache-2.0
Jetpack Composedarriousliu/PiPixiv263—~1.5kAutomated safety check: PassApache-2.0

Similar skills

  • Compose Multiplatform Patterns

    monta-app/ocpp-emulator

    Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.

    180 GitHub starsUsed in 5 repos~2k tokens
    MobileAuto-check passed
  • Android Development

    dpconde/claude-android-skill

    Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices.

    337 GitHub stars~1.7k tokensUpdated 10 mo ago
    MobileAuto-check passed
  • Diagnosing Compose Stability

    rosuH/EasyWatermark

    A skill your agent uses to diagnose Jetpack Compose stability problems by enabling and reading the Compose Compiler Reports (classes.txt, composables.txt, composables.csv, module.json).

    1.9k GitHub starsUsed in 1 repo~3.3k tokens
    MobileAuto-check passed
  • Claude Android Ninja

    Drjacky/claude-android-ninja

    Build and migrate Android apps with Kotlin, Jetpack Compose, MVVM, Hilt, Room 3 (KSP, SQLiteDriver, Flow/suspend DAOs), Navigation3, and multi-module Gradle.

    124 GitHub stars~5.2k tokensUpdated 10 days ago
    MobileAuto-check passed
  • Jetpack Compose

    darriousliu/PiPixiv

    Jetpack Compose expert skill for Android UI development. An agent skill from darriousliu/PiPixiv.

    263 GitHub stars~1.5k tokensUpdated yesterday
    MobileAuto-check passed
  • Coding Style

    sk2andy/candy-browser

    Apply Candy Browser's project-specific Kotlin, Jetpack Compose, Android/WebView, testing, and generator conventions.

    508 GitHub stars~548 tokensUpdated yesterday
    MobileAuto-check passed

More from maxrave-dev/kotlin-footguns

All 10 skills in this repo
  • Footgun Scan

    maxrave-dev/kotlin-footguns

    Scan a Kotlin or Compose Multiplatform diff for known footgun shapes and open the matching trap to confirm each hit.

    1.1k GitHub stars~518 tokensUpdated 14 days ago
    Auto-check passed
  • Desktop And Build Footguns

    maxrave-dev/kotlin-footguns

    Desktop JVM and build traps: JNA natives, bundling, memory, packaging, code signing, R8, deep links, Gradle and CI releases.

    1.1k GitHub stars~3.8k tokensUpdated 14 days ago
    Auto-check passed
  • Kmp Architecture Footguns

    maxrave-dev/kotlin-footguns

    Kotlin Multiplatform structure and language traps: module splits, expect/actual, Koin and ViewModel scoping, layers, version catalogs, erased overloads, Char and string-resource formatting limits.

    1.1k GitHub stars~4.4k tokensUpdated 14 days ago
    Auto-check passed
  • Media Playback Footguns

    maxrave-dev/kotlin-footguns

    Media player traps on Media3/ExoPlayer and desktop engines: crossfade, audio focus, fades, loudness, DSP, queues and shuffle, position restore, service lifecycle, group listening.

    1.1k GitHub stars~4.6k tokensUpdated 14 days ago
    Auto-check passed
  • Remote API Footguns

    maxrave-dev/kotlin-footguns

    Remote API traps in Kotlin Multiplatform: Ktor clients, defensive parsing, Resource envelopes, OK responses that dropped your data, auth callbacks, retry backoff, downloads, websockets, clock sync.

    1.1k GitHub stars~2.6k tokensUpdated 14 days ago
    Auto-check passed
  • Compose Screens Footguns

    maxrave-dev/kotlin-footguns

    Compose screen and interaction traps: navigation, adaptive layout, window insets, pagers, toolbars, sheets, list drag and selection, sliders, text fields, settings UI, one-shot effects.

    1.1k GitHub stars~5.5k tokensUpdated 14 days ago
    Auto-check passed

Categories

Questions about State And Background Footguns

What does State And Background Footguns do?

Reactive state and background-work traps: StateFlow conflation, flatMapLatest, job lifecycles, ViewModel bases, WorkManager, backups, crash reporting, logging, Glance widgets. State And Background Footguns is an agent skill from maxrave-dev/kotlin-footguns. Reactive state and background-work traps: StateFlow conflation, flatMapLatest, job lifecycles, ViewModel bases, WorkManager, backups, crash reporting, logging, Glance widgets.

When should I use State And Background Footguns?

State And Background Footguns fits situations like: work runs twice; tasks that involve Backup and disaster recovery; tasks that involve Android development.

How do I install State And Background Footguns in Claude Code?

Run `npx skills add maxrave-dev/kotlin-footguns --skill state-and-background-footguns -a claude-code`. Or copy the skill folder (skills/state-and-background-footguns in maxrave-dev/kotlin-footguns) into .claude/skills/state-and-background-footguns in your project. Claude Code loads it when a task matches its description.

How do I install State And Background Footguns in Codex?

Run `npx skills add maxrave-dev/kotlin-footguns --skill state-and-background-footguns -a codex`. Or copy the skill folder (skills/state-and-background-footguns in maxrave-dev/kotlin-footguns) into .agents/skills/state-and-background-footguns in your project. Codex loads it when a task matches its description.

Can I use State And Background Footguns in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add maxrave-dev/kotlin-footguns --skill state-and-background-footguns -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/state-and-background-footguns, .gemini/skills/state-and-background-footguns, .github/skills/state-and-background-footguns and .opencode/skills/state-and-background-footguns in your project.

What does State And Background Footguns need to run?

SKILL.md names no scripts, command-line tools or credentials: State And Background Footguns is instructions for the agent only.

Does State And Background Footguns access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is State And Background Footguns safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does State And Background Footguns use?

State And Background Footguns is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does State And Background Footguns use?

About 3.9k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 41k tokens, read only when the agent opens those files.

What are the alternatives to State And Background Footguns?

Skills that share tags, products or a category with State And Background Footguns: Compose Multiplatform Patterns (monta-app/ocpp-emulator, 180 stars), Android Development (dpconde/claude-android-skill, 337 stars), Diagnosing Compose Stability (rosuH/EasyWatermark, 1.9k stars) and Claude Android Ninja (Drjacky/claude-android-ninja, 124 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains State And Background Footguns?

maxrave-dev (a GitHub user) maintains it in maxrave-dev/kotlin-footguns, which has 1,085 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on September 25, 2026.

Source: maxrave-dev/kotlin-footguns on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.