DuckFind
The modern web, in plain HTML — for vintage browsers.
Overview
DuckFind is a self-hosted web search engine and article reader for old computers. It fetches modern, TLS-only, JavaScript-heavy web pages on the server and hands the browser clean HTML 3.2 — no CSS, no scripts — that renders on machines as old as a System 7 Mac, a Windows 3.1 box, or an Apple II with a text browser.
It grew out of a simpler goal: getting a Mac OS 9 iBook onto the modern web. A Crypto Ancienne proxy solved the HTTPS handshake, but modern pages were still far too heavy for a browser from the TLS-1.0 era to render. DuckFind does that work on the server instead — inspired by FrogFind, but an independent implementation that adds inline images, a Wayback reader, AI answers, and SSRF hardening.
Features
| Feature | What it does |
|---|---|
| Search | DuckDuckGo results reformatted as plain HTML, with pagination |
| Reader | Any page distilled to readable HTML via a Readability-style extractor — tables, multi-page stitching, challenge-page detection |
| Inline images | Proxy downscales JPEG/PNG/WebP/AVIF → GIF, with grayscale and dithered 1-bit modes |
| Wayback mode | Read pages as they were in a past year, era-consistent, original layout preserved for old pages |
| AI answers | !ai question → concise plain-text answers from Claude, rendered in HTML 3.2 (optional, cost-capped) |
| Bang shortcuts | !w Wikipedia, !wb Wayback, !r read, !weather, !define, !news |
| News portal | RSS/Atom feeds grouped into sections, merged and date-sorted |
| Plain-text mode | text/plain output for terminal browsers (MacLynx) and the oldest machines |
| Dark mode & settings | Cookie-backed prefs — text-only, low-colour images, or a site-wide dark theme |
How It Works
vintage browser ──HTTP/1.0, plain HTML── DuckFind (PHP) ──modern TLS/HTTP2── the web
The browser only ever speaks plain HTTP to DuckFind. DuckFind handles the TLS, JavaScript-free fetching, content extraction, image conversion, and character-set normalization, then emits minimal HTML the old browser can render. Because it fetches arbitrary user-supplied URLs, it’s hardened against SSRF: it resolves DNS itself, rejects non-public IPs, pins connections to defeat DNS rebinding, and re-validates every redirect hop.
Tech Stack
- Language: PHP with
curl,dom,gd,mbstring— zero dependencies (no Composer, no frameworks) - Output: HTML 3.2 with all non-ASCII encoded as numeric entities, for pre-Unicode browsers
- AI: Anthropic Claude (Haiku), called over a plain
curlPOST — optional and cost-capped - Search: DuckDuckGo (unofficial HTML endpoint)
- Archive: Internet Archive Wayback Machine
- Source: GitHub (MIT)