Matt McKenna

Matt McKenna

@mmckenna.me

πŸ€– #AndroidDev and GDE πŸ’Ό Mobile/AI @ ramp.com 🌐 International Speaker 🐾 Dog lover πŸ“ blog.mmckenna.me

1.3K followers392 following427 posts

I really liked this idea and wanted to join in on the fun and see how it felt as a library. Introducing Sea Glass for Compose. 🌊 SLKVinyl on Twitter suggested sea glass for Material Design 4. Inspiration: x.com/SLKVinyl/st...

View full thread

It’s easy to add the style with the seaGlass modifier. Also available as: β€’ Components: SeaGlassButton, SeaGlassSurface β€’ Styles: SeaGlassStyle, SeaGlassComponentStyle β€’ Themes: SeaGlassTheme, SeaGlassMaterialTheme

I really liked this idea and wanted to join in on the fun and see how it felt as a library. Introducing Sea Glass for Compose. 🌊 SLKVinyl on Twitter suggested sea glass for Material Design 4. Inspiration: x.com/SLKVinyl/st...

View full thread

A little code behind the glass. You can give buttons and surfaces that frosted, softly tumbled look, with your own text and icons inside.

I really liked this idea and wanted to join in on the fun and see how it felt as a library. Introducing Sea Glass for Compose. 🌊 SLKVinyl on Twitter suggested sea glass for Material Design 4. Inspiration: x.com/SLKVinyl/st...

I've been working on an Android emulator plugin for Codex. Managing emulators with multiple agents was a mess, so I wanted each chat to have its own device that I could see and interact with directly. It's made it much easier to keep my agents and emulators organized.

It uses the new OpenAI MCP Extensions API to put the emulator right beside your chat. You can watch the agent work or take control, check Logcat, and send screenshots or recordings back to the chat.

Life’s been busy lately, and I finally found some time today to get caught up on dejavu! Dejavu turns Compose recomposition counts into test assertions, so you can catch regressions and protect the improvements you’ve already made. Here’s what’s new:

View full thread

β€’ Expanded test coverage: keyed SideEffect, changing remember keys, nested movable content, and newer Compose test APIs. β€’ Platform fixes and validation: Android, JVM desktop, iOS, and Wasm!

Life’s been busy lately, and I finally found some time today to get caught up on dejavu! Dejavu turns Compose recomposition counts into test assertions, so you can catch regressions and protect the improvements you’ve already made. Here’s what’s new:

β€’ Dejavu 0.4.0: support for Compose Multiplatform 1.11. β€’ Dejavu 0.5.0: support for Compose Multiplatform 1.12, while retaining Android Compose 1.11 compatibility.

After 4.5 rewarding years at Square, my time there came to an unexpected end. It’s a transition that feels all too familiar right now, but it cleared the path for an amazing new opportunity. I'm excited to start my next chapter at Ramp!

Matt McKenna reposted

Something big might happen to the Kotlin Multiplatform Ecosystem πŸ‘€ We were never too happy about how Kotlin publishes and resolves KMP libraries. It takes up significantly more space than it has to, produces a ton of artifacts and Maven modules, and is just... complex!

Matt McKenna reposted

Experimenting with something new in the latest Heron release. Heron now let's you download a local inference model to translate text and it works completely offline on your device. Nothing gets sent to any server.

Matt McKenna reposted

Hunting down Jetpack Compose recomposition issues manually is a huge time sink I’ve spent the past few weeks using @mmckenna.me’s Dejavu to simplify this: - Write Dejavu tests to establish a baseline - Tell the agent to hunt for issues and A/B fixes - Profit

Matt McKenna reposted

If you somehow missed the KotlinConf keynote last week, here are the top 10 KMP announcements with links to learn more about each πŸ§΅πŸ‘‡

Matt McKenna reposted

Situation 1: dev A thinks approach X is correct, dev B thinks Y is the right way. They argue and try to convince each other. Situation 2: dev A thinks approach X is correct, tells the LLM to implement it. There is SO MUCH learning in Situation 1, lost when using LLMs....

I built Dejavu because agents don't feel extra recompositions. They write Compose code that compiles and passes its tests while the UI quietly does ten times the work. Dejavu turns that hidden work into a failing test, giving the agent a count to optimize against.

View full thread

Dejavu is KMP, so the skills work across Android, JVM Desktop, iOS, and WasmJs. They cross-reference each other so the agent moves between them on its own. Try it on a composable that's been bugging you. Repo: github.com/himattm/dejavu Docs: dejavu.mmckenna.me

github.comGitHub - himattm/dejavu: A lightweight framework for tracking and asserting against Jetpack Compose recompositions.A lightweight framework for tracking and asserting against Jetpack Compose recompositions. - himattm/dejavu

I built Dejavu because agents don't feel extra recompositions. They write Compose code that compiles and passes its tests while the UI quietly does ten times the work. Dejavu turns that hidden work into a failing test, giving the agent a count to optimize against.

View full thread

The standout is dejavu-perf-loop. You pick a composable, write a test asserting atMost=10, and run it. You read the failure, choose a cookbook fix, apply it, and rerun. Tighten the bound and keep going until the count matches the floor.

The floor isn't always zero. Some composables legitimately recompose N times when their inputs change, and that count is the right answer. The skill writes the assertion as exactly = N and locks it in. If the count already matches the floor, the cookbook step is skipped.

I built Dejavu because agents don't feel extra recompositions. They write Compose code that compiles and passes its tests while the UI quietly does ten times the work. Dejavu turns that hidden work into a failing test, giving the agent a count to optimize against.

Today I shipped four skills, one for each part of the loop: β€’ dejavu-onboarding: adds Dejavu to a project β€’ dejavu-test-writer: authors recomposition tests β€’ dejavu-error-triage: diagnoses failing assertions β€’ dejavu-perf-loop: drives recompositions to their floor

Finally got around to bundling the skills I'm using every day into a repo and Claude Code marketplace so anyone can install them. I'm still rebuilding from what I was using daily at work, but we'll get there.

Hit Claude limits for the first time ever with Opus 4.7 It's somehow equivalent to my last 30 days of Opus 4.6 use. This makes the model not worth using imo.