finds.dev← search

// the find

openRin/Rin

★ 3,094 · TypeScript · MIT · updated Aug 2026

🌸Publish faster with an edge-native blog powered by Cloudflare Workers, D1, and R2

Rin is a self-hostable blog platform that runs entirely on Cloudflare's stack: Workers for compute, D1 for the database, R2 for images. It's aimed at developers who want a personal blog with GitHub OAuth login and don't want to manage a server or pay for traditional hosting.

The monorepo shares TypeScript types between client and server through an @rin/api package, so API contract drift gets caught at compile time instead of runtime. The CLI (cli/src/commands) handles D1 database creation, migrations, and split frontend/backend deploys in one command, which is more than most self-hosted blog projects bother with. Test coverage is real, not decorative — separate client/server suites, coverage reporting, and CI running type checks plus formatting on every push. Small but useful details are actually implemented: per-article autosave with draft isolation, custom slugs, and a blogroll checker that pings friend links every 20 minutes instead of just storing them.

You're fully locked into Cloudflare — D1's SQLite dialect and R2's S3-compatible-but-not-quite API mean there's no realistic path off the platform without rewriting the storage and data layer. D1 itself still has real constraints (no large-scale joins, storage ceilings) that won't surface until the blog has years of content. Migrations are raw numbered SQL files in server/sql rather than a tracked schema tool like Drizzle Kit or Atlas, so schema history is whatever discipline the contributors maintain by hand. The comment system's moderation is just delete — no spam filtering, rate limiting, or approval queue, which will matter the moment a public blog gets indexed and scraped.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →