North Carolina


Interested in Linux, decentralization, cryptography, golang/rust/c, and communication.

I spend most of my free time on:

  • Arbor, a tree-based, decentralizable chat platform
  • Gio, an immediate-mode UI framework for Go
  • Gio-Extras, my collection of libraries to extend Gio

If you get value out of my work, please consider sponsoring me on Liberapay or GitHub.


Last active a day ago


Last active a day ago


Last active 11 days ago


Last active 2 months ago


Last active 3 months ago


Last active 11 months ago


Last active 11 months ago
View more

Recent activity

Re: Gio News, (March + 0.3*April) 2021 8 hours ago

From Chris Waldon to ~eliasnaur/gio

Correction: Raph Levien is the author of piet-gpu, not Raph Linus. Thanks Anthony Starks for pointing this out! Sorry Raph, I got tripped up by your GitHub pages domain name https://raphlinus.github.io/.


Gio News, (March + 0.3*April) 2021 8 hours ago

From Chris Waldon to ~eliasnaur/gio

Hello Gioverse!

March flew right past me, and I got too caught up in buying a house
and getting vaccinated to realize it was time to write another
newsletter. Fortunately, my lack of coverage didn't stop the Gio
community from continuing to do amazing work:

core gio

Elias has spent the time since last letter working on many facets of
low-level GPU support. He is working towards making the compute
renderer into the default back-end (for Android/Linux) during April

Re: [PATCH sprig v2] feat: move collapse children button out of overflow menu a day ago

From Chris Waldon to ~whereswaldon/arbor-dev

Excellent work Thom! This is exactly what I was looking for. Merged!


Re: What should the next chat app look like? 3 days ago

From Chris Waldon to ~sircmpwn/public-inbox

Hi Drew,

I appreciated your post, and I resonate with the points you made. I'd
like to share a project that I've been working on for three years (in
my limited free time) that is exploring this space.

Arbor is a chat protocol/structure intended to provide decentralized
identity, multiple deployment models (centralized, federated, p2p),
and a more user-respecting experience than the majority of the
landscape. We have a reference client and server implemented in Go,
and our client supports Linux/BSD/macOS/Windows/Android/iOS by virtue
of https://gioui.org.

Our protocol and binary structures are specified in a

Re: [PATCH sprig] feat: move collapse children button out of overflow menu 3 days ago

From Chris Waldon to ~whereswaldon/arbor-dev

Hi Thom,

Thanks for submitting this! I have verified locally that it does what I expect,
and I think it looks (visually) great! However, I think we can probably do
something a bit different with the implementation.

If you look here:


you can see that this is a SimpleIconButton, but we customize its foreground
color at layout time by checking a (in the case global) variable. We could use
 a similar approach to this to choose the icon we use as part of the Layout
function of the overflow button. It makes the icon change instantly (when the

Re: [PATCH v3 0/4] feat: Orchard store 7 days ago

From Chris Waldon to ~whereswaldon/arbor-dev

We discussed this in another medium, but I'm posting here for public

I think this looks great except for the page-able implementations of
Children() and Recent(). Those are fairly critical. I'm really sorry
that one of my comments on the issue made it seem otherwise. I was
trying to discuss the Archive methodset rather than the two new

I am open to alternative formulations of those method signatures, so
long as they are able to solve their design space well. We just need
a reliable way to iterate all Children() and all Recent() in batches.

Other than those two methods, I think this is ready to go.

Re: [PATCH] feat(Orchard): introduce Orchard store via toggle in settings 7 days ago

From Chris Waldon to ~whereswaldon/arbor-dev

This change looks good, though I'll wait to apply it until the orchard
work is itself merged.

Thanks for putting this together!

On Sun, Apr 4, 2021 at 2:20 AM <jackmordaunt@gmail.com> wrote:
> From: Jack Mordaunt <jackmordaunt@gmail.com>
> - add a toggle to settings that enables Orchard
> - default to Grove until we are satisfied to make Orchard default
> - rename`SettingsService.GrovePath` => `SettingsService.DataPath`
> - refactor `newArborService` to initialize Orchard store based on the settings

Re: [PATCH 4/5] feat: Orchard store 7 days ago

From Chris Waldon to ~whereswaldon/arbor-dev

Hi Jack,

Excellent code, as always! I have some questions, requests, and 
clarifications about this particular patch. Most of them are inline 
below, but there's one high-level one:

It just struck me that there are a couple of methods missing from your 
store. I think this is my fault, as I think I failed to mention them in 
your "what's left to do" checklist, but they're one of the primary 
reasons for building out a new store. I'll quote the top of the issue 
for this bounty:

> That new node store should implement the store.ExtendedStore interface, and also provide a few new methods to enable fast access patterns that haven't been possible in the past:

Re: Pop-up menus and other layered drawing 10 days ago

From Chris Waldon to ~eliasnaur/gio

Hi Ian!

> I am building a GUI tool for a project and have been looking at gio
> because it seems to be one of the few libraries that takes cross
> platform seriously, is actively maintained, and isn't a port of a port
> of a port.

We do take cross platform support seriously, and I'm glad that it shows!

> The original program this is being built after makes extensive use of
> popup menus for settings and option switches. I know there are large
> parts of hypothetical future functionality that don't exist yet, but I'm
> also not seeing anything that I recognize as drawing over other parts of
> the interface (as a menu would). Am I missing something, or does this

Arbor Community Sync is Tomorrow! (April 1st) 11 days ago

From Chris Waldon to ~whereswaldon/arbor-announce

Hey all,

We have a sync meeting tomorrow at 7pm EDT (23:00 UTC), and you can
join it by following the link here:


Our work-in-progress agenda is available here, and will be fleshed out
to become our meeting notes:


I look forward to seeing you there!