Ben Perrine

Client-side cryptography, native desktop apps in Rust — most recently retrofitting end-to-end encryption onto Mattermost.

Since 2025 I've been working independently on client-side cryptography that keeps plaintext off the server (AES-256-GCM, X25519 via Web Crypto), native desktop apps on Tauri 2 and Rust, and a public Mattermost fork with retrofitted end-to-end encryption. Before that, four years at ChiroTouch building production frontend code and developer tooling the team adopted. Day to day I work in TypeScript, Rust, Python, and Go.

Open to new engineering roles benedictperrine@gmail.com

self.cathedral.gg

Built for a threat model where the server may be hostile: it stores ciphertext only, and a stolen session cookie decrypts nothing.

60k+ LOC · 2,516 tests · live in production

SvelteKit 2 · Postgres · Drizzle · Web Crypto API · Better Auth · pg-boss

Read the writeup

Vestry

Every git operation goes through libgit2 in Rust — no shelling out — so I rebuilt git's porcelain by hand. Each identity profile stays fully sandboxed.

29k LOC · 342 commits

Tauri 2 · Rust · libgit2 · Svelte 5 · tauri-specta · Tailwind v4

Read the writeup

Mattermost Encryption Fork

Mattermost assumes the server can read every message; this fork retrofits client-side end-to-end encryption onto a platform that was never designed for it.

Nearly 1,000 commits · Go + React/TypeScript · public fork

Go · React · TypeScript · Web Workers · E2E Encryption · Jest

Read the writeup

git-notifications

GitHub, GitLab, Gitea, and Forgejo all describe the same events and agree on almost nothing; this dashboard normalizes all four APIs into one notification stream.

9.4k LOC · 4 forge APIs · Cloudron-deployed

SvelteKit · Go · Chrome MV3 · Web Push · Cloudron

Read the writeup

cathedral-painter

Interactive painting from Python meant building a tile-based GPU compositor on Skia and OpenGL, because the interpreter can never be the one touching pixels.

14.7k LOC · work in progress · Python · Skia + OpenGL

Python · PySide6 · Skia · OpenGL · libvips · NumPy

Read the writeup