Repository navigation
Releases: marselnenaj/tomacco
Release list
Tomacco 1.3.0
Tomacco 1.3.0
Tomacco: Give your agent a phone. It builds, runs and tests Android and iOS apps from Linux.
This release adds 26 operations, for 250 in all. Most of it is about speed and about letting an
agent see the screen. The changelog lists every change.
Highlights
- Faster.
- Virtual iPhone: the renderer copies and converts each frame on several threads. Live, against
1.2.1 on the same script, the Store chain took 3.9 instead of 7.1 ms a present. - Android: stopping a Tomacco-managed emulator saves its Quick Boot snapshot, and the next start
resumes from it: 8.6 s instead of a 21.4 s cold boot for a Pixel 11 Pro Fold emulator. - Agents:
TOMACCO_MCP_TOOLS=compactorgroupedshrinks the tool list an agent reads from
322 KB to 158 KB or 33 KB. - Desktop: ready after 346 instead of 404 ms (median, offscreen).
- Installing no longer needs Python; the package's own
tomaccoctlinstalls it, in about a second.
- Virtual iPhone: the renderer copies and converts each frame on several threads. Live, against
- Seeing the screen.
screen.marksdraws numbered boxes over what can be tapped and
screen.taptaps a number;screen.treeis a short text form of the UI;screen.ocrreads text
where there is no UI hierarchy, such as on the virtual iPhone;screen.diffsays what changed;
screen.waitwaits for text or a still screen. - Screen export.
screen.exportwrites a screen as a PNG and a versioned JSON file with the
device, display, insets and every element with its bounds, for design tools and visual checks.
The format has a JSON Schema. - Android performance. Run Macrobenchmark modules as jobs, generate and install Baseline
Profiles, and compare cold starts with and without one in a single call
(profile.baseline_compare).profile.startupalso times app starts on the virtual iPhone and
on an iPhone over USB. - Agents. Guardrails with policies, approvals and an audit log;
workflow.runfor several
steps in one call; MCP resource templates and elicitation. The agent skill is now a short
router with generated references for every operation; it is also at
tomacco.dev/skill. - Android emulators. Camera images, simulated sensors, foldables, App Links checks and
network capture. - Omarchy. Menu entries, optional key bindings, job notifications, the theme's accent in the
panel, screenshots in Omarchy's folder, andtomaccoctl omarchy statusandrepair. - Linux hosts and ARM64.
doctordescribes the host; releases carry aarch64 packages; the
Linux distributions page says what ran where. - Documentation online. The guides and the operation reference are at
tomacco.dev/docs.
Changed behaviour
- Installing and updating run in
tomaccoctl;install.pyhands over to it. - With
--omarchy, desktop screenshots go to Omarchy's screenshot folder instead of
Pictures/Tomacco. - When an MCP client closes the server's input, calls still running get 5 seconds and are then
cancelled, so the server exits. - New emulators get less memory and fewer processors on small hosts, and an emulator nobody chose
a renderer for starts withswiftshaderon a host without a hardware graphics driver. ios.virtual.startrefuses hosts that are not x86_64 or have less than 12 GiB of memory.- An argument array whose schema asks for unique items now refuses repeated items.
Limits
The 1.1.0 limits
still apply. In addition:
- Tested with stand-ins only, not on real devices or projects: the iPhone-over-USB features, Flutter,
React Native, Expo and Kotlin Multiplatform runs, Wi-Fi pairing, and the Zed, VS Code and OpenCode
agent setups. - The screen operations and the screen export ran live on an Android emulator; on the virtual
iPhone and an iPhone over USB they are tested with recorded screens only. OCR marks whole lines
of text, and a screen with light and dark areas may need aregion. - Macrobenchmark and Baseline Profile numbers came from an emulator, whose variation is as large as
some of the differences; measure on a phone. - The Omarchy menu, key bindings and notifications were tested in a scratch home, not in a live
Omarchy session. - On the virtual iPhone, the Settings app's top-level list can show a placeholder symbol instead of
each row's icon; troubleshooting has the call that brings them
back after a restart. - The Docker image is not published: it contains Google's Android SDK, whose license you accept
when you build it.
Install and upgrade
curl -fsSL https://tomacco.dev/install.sh | bashAn installed 1.2 shows a banner at the top of the window that offers the update; 1.1.0 shows it in
its status bar and installs it from Settings. Every replaced file is backed up, and
update.rollback undoes an update.
Tomacco 1.2.1
Tomacco 1.2.1
Tomacco: Give your agent a phone. It builds, runs and tests Android and iOS apps from Linux.
This release adds 31 operations, for 224 in all. 1.2.1 is the first published 1.2 release: it also
fixes the installer on Python 3.10 and makes the virtual iPhone's renderer faster. The
changelog lists every change.
Highlights
- Virtual iPhone. A start no longer copies the 32 GiB system disk when
qemu-imgis beside the
helper engine: it layers a qcow2 overlay on the last verified run. Measured on the test profile,
disk preparation took 16 s instead of 89 s, hashing before the boot 0.6 s instead of 198 s, and a
verified stop 5 s instead of 258 s. Also new: saved phone states, a structured guest log,
ios.virtual.unlock,ios.virtual.doctor, hang detection (liveness), per-step start and stop
timing, and a guidedios.virtual.setup. - SwiftUI on the virtual iPhone.
project.runwithdevice:"virtual-iphone"builds an xtool
project, deploys it, opens it and checks for a crash; an unchanged app only reopens. Run live
withexamples/hello-virtual-iphone: built in 9.5 s, installed and opened in 13.4 s.
project.watchredeploys on every save. - A smoother virtual iPhone. A rebuilt engine converts and copies each frame side by side. On a
live phone, one boot each: 5.9 instead of 3.6 distinct frames a second while swiping, and 7.3
instead of 16.6 ms of Store work per frame, with pixel-identical screenshots. - Tests. Record a UI test by tapping, lint it without acting, retry flaky scenarios and shard
them across devices. Scenarios run on the virtual iPhone at screen coordinates and compare the
screen with a baseline. - Performance.
profile.startup,profile.frames,profile.memory,profile.usageand
budgets that fail a scenario;profile.comparereports deltas against a baseline. - Release work. Store screenshots across devices, languages and themes, release notes per
language, size reports, signing key health, a pre-release checklist and version bumps for every
project type. - Flutter and cross-platform.
project.analyze, Flutter test and golden results, dependency
updates for pub, npm and SwiftPM, DevTools links and Metro reloads. - iPhone over USB. Device logs per app,
ios.signing,ios.device_status, app files, UI tests
through WebDriverAgent andios.record. - Desktop. An update banner with Restart now and a What's new sheet, first-start help,
Wi-Fi pairing by QR code, every running device side by side, a live log beside the device,
agent activity with durations, typing straight into the virtual iPhone, and a fuzzy command
palette. - Install and trust. The installer is about 20 times faster for the portable package.
doctor
names the apt or dnf command for missing desktop libraries.tomaccoctl verifychecks a
download; each release carries an SBOM and a signed provenance file. A Docker image can be
built from the signed package.tomaccoctl setupalso connects OpenCode, so apps that run these
agents, such as T3 Code, reach Tomacco through them.
Changed behaviour
- Virtual iPhone starts use an overlay when
qemu-imgis found; setstart_diskstocopyfor
the old behaviour. - The engine gets its own scratch directory instead of the shared
/tmp. A full/tmphad left a
display black. job.send's title is now "Send a command to a job"; it also stops recordings.
Limits
The 1.1.0 limits
still apply. In addition:
- Tested with stand-ins only, not on real devices or projects: the iPhone-over-USB features, Flutter,
React Native, Expo and Kotlin Multiplatform runs, Wi-Fi pairing, and the Zed, VS Code and OpenCode
agent setups. - On the virtual iPhone, the Settings app's top-level list can show a placeholder symbol instead of
each row's icon; troubleshooting has the call that brings them
back after a restart. UI tests there work at screen
coordinates only, because the guest reports no UI hierarchy. - The Docker image is not published: it contains Google's Android SDK, whose license you accept
when you build it.
Install and upgrade
curl -fsSL https://tomacco.dev/install.sh | bashAn installed 1.1.0 shows the update in its status bar and installs it from Settings; from 1.2.0
on, a banner at the top of the window offers it. Every replaced file is backed up, and
update.rollback undoes an update.
Tomacco 1.1.0
Tomacco 1.1.0
Tomacco: Give your agent a phone. It builds, runs and tests Android and iOS apps from Linux.
This release adds 23 operations, for 193 in all, a portable package for other distributions,
and three more desktop languages. The changelog lists every change.
Highlights
- Other distributions. A new portable package brings its own Qt 6.12 and FFmpeg. It needs
glibc 2.35 or newer and passed its checks in clean Debian 12, Ubuntu 22.04, Ubuntu 24.04 and
Fedora 44 containers. The one-line installer picks it where the regular package cannot start. - Testing. Compare screenshots with a baseline (
testing.visual_diff), audit an Android
screen for accessibility (testing.accessibility), collect crashes and ANRs as events
(testing.crashes), read Gradle's JUnit results (testing.results), and run the same steps
on every connected Android device (android.each). - Android. Unicode text input,
android.settings(dark mode, font scale, animations, app
language),android.display,android.notifications,android.app_files, APK and AAB
inspection, AAB installs through bundletool, and emulator snapshots, battery and network. - Projects. React Native, Expo, Capacitor and Kotlin or Compose Multiplatform apps run on
Android. A Jetpack Compose starter with a UI test, app IDs and variants read from Gradle files,
andproject.dependency_updates. - Virtual iPhone. PNG screenshots, MP4 recordings, the installed apps, crash reports, safe
cleanup of old disk copies, a disk check before a start, and start progress. - Agents.
capabilitiesin one call, MCP progress and log notifications, structured results,
tool annotations on every operation, MCP prompts and guides, andtomaccoctl setupnow also
connects Gemini CLI, Cursor, VS Code and Zed. - Command line.
call … --wait,help OPERATION, shell completions, a manual page,
tomaccoctl update,uninstallandreport. - Jobs. Builds queue (two at a time by default), some steps can retry, downloads resume,
and every job keeps a timeline (job.events). - Desktop. French, Spanish and Italian; drag and drop to install; screenshots to the
clipboard; recent projects; job notifications; log search; tap markers; settings export. - Web previews. Dark mode, reduced motion, slow networks and offline; page errors per load
(preview.errors); a contact sheet forpreview.matrix; more layout checks; Samsung foldables
and tablets in the catalogue.
Changed behaviour
- At most two builds run at once; a third waits as
queued. Setjobs.max_buildsin
settings.configure(0 for no limit). - Unknown argument keys are reported before missing required ones.
ios.virtual.startrefuses up front when the disk lacks room for its copy.
Limits
The 1.0.0 limits
still apply. In addition:
- The new virtual iPhone features, React Native, Expo, Capacitor and Kotlin Multiplatform runs,
bundletool installs and the Zed and VS Code agent setups were tested with stand-ins, not on
real devices or real projects of those kinds. - The portable package has not been run on a real desktop session of those distributions yet.
- The French, Spanish and Italian translations have not been reviewed by native speakers.
Corrections are welcome.
Install and upgrade
curl -fsSL https://tomacco.dev/install.sh | bashAn installed 1.0.0 updates itself through update.apply, or run tomaccoctl update once 1.1.0
is installed. Every replaced file is backed up; install.py --rollback undoes an update.
Tomacco 1.0.0
Tomacco 1.0.0
Tomacco: Give your agent a phone. It builds, runs and tests Android and iOS apps
from Linux. A Qt desktop and a command-line tool, tomaccoctl, share one typed set of
operations, so a person and a coding agent can do the same things. tomaccoctl is also
a local MCP server.
This is the first release. The guides describe what ships.
Highlights
- Agents. Over 150 schema-validated operations with JSON results, durable jobs
that survive a disconnect, and shared debug sessions. - Android. Gradle and Flutter builds, the real emulator, USB and wireless phones,
live view, input, debugging, UI tests, Perfetto, signing and staged Play edits. - Swift on Android. A native Swift core with an Android UI starter, for ARM64 and
x86_64. - iOS without a Mac. xtool projects built and signed on Linux, with install and
launch on a paired iPhone. This route is contract-tested only; see the limits. - Virtual iOS device (experimental). Boots your own iOS 27 image on x86_64 Linux in
a patched QEMU with a Rust Vulkan renderer. A SwiftUI app built on Linux runs on it,
shown so far with a few small apps. The engine builds reproducibly: two builds in
different directories gave one digest. - Desktop. Live device view, detachable device window, layout lab, English and
German, and an optional Omarchy panel.
Measured on one host, an i9-13900K with a Radeon RX 6800-class 16 GiB card:
| Virtual iOS device | |
|---|---|
| Touch to visible change | about 0.1 s |
| App window appears after launch | about 6.4 to 7.7 s |
| Home-screen swipe | about 7.5 to 11 changed frames per second |
Limits
- A physical iPhone is not qualified. No physical iPhone, or physical ARM64 Android
phone, was run, and neither were live Play or App Store submissions. - One tested machine. Arch Linux with Omarchy, x86_64, Qt 6.11, Rust 1.99. Other
distributions should build but were not run. - Linux on Apple Silicon (M1, M2, Asahi): experimental for the tools and agent API; the virtual iOS device needs x86_64.
- The virtual iOS device is a research runtime, not a qualified simulator. It is
far below hardware speed. It has no audio or working debugger, and pointer
authentication is bypassed. See its limits. - It needs your own material. You supply the restore images and an Image4 boot
ticket. Nothing from Apple ships with Tomacco, and no engine binary ships either: you
build it. See the legal notes.
Install
curl -fsSL https://tomacco.dev/install.sh | bash
tomaccoctl setupOn Omarchy this adds the bar widget. To install by hand or build from source, see
getting started. The binaries are conveyed under GPL-3.0-or-later and the source is
GPL-2.0-or-later; SOURCE.md says where the corresponding source is offered.
Upgrade
This is the first public release. Every file an install replaces is backed up:
install.py --list-backups, then --rollback ID. See
installing.
Credits
Tomacco stands on the work of others. The iOS runtime builds on qemu-sptm and darwin-vm,
orchard, reims-vgpu and metal2vulkan, Inferno, vphone-cli, linux-apfs-rw, vhost-device
and m1n1's register definitions. Building for iOS on Linux uses xtool, go-ios, Appium
WebDriverAgent, cctools-port, apple-libtapi, ldid and ipsw. Android's device view uses
scrcpy. The README links them, and
THIRD_PARTY_NOTICES.md has their licenses.