The best Hacker News stories from Show from the past day

Go back

Latest posts:

Show HN: A small, simple music theory library in C99

Show HN: Mines.fyi – all the mines in the US in a leaflet visualization

I downloaded the MSHA's (Mine Safety and Health Administration) public datasets and create a visualization of all the mines in the US complete with the operators and details on each site.

Show HN: A native macOS client for Hacker News, built with SwiftUI

Hey HN! I built a native macOS desktop client for Hacker News and I'm open-sourcing it under the MIT license.<p>GitHub: <a href="https://github.com/IronsideXXVI/Hacker-News" rel="nofollow">https://github.com/IronsideXXVI/Hacker-News</a><p>Download (signed & notarized DMG, macOS 14.0+): <a href="https://github.com/IronsideXXVI/Hacker-News/releases" rel="nofollow">https://github.com/IronsideXXVI/Hacker-News/releases</a><p>Screenshots: <a href="https://github.com/IronsideXXVI/Hacker-News#screenshots" rel="nofollow">https://github.com/IronsideXXVI/Hacker-News#screenshots</a><p>I spend a lot of time reading HN — I wanted something that felt like a proper Mac app: a sidebar for browsing stories, an integrated reader for articles, and comment threading — all in one window. Essentially, I wanted HN to feel like a first-class citizen on macOS, not a website I visit.<p>What it does:<p>- Split-view layout — stories in a sidebar on the left, articles and comments on the right, using the standard macOS NavigationSplitView pattern.<p>- Built-in ad blocking — a precompiled WKContentRuleList blocks 14 major ad networks (DoubleClick, Google Syndication, Criteo, Taboola, Outbrain, Amazon ads, etc.) right in the WebKit layer. No extensions needed. Toggleable in settings.<p>- Pop-up blocking — kills window.open() calls. Also toggleable.<p>- HN account login — full authentication flow (login, account creation, password reset). Session is stored in the macOS Keychain, and cookies are injected into the WebView so you can upvote, comment, and submit stories while staying logged in.<p>- Bookmarks — save stories locally for offline access. Persisted with Codable serialization, searchable and filterable independently.<p>- Search and filtering — powered by the Algolia HN API. Filter by content type (All, Ask, Show, Jobs, Comments), date range (Today, Past Week, Past Month, All Time), and sort by hot or recent.<p>- Scroll progress indicator — a small orange bar at the top tracks your reading progress via JavaScript-to-native messaging.<p>- Auto-updates via Sparkle with EdDSA-signed updates served from GitHub Pages.<p>- Dark mode — respects system appearance with CSS and meta tag injection.<p>Tech details for the curious:<p>The whole app is ~2,050 lines of Swift across 16 files. It uses the modern @Observable macro (not the old ObservableObject/Published pattern), structured concurrency with async/await and withThrowingTaskGroup for concurrent batch fetching, and SwiftUI throughout — no UIKit/AppKit bridges except for the WKWebView wrapper via NSViewRepresentable.<p>Two APIs power the data: the official HN Firebase API for individual item/user fetches, and the Algolia Search API for feeds, filtering, and search. The Algolia API is surprisingly powerful for this — it lets you do date-range filtering, pagination, and full-text search that the Firebase API doesn't support.<p>CI/CD:<p>The release pipeline is a single GitHub Actions workflow (467 lines) that handles the full macOS distribution story: build and archive, code sign with Developer ID, notarize with Apple (with a 5-retry staple loop for ticket propagation delays), create a custom DMG with AppleScript-driven icon positioning, sign and notarize the DMG, generate an EdDSA Sparkle signature, create a GitHub Release, and deploy an updated appcast.xml to GitHub Pages.<p>Getting macOS code signing and notarization working in CI was honestly the hardest part of this project. If anyone is distributing a macOS app outside the App Store via GitHub Actions, I'm happy to answer questions — the workflow is fully open source.<p>The entire project is MIT licensed. PRs and issues welcome: <a href="https://github.com/IronsideXXVI/Hacker-News" rel="nofollow">https://github.com/IronsideXXVI/Hacker-News</a><p>I'd love feedback — especially on features you'd want to see. Some ideas I'm considering: keyboard-driven navigation (j/k to move between stories), a reader mode that strips articles down to text, and notification support for replies to your comments.

Show HN: A Lisp where each function call runs a Docker container

Show HN: A Lisp where each function call runs a Docker container

