<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hmans.dev</title>
        <link>https://hmans.dev</link>
        <description>Hendrik Mans is a developer from Wedel, Germany, with almost three decades of experience building applications, APIs, and utilities.</description>
        <lastBuildDate>Wed, 10 Jun 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>SvelteKit</generator>
        <language>en</language>
        <copyright>Copyright 2026 Hendrik Mans</copyright>
        <atom:link href="https://hmans.dev/rss.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[An Update on Beans]]></title>
            <link>https://hmans.dev/blog/beans-update</link>
            <guid isPermaLink="false">https://hmans.dev/blog/beans-update</guid>
            <pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The state of Beans, and its future.]]></description>
            <content:encoded><![CDATA[<!--[--><p>An increasing number of folks have been asking about the state of <a href="https://github.com/hmans/beans" rel="nofollow">Beans</a>, and instead of answering each one individually, I thought it would be best to write a quick update here.</p> <p><strong>Yes</strong>, Beans is still an active project.</p> <p>But — and you knew a <em>but</em> was coming — there are some caveats.</p> <h2>Beans UI and Agent Orchestration</h2> <p>Around March this year, <a href="https://github.com/hmans/beans/discussions/135" rel="nofollow">I started building Beans into a full-on agent orchestration tool</a>, patterned after my preferences in this space. What’s currently on <code>main</code> is actually pretty great, and I was using it for my own projects and loving it; but in the meantime unfortunately Anthropic (which was my primary provider of agentic goods, and the only one supported in Beans UI) <a href="https://support.claude.com/en/articles/15036540-use-the-claude-agent-sdk-with-your-claude-plan" rel="nofollow">have declared war</a> on <code>claude -p</code> usage, which is essential for orchestrators like this.</p> <p>On top of that, I am aware that maybe this orchestration tool simply made Beans just a little bit <em>too big</em>. An argument can be made that Beans should just focus on Markdown-based issue management and nothing else.</p> <p>So I’ve decided to pull this orchestration tool from Beans, and maybe release it as a separate project at some point in the future; but before I do that, I want to see how things pan out between Anthropic and the rest of us. There’s a potential future scenario where I give this orchestrator a big upgrade to work with other agents, too (I myself have recently switched away from Anthropic to OpenAI), but since I’m also very busy with getting <a href="https://chatto.run" rel="nofollow">Chatto</a> off the ground, it’ll be a while until I find the time.</p> <h2>The TUI Uncertainty</h2> <p>I have come to understand that for many people, the primary reason why they enjoy using Beans is the built-in TUI, which I appreciate, but also surprises me. I personally don’t use the TUI at all, since I either inspect my issues in my code editor, or — in certain <em>very</em> vibe-mode cases — not at all. Very subjectively, if I wanted to interact with my Beans issues through some kind of UI, it would need to be web-based. An implementation of that is part of the agentic orchestration tool that I mentioned above, but since that’s now on hold, I don’t know when or if that will see the light of day.</p> <h2>The Skill Issue</h2> <p>But the biggest realization I am having to come to terms with is that maybe, <em>maybe</em>, six+ months after its inception, Beans — at least in its current shape — might be just a little bit redundant. Think about what Beans actually is:</p> <ul><li>it manages Markdown files with typed frontmatter</li> <li>it injects a prompt so your agent knows how to work with it</li> <li>it provides a TUI to display and interact with these files</li></ul> <p>The TUI aside, I think it’s safe to say that most of that Beans does could be replaced with a good skill and a generic tool that can manage Markdown files. And that’s exactly the kind of direction that I might go in the future, once I have a little more time to experiment with these things.</p> <p>I even have some fun ideas for the TUI in this scenario! So please do stay tuned, TUI fans.</p> <h2>In Summary</h2> <p>Yes, Beans remains alive and kicking, even if I can’t currently give it a lot of attention. If you have a PR waiting for a review, I apologize, but would also very kindly remind you that the project’s README <a href="https://github.com/hmans/beans#contributing" rel="nofollow">says</a>:</p> <blockquote><p>This project currently does not accept contributions — it’s just way too early for that! But if you do have suggestions or feedback, please feel free to open an issue.</p></blockquote> <p>Either way, I’d like to ask you for just a little more patience while my focus is on other work. Good things are ahead, in Beans and elsewhere.</p><!--]-->]]></content:encoded>
            <author>Hendrik Mans</author>
        </item>
        <item>
            <title><![CDATA[The Chatto FAQ]]></title>
            <link>https://hmans.dev/blog/chatto-faq</link>
            <guid isPermaLink="false">https://hmans.dev/blog/chatto-faq</guid>
            <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Frequently asked questions from early testers. And hopefully some answers!]]></description>
            <content:encoded><![CDATA[<!--[--><p>Well, the last couple of weeks have been quite exciting, to say the least! Chatto has been gaining in visibility, with a stready influx of brave testers creating accounts on the <a href="https://chat.chatto.run" rel="nofollow">official Chatto community instance</a> to give the thing a try and see what it’s all about. (Turns out it’s about chat! Amazing!)</p> <p>Naturally, there have been questions, so let me try and answer the most frequently asked ones here. If you have a question that isn’t answered here, please <a href="https://bsky.app/profile/hmans.dev" rel="nofollow">get in touch via Bluesky</a>.</p> <h3>Is Chatto real?</h3> <p>It absolutely is! Well, at least I think it is! <a href="https://chat.chatto.run" rel="nofollow">Give it a try</a> and see for yourself. And maybe report back to me. I can never be too sure.</p> <p>(Yes, this was a real question that I got asked. Multiple times.)</p> <h3>Where is the source?</h3> <p>As of today, the repository is still closed. I’m working on opening things up soon, and would like to ask you for just a little bit more patience while I’m getting things into place.</p> <h3>Where are the binaries?</h3> <p>They will become available as soon as the repository is opened (see above).</p> <h3>Where is <em>insert feature here</em>? You should do <em>thing</em>. Why doesn’t it do <em>other thing</em>? This <em>expletive</em> <em>expletive</em>, <em>expletive</em>, you <em>expletive</em></h3> <p>I appreciate all the feedback I’m getting on Chatto, but please do keep in mind that it’s still very early days. Chatto is still deeply alpha quality software, with many features missing entirely, or only being implemented in a basic first version. I’m working my butt off to make Chatto the best chat app on the planet, but this takes time, and whatever potential shortcuts are out there will be to nobody’s benefit.</p> <p>Having said that, I know it’s on me to communicate the state of the app and its roadmap more clearly. Expect some news on this soon.</p> <h3>Is Chatto federated?</h3> <p>Not in the sense that you know federation from systems like Mastodon or Matrix. Any style of federation that ingests one instance’s data into another is 100% a non-feature for Chatto, as I’m trying to put its focus on privacy, safety, and compliance.</p> <p>There are, however, plans for opt-in <em>identity</em> federation that will make it easier to have a single shared identity across separate instances (and yes, the client will allow you to connect to multiple instances at once.)</p> <p>I want to make Chatto <em>feel</em> like a big, tightly integrated platform — while leaving it up to each instance’s operator to decide how deeply they want to participate in it. This is a hard (but fun) problem to tackle. But Chatto is not going to be some kind of decentralized social network type thing, or establish some sort of new protocol, or whatever. There are enough apps out there that do exactly that.</p> <h3>Can I self-host Chatto?</h3> <p>Absolutely, and you’re going to freaking love it!</p> <p>As soon as source and binaries are available, you can easily plop it on your favorite VM and that’s it. Chatto is extremely lightweight and will easily serve most self-hosted communities from a single process, but if you want things to be slightly more scalable and, frankly, <em>cooler</em>, we’ll provide the usual pile of Docker images and Compose configurations, Helm charts, and whatnot.</p> <p>Binaries will be available for Linux, macOS, and, ironically, Windows, both x86_64 and arm64 each. If you host Chatto on Windows ARM, I want to get to know you, you incredible bastard.</p> <h3>What is Chatto Cloud?</h3> <p>Chatto Cloud is an upcoming hosted services that you can use instead of self-hosting your instance. In Chatto Cloud you’ll get a managed instance with zero-downtime upgrades, daily backups and other goodies (depending on plan).</p> <p>Cloud and self-hosted instances will be functionally equivalent, and you will be able to migrate from one to the other at any point.</p> <p>Chatto Cloud is slated for launch this Summer. Stay tuned for news.</p> <h3>Does Chatto have video/voice calls?</h3> <p>Absolutely! Do I look like an amateur to you? Pffssshh. And yeah, they also work in self-hosted instances.</p> <h3>Will there be native apps for mobile and/or desktop?</h3> <p>For the time being, Chatto fully leans on Progressive Web Apps (PWA), which have come a very long way in the last few years, and other modern Web APIs. Push Notifications are sent through Web Push, video calls will use WebRTC, notification sounds are synthesized using the Web Audio API, and so on.</p> <p>Will there eventually be native apps? I can’t say, but never say never. But as of today, they’re not on the roadmap.</p> <h3>Will it suport ATProto/ActivityPub/XMPP/IRC?</h3> <p>Not beyond allowing signing in with (some of) these as another identity factor.</p> <h3>Is there going to be age verification?!</h3> <p>Wait, what? <em>Oh!</em> I know why you’re asking.</p> <p>Okay, look. Here’s the thing. We all know that things are getting stricter out there. If you self-host your Chatto instance, what you do or won’t do with it is entirely your business, but let’s be real; any large platform (especially if it’s hosted in Europe) will eventually come under scrutiny, may face this issue, and have to comply. Will Chatto Cloud at some point in the future have to perform age verification? I have no idea, and I sincerely hope it doesn’t.</p> <p>But here’s the thing: this here is one of the major reasons why I’m designing Chatto around <em>a sea of separate instances</em>, instead of running one large mega community instance for everyone (I have more things to say about this, but will leave that to a separate blog post.) If push comes to shove, and Chatto Cloud needs to start doing things you don’t agree with, you can always take your instance off Chatto Cloud and move it to your own server. (For reasons that should be obvious I hope that this will never need to happen. I have a family to feed!)</p> <h3>Chatto is cool, how can I help?</h3> <p>Awww, thank you! As of today, the best thing you can do is to hop over and join us on the <a href="https://chat.chatto.run/" rel="nofollow">Community instance</a> to hang out, report bugs, and give feedback. Happy to have you there!</p><!--]-->]]></content:encoded>
            <author>Hendrik Mans</author>
        </item>
        <item>
            <title><![CDATA[The Chatto Timeline]]></title>
            <link>https://hmans.dev/blog/chatto-timeline</link>
            <guid isPermaLink="false">https://hmans.dev/blog/chatto-timeline</guid>
            <pubDate>Sat, 31 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Where do we go from here? (It must be bunnies.)]]></description>
            <content:encoded><![CDATA[<!--[--><p>I’m building <strong>Chatto</strong>, a fully-featured group chat application that also happens to be simple and free to self-host. I recently <a href="https://hmans.dev/blog/chatto-dev-instance">announced the availability of a public development instance</a> that you can try out, and the response has been really encouraging, with people reporting bugs and giving feedback, which I appreciate tremendously.</p> <p>To give everyone a better idea of how things are going to progress from here, I wanted to share a high-level timeline for this project. (I’m also working on a feature roadmap, but that will be a separate post.)</p> <h3>The Timeline</h3> <p>Notice that I haven’t attached any dates to the milestones below; but generally speaking, I expect this timeline to span the better part of 2026.</p> <div class="flex flex-col gap-8"><div class="flex flex-row content-trim"><div class="w-8 h-8 mt-1 mr-4 shrink-0 shadow-md/50 bg-linear-to-br from-green-400 to-green-600 icon-[mdi--check-bold]"></div> <div class="content-trim"><p><strong>January 2026: Launch of Development Instance!</strong> <s><a href="https://dev.chatto.run" target="_blank">There's now a development instance</a> you
				can log in to and play around with. It's <strong>ephemeral</strong> on purpose, meaning that
				all data will be <strong>deleted on March 1st, 2026</strong>.</s> I'm doing this because breaking changes are still likely to happen, and I can't afford to build
			data migrations this early in the project. (Chatto doesn't use a traditional SQL database under
			the hood, and data migrations are a little more involved.)</p><!----></div></div><!----> <div class="flex flex-row content-trim"><div class="w-8 h-8 mt-1 mr-4 shrink-0 shadow-md/50 bg-linear-to-br from-green-400 to-green-600 icon-[mdi--check-bold]"></div> <div class="content-trim"><p><strong>Official Chatto Instance:</strong> The official Chatto community instance is now live
			at <a href="https://chat.chatto.run" target="_blank">chat.chatto.run</a>! Drop by and say hello!</p><!----></div></div><!----> <div class="flex flex-row content-trim"><div class="w-8 h-8 mt-1 mr-4 shrink-0 shadow-md/50 bg-linear-to-br from-gray-300 to-gray-500 icon-[mdi--circle-outline]"></div> <div class="content-trim"><p><strong>Launch of Chatto Cloud:</strong> A hosted service that lets you have your own private Chatto
			instance (with its own user accounts, spaces and rooms) for a reasonable monthly fee. Use this if
			you want early access to Chatto (before the binaries and source code become available), or just
			generally prefer to throw money my way instead of self-hosting it yourself.</p> <p>(Unlike the test instance mentioned earlier, you <strong>will</strong> be able to migrate your data
			to a self-hosted instance later! Also, of course, vice versa.)</p><!----></div></div><!----> <div class="flex flex-row content-trim"><div class="w-8 h-8 mt-1 mr-4 shrink-0 shadow-md/50 bg-linear-to-br from-gray-300 to-gray-500 icon-[mdi--circle-outline]"></div> <div class="content-trim"><p><strong>Binaries Available:</strong> This is the one you're waiting for if you want to self-host
			Chatto. You can now download pre-compiled binaries for your favorite operating system, and there's
			some basic documentation on how to get you started. (Don't worry; unlike other apps in this space,
			Chatto is designed to be almost comically easy to self-host.)</p><!----></div></div><!----> <div class="flex flex-row content-trim"><div class="w-8 h-8 mt-1 mr-4 shrink-0 shadow-md/50 bg-linear-to-br from-gray-300 to-gray-500 icon-[mdi--circle-outline]"></div> <div class="content-trim"><p><strong>Open Source Release:</strong> I'm opening the Chatto repository and making its source code
			available. You can now build Chatto from source, contribute to its development, or just audit the
			code for security and privacy.</p><!----></div></div><!----></div><!----> <p>I realize that if you’re eager to self-host Chatto or dive into the source code, this timeline may seem a bit daunting. But please don’t be frustrated; I simply want to make sure that the foundations are solid in order to prevent headaches and disappointments down the road.</p> <h3>Get in touch!</h3> <p>Having said this, <strong>I’m looking for companies and organizations</strong> — Open Source projects in particular! — who would be interested in early access to Chatto Cloud or even pre-release binaries in exchange for feedback, bug reports, and just general testing. If this sounds like something you’d be interested in, <a href="mailto:contact@chatto.run">please get in touch</a>!</p> <p>If you just want to follow along, you can <a href="https://hmans.dev/blog/chatto-dev-instance">come hang out on the dev instance</a>, <a href="https://bsky.app/profile/hmans.dev" rel="nofollow">follow me on Bluesky</a> for frequent development updates, or sign up for email notifications to get the big announcements only:</p> <form action="https://buttondown.com/api/emails/embed-subscribe/hmans" method="post" class="text-center p-6"><div class="flex flex-row gap-2 justify-center"><input type="email" class="input input-lg" name="email" id="bd-email" placeholder="Enter your email"/> <input type="submit" class="btn btn-primary btn-lg" value="Subscribe"/></div> <p class="text-sm text-base-content/40 mt-2">Powered by <a href="https://buttondown.com/refer/hmans" target="_blank" class="link text-inherit">Buttondown</a>.</p></form><!----><!--]-->]]></content:encoded>
            <author>Hendrik Mans</author>
        </item>
        <item>
            <title><![CDATA[Chatto Development Instance Available]]></title>
            <link>https://hmans.dev/blog/chatto-dev-instance</link>
            <guid isPermaLink="false">https://hmans.dev/blog/chatto-dev-instance</guid>
            <pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[If you've been eager to try out Chatto, here's your chance!]]></description>
            <content:encoded><![CDATA[<!--[--><p>There used to be a blog post here about the newly launched and very ephemeral development instance of Chatto. This instance has meanwhile been superseded by the official Chatto community instance, which you can join here:</p> <a href="https://chat.chatto.run" target="_blank" class="no-underline block p-6 bg-gray-900/30 border border-white/20 text-center my-6 text-2xl rounded-3xl shadow-md font-mono">chat.chatto.run</a><!--]-->]]></content:encoded>
            <author>Hendrik Mans</author>
        </item>
        <item>
            <title><![CDATA[Introducing Chatto]]></title>
            <link>https://hmans.dev/blog/chatto</link>
            <guid isPermaLink="false">https://hmans.dev/blog/chatto</guid>
            <pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[I'm building an Open Source group chat application that's simple to self-host, familiar to use, and easy to customize.]]></description>
            <content:encoded><![CDATA[<!--[--><p>I’m back with a new project: <strong>Chatto</strong>, a group chat application that’s simple to self-host, familiar to use, and licensed under Apache-2.0.</p> <p>Chatto is similar to the group chat app you’re probably using at work, but better. The state of group chat applications has long been a source of frustration for me; the existing options are either prohibitively expensive, have terrible usability, or both. The ones that are available to self-host tend to be prohibitively complex, or come with a category of license that makes them too risky to use in many situations.</p> <p>Chatto aims to be the one option you’ll actually <em>enjoy</em> using. Let me give you a quick overview.</p> <h3>Familiar Interface Paradigm</h3> <p>First of all, Chatto’s user interface is largely inspired by the most popular options on the market today; if you’ve used Slack, Teams, or Discord, you’ll feel right at home. I think it’s a good UI paradigm and wanted Chatto to feel instantly familiar.</p> <p>Here’s what it currently looks like:</p> <picture><source srcset="https://hmans.dev/_app/immutable/assets/chatto.CFhTOTiz.avif 1376w, https://hmans.dev/_app/immutable/assets/chatto.XoBGxV-Q.avif 2752w" type="image/avif"/><source srcset="https://hmans.dev/_app/immutable/assets/chatto.Dxg7FlZc.webp 1376w, https://hmans.dev/_app/immutable/assets/chatto.BAX3EWPp.webp 2752w" type="image/webp"/><source srcset="https://hmans.dev/_app/immutable/assets/chatto.CfI3ab1y.png 1376w, https://hmans.dev/_app/immutable/assets/chatto.Baosd00L.png 2752w" type="image/png"/><img alt="A screenshot of Chatto" src="https://hmans.dev/_app/immutable/assets/chatto.Baosd00L.png" width="2752" height="2348"/></picture> <h3>Modular and Extensible</h3> <p>Chatto is designed both to be a chat application, but also a chat <em>platform</em>. It comes with not one, but <em>two</em> APIs that can be used to extend its functionality:</p> <ul><li><strong>Client API</strong>: This API allows you to build custom clients, interfaces and integrations. It’s the same API that the built-in web UI uses, and provides access to all chat functionality, including real-time updates over WebSockets. This is the one you’ll use if you want to build a bot, a custom integration, or even a completely new client.</li> <li><strong>Extension API</strong>: This server-side API allows you to extend Chatto’s functionality. Some of Chatto’s own functionality is implemented this way; for example, Chatto comes with a basic built-in full-text search module that doesn’t use a separate database; if you want, you can disable and replace it with a different implementation (for example one that dumps all data into an Elasticsearch cluster.)</li></ul> <h3>Trivially Self-Hostable</h3> <p>One of the top priorities for Chatto has been to make it <strong>as easy to self-host as possible</strong>. While other solutions require you to set up an entire army of system dependencies (like databases, key/value stores, message brokers, etc.), <strong>Chatto is just a single binary</strong> that you can upload and run on the server of your choice. (It will even terminate SSL/TLS for you using an automatically managed Let’s Encrypt certificate, if you want it to!)</p> <p>But Chatto is also designed to be <strong>highly scalable</strong>; even just running a single instance of it on very modest hardware will likely be sufficient for most use cases (I don’t have any hard numbers yet, but I’m gunning for thousands of concurrent users served by a single Chatto process.)</p> <p>If you want <strong>High Availability</strong>, you can connect multiple Chatto instances to form a cluster, giving you replication of all data and self-healing failover capabilities.</p> <p>The binary is available for macOS, Windows and Linux, with the latter supporting both x86_64 and ARM64 architectures. Yes, you can run Chatto on your Raspberry Pi!</p> <h3>Hosted Platform</h3> <p>I’m also in the process of setting up a platform that can host your Chatto instance for you if you would rather throw money my way (which I would very much appreciate, because this helps support ongoing development).</p> <p>The hosted platform will provide options for <strong>free public spaces</strong> for your friends or your community, as well as <strong>paid private instances</strong> for teams and businesses. (I will talk more about <em>instances</em> and <em>spaces</em> in future updates.)</p> <h3>A True Open Source License</h3> <p>The core Chatto application is being <strong>developed as Open Source software</strong>, with the source code becoming available some time in 2026 under the permissive Apache-2.0 license. This will allow you to use and modify Chatto freely, even in commercial settings. There will be no restrictions on usage. Host Chatto for as many or as few users as you like.</p> <p>Certain pieces of functionality that are primarily intended for Enterprise use (like SSO integrations or certain compliance features) may become available as separate software projects under a different (commercial) license, with free licenses available to non-commercial users and Open Source projects.</p> <h3>Current Status</h3> <p>I’ve been working on Chatto for a few months now, and things are shaping up nicely. Some important table stakes features are still missing (like video/voice calls, searching, etc.), and there are some ideas for chat UIs that I want to explore but haven’t.</p> <p>Over the next few months, I will occasionally fire up test servers and invite people to drop by and try things out; <a href="https://bsky.app/profile/hmans.dev" rel="nofollow">follow me on Bluesky</a> to find out when that happens, or sign up for email updates below.</p> <h3>Get Email Updates</h3> <p>You’re very welcome to <strong>sign up for email notifications</strong> about Chatto’s progress (very low volume; expect around one email per month.) This is where I will announce test server availability, releases, and other important updates.</p> <form action="https://buttondown.com/api/emails/embed-subscribe/hmans" method="post" class="text-center p-6"><div class="flex flex-row gap-2 justify-center"><input type="email" class="input input-lg" name="email" id="bd-email" placeholder="Enter your email"/> <input type="submit" class="btn btn-primary btn-lg" value="Subscribe"/></div> <p class="text-sm text-base-content/40 mt-2">Powered by <a href="https://buttondown.com/refer/hmans" target="_blank" class="link text-inherit">Buttondown</a>.</p></form><!----><!--]-->]]></content:encoded>
            <author>Hendrik Mans</author>
        </item>
    </channel>
</rss>