Trevor’s Blog

Ten years in mobile, now mostly Kotlin Multiplatform and AI tooling. Most posts appear on WeChat first and get archived here, with reproducible steps and primary sources wherever possible.

DeepSeek Opened the App's APIs. Harness Learned to Import History.

DeepSeek Opened the App's APIs. Harness Learned to Import History.

DeepSeek opened the App’s toolkit as API parameters: search, file parsing, speech. One sentence from me triggered three server-side searches, billed per tool call. Same night, dsh 0.2.2-rc.3 added chat import, and upgrading a profile disabled six plugins.

2026-11-14 · 4 min · 1922 words · Trevor Wang
Kotlin Syntactic Sugar in Bytecode: Which Ones Are Actually Free

Kotlin Syntactic Sugar in Bytecode: Which Ones Are Actually Free

I compiled a dozen Kotlin sugars and read the javap output. Three tiers: ?. is a real ifnull jump with zero allocation, inline saves 0.01 B per call while copying the body, string templates hinge on jvmTarget, and lazy’s three modes I could not measure.

2026-11-13 · 7 min · 1461 words · Trevor Wang
Kotlin 2.5 Value Classes Save No Memory, and Destructuring Changes Meaning

Kotlin 2.5 Value Classes Save No Memory, and Destructuring Changes Meaning

Kotlin 2.5.0-RC pushes full value classes, so I read bytecode: javap shows a plain class, no box-impl. In a list it allocates 36.0 B, the same as the data class. The real win is a class file 21% smaller, and default destructuring still silently swaps names.

2026-11-13 · 3 min · 1497 words · Trevor Wang
One Piece of C Code, Five Pitfalls Each for Flutter and KMP

One Piece of C Code, Five Pitfalls Each for Flutter and KMP

34 lines of C bound twice, through Flutter’s ffigen and KMP’s cinterop. Under AOT both call in near 0.1us. KMP’s debug build made struct returns 30x slower until release fixed it. Five pitfalls each, led by a version wall and a silently empty binding file.

2026-11-13 · 8 min · 1601 words · Trevor Wang
DeepSeek Harness Code Review: The Bottleneck Was Never Git

DeepSeek Harness Code Review: The Bottleneck Was Never Git

DeepSeek Harness 0.2.2-rc.2 added review by branch, commit and file type. I measured every stage on a 21,711-file repository: creating a worktree takes 1.5 seconds, producing a 28,458-line diff takes 75 milliseconds, and what actually does not fit is 300,000 tokens of context.

2026-11-12 · 7 min · 1292 words · Trevor Wang
You Asked for Rounded Corners, Compose Multiplatform Desktop Drew a Spike

You Asked for Rounded Corners, Compose Multiplatform Desktop Drew a Spike

Stroke(join = Round) was drawn as Miter on Compose Multiplatform’s desktop, iOS and web targets while Android stayed fine. The root cause is a setter that never runs. I rendered both versions and diffed them pixel by pixel: 1,619 pixels apart.

2026-11-12 · 6 min · 1213 words · Trevor Wang
Jake's Approach: Run Compose on the Server, Push Only HTML

Jake's Approach: Run Compose on the Server, Push Only HTML

Jake Wharton runs Compose on the server with Molecule, renders HTML with kotlinx.html, pushes it over SSE, and merges it with Idiomorph. I rebuilt it and found that whether your text input survives comes down to three defaults.

2026-11-12 · 7 min · 1378 words · Trevor Wang
Liquid Glass, Running on Compose Desktop

Liquid Glass, Running on Compose Desktop

Apple shipped Liquid Glass and Android still has no official answer. I dropped Kyant0/Backdrop into a Compose Multiplatform desktop project and it actually runs on macOS. The cross-platform adaptation is only 280 lines, because AGSL is a subset of SkSL.

2026-11-06 · 8 min · 1624 words · Trevor Wang
dsh 0.2.2-rc.1: This Release Changed 0 Lines of Code

dsh 0.2.2-rc.1: This Release Changed 0 Lines of Code

Unpack both tarballs and compare md5 file by file: 8 packages, 290 files, 8 differences, all of them in package.json. The version number went from alpha to rc, not a line of code moved, but every dependency got bumped, and plugins have to follow.

2026-11-04 · 7 min · 1386 words · Trevor Wang
JetBrains' New IDE, and the Editor Is Read-Only

JetBrains' New IDE, and the Editor Is Read-Only

JetBrains shipped an AI IDE, and getting it running showed me that the feature list isn’t the interesting part: the source hardcodes readOnly: true, and when I typed into the editor the file hash didn’t move. This is an IDE that won’t let you change code.

2026-11-04 · 9 min · 1700 words · Trevor Wang
I Had dsh Write Its Own Plugin. It Took Nine Minutes.

I Had dsh Write Its Own Plugin. It Took Nine Minutes.

I asked dsh’s Creator mode for a plugin. It inspected the runtime, read source, wrote the package, requested install approval, and nine minutes later the tool was sitting in the plugin manager. A fresh session called it in ten seconds.

2026-11-03 · 3 min · 1305 words · Trevor Wang
Android 16 Deleted Your Portrait Lock, and I Verified It Three Times on an Emulator

Android 16 Deleted Your Portrait Lock, and I Verified It Three Times on an Emulator

One codebase, two builds, targetSdk 35 and 36, a screen resized to tablet size, then a command to rotate. 35 stays locked with black bars, 36 flips and fills the window, and back on a phone-sized display the restriction returns.

2026-11-03 · 6 min · 1272 words · Trevor Wang