Show HN: Mini-Diarium - An encrypted, local, cross-platform journaling app

Show HN: Mini-Diarium - An encrypted, local, cross-platform journaling app

Show HN: Ghostty-based terminal with vertical tabs and notifications

I run a lot of Claude Code and Codex sessions in parallel. I was using Ghostty with a bunch of split panes, and relying on native macOS notifications to know when an agent needed me. But Claude Code's notification body is always just "Claude is waiting for your input" with no context, and with enough tabs open, I couldn't even read the titles anymore.<p>I tried a few coding orchestrators but most of them were Electron/Tauri apps and the performance bugged me. I also just prefer the terminal since GUI orchestrators lock you into their workflow. So I built cmux as a native macOS app in Swift/AppKit. It uses libghostty for terminal rendering and reads your existing Ghostty config for themes, fonts, colors, and more.<p>The main additions are the sidebar and notification system. The sidebar has vertical tabs that show git branch, working directory, listening ports, and the latest notification text for each workspace. The notification system picks up terminal sequences (OSC 9/99/777) and has a CLI (cmux notify) you can wire into agent hooks for Claude Code, OpenCode, etc. When an agent is waiting, its pane gets a blue ring and the tab lights up in the sidebar, so I can tell which one needs me across splits and tabs. Cmd+Shift+U jumps to the most recent unread.<p>The in-app browser has a scriptable API ported from agent-browser [1]. Agents can snapshot the accessibility tree, get element refs, click, fill forms, evaluate JS, and read console logs. You can split a browser pane next to your terminal and have Claude Code interact with your dev server directly.<p>Everything is scriptable through the CLI and socket API – create workspaces/tabs, split panes, send keystrokes, open URLs in the browser.<p>Demo video: <a href="https://www.youtube.com/watch?v=i-WxO5YUTOs" rel="nofollow">https://www.youtube.com/watch?v=i-WxO5YUTOs</a><p>Repo (AGPL): <a href="https://github.com/manaflow-ai/cmux" rel="nofollow">https://github.com/manaflow-ai/cmux</a><p>[1] <a href="https://github.com/vercel-labs/agent-browser" rel="nofollow">https://github.com/vercel-labs/agent-browser</a>

Show HN: Ghostty-based terminal with vertical tabs and notifications

I run a lot of Claude Code and Codex sessions in parallel. I was using Ghostty with a bunch of split panes, and relying on native macOS notifications to know when an agent needed me. But Claude Code's notification body is always just "Claude is waiting for your input" with no context, and with enough tabs open, I couldn't even read the titles anymore.<p>I tried a few coding orchestrators but most of them were Electron/Tauri apps and the performance bugged me. I also just prefer the terminal since GUI orchestrators lock you into their workflow. So I built cmux as a native macOS app in Swift/AppKit. It uses libghostty for terminal rendering and reads your existing Ghostty config for themes, fonts, colors, and more.<p>The main additions are the sidebar and notification system. The sidebar has vertical tabs that show git branch, working directory, listening ports, and the latest notification text for each workspace. The notification system picks up terminal sequences (OSC 9/99/777) and has a CLI (cmux notify) you can wire into agent hooks for Claude Code, OpenCode, etc. When an agent is waiting, its pane gets a blue ring and the tab lights up in the sidebar, so I can tell which one needs me across splits and tabs. Cmd+Shift+U jumps to the most recent unread.<p>The in-app browser has a scriptable API ported from agent-browser [1]. Agents can snapshot the accessibility tree, get element refs, click, fill forms, evaluate JS, and read console logs. You can split a browser pane next to your terminal and have Claude Code interact with your dev server directly.<p>Everything is scriptable through the CLI and socket API – create workspaces/tabs, split panes, send keystrokes, open URLs in the browser.<p>Demo video: <a href="https://www.youtube.com/watch?v=i-WxO5YUTOs" rel="nofollow">https://www.youtube.com/watch?v=i-WxO5YUTOs</a><p>Repo (AGPL): <a href="https://github.com/manaflow-ai/cmux" rel="nofollow">https://github.com/manaflow-ai/cmux</a><p>[1] <a href="https://github.com/vercel-labs/agent-browser" rel="nofollow">https://github.com/vercel-labs/agent-browser</a>

Show HN: A physically-based GPU ray tracer written in Julia

