DuckFind
The modern web, in plain HTML — for vintage browsers.
duckfind.com | GitHub | Mirror
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. Recipe pages (schema.org/Recipe) render as a clean ingredients + steps card |
| Inline images | Proxy downscales JPEG/PNG/WebP/AVIF → GIF, with grayscale and dithered 1-bit modes |
| PDF viewer | Read PDFs on a vintage browser — extracted text as plain HTML, or each page rasterised through the GIF pipeline with page navigation (poppler-backed) |
| Download proxy | Fetches a file over modern TLS and streams it to the browser over plain HTTP, so an old machine can grab software, drivers, and archives from HTTPS-only hosts. Reader download links route here automatically |
| Wayback mode | Read pages as they were in a past year, era-consistent, original layout preserved for old pages |
| Hacker News | The HN front page as plain headlines and any story’s full comment thread as nested HTML — the discussion is normally client-side JS and invisible to an old browser |
| Maps | OpenStreetMap street maps stitched server-side into one GIF, pan/zoom by plain links, click-to-recentre (server-side imagemap), plus text driving directions via OSRM — turn-by-turn on an Apple II |
| News & My Feeds | A grouped RSS/Atom news portal, plus a personal feed reader with no accounts — your feed list saves under a code (stored as a salted hash), so the same code opens your feeds on any machine. Illustrated headline “river” of thumbnail + title + summary |
| Translator | !translate text to lang — Microsoft Translator via DuckDuckGo’s anonymizing proxy, so no API key and your address never reaches Microsoft. 28 languages, auto-detected source |
| Classic web | !wiby searches Wiby’s index of hand-made pages and !surprise opens a random one — served in original layout (they were already built for old browsers) |
| Gopher gateway | Browse gopherspace — menus, text files, Veronica search — from any web browser, with the same SSRF discipline as the HTTP fetcher |
| Tools | Calculator + unit/currency converter (own parser, no eval), weather, dictionary, and a moderated flat-file guestbook |
| 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, !pdf, !dl download, !hn Hacker News, !map, !dir, !weather, !translate, !wiby, !gopher, !calc, !define, !news, !feeds |
| 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 |
| Privacy | No logs of what anyone searches or reads — no access logs anywhere, no CDN in the path, rate limiting keyed by salted hashes. The about page states exactly what’s kept |
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. Abuse is bounded too — per-visitor rate limits plus a site-wide daily search budget, so a botnet can’t burn the server’s standing with the search backend.
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), plus Wiby for the classic web
- Maps: OpenStreetMap tiles + OSRM routing + Nominatim geocoding
- Translate: Microsoft Translator via DuckDuckGo’s anonymizing proxy
- PDF: poppler (
pdftotext/pdftoppm) — optional; degrades to a download link - Discussions: Hacker News Firebase API (keyless)
- Archive: Internet Archive Wayback Machine
- Source: GitHub (MIT)
Links
- Live Site
- Mirror — fallback if the primary is down
- GitHub Repository