{
  "$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"
}