We ported pbrt-v4 to Julia and built it into a Makie backend. Any Makie plot can now be rendered with physically-based path tracing.<p>Julia compiles user-defined physics directly into GPU kernels, so anyone can extend the ray tracer with new materials and media - a black hole with gravitational lensing is ~200 lines of Julia.<p>Runs on AMD, NVIDIA, and CPU via KernelAbstractions.jl, with Metal coming soon.<p>Demo scenes: github.com/SimonDanisch/RayDemo

Show HN: A physically-based GPU ray tracer written in Julia

We ported pbrt-v4 to Julia and built it into a Makie backend. Any Makie plot can now be rendered with physically-based path tracing.<p>Julia compiles user-defined physics directly into GPU kernels, so anyone can extend the ray tracer with new materials and media - a black hole with gravitational lensing is ~200 lines of Julia.<p>Runs on AMD, NVIDIA, and CPU via KernelAbstractions.jl, with Metal coming soon.<p>Demo scenes: github.com/SimonDanisch/RayDemo

Show HN: Micasa – track your house from the terminal

micasa is a terminal UI that helps you track home stuff, in a single SQLite file. No cloud, no account, no subscription. Backup with cp.<p>I built it because I was tired of losing track of everything in notes apps, and "I'll remember that"s. When do I need to clean the dishwasher filter? What's the best quote for a complete overhaul of the backyard. Oops, found some mold behind the trim, need to address that ASAP. That sort of stuff.<p>Another reason I made micasa was to build a (hopefully useful) low-stakes personal project where the code was written entirely by AI. I still review the code and click the merge button, but 99% of the programming was done with an agent.<p>Here are some things I think make it worth checking out:<p>- Vim-style modal UI. Nav mode to browse, edit mode to change. Multicolumn sort, fuzzy-jump to columns, pin-and-filter rows, hide columns you don't need, drill into related records (like quotes for a project). Much of the spirit of the design and some of the actual design choices is and are inspired by VisiData. You should check that out too. - Local LLM chat. Definitely a gimmick, but I am trying preempt "Yeah, but does it AI?"-style conversations. This is an optional feature and you can simply pretend it doesn't exist. All features work without it. - Single-file SQLite-based architecture. Document attachments (manuals, receipts, photos) are stored as BLOBs in the same SQLite database. One file is the whole app state. If you think this won't scale, you're right. It's pretty damn easy to work with though. - Pure Go, zero CGO. Built on Charmbracelet for the TUI and GORM + go-sqlite for the database. Charm makes pretty nice TUIs, and this was my first time using it.<p>Try it with sample data: go install github.com/cpcloud/micasa/cmd/micasa@latest && micasa --demo<p>If you're insane you can also run micasa --demo --years 1000 to generate 1000 years worth of demo data. Not sure what house would last that long, but hey, you do you.

Show HN: Micasa – track your house from the terminal

micasa is a terminal UI that helps you track home stuff, in a single SQLite file. No cloud, no account, no subscription. Backup with cp.<p>I built it because I was tired of losing track of everything in notes apps, and "I'll remember that"s. When do I need to clean the dishwasher filter? What's the best quote for a complete overhaul of the backyard. Oops, found some mold behind the trim, need to address that ASAP. That sort of stuff.<p>Another reason I made micasa was to build a (hopefully useful) low-stakes personal project where the code was written entirely by AI. I still review the code and click the merge button, but 99% of the programming was done with an agent.<p>Here are some things I think make it worth checking out:<p>- Vim-style modal UI. Nav mode to browse, edit mode to change. Multicolumn sort, fuzzy-jump to columns, pin-and-filter rows, hide columns you don't need, drill into related records (like quotes for a project). Much of the spirit of the design and some of the actual design choices is and are inspired by VisiData. You should check that out too. - Local LLM chat. Definitely a gimmick, but I am trying preempt "Yeah, but does it AI?"-style conversations. This is an optional feature and you can simply pretend it doesn't exist. All features work without it. - Single-file SQLite-based architecture. Document attachments (manuals, receipts, photos) are stored as BLOBs in the same SQLite database. One file is the whole app state. If you think this won't scale, you're right. It's pretty damn easy to work with though. - Pure Go, zero CGO. Built on Charmbracelet for the TUI and GORM + go-sqlite for the database. Charm makes pretty nice TUIs, and this was my first time using it.<p>Try it with sample data: go install github.com/cpcloud/micasa/cmd/micasa@latest && micasa --demo<p>If you're insane you can also run micasa --demo --years 1000 to generate 1000 years worth of demo data. Not sure what house would last that long, but hey, you do you.

