DuckFind

DuckFind — a detective duck with a magnifying glass The modern web, in plain HTML — for vintage browsers.

duckfind.com | GitHub


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

FeatureWhat it does
SearchDuckDuckGo results reformatted as plain HTML, with pagination
ReaderAny page distilled to readable HTML via a Readability-style extractor — tables, multi-page stitching, challenge-page detection
Inline imagesProxy downscales JPEG/PNG/WebP/AVIF → GIF, with grayscale and dithered 1-bit modes
Wayback modeRead 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 portalRSS/Atom feeds grouped into sections, merged and date-sorted
Plain-text modetext/plain output for terminal browsers (MacLynx) and the oldest machines
Dark mode & settingsCookie-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, mbstringzero 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 curl POST — optional and cost-capped
  • Search: DuckDuckGo (unofficial HTML endpoint)
  • Archive: Internet Archive Wayback Machine
  • Source: GitHub (MIT)