Extentos vs Meta DAT directly
Extentos wraps Meta's Device Access Toolkit — it doesn't replace it. What you write against raw DAT vs what Extentos gives you, and when to go direct.
Extentos isn't an alternative to Meta's Device Access Toolkit — it's a layer on top of it. Extentos's production transport (RealMetaTransport) calls Meta DAT under the hood; the question isn't "Extentos or DAT," it's "compose against Extentos's typed primitives and tooling, or wire the raw DAT API yourself." This page is the honest comparison, including when going direct to DAT is the better choice.
What Meta DAT gives you, and what you still have to build
Meta's Device Access Toolkit is the official SDK for connecting a mobile app to Ray-Ban Meta — it handles Bluetooth pairing, the session/stream lifecycle, camera frames, photo capture, and the audio path. It's solid plumbing. But it stops at the SDK surface. Building a real voice-glasses app on raw DAT means you also write, yourself:
- The wake-phrase path — DAT doesn't recognize phrases. You stream the glasses mic to the phone's
SpeechRecognizer/SFSpeechRecognizerover Bluetooth HFP, normalize transcripts, and match strings. - A capability abstraction — DAT exposes raw publishers (
videoFramePublisher,photoDataPublisher, …). You build the typed surface your handlers call. - A test harness — DAT ships a Mock Device Kit for the transport, but you write the speech-recognition simulation, TTS playback, hardware-alert injection, and an event correlator to actually exercise your app's behavior. (See transport vs app simulation.)
- Permission derivation — you map each capability to the right Android manifest entries and iOS Info.plist keys (including the Meta DAT-specific ones) by hand.
- The audio-coexistence decisions — A2DP playback racing an HFP capture is fragile; you write the routing policy.
- Multi-vendor portability — DAT is Meta-only. Supporting another vendor later is a fresh integration.
What Extentos adds
Extentos builds that layer once, shared across every Meta Ray-Ban app:
- Typed capability primitives — your handler subscribes to
glasses.audio.transcriptions(),glasses.camera.capturePhoto(),glasses.audio.speak(),glasses.assistant.start(),glasses.display.show()— the same API across the browser simulator, the on-device local simulator, and real hardware. - A real app-level simulator + agent-driven testing — drive voice, camera, and display from a browser (or from MCP tools, no human), and read a structured 7-chip event log. The bulk of the dev loop happens without pairing glasses.
- MCP scaffolding for AI agents —
generateConnectionModulewrites the wiring,getPermissionsderives the entitlements,validateIntegrationgates correctness. See the MCP tools reference. - A typed error model — lifecycle ops return
ExtentosResult<T, E>with concrete failure variants instead of raw exceptions. - A managed AI gateway (optional) — the assistant runtime routes voice AI on Extentos's keys by default; no key in your app. See the gateway.
- A multi-vendor seam — handler code is vendor-agnostic; adding a vendor is a new transport, not a rewrite.
Side by side
| Raw Meta DAT | Extentos (on top of DAT) | |
|---|---|---|
| Bluetooth pairing, session/stream lifecycle | ✅ DAT | ✅ (wraps DAT) |
| Camera / photo / audio primitives | ✅ raw publishers | ✅ typed glasses.* |
| Wake-phrase recognition | ❌ you build it | ✅ glasses.voice.onPhrase / transcriptions() |
| App-level simulator (voice, TTS, alerts) | ❌ you build it | ✅ browser simulator |
| Agent-driven E2E testing | ❌ | ✅ inject + assert + event log |
| Permission derivation | ❌ by hand | ✅ getPermissions |
| Typed error model | ❌ raw exceptions | ✅ ExtentosResult |
| Voice AI / assistant runtime | ❌ you wire a provider | ✅ managed gateway + glasses.assistant |
| Ray-Ban Display rendering | DAT 0.8.0 primitive | ✅ glasses.display.* DSL |
| Multi-vendor portability | ❌ Meta-only | ✅ vendor-agnostic handlers |
| Dependencies | DAT only | DAT + Extentos SDK |
When to use Meta DAT directly
Extentos is the faster path for almost any voice/camera/display glasses app — but going direct to DAT is the right call when:
- You need a DAT capability Extentos doesn't surface yet. Extentos exposes a curated primitive set; if you need a raw DAT API that isn't wrapped, use DAT directly (and consider emailing us so it gets surfaced).
- You want zero added dependencies. A minimal app that only does, say, one photo capture may not need the abstraction.
- You're doing something very low-level with the transport that the capability model would get in the way of.
Adopting Extentos on an existing DAT app is a full cutover today, not a side-by-side blend: the Meta DeviceSession is a single-owner handle, so raw DAT and Extentos can't both own the hardware in one process. The cutover is a call-site swap, not a rewrite (Extentos calls the same DAT underneath) — see Migrating from raw Meta DAT for the symbol-by-symbol map.
Escape hatches: lower altitude, same ecosystem
When you need something the packaged surface doesn't give you, Extentos's answer is an escape hatch that stays inside the ecosystem — an explicitly opt-in API at a lower altitude (Android @ExtentosEscapeHatch, iOS @_spi(ExtentosEscapeHatch)), never a handout of the raw vendor session. That's a deliberate hard rule, for the same single-owner reason as above: two owners of one Bluetooth transport is split-brain by construction. Everything you do through a hatch still rides the Extentos session — same connection state machine, same event log, same toggles and permission gates.
What that looks like today: the shipped hatch lets you replace the packaged connection page with fully custom UI built on glasses.connection.state, glasses.toggles.state, and glasses.voice.hints. And a lot of "low-level" visibility needs no hatch at all — connection.state is a plain observable stream, video frames carry per-frame effective width/height, and glasses.runtime.events streams the SDK's runtime activity. Vendor-specific extension hatches (Meta-only knobs the neutral vocabulary doesn't cover) follow the same in-ecosystem rule as they land; if you're blocked on a specific DAT capability today, tell us and it gets prioritized.
The bottom line
Extentos doesn't hide Meta DAT — it does the repetitive, fragile, per-app work (wake-phrase plumbing, the app-level simulator, permission derivation, the test harness, the error model) once, so you write your app's logic instead of its infrastructure. If you'd end up rebuilding that layer anyway, Extentos is the layer. If you genuinely only need raw transport, DAT alone is fine.
Related
- Migrating from raw Meta DAT — the symbol-by-symbol cutover map for an existing DAT app
- Transport vs app simulation — Mock Device Kit (transport) vs the Extentos app-level simulator
- Capabilities — the vendor-agnostic primitive surface
- Vendors: Meta Ray-Ban — the DAT capability matrix and setup
- Quickstart with an agent — install and build the first flow
Related
Transport vs app simulation
Meta's Mock Device Kit simulates the transport layer; Extentos simulates the app layer — voice, photo capture, and the wearing experience. Both matter.
Capabilities
The Extentos capability vocabulary — the vendor-agnostic SDK primitives (audio, camera, voice, assistant, display, hardware events) your handler subscribes to.
Architecture
How Extentos fits together — AI agent, MCP server, native Kotlin/Swift SDK, four transports (system audio, Meta DAT, browser sim, local in-memory sim), and the backend.
Meta smart glasses (Meta DAT)
Meta smart glasses developer guide: Wearables Device Access Toolkit (DAT 0.8.0) capabilities, supported models (Ray-Ban Meta, Oakley Meta, Ray-Ban Display), 2026 distribution state, and how Extentos abstracts the toolkit.
Quickstart with an AI agent
Install the Extentos MCP server and let your AI agent scaffold Meta Ray-Ban smart-glasses capabilities into a native iOS or Android app. Free to start.
Migrating from raw Meta DAT
Move an app you already built against Meta's Device Access Toolkit onto the Extentos SDK — a call-site swap, not a rewrite, because Extentos calls the same DAT underneath.
Transport vs app simulation
Meta's Mock Device Kit simulates the transport layer; Extentos simulates the app layer — voice, photo capture, and the wearing experience. Both matter.
The managed AI gateway
How AI runs in an Extentos app — the assistant routes voice AI through the managed gateway. Content relayed, never stored; metered. The assistant always runs on the managed gateway; there is no bring-your-own-key option.