Show HN: Pg-typesafe – Strongly typed queries for PostgreSQL and TypeScript

Throughout my career, I tried many tools to query PostgreSQL, and in the end, concluded that for what I do, the simplest is almost always the best: raw SQL queries.<p>Until now, I typed the results manually and relied on tests to catch problems. While this is OK in e.g., GoLang, it is quite annoying in TypeScript. First, because of the more powerful type system (it's easier to guess that updated_at is a date than it is to guess whether it's nullable or not), second, because of idiosyncrasies (INT4s are deserialised as JS numbers, but INT8s are deserialised as strings).<p>So I wrote pg-typesafe, with the goal of it being the less burdensome: you call queries exactly the same way as you would call node-pg, and they are fully typed.<p>It's very new, but I'm already using it in a large-ish project, where it found several bugs and footguns, and also allowed me to remove many manual type definitions.

Show HN: VectorNest responsive web-based SVG editor

I’ve just released VectorNest — an open-source, browser-based SVG editor.<p>If you have an SVG and need quick edits (paths, alignment, small fixes, animations, LLM assistance) without installing software, this is for you.<p>Try the demo: <a href="https://ekrsulov.github.io/vectornest/" rel="nofollow">https://ekrsulov.github.io/vectornest/</a> GitHub repo: <a href="https://github.com/ekrsulov/vectornest" rel="nofollow">https://github.com/ekrsulov/vectornest</a><p>Feedback, issues and contributions are welcome.

Show HN: VectorNest responsive web-based SVG editor

I’ve just released VectorNest — an open-source, browser-based SVG editor.<p>If you have an SVG and need quick edits (paths, alignment, small fixes, animations, LLM assistance) without installing software, this is for you.<p>Try the demo: <a href="https://ekrsulov.github.io/vectornest/" rel="nofollow">https://ekrsulov.github.io/vectornest/</a> GitHub repo: <a href="https://github.com/ekrsulov/vectornest" rel="nofollow">https://github.com/ekrsulov/vectornest</a><p>Feedback, issues and contributions are welcome.

Show HN: CEL by Example

Show HN: CEL by Example

Show HN: Rebrain.gg – Doom learn, don't doom scroll

Hi HN,<p>I built <a href="https://rebrain.gg" rel="nofollow">https://rebrain.gg</a>. It's a website which is intended to help you learn new things.<p>I built it for two reasons:<p>1. To play around with different ways of interacting with a LLM. Instead of a standard chat conversation, the LLM returns question forms the user can directly interact with (and use to continue the conversation with the LLM).<p>2. Because I thought it would be cool to have a site dedicated to interactive educational content instead of purely consuming content (which I do too much).<p>An example of a (useful-for-me) interactive conversation is: <a href="https://rebrain.gg/conversations/6" rel="nofollow">https://rebrain.gg/conversations/6</a>. In it I'm learning how to use the `find` bash command. (Who ever knew to exclude a directory from a look-up you need to do `find . -path <path> -exclude -o <what you want to look for>`, where `-o` stands for "otherwise"!)<p>Still very early on, so interested in and open to any feedback.<p>Thanks!

Show HN: Rebrain.gg – Doom learn, don't doom scroll

Hi HN,<p>I built <a href="https://rebrain.gg" rel="nofollow">https://rebrain.gg</a>. It's a website which is intended to help you learn new things.<p>I built it for two reasons:<p>1. To play around with different ways of interacting with a LLM. Instead of a standard chat conversation, the LLM returns question forms the user can directly interact with (and use to continue the conversation with the LLM).<p>2. Because I thought it would be cool to have a site dedicated to interactive educational content instead of purely consuming content (which I do too much).<p>An example of a (useful-for-me) interactive conversation is: <a href="https://rebrain.gg/conversations/6" rel="nofollow">https://rebrain.gg/conversations/6</a>. In it I'm learning how to use the `find` bash command. (Who ever knew to exclude a directory from a look-up you need to do `find . -path <path> -exclude -o <what you want to look for>`, where `-o` stands for "otherwise"!)<p>Still very early on, so interested in and open to any feedback.<p>Thanks!

1 2 3 ... 942 943 944 >