The M-VAVE FM-1

Regular readers will know I’ve had a long fascination for the –after all, besides getting a quite some time ago, I also built a and accumulated more software instruments than I have time to use, as well as an embarrassing amount of other physical gear that brands me as a victim of Gear Acquisition Syndrome.

M-VAVE FM-1 in black-and-green DX7-style livery
The FM-1 in DX7 livery, running Sloop firmware.

I can only manage to dabble in music occasionally, but I’ve been interested in FM synthesis since the heady days of the 80s, so the M-VAVE FM-1 was like catnip to me because it was billed as a pocketable : six operators, a little keyboard and a speaker packed into a battery-powered box, with both USB and .

Disclaimer: M-VAVE provided me with an FM-1 review unit free of charge, and as usual this article follows .

But you just know a synth is becoming a cultural phenomenon when it floods all your feeds–including your GitHub watch list. Like the , the FM-1 has become a hackers’ paradise–but unlike it, it has blossomed into a music platform with literally dozens of open source firmware alternatives (some of which have online emulators).

And that is a completely different thing indeed, possibly with profound implications for conventional synth manufacturers. And if you’re in the synth scene, well… Just this week, it starred on a Bad Gear episode.

Why?

From what I’ve been seeing (and I’ve compiled so far), the popularity of the FM-1 is due to a pretty straightforward combination of factors:

  • It is quite cheap (less than $70 depending on where you live)
  • It has a unique combination of size, hardware features (a nice screen, battery, USB audio, Bluetooth and TRS MIDI) and various knob controls
  • It is very hackable

Say what you want about the keyboard (which is a little inconsistent and likely not very long-lasting), we are talking about $70 for a device that can do both audio and Bluetooth and have a usable compact screen, features that stupefyingly expensive high-end gear has effectively never shipped together (well, statistically).

Hardware

The FM-1 connections
The FM-1 connections.

The specs are reasonably straightforward, so we’ll go through them right away:

  • 161.5 × 96.5 × 28.6mm, approximately 250g.
  • 27 silicone keys, colour TFT
  • USB-C MIDI, BLE MIDI, 3.5mm MIDI IN
  • 3.5mm audio jack and a tiny built-in speaker on the underside
  • 2000mAh battery (~12 hours play time)

It also comes in a range of colours–I picked the black-and-green version because it reminded me of the original , and I don’t regret my lack of imagination one bit despite it not really being a rational choice–but it was an easy one.

Stock firmware

When I decided to get the many years ago, I wanted something I could mess about with without a DAW or computer. I liked its speakers and keyboard, but wished it had better connectivity and the ’s six operators rather than four, and effects were practically non-existent.

Well, the FM-1 has six sine-wave operators, 32 algorithms and 12-voice polyphony, accepts DX7 SysEx banks directly, and adds six effects (filtering, chorus, phaser, distortion, delay and reverb), an arpeggiator with half a dozen different modes and a sequencer, which are described succinctly (but adequately) in the little handbook it ships with.

By pocket synth standards this already is a veritable cornucopia, but more to the point, the default firmware packs in sane operator editing (well, much saner than the , which was effectively a brick wall, and nicer than my ).

Here, patch editing is much easier: the display shows the algorithm, and you get a series of keyboard shortcuts for selecting operators and other parameters that can be directly tuned via the knobs.

And patch compatibility is surprisingly decent. Most people I’ve seen reviewing it seem to stick to the factory stock sounds (which are similar to some originals, but often with the FM-1 effects turned up to 11), but I loaded up the US factory ROM, which has most of the trademark sounds people associate with the (largely because most musicians couldn’t really figure out how to edit patches).

I compared it to my and Dexed, and although there were a few differences in timbre, most sounds were very, very close.

And that’s where you start understanding how easy this thing is to tweak–all you need to have is a browser that supports WebMidi (which, of course, Apple still refuses to support in Safari), pop over to something like fm1-editor.com, and it will merrily send SysEx commands to your FM-1:

A very nice web-based FM-1 browser patch editor for the stock firmware
A very nice web-based FM-1 browser patch editor for the stock firmware.

This is flabbergasting, because it is a far cry from, say, building a – that might be a bit more powerful, sure, but only in the sense that I can theoretically run eight parallel engines in it. And yes, this editor almost works with it (mine needs a software upgrade). And of course we’ve been able to do the same on various iPad apps, but it doesn’t feel the same.

Audio quality was… OK, I guess. I used mine mostly through my aggressively non-audiophile Logitech desktop speakers and random headphones, and of course the USB audio is purely digital.

Even if you don’t want to edit anything, the little colour TFT and clever control mapping make it really easy to navigate presets (you get 128 of them, by the way), and about as easy to edit presets as, well, any FM synth would be–again, much better than the , although most people will just get Dexed and edit them that way.

If you stick to the stock firmware, that is.

Hackability

I initially thought this to be based on a more modern microcontroller, but as it turns out the FM-1 is based on the JieLi AC791N/WL82, which I had never heard of before but seems to be a SoC that includes a fairly popular pi32v2 microcontroller associated with the Blackfin family.

The Jieli AC791N toolchain seems to be very well documented, but of course there’s already an entire reverse-engineering repository for the stock firmware, which includes the OTA protocol and a bunch of additional info.

And yes, a lot of the analysis and firmwares rely on , but having a relatively open toolchain available and decently clean references (plus plenty of code being shared between different firmwares) has definitely lowered the barrier to entry, both in terms of reducing the work of building new variants and integrating things from other existing instruments–there are emerging ports of other “classic” open-source synths in the works, and of course someone already has it running Doom…

But that’s not relevant to regular people. What is relevant is that WebMidi SysEx patch transfer was just the tip of the iceberg: the entire firmware image can be transferred that way, which makes it trivial for anyone to distribute (and use) different firmware versions–so to join the fun, all you need is an FM-1, a USB-C cable and a browser.

The ecosystem

I think the best way to understand how popular and diverse this thing is is to dive into Reddit, where you’ll find there are already enough firmware variants for people to be ranking them in multi-page Google Sheets:

The community FM-1 firmware comparison sheet
The community FM-1 firmware comparison sheet.

If that’s not your thing, there are also quite a few marquee sites popping up all over the place, like this one, which provide you with the ability to instantly download and install a bunch of popular firmware variants:

The FM-1 Firmware Hub
The FM-1 Firmware Hub.

Sloop

