<?xml version="1.0" encoding="UTF-8"?><rss 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" version="2.0"><channel><title><![CDATA[Hearth Blog]]></title><description><![CDATA[Hearth Blog]]></description><link>https://hearthapp.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sun, 01 Nov 2026 19:23:21 GMT</lastBuildDate><atom:link href="https://hearthapp.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How Hearth, a free Discord alternative for Windows, is built (Electron, Postgres RLS, LiveKit)]]></title><description><![CDATA[Electron + React shell, Postgres row-level security for permissions and realtime, LiveKit for voice. What's in Hearth 1.1.0, plus honest caveats.]]></description><link>https://hearthapp.hashnode.dev/how-hearth-a-free-discord-alternative-for-windows-is-built-electron-postgres-rls-livekit</link><guid isPermaLink="true">https://hearthapp.hashnode.dev/how-hearth-a-free-discord-alternative-for-windows-is-built-electron-postgres-rls-livekit</guid><category><![CDATA[Electron]]></category><dc:creator><![CDATA[Hearth Team]]></dc:creator><pubDate>Tue, 20 Oct 2026 00:36:37 GMT</pubDate><content:encoded><![CDATA[<p><a href="https://gethearth.surge.sh">Hearth</a> is a free desktop chat app for Windows: communities with text and voice channels, DMs, one-to-one calls, camera and screen sharing, roles and moderation. Version 1.1.0 went out this week. This post is about the shape of the thing under the UI, for anyone curious how a small team builds a Discord-style app without a big infra budget.</p>
<p>Links first: <a href="https://gethearth.surge.sh">website</a> · <a href="https://github.com/starryfaye66/hearth/releases/latest">download, installer or portable exe</a> · <a href="https://gethearth.surge.sh/invite/hearth">the official Hearth community</a></p>
<p><img src="https://gethearth.surge.sh/assets/app-channel.png" alt="Hearth channel view" /></p>
<h2>The three layers</h2>
<p><strong>1. The desktop shell.</strong> Electron with a React + TypeScript renderer. One window, a left rail of communities, channels in the middle, members on the right. Light and dark themes. Lucide icons. The in-app updater polls a small JSON feed, downloads the new installer, checks its SHA-256 and swaps itself out.</p>
<p><strong>2. Data and realtime.</strong> Postgres is the source of truth, and row-level security does the permission work: whether you can read a channel, post in it, or see a DM is a policy on the table, not a check sprinkled through client code. Messages, reactions, edits, replies and read state ride Postgres change streams to every connected client, so a message typed on one machine shows up on another in well under a second with no custom socket server to run.</p>
<p><strong>3. Voice and video.</strong> WebRTC through a LiveKit server. When you click a voice channel, the app asks an edge function for a short-lived room token. The function checks that you are actually a member of that channel (or that DM) before it signs anything, so the media server never has to know about Hearth's permission model. Mute, deafen, camera, and screen or single-window share are all LiveKit tracks.</p>
<h2>What that buys a small team</h2>
<ul>
<li>No bespoke realtime server to babysit.</li>
<li>Permission bugs are mostly SQL policy bugs, which are easier to test and reason about than scattered <code>if (isAdmin)</code> checks.</li>
<li>Voice scales with LiveKit, not with us.</li>
</ul>
<h2>What's in 1.1.0 for users</h2>
<ul>
<li>Communities with categories, text and voice channels, invite links, and a Discover page for public ones</li>
<li>Reactions, replies, edits, @mentions with user cards, typing indicators</li>
<li>Friends, DMs with read state, calls with camera and screen share</li>
<li>Roles via right-click, role pills on cards, per-channel permissions (read-only announcement channels), kick/ban, moderation log</li>
<li>Welcome messages with <code>{user}</code> and <code>{server}</code> placeholders</li>
<li>Email + password sign-up with verification, or Google sign-in; a library of built-in avatars</li>
<li>Installer and portable builds, in-app updates</li>
</ul>
<p><img src="https://gethearth.surge.sh/assets/app-voice.webp" alt="Voice channel" /></p>
<h2>The honest caveats</h2>
<ul>
<li><strong>Windows only</strong> today. The stack can produce Linux and macOS builds; they are untested, so they are not shipped.</li>
<li><strong>Not code-signed yet.</strong> Windows SmartScreen will say "Windows protected your PC" on first run. More info → Run anyway. A signing certificate is on the list.</li>
<li><strong>Source is public, licence is not written yet</strong>, so "source available" is the right phrase for now, not "open source".</li>
<li>Young project, small team, rough edges. Bugs go to #bug-reports in the official community, or <a href="https://github.com/starryfaye66/hearth">GitHub</a>.</li>
</ul>
<p>If you run a small community and want something that feels like a plain, fast desktop app, give Hearth a try and tell us what breaks.</p>
]]></content:encoded></item></channel></rss>