LILYGO T-Display-K230 · specification ledger

80 of 281 requirements are unverified

On this board the documentation and the hardware disagree routinely. A datasheet described a working radio whose enable line is never driven. So a requirement counts as grounded only when something was observed on the board, or vendor source was read and cited by path — never because a datasheet says so.

Progress · September 23, 2026

What has changed lately

Installed and verified

Room for apps and updates

The system expanded its compact root filesystem on the physical 128 GB card, leaving about 119 GB free. A second boot preserved the capacity, boot files, shell and Wi-Fi.

Storage evidence

Experimental shell · measured on board

Finding the card rendering cost

A new profile attributes about 98% of repaint CPU to constructing and painting frames. After correcting a test setup race, all 13 injected interaction checks passed again. A scaled-pixel cache passed interaction checks but increased CPU cost in its board comparison, so it stays disabled. Performance and real-finger acceptance remain open.

Repaint profile and remaining performance gates Corrected test and board repeat Cache comparison and decision

Experiment complete

CPU vectors tested on the board

Vector state and 192 pixel comparisons passed. Card performance gains were small and mixed. Work is underway to bring the proven vector path into the normal image; the candidate still needs its own boot and recovery checks.

Measured decision

Next: reduce card repaint cost, verify the feel with a finger, and refine the shell, launcher, settings and notifications into a coherent webOS-inspired interface. That interface is still in development. Try the gesture and motion study · See the proposed screens · Read the design overview.

The requirement count tracks archived specifications. This progress summary and the feature demonstrations also report verified work in changes that remain open. Landing a proposal does not make it an installed feature.

project work · dated snapshot

What is next?

The public work board separates planned changes, implementation, review and evidence gates, and archived work. It shows task counts and distinguishes landed source from device proof.

Open the project work boardproposals, next actions and evidence →

handheld shell · 2026-09-22

The shell responds to a hand on the glass.

A portrait NixOS session with an on-screen keyboard, desktop application launcher, window controls and system actions. Real-touch recordings now show typing, application interaction and a reboot back into the shell. Home recovery is confirmed by the operator. The shell and launcher are archived, with the remaining drag verification gap visible in the ledger.

Keyboard, apps and reboot: screenshots and videos by feature handheld demonstrations →

the screen · 2026-09-21

The panel lights, and the touch controller reports.

The AMOLED emits under Linux, the kernel console renders on the glass at 71×77 characters, and the GT9895 delivers multitouch to /dev/input/event0. Both faults were the same shape: a driver that reported itself healthy while producing nothing. The panel had been sent a different panel’s initialisation sequence — correctly transcribed, from a function with no callers — and never told to leave zero brightness. The touch controller had its interrupt declared edge‑triggered on a part that holds the line low until it is acknowledged: 0 interrupts against 2173.

The board's AMOLED panel showing the Linux kernel console, photographed off the board.

docs/evidence/panel-photos/05-console-on-panel.jpg — photographed off the board, not rendered. Five more photographs are committed beside it.

The photographs, the dead function, and the clock that blanked it panel note → Why the controller was awake and silent for a day touch note →

first boot · 2026-09-20

NixOS reached a root shell on the silicon.

Not under emulation, not on the build host. A kernel this repository cross-compiled, an image this repository wrote, an SD card in the board — and a prompt on /dev/ttyACM0 that answered four questions no x86 machine and no qemu-system-riscv64 -machine virt could have answered the same way.

[root@nixos:~]# cat /proc/cpuinfo
processor	: 0
hart		: 0
isa		: rv64imafdcv_zicbom_zicboz_zicntr_zicsr_zifencei_zihpm_zba_zbb_zbs_svpbmt
mmu		: sv39
uarch		: thead,c908
mvendorid	: 0x5b7
marchid		: 0x8000000009140d00
mimpid		: 0x50000

[root@nixos:~]# uname -a
Linux nixos 6.6.36 #1-NixOS SMP Tue Jan  1 00:00:00 UTC 1980 riscv64 GNU/Linux

[root@nixos:~]# cat /proc/cmdline
console=ttyS0,115200n8 root=fstab loglevel=4 lsm=landlock,yama,bpf init=/nix/store/2h0xrlf5n74fjjhxqd18y6vl55w4zyrr-nixos-system-nixos-26.11.20260919.20b1ddd/init

[root@nixos:~]# findmnt -no SOURCE,FSTYPE /
/dev/mmcblk1p2 ext4

[root@nixos:~]# nproc
1
The full transcript, and why Linux gets one hart first-boot note → How the kernel command line got through boot-chain note →

Capabilities

image how an image is produced and what the board loads

boot-chain
Defines what executes before our kernel on this board, which parts are vendored, and how control reaches the system we built.
1/10 unproven
cross-build
Defines how riscv64 artifacts for this board are produced on an x86_64 host, and what is recorded when a package will not cross-compile.
0/2 unproven
releases
Let people download source-pinned development handheld images and inspect their checksums, system selection and actual validation limits.
2/2 unproven
sd-layout
Defines what is written to the SD card and how a card is produced without endangering the machine producing it.
0/4 unproven
vendor-blobs
Names every opaque binary this project ships, executes during a build, or is one configuration line away from pulling in — with what it is, what would remove it, and what it says about the next boa...
0/4 unproven

