GenericJam/mob
72.5
Strong · 18 September 2026
21.5k
lines of production code
Elixir
with Objective-C, Zig, Swift
1
measurement over time
What this system is
This system is a cross-platform UI framework built on the BEAM (Erlang/Elixir) that renders native interfaces on iOS and Android. It manages a declarative widget tree, handles high-frequency user input and media, and exposes device capabilities like audio and Bluetooth through a native interface layer. The framework also includes internal tooling for causal debugging, flake detection, and developer onboarding to ensure reliability.
Features
Action receipts for causal debugging
The framework now records a correlation ID for every dispatched action, tracking its progress through stages from dispatch to committed frame. This allows agents and developers to determine exactly where an action failed—whether it was unhandled, caused no assigns change, or failed to render—without the ambiguity of the previous 300ms window-based effect detection. The system stores the last 256 receipts in an ETS table for low-overhead access and emits telemetry events when the host application has \:telemetry\ loaded.
lib/mob · high confidence
Add project-wide linting and formatting configuration files
The repository now includes configuration files for C/C++, Elixir, and Swift tooling: \.clang-format\ sets LLVM-style formatting for native code, \.credo.exs\ registers the \ExSlop\ plugin and customizes Credo checks, \.swiftlint.yml\ tunes SwiftLint rules for the iOS renderer, and \.tool-versions\ pins the host development environment to Erlang 29.0, Elixir 1.20.0, and Zig 0.17.0-dev.
(repo-wide) · high confidence
New Mix tasks for Erlang formatting, flake detection, and onboarding verification
Three new Mix tasks are introduced in lib/mix to improve developer workflow and test reliability. \mix erlfmt\ wraps the erlfmt library to format or check \.erl\ files, resolving the dependency at runtime to avoid compiler warnings when the dev-only dependency is absent. \mix mob.flake\ runs the test suite repeatedly in fresh OS processes to detect non-deterministic failures, saving logs for analysis. \mix mob.onboarding\_test\ executes integration tests that verify a new user can successfully set up and run the application, isolating each test in a temporary workspace.
lib/mix · high confidence
iOS platform layer and native UI primitives
This change introduces the iOS implementation for the Mob UI framework, providing the native rendering engine and core widget set. It includes a SwiftUI-based root view and view model that manage the UI tree, navigation transitions, and a startup watchdog to prevent indefinite loading states. The update adds support for a comprehensive set of UI components, including layout containers (Column, Row, Wrap, Box), interactive elements (Button, TextField, Toggle, Slider, Scroll, LazyList), and media views (Camera, WebView, Video). It also implements high-frequency input handling for gestures (pinch, rotate, drag, pointer move) and IME composition, a GPU-accelerated Metal view for fragment shaders, and an anchored panel primitive for floating overlays. The entry point is wired through a bridging header to the BEAM NIFs, enabling two-way communication for events, theme updates, and frame tracking.
ios · high confidence
Behavioural changes
Android native layer ported from C to Zig
The Android native bridge (JNI, NIFs, and BEAM launcher) has been rewritten in Zig, replacing the previous C implementation. This migration introduces a hand-declared FFI layer for the Android NDK and Erlang NIF API, implements in-process IPv4 DNS resolution via Bionic's getaddrinfo to fix resolution failures on physical devices, and expands the tap-handle registry from 256 to 4096 slots to prevent exhaustion crashes. The change also adds comprehensive support for high-frequency gesture events (scroll, drag, pinch, rotate, pointer), Bluetooth Classic (HFP/SPP/HID) event delivery, and ensures BEAM stdout/stderr is piped to Android logcat for visibility.
android · high confidence
Introduction of mob\_nif stub module defining native interface contract
The \src/mob\_nif.erl\ file has been added as the central Erlang NIF stub module, establishing the public API contract for native platform interactions. This change introduces exports for a wide range of device capabilities including audio (playback, recording, metering, output probes), device state (battery, network, orientation, lifecycle), UI components (alerts, toasts, webview, theme), and test harness utilities (screenshot, scroll control, UI inspection). It also formalizes the removal of legacy Bluetooth Classic declarations, directing callers to the separate \mob\_bluetooth\ plugin, and includes DNS resolution and post-mortem data ingestion functions.
src · high confidence
New pre-push hook enforces code quality and release preflight checks
A new \.githooks/pre-push\ script is introduced to automatically validate code before pushing. It runs fast checks (formatting, Credo linting, and compilation with warnings-as-errors) on every push. If \mix.exs\ has changed, it additionally runs a subset of tests and a security scan. The hook also provides advisory warnings if the branch is significantly behind \origin/master\ or if code changes were made without corresponding test updates, helping developers catch integration issues and coverage gaps early.
.githooks · high confidence
Test coverage
Expanded test coverage for core framework components
Added comprehensive test suites for the \Mob.Agent.Receipt\ system (including integration tests for screen dispatches and store behavior), the \Mob.Alert\ JSON encoding layer, the \:anchored\ node type contract, Android native stats NIF registration, iOS \inet\_db\ configuration, \Mob.Audio\ option parsing and status decoding, \Mob.Canvas\ primitive operations, and the \Mob.Capabilities\ runtime probe logic.
test · high confidence
Dependencies
Upgrade to Elixir 1.19 and update dependency versions
The project now requires Elixir 1.19 (up from 1.18) and has updated its dependency lockfile to include newer versions of key libraries such as Ecto 3.14.0, ExDoc 0.40.3, and Credo 1.7.18. Additionally, the \:public\_key\ OTP application is now explicitly declared in the application configuration to ensure it remains available on the code path in Elixir 1.19+ environments where unused applications are stripped.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 72.
Lenses
- Code Health 93
- Architecture 100
- Maturity 89
- Readiness 58
- Security 80
Changes since last survey
- 300 commits — 250 feature/other, 50 fixes
By area
- (root) — 150 commits
- lib/mob — 40 commits
- (repo) — 34 commits
- android/jni — 18 commits
- test/mob — 17 commits
- guides/components.md — 7 commits
- ios/mob_nif.m — 7 commits
- ios/MobRootView.swift — 4 commits
- guides/mobile_surface_matrix.md — 2 commits
- decisions/2026-05-26-data-dir-helper.md — 1 commit
- decisions/2026-05-26-dns-cellular-resolution.md — 1 commit
- decisions/2026-05-27-plugin-phase1-host.md — 1 commit
- decisions/2026-06-04-plugin-permission-registry.md — 1 commit
- decisions/2026-06-10-load-plugin-nif-modules-at-boot.md — 1 commit
- decisions/2026-06-16-files-pick-type-filter.md — 1 commit
- decisions/2026-08-27-frame-registry-purge-by-id.md — 1 commit
- decisions/2026-08-27-screen-process-architecture.md — 1 commit
- decisions/2026-08-29-migration-off-the-single-screen-process.md — 1 commit
- decisions/2026-09-04-defect-reports-are-a-shipped-feature.md — 1 commit
- decisions/2026-09-11-column-row-fixed-dims-precedence.md — 1 commit
Notable commits
- fix: Bump to 0.7.19 — iOS Motion accel units + sign fix
- fix: Bump to 0.7.21 — Mishka Chelekom docs, Linear tracking, gitignore fix
- fix: Bump to 0.7.24 — fix Android orientation reading freed memory
- fix: Bump to 0.7.28 — component + tap handle pool exhaustion fixes
- fix: Bump to 0.7.31 — frame-tracker ownership fix + honest platform docs (#90)
- fix: Bump to 0.7.32 — intrinsic Sheet detents, Box accessibility, launch-deadlock fix
- fix: Bump to 0.7.33 — screen processes, multi-stack navigation, MOB-107 fixed
- fix: Bump to 0.7.36 — iOS fixed-height boxes, quiet host theme probes
- fix: Bump to 0.8.1 — defect capsule, bus, and owner attribution (#153)
- fix: Bump to 0.8.4 — physical iOS launch crash fix (MOB-199)
- fix: Fix component handle pool exhaustion crashing the screen process (MOB-100)
- fix: Fix iOS Motion accel: match Android units + sign convention (#70)
- fix: Fix what MOB-129 broke by keeping parked screens alive (#132)
- fix: Fix: Column honours fill_height: true (iOS)
- fix: MOB-102: fix element_frames staleness after a no-op-frame rerender
- fix: MOB-124 rounds 1-2: measure the render pipeline, then fix what it showed (#118)
- fix: MOB-159 phase 1: defect capsule, bus, and owner attribution (#152)
- fix: MOB-191: release-gate fixes ahead of 0.8.3 (#165)
- fix: MOB-94: fix data race on g_font_fallback in nif_set_theme
- fix: MOB-95: mark issues.md #6's CameraX/ML Kit rows fixed
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
GenericJam/mob was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 18 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit b97a394e14b7ad43d5560692da7a2799f7b80da9 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-5d04157a340d.