<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>NKryp blog</title><description>Notes on building, signing and shipping software. Written by the maker, in first person.</description><link>https://nkryp.dev/</link><item><title>Counting downloads from Caddy access logs</title><link>https://nkryp.dev/blog/counting-downloads-from-caddy-access-logs/</link><guid isPermaLink="true">https://nkryp.dev/blog/counting-downloads-from-caddy-access-logs/</guid><description>Turning JSON access logs into download numbers, with no cookies and no IP addresses on disk.</description><pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate><category>caddy</category><category>dotnet</category><category>privacy</category></item><item><title>Self-hosting update feeds with Caddy</title><link>https://nkryp.dev/blog/self-hosting-update-feeds/</link><guid isPermaLink="true">https://nkryp.dev/blog/self-hosting-update-feeds/</guid><description>Droplet checks for updates in one static JSON file. There is no update server and no database. This post shows how Caddy serves that file, and why two cache headers do most of the work.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate><category>caddy</category><category>tauri</category><category>self-hosting</category></item><item><title>Signing Tauri updates in GitHub Actions</title><link>https://nkryp.dev/blog/signing-tauri-updates-in-github-actions/</link><guid isPermaLink="true">https://nkryp.dev/blog/signing-tauri-updates-in-github-actions/</guid><description>Sign every release in CI, and keep the private key off the server.</description><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate><category>tauri</category><category>ci</category><category>security</category></item><item><title>Why Kubo is not another Lens</title><link>https://nkryp.dev/blog/why-kubo-is-not-another-lens/</link><guid isPermaLink="true">https://nkryp.dev/blog/why-kubo-is-not-another-lens/</guid><description>The same Kubernetes features, with far less interface. What I left out, and why.</description><pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate><category>kubernetes</category><category>desktop</category><category>ui</category></item><item><title>Wails 3 and Tauri 2, side by side</title><link>https://nkryp.dev/blog/wails-3-and-tauri-2-side-by-side/</link><guid isPermaLink="true">https://nkryp.dev/blog/wails-3-and-tauri-2-side-by-side/</guid><description>Two ways to ship a small desktop app: build size, start-up time, and the parts that hurt.</description><pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate><category>wails</category><category>tauri</category><category>desktop</category></item><item><title>Range requests and honest download stats</title><link>https://nkryp.dev/blog/range-requests-and-honest-download-stats/</link><guid isPermaLink="true">https://nkryp.dev/blog/range-requests-and-honest-download-stats/</guid><description>A resumed download is one download. How to count it that way.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate><category>caddy</category><category>http</category><category>privacy</category></item><item><title>Making Kinema feel instant</title><link>https://nkryp.dev/blog/making-kinema-feel-instant/</link><guid isPermaLink="true">https://nkryp.dev/blog/making-kinema-feel-instant/</guid><description>Previews, prefetching, and a library that never shows a loading screen.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><category>kinema</category><category>performance</category><category>self-hosting</category></item></channel></rss>