{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreibc6zu4lzmtf6zzyq5dlxrmozin26e7m44wwkf55dq7gbtrahcvi4",
"uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mluywtel35e2"
},
"path": "/t/hatter-native-haskell-mobile-apps/13952#post_18",
"publishedAt": "2026-05-15T09:03:23.000Z",
"site": "https://discourse.haskell.org",
"tags": [
"github.com/jappeace/hatter",
"docs/miso-lynx-comparison.md",
"master",
"show original",
"A Practical Guide to Agentic Software Development — Jappie Software B.V."
],
"textContent": "Yeah I did reply to that. I assumed it’d be a webview approach seing the javascript stuff, clearly I was wrong, it appears to be more like flutter, nice\n\nTo be clear, I want a /working/ approach for device / integration access on mobile in haskell, I don’t care who makes it. For example access to the camera or bleutooth.\nmiso-lynx doesn’t appear to do this right now and is a fair bit away from doing that.\n\nI told it to make a full comparison here:\n\ngithub.com/jappeace/hatter\n\n#### docs/miso-lynx-comparison.md\n\nmaster\n\n\n # Hatter vs miso-lynx: Technical Comparison\n\n A technical comparison of the two native Haskell mobile frameworks, focused on architecture, device API access, and what it takes to ship a Bluetooth scan.\n\n ---\n\n ## Executive Summary\n\n Hatter and miso-lynx take fundamentally different approaches to putting Haskell on mobile:\n\n - **Hatter** cross-compiles Haskell to native ARM binaries via GHC. The Haskell runtime runs natively on the device. Device APIs are accessed through a C FFI bridge that dispatches to JNI (Android) or Objective-C (iOS).\n - **miso-lynx** compiles Haskell to JavaScript via GHC 9.12's JS backend. The code runs inside a JS interpreter embedded in LynxJS (ByteDance's cross-platform engine, used in production by TikTok). Native views are created through LynxJS's Element PAPI.\n\n | Concern | Hatter | miso-lynx |\n |---|---|---|\n | Execution model | Native ARM binary (GHC RTS on device) | JavaScript in LynxJS interpreter |\n | UI toolkit | Platform-native (UIKit, Android Views, SwiftUI) | LynxJS native views via Element PAPI |\n | Language boundary | C FFI (direct function calls) | GHC JS backend → LynxJS PAPI |\n | Layout engine | Platform-native (Auto Layout, LinearLayout) | LynxJS CSS engine (flexbox/grid/linear) |\n | Device APIs | 10+ working (BLE, Camera, Location, HTTP, etc.) | None yet (blocked on dual-thread PR) |\n\n\nThis file has been truncated. show original\n\nNB: This is a cookbook on how to use agents better: A Practical Guide to Agentic Software Development — Jappie Software B.V.",
"title": "Hatter: Native Haskell mobile apps"
}