I decided to go with Sloop, because it has a certain feel about it–in short, it reminds me a lot of how I expected the to be like, and it feels like it was influenced by it to some degree (there are quite a few whimsical visualizations in there), besides having an absolutely kickass sequencer and web editor; this is becoming a staple feature in most custom firmwares, but I liked this one and am sticking with it:

The Sloop browser editor
The Sloop browser editor.

But the genius part of Sloop (and a few of the other firmwares I’ve tried) is how they make use of the hardware: You typically push and hold to switch into a different mode, and knobs, buttons and keys change functionality: the same controls can edit operators, trigger drums or operate a sequencer.

The rest of the industry

As someone who owns a Roland Aira S-1 (that I don’t think I ever wrote about), the core workflow and mode switching is familiar–but the screen makes one heck of a difference, since the S-1 has a puny LED segment display and no way to visualise anything:

M-VAVE FM-1 beside a Roland Aira S-1
The FM-1 and the S-1 side by side.

In short, the experience of the FM-1, even with stock firmware, is better than the Roland. But with custom firmware, the gap is tremendous. One FM-1 can, at least theoretically, do everything the entire Roland Aira range does, in one box.

The effects are decent enough that you also don’t need pedals (or a Norns like I built a few years ago), or string together a bunch of boxes. Plug in a MIDI controller (or a companion synth like the , which is a great match), and you’re set.

The way I see it (and even though M-VAVE certainly wasn’t planning this), the FM-1 might well become a cult device, because in complete contrast to just about everything else in the same form factor–Volcas, Behringer’s zillion clones, etc., it has effectively become a platform.

I can’t wait to see what people like David Hilowitz might make of it (if he ever decides to do his own take on firmware, of course).

With the iPad

This was a bit of a mixed bag, but mostly because of my expectations towards Bluetooth MIDI. BLE has always been very high on my list of “must have” features because it’s a pain to deal with wires when you’re trying to juggle an iPad and other gear on a couch, and I am happy to report that the stock firmware works with BLE and my iPad.

However, very few of the custom firmwares do, partly because they’re GPL 3 and partly because Bluetooth support relies on a rather bulky proprietary firmware blob that takes up a fair amount of resources on the FM-1, so all Felucca-based variants (like Sloop) omit it, which is sad to say the least.

But all firmwares support USB audio and MIDI, and those just work with AUM, so at least I only need the one cable (even if the iPad is, as usual, confused as to how to use an extra audio interface, a situation which has only slightly improved with iOS 27).

I haven’t tried plugging both the FM-1 and the to my iPad yet (solely because of lack of time), but I can’t see why it wouldn’t work, and will update this post when I do.

Verdict

I love this thing, and will be looking out for the SMK-37 Elite because the Pro variant seems to run on a similar platform and it might be just a matter of time until people figure out how to port FM-1 firmware to it. There’s no guarantee at this point, and the price point is quite likely to be much higher, but one can hope…

Regardless, I think that M-VAVE should lean into the homebrew firmware momentum and make some of this firmware bonanza official–the traditional synth industry very much enjoys churning out not just endless variations on the same theme, but also tiny portable devices that do much less and are much harder to use, and this is clearly an opportunity.

After all, even if I wanted an unapologetic clone of a classic synth like the Behringer JT Mini, why would I spend the same for something that will never be as customisable or configurable?

Again, as someone who owns a Roland Aira S-1 and is constantly disappointed by the utterly stupid menus and clunky interface that is being sold for roughly three times the cost of an FM-1, I hope people take notice not just of how much value you can deliver at the price point (the hardware combo is very nice, even if you just use stock firmware), but also how much better the custom firmware experience is when compared to “normal” instruments.

For quite a few years now, there has never been a good reason why digital synths needed to be single-purpose devices, and this is a very decent proof point.

If you have a significant other in your life that likes synths and sequencers, get them one for Xmas. Period.

Notes for October 4-11

Sometimes I feel like I am only really alive on weekends. Sadly, that only seems to happen part-way through Sunday afternoons, which speaks to my utter lack of timing of late.

The struggle against general entropy across work, life and the requisite bits of fiction required to keep myself motivated raged on throughout the week. on Friday afternoon, and at least now I have a plan, most of which revolves around simplifying things and attempting to do less.

Which my brain completely torpedoed this morning by wondering, “What if I built a small -like system to run inside Legion?”

I can’t seem to give myself a break, so here’s a screenshot of it working already:

Of course I called it Dante
Of course I called it Dante

Rust Removals

Still, there are things I can do to save myself some aggravation in my personal projects, even if they go against the broader industry trends.

I’ve ranted a bit online about how is so complex, slow and resource-hungry to build that it sucks the joy out of developing with it (yes, I know this is an unpopular opinion). I have a couple more reasons to give it up: I’m not getting any younger, and one of my projects can compile, test, vet, fuzz, link and cross-compile to Linux, Mac and Windows (Intel and ARM where applicable) in slightly less time than a single-platform Rust build. That’s massively more productive. I’m also running out of disk space everywhere, and Rust is a glutton for it.

Seriously now, I cannot begin to count the number of times I’ve reset my sandboxes because a Rust build ran amok. I just don’t have the resources to develop more than one or two things in it (like wrdp, which is likely to be the one Rust project I maintain going forward).

Hot Dogs and GPUs

The GPU trouble continues–I tried Strata on this week and was extremely impressed with the results on my RTX 3060 (it was very usable for routine coding tasks), but the card keeps crashing after a few minutes.

I’ve tried three NVIDIA driver versions, limited power consumption to 100W (from 170W), set a 65°C target temperature (steady state is now 75°C), capped the clocks at 405–1500 MHz (which seemed to help temperatures most), and changed the VM type from i440FX to Q35.

That last change completely altered the PCI configuration, but hey, at least we have AI now, and I was spared the indignity of dealing with netplan myself:

Unintended consequences
Unintended consequences

Upgrading the host kernel made no difference either: the GPU keeps dropping off the bus with Xid 79, followed by “Node Reboot Required”, so I’m looking for a solution. This was happening during PTX kernel testing, before I tried Strata, so I suspect this might just be burnout.

Either way, Qwen 3.8 Flash Next on this thing is unbelievable (well, compared to where we were a year ago). With a better card (in all regards), it might be “good enough” for slow-paced agentic workflows. Between GPU crashes, it was more than capable of simple code changes and running prebuilt test and release pipelines, and was able to report problems it ran into, including filing comprehensive GitHub issues:

