All notable changes to mob_new (the project generator for Mob) are documented here.
Format: Keep a Changelog. Versioning: SemVer.
Full module documentation: hexdocs.pm/mob_new.
[0.3.4]
Added
CLAUDE.md"Release flow" section pointing at the canonical process inmob/RELEASE.md(URL form so it resolves without a local mob checkout). mob_new specifics: generator tests needMOB_DIR=/Users/kevin/code/mobset when running from a worktree (the resolver looks formobalongside the project and the worktree path breaks that assumption)..githooks/pre-push— same script shipped in mob (cheap preflight always, release preflight whenmix.exschanged). Activate per clone or worktree withgit config core.hooksPath .githooks.
[0.3.3]
Added
- Bluetooth Classic peripheral codegen (
MobBridge.kt.eex,beam_jni.c.eex,AndroidManifest.xml.eex) — generated apps now include the Kotlin BroadcastReceivers, JNI native_* externs, and Android permissions for theMob.Btruntime API (HFP / SPP / HID). Companion tomob0.6.5'sMob.Btmodule. Contributed by @HeroesLament (#4).
[0.3.2]
Fixed
- HexDocs
source_urlandsource_url_patternpointed at the wrong repo (mobinstead ofmob_new) and at a non-existent/mob_new/subdirectory prefix; the rendered</>glyphs all 404'd. Corrected togithub.com/genericjam/mob_new/blob/master/.... - Template fix:
beam_jni.c.eexwas missing the closing}fornativeDeliverVendorUsbEventbefore the BT JNI thunks began — every subsequentJNIEXPORT void JNICALLwas rejected by clang with "function definition is not allowed here". Generator tests never caught this because they grep rendered output, not compile it. - Template fix:
MobBridge.kt.eexduplicated three imports (IntentFilter,ConcurrentHashMap,AtomicInteger) alongside the BT Bluetooth* imports; kotlinc rejected with "Conflicting import". - Template fix:
MobBridge.kt.eexmissingandroidx.compose.foundation.layout.fillMaxSizeimport for the GpuView compile-error overlay. - Template fix: orphan comment in the import block confused ktlint's
import-orderingrule (no autocorrect available when imports are interleaved with comments).
Added
.github/workflows/test.yml— runsmix test,mix format --check-formatted,mix credo --strict, andmix deps.auditon push to master and on every PR..github/workflows/release.yml— on tag push, creates a GitHub Release whose body is the matching## [X.Y.Z]section from this changelog.
[0.3.1]
Added
- Bluetooth Classic template scaffolding:
MobBridge.kt.eexgains the Kotlin BroadcastReceivers,external fun nativeDeliver*JNI declarations, and Compose wiring for theMob.Btruntime API (HFP / SPP / HID).AndroidManifest.xml.eexgains the matching modern + legacy Bluetooth permissions.beam_jni.c.eexgains the per-event JNI thunks. (Generator tests cover the rendered template's external strings; manual on-device verification per the CLAUDE.md convention.) Mob.GpuViewAndroid backend (GLES 3.0):MobBridge.kt.eexgainsMobGpuViewcomposable +MobGpuSurfaceView+MobGpuRenderer, mirroring the iOSMobGpuView.swiftshipped in mob 0.6.4. Same%{ios: "...MSL...", android: "...GLSL ES..."}cross-platform shader contract; std140-ish uniform packing matches the iOS Swift packer (scalar/vec2/vec4 with natural alignment). Translucent red compile-error overlay on shader failure, matching iOS behavior.- Generator-test coverage for both surfaces — asserts the rendered template contains the expected composables, classes, imports, and dispatch entries.
[0.3.0] and earlier
Earlier releases predate this changelog; consult the tag list and the per-tag commit messages for history.