Repository navigation
Releases: agentsco-lab/item
Release list
System image: item 0.2.1 on port 0.22.0 (item-duo1-20261010)
The system image for a Surface Duo 1: Droidian 102, the port 0.22.0 and item 0.2.1, ready to be put on the phone's userdata. Built 2026-10-10 from the pinned Droidian nightly (rootfs api30 arm64, phosh phone, 2026-09-29) with the port's adaptation, its sensorfw with the hinge sensor, and item set as the shell. The first start grows it to fill userdata; the PIN is 1234 until item's first start sets one.
Files
rootfs.img.zst |
the image, 1.22 GB compressed (zstd, window log 27), 5.2 GB unpacked |
boot.img |
the port's kernel the phones run (boot-duo1-droidian-perf-127-lid) |
vbmeta.img |
with verification off, written beside the boot image |
surfaceduo1-twrp.img |
the recovery that is RAM-booted, never flashed |
manifest.json |
names, sizes and sha256 of all of the above |
packages.txt |
every package in the image, with its version |
SHA256SUMS |
the checksums |
How it goes on
With item/grid: put the folder with these files in ~/.local/share/itemgrid/releases/item-duo1-20261010-port0.22.0/ and item/grid offers install for a Duo on stock Android (USB debugging on) or in its bootloader, and reinstall for one on Linux. It checks the image against the manifest, RAM-boots the recovery, puts the image on, RAM-boots the kernel and writes it to the slots only once it booted on that phone. About 15 minutes on the cable.
By hand, see the port's guide and SAFETY.md: the recovery and the kernel are RAM-booted with fastboot boot, the rootfs goes to userdata from the recovery, and nothing is flashed with fastboot flash but the misc brake.
Until 1.0, item is an experiment. This image is the one its owner's phone runs; nothing here is promised to work on yours. Installing it erases Android on the phone, and the bootloader has to be unlocked.
item 0.2.1 - a compositor of its own
A minute of 0.2.1, both panels at 60 fps with the gap between them: the first setup (the PIN, a finger), the tour, the shade, the system screen, the pen's sheet.
item-0.2.1-first-setup.mp4
item is a compositor of its own now. item-shell 0.1 was the two-panel shell as 36 patches on the port's phoc and phosh. item 0.2 is item-compositor: a Wayland compositor in Rust on smithay, drawing straight into the phone's hwcomposer, with the whole shell drawn inside it in the same pass as the windows. It takes phosh's place on the phone; phosh stays as the way back (sudo item-switch phosh).
Until 1.0, item is an experiment. It is used on one phone, daily, since 2026-10-03, but nothing is promised to work on yours: a release can break the lock screen, the modem's sleep or the way back to phosh. Keep the port's backups, install with a computer by the phone on the USB cable. What is in 0.2.1 is the groundwork - the compositor, its frame path, the gestures and the phone's sleep. Every app and every menu will be reworked; they are there to make the phone usable meanwhile.
Measured against item 0.1 on phosh
The same phone, timed below both compositors with a uprobe on libhybris' hwc2_compat_display_present (compositor/log/2026-10-01-step-21-ab.md, -22-canvas.md, -23-paces.md):
| item 0.1 on phosh | item-compositor | |
|---|---|---|
| a tap, touch to the present with the app's new frame | 17.6 ms (p90 24.4) | 6.2 ms (p90 7.9) |
| the shade pulled back up | 6 gaps over 25 ms each time, up to 54 ms | 0-1, up to 29 ms |
| the app grid going down | a 235-243 ms freeze each time | up to 34 ms |
| an animating app, its commit to the screen | not measurable | one vsync, 15.8 ms |
| the shell at rest: memory (PSS) | 461 MB | 173 MB |
| the shell at rest: CPU | 3.5 % of a core | 2.6 % |
A frame of the shell renders in 1-1.5 ms; the shade follows the finger 22-26 ms behind it (about 39 through GTK); 60 fps with both panels animating, no CPU copy of a frame (the Lindroid chain, the other way onto this kernel, spends 9-13 ms and 0.76 W a frame on the copy and holds 30 fps). A settings page opens in a tenth of a second where it took over one. CV ID takes about 135 ms a frame. A phone shut, Wi-Fi radio on and mobile data off, loses about 1.3 % an hour (0.16 W) with the port 0.22.0.
What is in 0.2.1
The desktop and the dock
- The dock's halves are drops of water: they follow a finger, slosh along as the phone folds like a book and come to rest with a wobble, cross the hinge to the free panel and join, leave a wet streak that dries. Running apps in the dock; apps carried onto it, along it and off it as drops.
- A window takes its panel; carried across the hinge it takes both. A swipe up from the panel's bottom edge puts it away, following the finger; a tap in the dock brings it back. The launch curtain answers a tap in the next frame.
- The desktop clock on the free panel; the system screen left of the left panel (greeting, battery with its 24 h graph, the calendar's next event); the pen's sheet right of the right one: strokes as a Catmull-Rom spline through the pen's own samples with its pressure, the other end erases, four inks, undo and redo, save as PNG.
- The desktop is Aurora, drawn by the compositor; the accent colour from it or one of seven, and everything in the shell drawn in it. Folding the locked phone back past flat turns the left panel to glass: a wave of water out from the hinge.
The shades
- Glass over the screen, live from what is under it: a status line, brightness, volume, six quick settings, the player and night light on the left; the open windows and the notifications on the right. The volume bar beside the keys, dragged with a finger.
Locking and unlocking
- The lock screen over the darkened wallpaper: the clock, the player, the last notifications; the PIN pad's keys as drops gathering back when put away; the unlock as a wave from where it was touched.
- The fingerprint reader armed while the lock screen is lit; the mark at the reader under the power key glows in the accent for a known finger, red for an unknown one.
- CV ID: a known face unlocks the phone as it is opened - "Unlocked · swipe up".
item-faceruns as a service, holds the camera, the models (YuNet, SFace, MiniFASNetV2 for liveness) and the faces enrolled, in/var/lib/item-face, root's alone. The camera is started at the lid itself, ahead of the panels lighting, held open only while the lock screen is lit, and kept warm 30 s after it goes dark; shut all night it no longer keeps the phone from deep sleep. - gnome-keyring's prompts wait while locked and are answered by the PIN that unlocked; polkit's and NetworkManager's dialogs are the compositor's own.
The first setup and the tour
- After a clean install: a welcome, a new PIN set when it is Droidian's 1234 (the keyring's password with it), a finger enrolled - it unlocks at once - a face, then a tour; the first app on a panel brings a hint once.
The phone's sleep
- item puts the phone to sleep and wakes it. The lid darkens and lights the screen; the power key shows or hides the keyboard, its long press is the power menu. Asleep again 3 s after a wake that lit nothing (was 15 s). Woken for Clocks' next alarm and a snoozed one; an alarm or a call ringing keeps the screen lit, nothing lights it under a shut lid. The lid opened on the way into sleep wakes the phone. The session's IdleHint follows the dark screen, so ofono quiets the modem.
item Settings
- In Rust (GTK4, libadwaita), in the package: one window across both panels, the sections on the left, one page on the right - About, Date & time, Battery, the shell's pages; the pages of GNOME Settings and Mobile Settings that apply to this phone opened in place.
Under the hood
- Frames paced by hwcomposer's vsync, drawn only on change, a client's frame one vsync after its commit; the GPU's clock raised on touch and while the shell moves; a kernel wakelock while the screen is lit; apps in systemd scopes;
wp_presentation; a live mirror of the screen on$XDG_RUNTIME_DIR/item-mirror.sockfor item/grid. - One Debian package, cross-built on the computer (
compositor/tools/package-deb.sh):item.servicefor Droidian's user,item-fallback.serviceto phosh, a release's version bare, a build after it0.2.1~git<time>.<hash>.
Installing
item 0.2.1 needs the port 0.22.0 or later on Droidian 102 (agentsco-lab/surfaceduo-droidian).
sudo apt install ./item_0.2.1_arm64.deb
sudo item-switch item
The first start runs the setup. Back to phosh: sudo item-switch phosh. A phone that had item from tools/install-phone.sh moves to the package cleanly.
Not in this release, and known
- Wallpaper pictures: the picker for one's own pictures is in the code but no set ships yet; the desktop is Aurora.
- Every app and menu is provisional and will be reworked; some of Settings' pages (networks and passwords among them) open the system's page.
- Before the setup has run, and with a picture that cannot be read, the screen is black.
- Tried on one phone; each step measured and tried by hand, no test suite beyond that.
item-shell 0.1.0
The two-panel shell as a package of its own. item-shell goes on top of the port (iverbovoy/surfaceduo-droidian 0.21.0 or later, Droidian 102): a dock across both panels that launches onto the panel you touch and tiles windows there, a shade per half with its own job, the system screen and the pen's sheet at the outer edges, Settings in one column, and the motion that goes with them. It carries its own builds of phoc, phosh and the keyboard, and the port's scripts put them in place; removing it gives Droidian's shell back.
sudo apt install ./item-shell_0.1.0_arm64.deb, then sudo systemctl restart phosh.