Not bad at all for a local model
Not bad at all for a local model

The only caveat is that, paraphrasing Douglas Adams, it steers like a cow: prefill/generation is ~850/60 t/s, which is not bad, but it takes minutes to do basic things that gpt-6-luna replies to instantly.

Regardless of my pains, this is pretty awesome from a technical perspective. Strata’s disk-streaming and MoE-management tricks are not new, but they’re very finely tuned, and it kind of justifies all the time I’ve spent on go-pherence, even if I can’t do any NVIDIA work on it now.

Media

Finally, the work-life balance update: I actually managed to spend a good while going through Embassytown, which in good China Mieville form can be both dense and engrossing, and playing a bit of 2. I might have a life someday…

We Need To Start Seeing Other Agents

I’m feeling the edges of burnout creep in, and having gone through that before, I’m pulling the brakes on anything that is neither immediately useful nor satisfactory.

To begin with, I’ve decided to take it a lot slower with piclaw. I’ve been a bit frustrated for a while about the while upstream churns through three releases a week, but most importantly, maintaining it burns through credits I need for other things, so I’m calling it “stable” and moving to a monthly release cadence.

Too Much Pi

In practice, I’m stepping off the harness rat race since however exciting it is, and no matter how many nice tailored features I have, I also have the maintenance overhead that comes with addressing any of them.

But I also think there is a lot more to be done regarding AI and agents. Just not in the code-editor-cum-harness space, which is over-saturated, nor in the consumer space, which is just bonkers insane if you take Claude, Meta’s Muse and OpenAI’s Dots announcements as any indication of how far down the “let’s monetize agents” rabbit hole companies are sliding into.

I am also stopping work on rs-ai and swift-ai, as well as a bunch of other things I’ve been doing that were minor reinventions of the wheel, and taking a hard look at what I actually need right now.

Re-Focusing

In a parody of Maslow’s Hierarchy of Needs, I’ve broken down what I need into three categories:

  • I need to have a decent way to write, take notes and express myself
  • I need to have a cross-platform, cloud-ready coding environment
  • I need to have a personal agent I control (but that can manage infrastructure and automate things, increasingly hardware-related).

A way to write. A coding environment. A personal agent.

Can you see it yet?

Unlike Steve Jobs’ famous tirade, these are not the same thing. I thought it made sense to turn piclaw into that one thing, but I think there’s a reason why people both like Swiss Army knives and yet get specialised tools.

A Way To Write

First, writing. I need to do it every day to preserve my sanity, and it needs to be as frictionless as possible.

Over the past two or three weeks, I’ve been using to manage all of my drafts, for three reasons:

  • I wanted to stop futzing about with and using for syncing vaults, since the writing experience on was physically excellent.
  • I could access it from literally anywhere with a browser.
  • I really liked parts of the editorial suggestions I was getting from : the annotations, the sidebar, the fact that it made zero attempts at rewriting my text, etc.

But maintaining what was turning out to be a ProseMirror wrapper (and there are much better takes on that, being a phenomenal example of how to build a proper editor atop it), a dedicated storage back-end and a single-purpose pi-durable agent doesn’t make an iota of sense, and this effectively boils down to a few practical concerns:

  • I have a love-hate relationship with . Always have, always will, but the fact is that it works and is a known quantity.
  • I don’t want to sync the entirety of my private vault to my Windows machines (but I do want to pop in and do minor edits)

So I forked Markport (which lets me run in a browser from anywhere) and fixed a bunch of little annoyances before adding a pi-durable agent inside it that can run the exact same skills as (and much more).

I am also whipping bouncer into shape to proxy tunnels to it (because anywhere really has to be anywhere), but in the meantime I’m focusing on the agent UX inside :

Markport running Obsidian in a browser, with the embedded agent updating draft notes from hardware research
The same writing skills, now running inside Obsidian.

This works far better than it has any right to, and being based on pi-durable has a lot less exposure to upstream churn than building an entirely new agent.

I do suspect I will be going down the rabbit hole of writing a highly custom plugin, but right now my writing workflow stays more or less the same, except that the revision process goes (temporarily) back to the agent adding editorial block quotes to the text instead of highlights (and a bit less of them, too, now that I’ve learned what was useful feedback from ).

A Coding Environment

I was really excited when I came across Agents In The Cloud, because it does some of what I have been trying to get to with agentbox, webterm and piclaw very, very neatly:

  • It supports containerised sandboxes
  • It has an absolutely killer web experience (at least on desktop) that not only includes embedded (something I stopped short of doing in piclaw) but also has a very nice, usable layout for desktop use that is arguably better than mine for using, well, things like inside it.
  • It makes it easy to bootstrap new workspaces from templates
  • Serendipitously, it ships very usable speech-to-text using the very same Nemotron model I have been optimising for Intel iGPUs over the past week or so.

