The Limeleaf Blog

Our thoughts on software engineering, product development, and cooperative workplaces.


Protocols for Publishers: Building an Open Social Web with AT Proto

Last Wednesday evening, I attended the ​Protocols for Publishers (PfP) Showcase​ in New York City. The event brought together publishers, developers, and researchers to explore the future of social content and publishing as AI devours the web, and how adopting open distributed technologies like AT Protocol (a.k.a., "AT Proto") can help prevent creators and publishers from getting squeezed out by the big tech corporations.

Read More >>


🚀 apply.coop is Released!

apply.coop, where good people find great jobs, is out of Beta and in production!

Our database features over 100 well-paying jobs at co-ops, nonprofits, and public benefit corporations (PBCs) worldwide, with more being added daily.

Read More >>

Understanding AWS IoT Core Device Shadow: Reported, Desired, and Delta States

I've been doing some work for a client that uses Amazon Web Services (AWS) to manage their IoT devices. Specifically, they use AWS IoT Core Device Shadow to synchronize state between their devices and their cloud applications. In this post, I thought it would be helpful to explain how the device shadow works, focusing on the reported, desired, and delta states—and when devices should report their state or respond to changes. Let's dive in!

Read More >>

🚀 apply.coop is in Beta!

We are excited to unveil apply.coop, a platform that connects purpose-driven job seekers with values-driven workplaces.

Read More >>

Graze Integrates the Bluesky Directory API to Streamline No-Code Social Feed Creation

We are excited to announce that the fine folks at Graze have integrated our Bluesky Directory API into their platform.

Read More >>


Year One of Limeleaf

Limeleaf was born on March 18, 2024. Our first anniversary seemed like a good time to take stock of what we’ve achieved so far and where we want to go in 2025 and beyond.

Read More >>

Go and Rust for the Small Web: How We Build Faster, Simpler Apps

At Limeleaf, we chose to specialize in Go and Rust for our clients and we've written about why we made that choice. However, now that we're building our own products, we need to develop applications for the web, too.

Read More >>


Limecast at Startup Tech Valley on February 20th

If you happen to be in or near Troy, New York, on Thursday, February 20th at 5:30 p.m., come see us present at Startup Tech Valley! We'll talk about Limecast.net, our open-source, privacy-first podcasting platform. You won't want to miss these eight minutes of high-powered product pitch perfection!

Read More >>

Worker Ownership Is Resistance

This a dark day for many of us in the United States. A government that we believe will undermine the fundamental values of our country and harm vulnerable citizens has assumed power. While no one can predict the future, if their stated plans are any indication, we are in for a tumultuous four years that could erase over a century of progress for working people.

Read More >>


The OSI defined open-source AI. Surprise, big-tech AI projects aren't open source.

This week, the Open Source Initiative (OSI) released "The Open Source AI Definition" (OSAID). This is an important step in establishing guidelines around what "AI" means in relation to intellectual property rights and how open-source definitions apply to the technology.

Read More >>

Introducing Diggetal

We started Limeleaf to work with smart people on interesting tech projects that make a difference.

But we also did it to have fun, learn new things, and fall in love again with tech.

Today we launched Diggetal, an initiative dedicated to tinkering around with small projects.

Read More >>


Why Go and Rust?

I was about 80% finished with this post and I was going down the road of listing out all the great things both Go and Rust offer for us to build and maintain software for our clients and product, but then I threw it all out. I realized that posts like that are a dime a dozen and there are so many resources out there comparing, contrasting, and listing features of both languages, but none of that really explains WHY we, the humans Erik, John, and I, like using Go and Rust. So instead I thought it would be better to personalize this a bit and grab some quotes from each of us about why we like each of them, unedited, unfiltered, and raw!

Read More >>

Why VCs Will Never Give Us Money (And We're Okay With That)

Less than 1% of startups secure venture capital funding. At Limeleaf, we're part of that 99% – but by choice.

Since founding our company, a few people have asked how we plan to fund product development. Most assume we'll try to raise VC money. Today, we'll explain why we aren’t taking that approach and what we’re doing instead.

Read More >>

We Are Changing Our Domain

This morning, Blain educated me about the history of the .io top-level domain. I didn't know that history when I bought limeleaf.io last year before teaming up with Blain and Erik.

limeleaf.net wasn't available then, but to my surprise and delight, it was this morning, so I bought it.

All Limeleaf site traffic and email now redirect from limeleaf.io to limeleaf.net, and I have donated $50 to Chagossian Voices.

Read More >>

Step 0 of Starting a Tech Worker Co-Op: Define Your Goals

Worker cooperatives ("co-ops") are a growing alternative to traditional hierarchical tech company structures, which often rely on venture capital funding. Unlike conventional startups that take VC money in exchange for an equity stake, co-ops prioritize worker ownership, democratic decision-making, and profit sharing and strive to embody the 7 Cooperative Principles established by the International Co-operative Alliance.

Read More >>

Safer Binary Decoding in Go

Go is a popular language choice for building web services. Typically, when building those web services, we end up encoding/decoding JSON as the data format. The encoding/json package provides a safe way to turn JSON payloads into Go structs, and vice versa.

However, if we need to handle raw []byte that follow a binary encoding format that is not self-describing, we need to do a bit more work and implement the encoding.BinaryMarshaler and encoding.BinaryUnmarshaler directly. Since we're dealing with []byte, we need to respect slice bounds to avoid triggering a panic() and crashing our service.

Let's look at the two ways we can decode data into Go structs and compare how one way will be safer than the other while yielding the same result. As an added bonus, we'll end up with easier to understand code.

Read More >>

Founding Limeleaf: Part 3, Finding Support in the Cooperative Community

When we started Limeleaf, we wanted to do things differently. We wanted to create a democratically managed business where every worker had a voice and a stake in the company's success. In short, we wanted to start a worker cooperative (even though we don’t call ourselves that, for reasons we covered in Part 1).

Read More >>

Founding Limeleaf: Part 2, Writing Our Operating Agreement

In this second installment of our series on starting a tech company as a cooperative business, we’ll discuss how we wrote our Operating Agreement (OA).

Read More >>


Why Limeleaf Operates as a Co-Op

Cooperatives have gotten a bad rap over the years. They’ve been portrayed as impractical, plagued by decision paralysis, and insufferably hippy-dippy.

Read More >>