system the NixOS closure, and getting a prompt

audio
Define the PipeWire/WirePlumber session layer this shell runs, and the volume control, live-graph awareness, HUD and output-device-picker surfaces built on it.
3/9 unproven
battery
Report the keyboard base's battery and charger truthfully to Linux and the shell, and stop the system cleanly before the battery browns it out.
1/3 unproven
console
Defines how a person reaches a prompt on the physical board.
0/3 unproven
kernel
Define the pinned Linux kernel and document the board-specific patches and device-tree differences needed to support the T-Display-K230 panel and touch controller, so kernel updates can preserve wo...
17/36 unproven
nixos-config
Defines what the NixOS system for this board contains, what it guarantees when it boots, and where the boundary sits between what we build and what is vendored from Canaan.
1/8 unproven
power
Lets the physical power key control the handheld display and request explicit system power actions without losing the running session on an ordinary tap.
0/3 unproven
rtc
Expose the on-chip RTC to Linux and preserve a synchronized wall clock across warm reboots.
1/3 unproven
second-core-readiness
Preserve the working single-hart handheld while giving operators a reproducible, read-only basis for deciding whether a future second-core project is safe.
0/3 unproven

display anything a person looks at or presses

backlight
Let a person adjust the physical panel brightness from Settings or the console, and retain the selected level across display power cycles.
1/7 unproven
boot-splash
Defines what the panel shows from the moment the board is powered until the system draws its first frame, which stage of the boot owns each part of that, and how a lit panel is handed from one stag...
5/5 unproven
hdmi
Describe the board-specific HDMI path, shared hardware constraints, qualification outputs and accepted automatic handoff between the monitor and handheld panel.
2/4 unproven
keyboard
Make the keyboard base's physical keys, Caps Lock light and key backlight usable from Linux and the shell, with a layout that matches the printed legends.
1/3 unproven
panel
Defines what appears on this board's AMOLED and how the panel is driven under Linux.
0/3 unproven
touch
Defines what the board does when a person touches the screen.
0/7 unproven

radio getting packets off the board

bluetooth
The handheld supports Bluetooth only through a USB Bluetooth controller on its USB host port.
1/2 unproven
wifi
Defines credential-safe wireless diagnosis and connection behavior that the physical board must demonstrate before it is treated as network-capable.
0/8 unproven

runtime what we run on top once it boots

app-launcher
Provide a refreshable portrait Apps catalog whose cards explain the action a person will take.
1/2 unproven
card-composition-plan
Defines the evidence gates and safe ownership boundaries for an opt-in visual application-card composition experiment in the handheld shell.
0/3 unproven
card-shell
The card shell decides which mapped application windows become ordinary, switchable, closable cards in the touch-first overview deck, and how each card's small deck thumbnail stays live without pay...
4/12 unproven
device-settings
Defines truthful device settings and system actions that a person can understand and operate on the handheld without an external keyboard.
2/5 unproven
editor
Provides the handheld's default graphical editor for local text and Markdown, accessible through existing Home pins and the installed-application drawer.
0/2 unproven
files
Provide two installed touchscreen file managers with reproducible software rendering, icon resolution and theme appearance from the handheld's Nix image.
1/5 unproven
gpu-validation
Provide an opt-in validation path for GPU prerequisites while preserving the working shell and the live display owner's control of the panel.
0/3 unproven
handheld-shell-design
Define coherent navigation between the card overview and transient shell surfaces, including uniform bottom-edge escape and overlay dismissal.
11/13 unproven
home-screen
Define the touch-operated Home layout: exact app and widget placement, paged rearrangement, folders in the grid and dock, system-keyboard naming, and theme-aware clock, weather and battery widgets.
3/23 unproven
notification-center
Defines a bounded, privacy-aware way for the handheld shell to preview, revisit, act on, and dismiss system and application notifications.
3/5 unproven
shell
Defines the handheld Sway session: CPU rendering, automatic startup, touch input, an on-screen keyboard, application discovery and session controls.
10/41 unproven
shell-themes
The userspace shell applies resolved theme roles to Settings and notification Shade surfaces, reports unsupported roles explicitly, and restores their colors when a shared appearance transaction ro...
6/14 unproven
video
Provides a reproducible network-video path for the handheld shell and distinguishes software playback, optional MVX hardware decoding, audio, and physical presentation.
1/5 unproven

docs how these specs reach a reader

handheld-ux-plan
This capability gives the handheld a single, reviewable UX contract across boot, discovery, touch navigation, application states, and recovery, while preserving evidence boundaries between host che...
0/8 unproven
spec-site
Defines how this project's specifications are published for reading, and what the rendered site is obliged to tell a reader about how much of it is proven.
2/11 unproven

Evidence on file

Committed in the repository and rendered here in full, so a boot log or a photograph is readable without a checkout. An observation on the board outranks vendor source; a datasheet grounds nothing. The two lists are kept apart because they carry different weight.

grounding a requirement what the count above rests on

cited by a hardware note real, and holding up no requirement yet