However, it lacks a few critical features that I need; some that I baked in to piclaw from the start, and some that I think are essential to managing it sanely:

  • A keychain (there are now shared workspace secrets since I raised that issue)
  • A plug-in/extension mechanism
  • Support for ARM builds
  • Support for hosts that don’t have EROFS enabled in the kernel (I added support for that in pve-microvm, but I can`t add support for it on many prebuilt ARM kernels, so cross-platform work is completely out the window)
  • A management API with things like workspace management, token revocation and the like (ssh to the host to manage it is not good enough)
  • Better networking

The huge blocker for me right now is that it was designed for a single developer working on a single box remotely, consuming only public services, and it shows: it defaults to being accessed via and letting sandboxes access the Internet, but I can’t reach on my LAN or any of my private MCP servers, which makes doing serious work on it a non-starter for me.

Since the maintainer is still trying to figure out how to accept contributions, I decided to fork it and invest a little bit of my time in baking in some essentials:

  • A draw.io editor/previewer (because I can’t really design anything if I can’t diagram it)
  • A first cut of a management API that aligns with how I manage , , Azure services and even KVM hardware now
  • A way for me to have my own dedicated upgrade channel (for both the ARM containers and my customisations)

I called the result kintsugi (look up the philosophy if you’re not familiar with it) and will be tweaking it just enough until I figure out if it fits my workflow and if there is a way I can contribute to the original project, which I think is a thing of beauty in its own right, but still needs room to grow.

Blue and white ceramic bowl with cracks repaired in gold
The kintsugi “repaired oriental ceramic bowl” logo, with my usual whimsy.

It’s not going to be a hard fork (I will contribute whatever I’m allowed to) and it’s also not going to replace piclaw, but if I manage to sort out the networking issues this weekend it might significantly lessen both my token expenditure and my time investment in maintaining things like the recent code review extension I built for piclaw.

A Personal Agent

This is the trickiest bit. piclaw is very much the one thing I work in everywhere (including a version I use at work, integrating with Copilot/Cowork and all the other $DAYJOB paraphernalia), and, again, I don’t intend to replace it.

I do need to let the agentic rat race settle a bit and figure out how to maintain it sanely instead of trying to keep up with Earendil’s breakneck pace of releases, and, above all, use it instead of burning tokens on it–hence the immediate move to end-of-month releases unless there’s a hotfix/bug I need to get out.

But I do think I need to evaluate ways out of the churn (and if you’ve read any of the Expanse books, you’ll know “churn” is a pretty loaded word).

So I’ve been looking at other agents, and leveraging them as much as I can:

  • This doesn’t really break my , I think: I’ve been porting most of my work skills and some custom tools to M365 Copilot
  • I’ve been using Codex a lot more on my Macs (it is the only exception to “absolutely no agents on my local machine” that I allow)
  • I’ve started investing a bit more time on gi.

This last bit is relevant because I need a portable flavour that isn’t based in and yet can provide a TUI and web UI within a hair of the basics that pi and piclaw currently deliver, both because I want to have some control over my tooling and because nothing else out there fits.

In particular, I need something more RAM-efficient than pi that will run anywhere (including RISC-V), and since I also miss doing LISP, using go-joker as a runtime for extensions is something I want to try–especially now it can now compile a few more things to native code via , and even do FFI to SDL.

But I just found out PiG is a thing, so I will probably have to reassess that in a few months.

Either way, piclaw will keep being the thing I rely on for keeping all of my other stuff together, including kintsugi until it can deploy itself reliably.

And for that, I’ve also started changing my a bit to save on tokens. I’ve been relying on gpt-6.1-sol for most of my coding and gpt-6-luna for everything else (terra is both not smart enough and too expensive as a default), but I’ve actually disabled both Astra and Opus and keep exploring cheaper alternatives.

You don’t need to burn money, patience and time (and by time I actually mean lifetime) to use productively, you just have to have common sense…

The Lenovo Chromebook Plus

A few months ago, around the time , I became really interested in Chromebooks again, partly because I’d completely lost touch and partly because I heard good things about the new ARM chipsets, namely the MediaTek Kompanio Ultra. But Chromebooks are not a common thing in my neck of the woods.

And, even then, there aren’t a lot of manufacturers that ship interesting hardware in this field. I’ve been seeing ARM laptops slowly take over the lower tiers of the Windows laptop market, but I was very curious about the current value proposition of either Googlebooks or vanilla Chromebooks.

Disclaimer: Lenovo sent me this review unit as a time-bound review trial, and this article follows .

ChromeOS, Android and their trajectory

For years now, the elephant in the room has been that both Googlebooks and Chromebooks are Google creatures first and foremost as far as user experience and software are concerned–and despite OEMs trying to figure out how to sell laptops that shipped palatable alternatives to Windows, it’s never been very clear if ChromeOS is a viable alternative outside of education.

I think that overshadows what the actual hardware can do, especially now that the ARM variants are becoming really good.

Another question is what the Chromebook experience is like from a software perspective–not technically, but in terms of actual usability and productivity in a world where the web has pretty much “won” (even if you don’t like that idea).

And yes, both flavours of “-books” share Google’s lack of consumer product focus and inability to coherently segment their offerings. Googlebooks are meant to be a premium tier when compared to today’s Chromebooks, yet both platforms run Android apps in a desktop context–which is actually one of the things I wanted to experience properly after years of various hacks.

Hardware

Lenovo Chromebook Plus open on a table, with ChromeOS on its OLED display
The 14-inch OLED panel and full keyboard make for a comfortable writing machine.

The machine I was sent is the Lenovo Chrome 14M9610, which in typical Lenovo fashion is not a single model but a platform reference they unfold into multiple retail configurations. Having recently bought a brand-new Lenovo Yoga for my eldest’s college work, I can tell you it is very hard to pin down exact specs from PSREFs… But I digress.

The PSREF covers several regional combinations, but I got Lenovo’s UK 12GB/128GB configuration:

  • MediaTek Kompanio Ultra 910 (eight cores: one Cortex-X925 at 3.63GHz, three Cortex-X4 at 2.8GHz and four Cortex-A720 at 2.1GHz), with an Arm Immortalis-G925 MC11 GPU
  • MediaTek NPU 890, rated at up to 50 TOPS
  • 12GB of soldered LPDDR5X-8533 RAM and 128GB of soldered UFS 3.1 storage (the upper tier has 16GB and 256GB UFS 4.0)
  • 14-inch 1920x1200 60Hz OLED display (non-touch), rated at 400 nits and 100% DCI-P3
  • 5-megapixel webcam (with the classic Lenovo privacy shutter)
  • 60Wh battery (charging via USB-C, of course, and I got the 45W power adapter)
  • Wi-Fi 7 and Bluetooth 5.4
  • UK keyboard without fingerprint reader

Design and Form Factor

On unpacking the machine, I immediately noticed how light it feels compared to its size and metallic finish (I suppose Apple and Microsoft have conditioned me to expect meaty, weighty slabs of aluminium). Lenovo build quality for low- and mid-range machines has always been one of the reasons I favoured them (I have , which was a great investment), and the fit and finish do not disappoint.

The overall feeling is somewhat like a MacBook Air, although at 314.2 x 219.1 x 15.79mm this non-touch configuration is roughly one centimetre wider and deeper than the 2022 13-inch Air, even as it is a little lighter–one of the reasons for that is that the lid is aluminium but the bottom is ridged PC-ABS, which also gives it a good grip:

Ridged underside of the Lenovo Chromebook, with two long rubber feet
The ridged plastic base keeps the weight down and gives fingers something to grip.

One thing I liked immediately (especially considering ) is that the small lip above the webcam makes the lid easy to open by feel alone (and yes, it passes the one-finger opening test). This serves the same purpose as the MacBook’s classic under-trackpad bevel, although it is a little annoying considering it sticks out just enough to cause friction when sliding the laptop into a bag.

Connectivity is basic but sensibly laid out:

  • A 5Gbps USB-C port on either side (both supporting charging and DisplayPort 1.4)
  • An additional 5Gbps USB-A port on the left (next to a charging LED) and a 3.5mm audio jack on the right

There is no HDMI socket or card reader, but being able to charge from either side is definitely useful, and the Chrome reminded me of how plain nice it is to have a charging LED. Seems like a feature Apple would value, right?

Keyboard

I got a machine with a UK keyboard layout, which has been amusing because I had forgotten how awkward it is to use some common symbols on it (which I mostly fixed by switching to a US international layout).

Accessibility and dictation keys beside the power button and right speaker grille
Accessibility and Dictation each get a dedicated key, the latter being uncomfortably close to the power button.

The keyboard itself is simultaneously classic Lenovo (slight bottom-edge rounding, tactile and bouncy) and classic Chromebook (with a Google logo “G” key and the Caps Lock key optionally doubling as an “action” key for emojis, search, etc.). It is also backlit, although at a single (dim) brightness level.

Sadly, this model (being the lowest in the range, as far as I can tell) does not have a fingerprint reader or any other biometrics, which meant some awkward moments when I kept reaching for the power button to log in.

Trackpad

The trackpad is a generously sized 120 x 75mm glass-like Mylar surface. It is smooth and accurate enough that I did not reach for a mouse during normal use, although the mechanical click is more conspicuous than the rest of the machine (I’m a tap-to-click person, so I never really pressed it).

Curiously, I initially thought pinch-to-zoom was not supported, but after a ChromeOS update it suddenly started working.

The same update also made three-finger overview and four-finger desktop switching more responsive, which is why I remember it distinctly.

Display

The display is, in a word, gorgeous, and I didn’t expect it to be this good. It’s a very crisp, 14-inch 1920x1200 OLED panel, with the slightly taller 16:10 aspect ratio I prefer and thin bezels, at the top of which is mounted the 5 MP webcam:

Webcam with its red privacy shutter closed in the raised lip above the display
A physical privacy shutter for the webcam, and a raised lip that makes the lid easier to open.

Lenovo rates the display at 400 nits and 100% of DCI-P3, and the combination of deep blacks and vivid colour is immediately obvious without looking at a specification sheet. The great contrast and legibility are something I’ve taken for granted on MacBooks, and it’s been one of the main reasons I kept picking up this machine for writing.

The only drawback I can see is that the lack of touch support makes it somewhat awkward to interact with Android applications, but I’m perfectly fine with that (the higher-specced models do seem to have touchscreens, though).

As to external monitors, Lenovo claims support for the built-in panel plus two external displays, but in practice I could only try one, and that would “only” go up to 3840x2160 on the –which is pretty good for an ARM device (although my can achieve more, this is likely enough for most people).

Speakers

The speakers were one of the most enjoyable (and unexpected) parts of using the machine. There is a Dolby Atmos logo right under the left Ctrl key, and the speakers sounded unusually full for a Chromebook–music has enough warmth and stereo separation that it was a pleasure to listen to, and the bass was, if not MacBook-grade, at least serviceable for the eclectic mix of jazz and baroque that I favour these days while writing.

The speakers fire upwards through the grilles beside the keyboard, but there are two discreet bottom slots as well, which helps explain why they sound larger (and weightier) than the machine would lead you to believe. And since the Chrome is completely fanless (one of the nice perks of modern ARM machines), there was no fan noise to spoil the effect.

Wi-Fi

The Chrome worked seamlessly with my Wi-Fi 6 network, reporting nearly 1Gbps on the 5GHz band, confirmed both by my internal OpenSpeedTest instance and the stats:

In practice, I seldom got less than 600Mbps around the house
OpenSpeedTest over the home LAN: 912.6Mbps down, 1022.6Mbps up and a 2ms ping.

Steam Link, which is particularly finicky with network bandwidth on Android, worked perfectly–and the game streaming experience was excellent, with very low latency and good video quality. In fact, I ended up playing and 2 over Xbox Cloud Gaming a couple of evenings as well, which was a delight on this screen.

Performance And Battery Life

The Kompanio Ultra 910 is the interesting part of this machine, and was the reason I sought out this particular model. It is marketed as a very power-efficient eight-core ARM SoC with an Immortalis-G925 MC11 GPU and a 50 TOPS NPU. In ordinary use it feels very snappy even with multiple tabs, Android applications and several virtual desktops open. And given my hatred of fan noise, I was quite pleased to see that the whole package is passively cooled–there is no fan whatsoever, even if the underside gets a bit warm when running Linux.

The 60Wh battery turned out to be another benefit of pairing ChromeOS with ARM. Curiously, the diagnostics page initially showed that my unit had already accumulated 21 charge cycles and was at 97% battery health:

Battery health was still at 97% with the cycle count up to 33.

I thought that was due to it being in storage, but after a few weeks of my using it, the figures are consistent with this sample having been in use for a while. In practice, though, the battery has been excellent.

The first time I used the machine, straight out of the packaging and after minimal charging (reporting 100% full, but really just a top-up), the Lenovo Chrome lasted me easily two days of partial use (roughly 3-4h a day) before I started using developer features.

Over one weekend I charged it late on Sunday evening; over another I charged it on Monday–and both times it took under an hour to top up. And then I realised I could turn on battery optimisation (i.e., “low power mode”), which nearly doubled the machine’s runtime for writing and research.

This means that I was able to get nearly two full working days from this (3/4 of that if I used any Linux apps, and around a day of intense local development).

Software

This is where Lenovo hands over to Google, and where things were a little stranger.

It’s been a while since I set up a Chromebook, but I noticed that you are now asked during setup whether you need Microsoft 365 support, which effectively enables access.

However, I decided not to cross the streams and connect directly. The consent screen grants the ChromeOS “Connect OneDrive” extension full access to read, create, update and delete my files, as well as ongoing access when I am not using it, and… I just don’t want that to happen:

Connect OneDrive consent dialogue box requesting full file access and ongoing access to account data
Full read and write access to OneDrive, including when the app isn’t in use, was more than I wanted to grant.

It’s not clear how the connection is handled, who owns the keys or whether anything running in Google’s cloud can access , so I skipped it.

This kind of integration is, sadly, something nobody seems able to get right–or make understandable enough for regular people to use, let alone people like me…

I was, however, able to use Windows App (the new name for the Android Remote Desktop app) to connect to my workplace resources just as I do on the Mac–including passkey support, via a QR code that I could scan with my iPhone. This, and the fact that Teams was able to use the onboard camera even when running from Azure Virtual Desktop, instantly promoted the Lenovo to the category of something I can reliably take with me on trips.

Desktop

Even though I am not a big fan of the relatively plain look of ChromeOS window decorations (it feels like Openbox), I can’t argue against their utilitarian usability, or complain that there aren’t up-to-date creature comforts like multiple desktops and split window management:

ChromeOS overview with two virtual desktops and windows for Writing Workshop, Terminal, Settings, Play Store, Tailscale and Files
Browser windows, Android apps and a Linux terminal share the same desktop overview.

In fact, I found the desktop experience (such as it is) very much in line with what I use daily on Windows, even down to the little layout helpers when you hover your mouse over the maximise button:

ChromeOS window layout menu with Split, Partial, Full and Float options
Equal and unequal splits are available alongside full-screen and floating layouts.

AI

Gemini displaying a generated SVG of a pelican riding a bicycle
Gemini works OK, but I just had to do the pelican stunt…

Yes, Gemini is bundled in. Yes, I am entitled to a year’s worth of Pro usage if I put in my credit card information. No, I did not do anything with the offer–as you’d expect, given , I did not feel like committing to it. But I did use the built-in Gemini Notebook application (which is a web view into NotebookLM) for quite a few things, and I did try all the Chrome-baked assistance for searching, editing, etc., even though it could get pretty intrusive–I would get one of these every time I clicked in an input field, for instance:

Help me write popup with a prompt field and a Create image tab
Writing and image-generation prompts kept appearing where I just wanted to type.

Then there were the things I expected to work but just didn’t, like translations:

Help me read rejecting selected Chinese text with the message This language isn't supported at this time
Help me read couldn’t handle the selected Chinese text.

But what I found most useful, given my penchant for testing accessibility features, were camera-based head tracking to move the mouse cursor (which worked very well indeed) and dictation support, which was instantly available everywhere by hitting Google+D or the dedicated key right next to the power button. That placement led to some finger fumbling, and I occasionally suspended the laptop by mistake…

Dictation worked consistently better than what I get on my iPad–it doesn’t have the new Rambler AI-powered post-dictation clean-up, but the speed of recognition itself and tolerance for pauses and changes in inflection were impressive.

From what little I tried in the various bundled apps, I’d say that if you’re committed to Google, you’ll find the Gemini experience useful, even if I ended up installing the Android versions of both Copilot and ChatGPT for my personal workflows.

Android Apps

One of the first things I did was to install , and , as well as a few other staples:

ChromeOS launcher containing Syncthing, Obsidian, Tailscale, Steam Link, Windows App and Linux apps
Syncthing, Obsidian and Tailscale sit alongside Google’s defaults in the launcher.

was immediately recognised as a valid VPN app and seamlessly integrated into the system (something I didn’t know Chromebooks could do):

ChromeOS Private network panel showing Tailscale connected
The Android version of Tailscale integrates with ChromeOS’s own VPN controls.

However, after a while, I realised I needed to sideload apps to take full advantage of Android–ChromeOS Developer Mode requires you to completely wipe the device, but enabling ADB debugging is a separate option that doesn’t require Developer Mode. What I eventually did was to enable ADB debugging and use the Linux environment to install apps locally–that works perfectly, but still plasters a red warning under the login screen that reads This device may contain apps that haven't been verified by Google.

So yes, it may contain nuts.

Linux

Things have improved tremendously since the days of , when I first installed crouton and eventually replaced ChromeOS entirely, dealing with assorted hardware tweaks along the way.

ChromeOS Terminal settings with appearance themes, keyboard and mouse options, and SSH configuration
The built-in Terminal has its own profiles, themes and SSH settings.

Enabling Linux development support is now trivial, and it creates a -based Crostini VM that is, for all intents and purposes, a “normal” Linux environment–the Terminal application is integrated with ChromeOS (you can mount any folder on the system into it) and has its own appearance, keyboard, mouse and SSH settings, while the VM exposes the usual command-line tools and package management, as well as an interesting assortment of virtualised devices:

Linux terminal output from uname, lspci and lsusb showing an aarch64 kernel and virtual devices
An ARM64 Linux environment, with Virtio devices handling storage, networking and sound.

Sadly, that does not include Vulkan graphics acceleration. It is still perfectly usable, although I did not push it to the limit–my goal was to try the regular Chromebook experience rather than turn this into another Linux laptop, but all of the basics worked, including setting up and running :

Visual Studio Code running beside ChromeOS settings for the Linux development environment
The Linux version of VS Code runs locally alongside ChromeOS applications.

In fact, I ended up doing a fair amount of development on this, mostly to prove to myself that I could take it on a trip and have all the essentials:

  • and codex as standalone coding assistants
  • for full-stack development (and a full copy of this site, including all the back-end and rendering code)
  • Enough of the Android SDK to build, deploy and debug an Android app completely locally, even on this relatively low-powered machine–something that is still impossible on an iPad.

I am currently developing gi (my new TUI harness) on it, because it’s more than fast enough for it–again, something that was most definitely not on my bingo card.

Gaming

I should mention that despite some of the bundled apps being games, the MediaTek chipset does have one drawback: there is native graphics acceleration for Android games, but most emulators and off-label gaming hacks currently swear by Qualcomm’s Adreno GPUs, and most of the “alternative” GPU drivers you’d normally rely on for Vulkan graphics acceleration are not compatible. This meant that currently trendy hacks like GameNative and DroidDeck would simply not work, although to be honest that is a very niche thing indeed.

However, like I pointed out above, Steam Link and Xbox Cloud Gaming work perfectly fine, allowing you to play more demanding games via streaming rather than relying on the local GPU–and considering that you can probably do that for a long time with this combination of battery life and lightweight hardware, that’s a perfectly viable way to enjoy gaming on this device.

But that only makes me quite curious about how Googlebooks will fare in this regard, since there is a pretty big market for mobile gaming on Android devices right now, largely driven by emulation and the availability of decent performance GPUs in relatively affordable devices (plus FEX and Proton on ARM are evolving very quickly).

Software Updates

Android apps update automatically via the Play Store, but ChromeOS is also frequently updated (I’ve gone through at least three updates in roughly two months), and even though things like trackpad responsiveness were definitely a part of the experience, the last few release notes were almost exclusively about new AI features:

Chromebook What's new page promoting Select to search with Lens and shopping results
The release notes give Lens shopping searches more prominence than everyday usability fixes.

Annoyances

Surprisingly, I have very few, and they’re mostly related to the somewhat visible gaps in this combination of ChromeOS, Android and a desktop system. Some Android apps didn’t like being used in a desktop environment (not really news for anyone playing with Samsung DeX routinely). There are two Settings apps (one for the embedded Android, which will pop up when you are doing vaguely off-label things like developing on it), and there is a clear lack of unified visuals–Android was never the most consistent thing visually, but throw in a “normal” desktop Chrome and you have yet another UX flavour adding to the dissonance.

And yet, all the slightly weird basics I tried worked: Japanese input, mouse scrolling, dragging, etc. It’s arguably better than a desktop simply because I could seamlessly copy/paste text, rich text and even images across Chrome and Android.

File management is still a pain, though, so even though I could sync my drafts using and resort to , I had to struggle with the somewhat awkward Android-ish-but-not-quite filesystem arrangement.

But by far the biggest annoyance for me has been the somewhat arbitrary choice of things that the built-in Chrome browser refuses to download by default–SVG images, ZIP files from my LAN machines, the occasional (seemingly random) plaintext source file, etc. It seems to be fixable via security settings, and when I find out exactly how I’ll update this post.

Verdict

Even considering it’s designed to a cost and unapologetically plastic, I think this is a great machine, and Lenovo has executed it very well. Although I prefer the 3:2 display ratio of the I have been using for a couple of months now in parallel, I invariably reached for the Lenovo at the end of the day instead of my iPad because of the larger OLED display, full keyboard and overall lightness.

In fact, I think the best thing I can say about this laptop is that I literally had to force myself not to reach for it.

Although it is true that I am in a fairly unique position these days since the vast majority of my tooling only requires a browser or a terminal and (thanks to my preference for using an iPad) I moved all the specialist apps like , , etc. to remote VMs over the years, this is a great writing machine–to the point where I ended up creating to get around the need to sync my drafts to it.

Writing Workshop in Chrome, with a formatted draft and editorial suggestions in a side panel
Writing Workshop keeps the formatted draft and editorial suggestions side by side, entirely inside Chrome.

Yes, was created because I wanted to have a proper WYSIWYG experience inside Chrome that was as close as possible to what the device was intended to do (and use AI to improve my writing, not generate it wholesale). I might have gone a bit overboard here, but I regret nothing.

As to committing to Google… No, I did not move my personal e-mail onto the device (well, I do have one Google account I regularly use, but it’s not my primary), and no, I could not quite commit to Gemini, but being productive on this machine was far less hassle than I expected: everything Android that I really needed worked. Even if the UX polish wasn’t there, the basics worked: I could sync my files to it, use Android equivalents of a few iOS apps, run , and even connect to corporate resources with… zero hassle really.

And it must be said that I was able to do some of those uniquely because Google, unlike Apple, lets me develop and install my own apps locally and gives me a perfectly usable Linux sandbox. What a novel concept, to be able to develop applications for your hardware… on your hardware.

As an Apple (and primarily iPad) user, the overall experience was… sobering. Yes, Apple has (temporarily, at least) gone “down-market” with the to address the low-end laptop market, and I know that Googlebooks have a lot of challenges to overcome (with Google itself probably the biggest one), but I now find the prospect of them tantalising, as long as I am still able to install and run what I want.

I definitely want to try a Googlebook as soon as possible. There’s a there there for sure, and no matter how people feel about it (and Google), I think it has the potential to be a genuinely compelling device for my workflow.

Notes For September 27-October 3

This week was a bit different. For starters, it rained. And I visited the local office. And I consciously set aside hours to catch up on my writing instead of herding AI or doomscrolling, and again, failed at a bunch of that because–well, I lied.

Work has been… odd, discouraging and, above all, draining, so I’ll just get that out of the way: Every time there is a reorganization, a bunch of wheels are reinvented. That is fine; it’s part of the transition process. But the kind of wheels that people focus on during those transition periods is, I think, the most telling signal of whether that reorganization actually needed to happen.

That said, after a late-night stint last Friday pouring a bit of my soul into an internal project that might actually be fun but ultimately pushed the “buffer zone” between work and real life into the red, the week was finally over and I could sit down and focus.

Sharper Gherkins

I’ve been trying a new tactic for doing small projects, which is to have AI take my SPEC.md, generate a set of Gherkin files (which I then revise) and then develop the code from there–either as pure TDD or using the feature files as oracles for the actual tests.

And guess what? It’s mostly worked (I have three or four working examples, and I’m actually writing this ), although retrofitting it to an existing project can be quite messy. As an extreme example, I took my Python MCP server for office files and my Go OOXML library, moved all the fixtures and test cases to a separate repo, and left a few agents to hash it out with the current test cases as grounding. They are still at it.

However, I see great potential in doing this for real TDD:

  • Humans take literally forever to agree on what a user story should be.

  • Gherkin gives me a compact, almost Python-like and formulaic take on the desired outcome(s) for a feature, action, etc. In short, it makes things a lot more deterministic and predictable.

  • I can match each feature to a part of the SPEC.md without losing the opportunity to refine it (and break it down if needed) in a machine-readable format.

And the LLMs do not need to reinterpret the features. They can help draft them, but once Gherkin scenarios are wired to tests, you can stop spending tokens reinterpreting them and just… run the tests.

Looking back, I am starting to realize that most of my hacks for herding AI are actually about removing it from the equation– bake in workflow guidance, my original tried to set things on rails from the start, and now I’m just putting blinders on it.

Gosh, it almost feels like… management.

Tooting the TUI

As a way to sneak some minimalism back into my computing, I’ve gone “back” to TUIs and spent a little while working on gi, which is now more pleasurable to use and much more pi-like (same commands, same UX, mostly because I very much like its minimalism and you can’t go wrong with that).

The Agents Are Among Us

I’ve been watching the launch of Meta’s Muse and OpenAI’s Dots somewhat… bemusedly, if you will. Being a regular Verge reader/listener, I am partial to Nilay Patel’s take that Silicon Valley’s “software brain” mentality has obscured both a lot of the actually practical uses of AI, and the unvarnished truth that the vast majority of people simply don’t care—or that they do care about the privacy and productivity impacts.

Being too close to the coding agent madness (I am still poking at various agent harnesses, and feeling guilty about spending too much time yak shaving rather than actually using them for achieving more in other domains), I think that we’re at a weird plateau where:

  • We definitely have far too many interpretations of what an agent harness is

  • There is zero standardization on workflows (skills and MCP servers are still duking it out at both ends of the extensibility spectrum, but every user ends up creating their microcosm of weird little agent integrations)

  • I feel we’re coming to another plateau of decreasing returns, because even as models keep getting (arguably) smarter, what you can do with them beyond flashy demos hasn’t really gelled into useful outcomes yet.

Or maybe there are now just too many useful outcomes lost in the noise—it’s actually hard to tell. But if you thought we had far too many note taking apps (and workflows) in the world, this continued Cambrian explosion of agent-related things will seem very familiar.

However, unlike coding agents and all the hustle currently pervading the startup world, mainstream consumer agents target the way you go about managing your life—which may or may not involve note taking, but is quite likely a very personal, somewhat inconsistent and occasionally messy process–just like note taking.

And I think AI is not going to be much help with that, other than remove toil (yes, it will sort out your inbox for you and research your travel itinerary). But I keep seeing funky lifestyle demos, agents that shop online (why the heck would anyone trust an agent to buy clothes for them?) and other fairly contrived examples that I (and I suspect most people) would never delegate to another person, let alone an AI that would love to have access to my credit card number and tell advertisers I would love to know more about their products.

Somehow, I don’t think there is a good fit here. I think there’s a pretty decent chance that the idea of a Her-like assistant, however seductive, neither fits the way most people think about AI nor the sales and advertising business models that I can glimpse just underneath the surface.

Notes for September 21–26

Work was gruelling this week, with the rather unwelcome result that I didn’t exercise at all. I also fell asleep on the couch most afternoons/evenings just after closing shop–which ought to give you some idea of how much energy I had left for anything else.

I managed to, somewhat on autopilot, do a few updates on various projects (or yell at AI to do so, depending on the level of guidance required), but I’m late with a bunch of reviews and need to take some time to rest and do nothing even vaguely productive, so this is about as deep as this week’s update gets.

Hardware Woes

As an encore, the ageing RTX 3060 in has been repeatedly acting up at the worst possible time, and dropped off the bus for the third time this week just as I was drafting this. If anyone has a spare DGX Spark they want to get rid of (ha!), now would be a very good time.

I do have a very nice ARM64 workstation that I haven’t yet found time to add to my cluster, but I probably need to burn a heap of money on a Mac mini or a DGX clone as a Christmas present to myself, so I’m saving up. If you’d like to , it would be much appreciated.

For now, I’d just like to get through the rest of the weekend without finding something else to fix…

Update: If you’re a fan of SuperGiant or their games, this concert recording of their music is an excellent way to spend an hour or so. These people deserve every single bit of the success they achieved.

Some Old Expectations for the New Apple

In Nilay Patel’s Decoder conversation with Mark Gurman about John Ternus and Apple’s next big thing, Gurman describes something camera-equipped AirPods might eventually do: look at an email on your computer screen and help add an event to your calendar. And that was when he lost me.

Read More...

Notes for September 13-20

It’s a bit insane that we’re past mid-September and my living room is still sitting at 29oC at 7AM, but such is life in the late Holocene, I guess. Regardless, the shift towards Autumn is starting to show, and I’ve had a couple of days where I suddenly realized I was working “late” into the evening and the lights started coming on automatically (never a good sign unless you’re having fun).

Read More...

The Surface Laptop with Snapdragon

Still very much in line with the overall return to work mood of the past few weeks, I thought I’d post some notes about work gear. You see, I have been using a “Surface Laptop for Business 13in 1st Ed with Snapdragon” (I kid you not, that is what it is called) for a couple of months now.

Read More...

A Writing Tool That Leaves the Writing to Me

As points out, I do revise my posts with AI, but until now, I’ve resorted to post-draft LLM passes that take a bunch of SKILL.md files and either fix outright typos and misspellings or add editorial blockquotes to my drafts. The entire process feels needlessly technical in the sense that doing it inside or (typically as I bring stuff together for a final draft) detracts–or, rather, distracts me–from the writing experience too much, and sometimes automated replacements slip through.

Read More...

macOS and iOS 27

Nothing blew up. Yet.

Read More...

The LattePanda Sigma

Following up on my testing of the LattePanda and , this time I’m looking at the Sigma, which (as is becoming the norm with my recent pieces) I actually got before summer break.

Read More...

Notes for September 6-12

Even though my personal calendar is now filled with a smattering of fresh events, I am quite happy about the ones that don’t involve health, legal and tax annoyances. My back and other ailments seem to be stabilizing thanks to daily exercise and my having dedicated some time to cooking my own meals, which, besides being cheaper (a concern I’ve been having of late), also forces me to stand and move about, not to mention giving me an excuse for handling very sharp knives in very satisfactory ways.

Read More...

The iPhone Duo (and the Rest)

Besides the showmanship demonstrated by the keynote opening (nice touches there, Tim) and the visual effect when you open it, the iPhone Duo is… strangely familiar, and yet, somehow just strange as well:

Read More...

The Kuycon P20

The desire to own an Apple Studio Display has probably been hanging over most Mac desktop users since time immemorial (well, since 1998 at least, but most people are more familiar with the “modern” 2022-era look) for two reasons:

Read More...

Notes for August 29–September 5

As many people have remarked, the moat between ideas and technical execution is narrower than ever, and that has a number of consequences–both when it comes to investment (in this case, personal, although …) and focus. And I think I need to be more selective about what gets my evenings, since I am back at work and already spending too much of my free time building things on a computer.

Read More...

Not a Joke

I have a long and somewhat embarrassing history with that goes back to the years when it was fading from academia and LISP machines were giving way to and DECstations (a transition that should be familiar to anyone who read the UNIX-HATERS Handbook), so I got properly hooked on when it came out.

Read More...

My E-ink Summer Report

I’m now back to work and already embroiled in far too much, so I’m going through my infinite set of mental checklists and trying to relax by offloading some of the stuff I never got around to writing down. While I was on vacation, one of the things I did was tune out (as much as possible), which meant relying more on my e-ink devices.

Read More...

Archives • 3D Site Map