- Rust 85.5%
- Python 6.8%
- C 3.6%
- Nix 1.6%
- Shell 1.2%
- Other 1.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The default mapping labelled everything under software/pinephone-shell GPL-3.0-or-later, including code and art that is not ours: - the 13 crates harvested from mecha-wayland and modified in place (software/pinephone-shell/NOTICE lists them): BSD-3-Clause, Mecha Systems. Our modifications stay under the upstream licence rather than relicensing the files; the shell's own crates beside them keep GPL-3.0-or-later. - assets/icons: Lucide (atlas.toml says so), ISC with MIT for the Feather-derived icons, per lucide-icons/lucide LICENSE. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TpP3mMquPhtgUE612DFiEx |
||
| docs | ||
| firmware | ||
| hardware | ||
| LICENSES | ||
| os | ||
| reference/mecha-comet | ||
| reports | ||
| software/pinephone-shell | ||
| tools | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| README.md | ||
| REUSE.toml | ||
| ROADMAP.md | ||
Cyberdeck: pocket phone-replacement — research synthesis
Date: 2026-07-12 · Status: research phase complete, direction proposed
Full evidence: seven citation-heavy research reports in reports/ — this
document is the synthesis; every claim here is sourced in a report.
TL;DR
- Nothing off-the-shelf meets the hard requirements. Every shipping Linux keyboard device is a 3–5 h session machine with no working suspend; every multi-day-standby device lacks a keyboard or lacks Linux. (devices report)
- The architecture that works is proven end-to-end, just never shipped in one box: a tiny always-on supervisor (MCU or on-die coprocessor) owns power/modem-wake/ notifications at milliwatts, while a Linux SoC sleeps in suspend-to-RAM and resumes in ~0.45 s on demand. Snapdragon W5+ ships this two-chip pattern commercially; MNT Pocket Reform, Precursor, and Chromebook ECs prove every layer in the open. (coprocessor report)
- Voice is solvable but prescriptive: US voice = VoLTE only, carriers gate by IMEI.
The way through is a pre-certified cellular module that terminates VoLTE
internally (Quectel EG25-G — the PinePhone modem, proven on T-Mobile/MVNOs — or
SIMCom A7670-class). Never expect mainline Linux to do IMS; it can't in 2026.
T-Mobile (Daniel's current carrier) is the friendliest. Escape hatch: data-only
- VoIP number. (mcu-cellular, linux-phones)
- Compute is decided by suspend power, and only two chips clear the bar with headroom: TI AM62x (~1 mW deep sleep, on-die Cortex-M4F always-on domain) and NXP i.MX93 (7.6 mW documented, on-die Cortex-M33). RISC-V, x86, and Raspberry Pi are all eliminated by 5–30×. RK3588-class is the convergence tier (only clean mainline USB-C DP-altmode) but cannot sleep. (soc-landscape, edge-silicon)
- Recommended path: staged build (proposed phases below), starting with a ~$100 proof of the two riskiest assumptions (VoLTE on our SIM through an EG25-G; SoC deep sleep + modem-ring wake), on a SoM-based carrier board so compute stays upgradeable (Framework-esque).
Product identity (Daniel, 2026-07-13)
A ThinkPad-utility that happens to fit in the pocket: remote terminal, hacker/workbench tool, and communications device. Explicitly NOT an entertainment slab — avoiding the doom-scroll is a feature, not a gap. Design consequences: keyboard-first, open-to-terminal-in-a-second is the hero interaction; the outer strip handles glances so the main screen never becomes a feed; folded-phone mode is occasional utility (QR, maps, a call), not a couch posture, so its 38 mm chunk is acceptable; terminal excellence outranks browser comfort in every tradeoff (RAM, GPU, panel choices).
Requirements & decisions
Hard: physical keyboard · pocket brick (thick OK, no dangly bits) · 1–2 day light-use battery · SIM with calls/SMS/data · notifications · basic GPS · audio media · BT · QR-grade camera · heavy SSH · durable printed shell · encryption at rest · remote nuke · hackable firmware. Nice: convergence dock · touchscreen · GPIO/LoRa/Meshtastic · blob-free.
Decisions captured 2026-07-11/12:
- Voice: no dogma — "whatever can be made to work"; willing to switch carriers (≤$50/mo, month-long high-quality audio streaming must be viable).
- Build path: off-the-shelf would be a win if it truly existed (it doesn't — see verdict table); otherwise staged toward custom.
- Convergence: not required; investigate both paths, decide on data.
- Budget: ~$2k if it actually comes to life; modular/upgradeable strongly preferred.
- Battery: chunky is fine — thick pack, possibly multi-cell, silicon-carbon if obtainable.
The physics
The device is screen-off ~95% of the time, so standby draw dominates. Average power allowed for 48 h:
| Pack | 48 h average budget | Notes |
|---|---|---|
| 20 Wh | 417 mW | large-phone class (~5,400 mAh @ 3.7 V) |
| 30 Wh | 625 mW | thick brick, still pocketable |
| 40 Wh | 833 mW | "chunky is fine" tier; 2× 21700 ≈ 37 Wh already |
Realistic daily energy = standby (46 h × standby-mW) + active (~1.5–2 h × 2–4 W). With a sleeping SoC at ≤10 mW + modem idle at ~10–50 mW, even a 20 Wh pack gives multiple days; at i.MX8MP-class ~150 mW suspend a 30–40 Wh pack still clears 2 days. What never clears it: anything that must stay idle-not-suspended (0.4–5 W).
Battery notes: silicon-carbon cells (the 2024–26 phone-density jump) are worth sourcing but availability in maker-friendly pouch formats needs verification — treat as a Phase-2 sourcing task, not a plan dependency. Multi-cell is fine if done as parallel same-model cells behind one proper charger/fuel-gauge (BQ25895 + BQ27427, or AXP2101); the PinePhone keyboard case is the cautionary tale for ad-hoc two-battery charging (see linux-phones report). uConsole's protected-18650 brownouts under LTE TX spikes are the other lesson: budget the modem's burst current.
The four hard walls (and how each is passed)
1. VoLTE + carrier certification
US 2G/3G are gone (T-Mobile's last 2G dies 2026-08-03); voice = VoLTE-over-IMS only, and carriers whitelist by IMEI/TAC. Mainline Linux cannot do IMS (81voltd is a PoC; pmOS was still fixing call audio routing in 2025). Pass: use a standalone module whose own baseband terminates VoLTE and carries a pre-certified IMEI — EG25-G is field-proven on T-Mobile/MVNOs via PinePhone; SIM7670G is on Verizon's approved-module list. Target T-Mobile first; AT&T/Verizon are strict. Fallback: data-only module + number ported to VoIP (JMP.chat-style). Details + citations: mcu-cellular §2/§c, linux-phones lesson 1.
2. Standby power is a software problem
Good silicon numbers ≠ working suspend: MNT Pocket Reform's i.MX8MP suspend is still broken/regressed in mainline; uConsole's CM4 has no true sleep at all. The suspend-to-RAM + wake path must be treated as a first-class engineering deliverable, not an assumed feature. Pass: pick the SoCs whose deep sleep is documented and measured (AM62x ~1 mW, i.MX93 7.6 mW), and prototype modem-RI → supervisor GPIO → PMIC → S2R-resume before designing anything else. Also: disable modem ADB (10→50 mW suspend penalty). Details: soc-landscape §1/§6, coprocessor §3, linux-phones lesson 2.
3. Nothing off-the-shelf does it
See verdict table below. The pragmatic community shortcut (reshell a real phone + keyboard) inherits cellular/battery/encryption for free but fails hackability and the no-Android goals. Details: devices report.
4. The blob ceiling
The baseband cannot be opened — even biktorgj's EG25-G firmware opens only modem userspace (and is minimally maintained since 2024-05). Pass: isolation, not liberation — modem on USB (no DMA), AT/QMI only, hardware kill switch, host-side firewall. SoC blob audit: Allwinner A64 cleanest (but slow), RK3588 cleanest-per-performance (one DDR blob), AM62x carries two TI firmware blobs, i.MX8M's HDMI blob is permanently unreplaceable (avoid HDMI; use MIPI-DSI). Nordic BLE is now fully open. WiFi: only ath9k_htc (USB, 2.4 GHz-n) is source-open; modern WiFi = host-loaded blob, accept it. Details: security report §2/§3/§7.
What survives the filter
| Role | Primary pick | Alternate | Rationale |
|---|---|---|---|
| Linux SoC | TI AM62x SoM (quad-A53 + M4F AON) | NXP i.MX93 SoM (dual-A55 + M33); TI AM62L (2025, <5 mW, no M4F) | Only chips with ≤10 mW documented deep sleep; castellated SoMs (Verdin/Variscite/phyCORE) — no BGA. BeaglePlay = test vehicle only, NOT the deck's compute |
| Modem | Quectel EG25-G (mini-PCIe, VoLTE proven on T-Mo, biktorgj fw, PinePhone ecosystem) | SIMCom A7670/SIM7670G (Cat-1bis, cheaper, lower idle) | Pre-certified IMEI, internal IMS, PCM audio out, RI wake line |
| Supervisor | RP2040 or nRF5340 running Zephyr (or cros-ec/MNT fork) | on-die M4F/M33 only (Architecture C) | Owns PMIC, keyboard matrix, modem RI, RTC, notification state |
| Always-on display | Sharp Memory LCD strip (~15 µW static) | none (blank-when-asleep) | Smartwatch trick: time/notifs without waking Linux |
| Main display | DXQ 3.92" AMOLED 1080×1240 @90 Hz, 450 nits, MIPI-DSI touch (piBrick's panel; dark theme = power scales with lit pixels) | 4" 720×720 TFT (HackberryPi's) | MIPI-DSI avoids the i.MX HDMI blob entirely; ≥450 nits requirement |
| Keyboard | Solder Party KeebDeck family: raw keypad ($1.77, in stock) scanned by our supervisor; assembled KeebDeck Basic when restocked | Bench: ZitaoTech P9981 Pro (USB HID + trackpad, in stock); raw BB Q20 flex (22-pin, trackpad) | BBQ20KBD is OOS everywhere/retired; KeebDeck = Solder Party's in-house successor, no salvage dependency (see docs/bom.md) |
| Audio | ES8311 codec (+ ES7210 mics) + ESP-SR/soft AEC; modem PCM for calls | — | AEC is non-negotiable for speakerphone |
| GPS | modem's integrated GNSS first; u-blox MAX-M10S (<25 mW) if standalone | ATGM336H (cheap) | duty-cycled by supervisor |
| LoRa | SX1262 module (uMesh-style internal bay) | — | Meshtastic; nice-to-have bay, not core |
| Security | LUKS2 aes-xts (ARMv8 AES) + SE050/ATECC608 two-secret unlock + duress PIN + Ed25519-signed remote nuke over SMS + escrowed header | — | security report's reference design; avoid CAAM/hw-XTS traps |
| OS | postmarketOS (best FDE story) or mobile-nixos (hand-rolled encrypted image; fits NixOS-everywhere) | custom Zephyr on supervisor side regardless | supervisor firmware: Zephyr (ZSWatch/InfiniTime patterns to steal) |
Reference architectures
From the coprocessor report (full mechanisms + citations there):
- A — "Supervisor + Suspend" (fast, safe): RP2040-class supervisor + AM62x/i.MX93 in S2R (~1–10 mW) + modem-RI wake. One display; screen blank while asleep. Ships the soonest; this is MNT Pocket Reform tuned for battery.
- B — "Watch-computer + Deck" (the dream): nRF5340 always-on computer with its own memory-LCD strip owning modem/BLE/notifications/call UI at single-digit mW, plus a gated Linux module for terminal/convergence. Multi-day standby with a live status display. Highest integration cost (two firmware stacks, sync protocol, antenna coex).
- C — "SoC-with-integrated-SCP" (fewest chips): lean entirely on the AM62x M4F / i.MX93 M33 always-on domain; no external MCU. Least hardware, but bound to that SoC's suspend quality and the on-die core usually can't drive an always-on display.
Proposed trajectory: start C-flavored-A, evolve toward B. Phase 1 validates deep sleep + RI-wake using the on-die core (C); the custom carrier adds an external supervisor + memory-LCD strip (A→B) since we'll want a PMIC/keyboard owner anyway. Convergence: don't chase DP-altmode in v1 — it demands RK3588-class silicon that can't sleep. The SoM socket keeps the door open (RK3688 modules in 2027, or a "dock brain" later); interim convergence = SSH/waypipe into the deck from any screen.
Off-the-shelf verdict
| Device | Ships? | Kbd | Cellular | 2-day batt | Linux | Verdict | |
|---|---|---|---|---|---|---|---|
| Mecha Comet | ~Oct'26 | ✅ 225 g | ✅ QMK | ✅ M.2+SIM | ⚠️ claimed 7-day susp, unproven (i.MX8MP!) | ✅ new | Watch closely; closest intent-match |
| Furi FLX1s | ✅ $550 | ✅ slab | ❌ | ✅ VoLTE T-Mo, measured 3.9–7.2-day standby, SSH-alive | ✅ | ✅ Debian/Halium | Best reference design; no keyboard |
| piBrick PocketCM5 | ✅ $240 kit | ✅ | ✅ BBQ20 | ❌ | ❌ CM5 no suspend | ✅ | Best form-factor donor/chassis lessons |
| HackberryPi CM5 | ✅ $168 | ⚠️ 306 g | ✅ | ❌ | ❌ 3–4 h | ✅ | Best buy-today kbd brick; wrong compute |
| uConsole | ⚠️ made-to-order | ❌ slab | ✅ | ⚠️ data-only, brownouts | ❌ | ✅ | LTE-bay + swap-cell engineering reference |
| Unihertz Titan 2 | ✅ ~$400 | ✅ | ✅ | ✅ (Android) | ✅ | ❌ Android/Termux | Pragmatic interim daily-driver option |
| MNT Pocket Reform | ✅ €1099 | ❌ 1.1 kg | ✅✅ | ⚠️ M.2 | ⚠️ ~7–10 h | ✅✅ | Gold-standard open supervisor design to copy |
| Precursor | ✅ ~$512 | ✅ 96 g | ✅ | ❌ | ✅ 100 h | ❌ Xous | Trust-anchor companion / security lessons |
| T-Deck Pro A7682E | ✅ $94 | ✅ | ✅ | ✅ 4G voice | ✅ e-ink | ❌ MCU | Scale-model of the right industrial design |
| Pilet / Liberux NEXX / Planet | ❌ | — | — | — | — | — | Avoid (refund campaign / failed funding / scam-adjacent) |
Proposed roadmap (~$2k ceiling) — living plan in ROADMAP.md + docs/
Phase 0 — kill the two risks (~$145, weeks): (rewritten 2026-07-12 around Daniel's existing PinePhone — see docs/phase0-runbook.md for the divergent plan)
- PinePhone ($0): the VoLTE-vs-2G diagnostic on the actual T-Mobile SIM (before the 2026-08-03 2G sunset), then Branch A (VoLTE works → lock EG25-G, reuse PinePhone as wake-chain testbed) or Branch B (remediation ladder → data-only + VoIP floor). Exact AT recipes in the runbook.
- BeaglePlay ($101, AM62x test vehicle — NOT the deck's compute): prove the unpublished trio — 100+-cycle suspend reliability, resume latency, AON-GPIO wake. Fallback: FRDM-IMX93. SoM candidates for the real deck: AM625 / AM62L / i.MX93, chosen at the Phase 1 exit gate.
Phase 1 — ugly-but-working bench prototype (~$300): see docs/phase1-plan.md — BeaglePlay + modem + P9981 Pro keyboard (BBQ20KBD is OOS/retired; KeebDeck Basic restock = the real successor) + RP2040 supervisor (Zephyr; protocol in docs/supervisor-protocol.md) + charger/gauge breakouts + ~10 Ah LiPo pouch (pouch-primary decision — see hardware/dimensions.md). Goal: the five milestones, led by the keystone wake loop. PPK2 purchased only when µA tuning starts.
Phase 2 — carrier PCB + shell (~$400–600): custom carrier for the chosen SoM (this is where "fab a PCB" is justified: PMIC/power domains, modem socket, keyboard matrix (KeebDeck raw pad), codec+AEC, SE050, USB-C, memory-LCD strip, DXQ 3.92" AMOLED). Printed PETG/PA shell around the dummy-brick-validated envelope (slim/mid likely — pouch-primary). One respin budgeted. Power targets + audit protocol: docs/power-budget.md.
Phase 3 — software depth (mostly time): FDE + duress + signed remote-nuke; notification pipeline (supervisor as source of truth, InfiniTime ANS patterns); call UX; GPS; QR camera; Meshtastic bay; power tuning to the 2-day target.
Deferred decisions: interim daily-driver purchase (FLX1s $550 or Titan 2 ~$400 — would consume budget but de-risks the "life happens meanwhile" problem); convergence module; LoRa bay; camera choice.
Open questions
- AM625 vs AM62L vs i.MX93 after Phase-0 measurements (suspend maturity vs CPU headroom vs the AM62L's <5 mW floor).
- Cat-4 EG25-G vs Cat-1bis A7670 (idle power vs ecosystem/biktorgj; audio-stream bandwidth for the "month-long high-quality audio" requirement favors Cat-4/Cat-1 over anything LPWA — LTE-M is ruled out for this reason and no voice).
- mobile-nixos vs postmarketOS as the Linux userland (NixOS-everywhere pull vs FDE installer maturity).
- Si-C cell sourcing in pouch form; final pack topology (2P vs single big pouch).
- Whether Mecha Comet (Oct'26) ships and validates its 7-day-suspend claim — if it does, it may become the Phase-1/2 chassis instead of full custom.
- Camera: cheap DVP/CSI module for QR on the Linux side vs supervisor-side.
- Display interface (found 2026-07-13): AM625 has no MIPI-DSI — AM625 + DPI→DSI bridge vs AM62P (native DSI, unverified sleep) vs i.MX93 (native DSI, 7.6 mW documented). Decides whether the DXQ AMOLED order unlocks.
Reports index
| Report | Scope |
|---|---|
| devices.md | Every pocket Linux/cyberdeck device shipping or announced, with the comparative table |
| linux-phones.md | PinePhone/Librem 5/FLX1s/pmOS; the VoLTE + standby lessons, measured power numbers |
| soc-landscape.md | Compute by suspend power + mainline; the power-budget math; shortlist |
| edge-silicon.md | Mid-2026 bleeding edge: Panther/Wildcat Lake, RK3688, Qualcomm upstream-first, RISC-V reality |
| mcu-cellular.md | MCU-class route, cellular module ecosystem, VoLTE/carrier certification analysis |
| coprocessor.md | Multi-computer architectures, wake/peripheral-sharing mechanisms, reference architectures A/B/C |
| security.md | Modem isolation, blob audit, FDE, secure elements, remote-nuke design, Precursor/Baochip |
License
Hardware under CERN-OHL-S-2.0, firmware and
software under GPL-3.0-or-later, prose under
CC-BY-SA-4.0. Per-file mapping, including
vendored third-party files, is in REUSE.toml
(reuse lint checks it).