Simon Willison’s Weblog

Subscribe
Atom feed

Elsewhere

Filters: Sorted by date

Research PDF to Image Converter — Leveraging Rust's `pdfium-render` crate and Python's PyO3 bindings, this project enables fast and reliable conversion of PDF pages to JPEG images, packaged as a self-contained Python wheel. The CLI tool and Python library are both built to require no external dependencies, bundling the necessary PDFium binary for ease of installation and cross-platform compatibility.
Research REXC (rx) JSON Test Suite — REXC (rx) JSON Test Suite provides a comprehensive, language-agnostic test resource for validating implementations of the REXC encoder/decoder. It includes a single JSON file with 206 tests covering base64 encoding, zigzag integer transformations, value conversions, roundtrip integrity, and special numeric values, ensuring correctness across platforms.
Release datasette 1.0a26 — An open source multi-tool for exploring and publishing data

Datasette now has a mechanism for assigning semantic column types. Built-in column types include urlemail, and json, and plugins can register additional types using the new register_column_types() plugin hook.

Release llm 0.29 — Access large language models from the command-line

Adds support for OpenAI's new models gpt-5.4, gpt-5.4-mini, and gpt-5.4-nano.

Research syntaqlite Python Extension in WebAssembly — syntaqlite-python-extension is a Python C extension module that integrates the syntaqlite Rust/C SQL toolkit, making high-fidelity SQL parsing, formatting, validation, and tokenization available to Python and Pyodide environments. It wraps syntaqlite's native FFI for both desktop and web, linking against static libraries produced by Rust and employing Emscripten for WASM builds.
Museum John M. Mossman Lock Collection — 20 West 44th Street, New York, NY 10036

The General Society of Mechanics and Tradesmen of the City of New York is home to the John M. Mossman Lock Collection, likely the world's largest collection of antique bank locks.

Combination Lock - catalog page 127, Combination Revolving Bolt Lock, page 130, Combination Lock, also page 130 - each lock is made of brass and looks complicated and robust
Research CSRF Protection Demo: Modern Browser-Based Defenses — Modern browser security now enables robust Cross-Site Request Forgery (CSRF) prevention without requiring tokens. This demo project contrasts a vulnerable FastAPI bank app with a protected version, showcasing how browser-sent headers like `Sec-Fetch-Site` and `Origin` empower servers to automatically reject cross-origin POST requests.
Tool Sorting algorithms — Explore and compare different sorting algorithms through interactive animated visualizations that display how each algorithm organizes data in real-time. The tool allows you to adjust dataset size and animation speed, run individual algorithms step-by-step or continuously, and race multiple algorithms simultaneously to see which performs best. Each algorithm includes detailed complexity analysis and visual indicators for comparisons, swaps, and sorted elements.
Tool SQLite Bytecode Explorer — Explore SQLite's Virtual Database Engine (VDBE) by analyzing the bytecode that SQLite generates when compiling SQL queries. This tool runs the `EXPLAIN` command on your SQL statements and annotates each instruction with detailed explanations of what it does, from cursor management and table scans to index lookups and aggregate functions.
Research v86 exploration — Exploring the v86 Linux Emulator (see v86 Linux Emulator tool), this project evaluates a browser-based Buildroot 2024.05.2 x86 environment with a constrained 39 MB RAM, featuring BusyBox utilities, Lua 5.4.6 scripting, and core text-processing tools. Although it boasts comprehensive shell utilities, file management tools, and basic network utilities (curl, wget, links), actual internet access is unavailable due to the lack of a configured network relay.
Research Luau WebAssembly: Browser Playground + Python wasmtime — Luau WebAssembly explores compiling the Luau scripting language (used by Roblox) to WebAssembly for interactive browser environments and Python integration via wasmtime. By leveraging Emscripten, the project creates a streamlined WASM module that runs in the browser (with a playground and Pyodide integration) and server-side Python. Key technical adaptations include custom output capture, flexible WASM imports for wasmtime, and Python wrappers that handle C++ exception lifecycles.
Release llm-tools-edit 0.1a0 — LLM plugin providing tools for editing files
Release dclient 0.5a3 — A client CLI utility for Datasette instances
Release datasette-table-diagram 0.1a0 — Show Entity Relationship diagrams of tables in Datasette
Tool MP3 Inspector — Extract ID3 metadata and file information from MP3 audio files using this browser-based tool. Upload an MP3 file by dragging it onto the drop zone or selecting it through the file picker, and the inspector will parse and display all available tags including title, artist, album art, technical encoding details, and embedded URLs. The tool organizes metadata into categorized sections and provides a raw JSON view for advanced inspection of the complete tag data.
Museum The New York Earth Room — 141 Wooster Street, New York, NY 10012

On the second floor of 141 Wooster Street in New York's SoHo district there is a 3,600 square foot room filled with earth - 280,000 pounds of it, first installed in 1977 and maintained there ever since.

Photo of a flyer showing a photograph of the Earth Room - a glass wall about two feet high holds back a large file of dirt in a white room.
Tool NICAR 2026 Schedule — Browse the NICAR 2026 conference schedule with powerful search and filtering capabilities. This interactive schedule viewer lets you explore sessions across multiple days, filter by session type, track, and skill level, and save your favorite sessions for quick access. The schedule works offline using cached data and automatically syncs updates when you're back online.

The NICAR data journalism conference provides a copy of the schedule as CORS-enabled JSON, so I vibe coded my own mobile-friendly schedule app to help me keep track of the sessions I want to attend.

Tool GIF Optimizer (gifsicle WASM) — Optimize animated GIF files using gifsicle compiled to WebAssembly, with all processing occurring directly in your browser without server uploads. The application offers preset optimization profiles ranging from lossless compression to aggressive lossy reduction, along with manual control over parameters like color palette size, scaling, and dithering methods.
Tool markdown-copy component — The `<markdown-copy>` component renders markdown content with built-in controls for viewing the rendered output and copying or viewing the source code. It provides an interactive interface with a menu button that allows users to toggle between the formatted markdown display and the raw markdown source, as well as quickly copy the markdown text to the clipboard.
Tool Animated Word Cloud — View animated word cloud visualizations that use an Archimedean spiral placement algorithm to position words on a canvas. Each word spirals outward from the center until it finds an unoccupied space, with grid-based spatial indexing accelerating collision detection to handle large datasets efficiently. Control the animation playback speed, step through frames manually, download the final result as a PNG, or paste your own text to generate a custom word cloud.
Research Rust Word Cloud CLI — Leveraging Rust’s performance and safety, this CLI tool generates PNG word clouds directly from text input using a custom spiral layout algorithm and efficient grid-based collision detection. It supports flexible options for image size, font scaling, color schemes, and background colors, with all core features—such as stopword filtering, spatial indexing, and layout—implemented from scratch without any external word cloud library.
Tool Unicode Explorer — Binary Search Over HTTP — View Unicode characters and their properties through an interactive binary search algorithm that makes real HTTP Range requests to fetch individual records from a binary database. Enter a character or Unicode codepoint to see each step of the search visualized in a network log, including fetch times and comparisons.
Research Unicode Explorer — Binary Search Over HTTP — By leveraging HTTP Range requests and fixed-width binary records, Unicode Explorer demonstrates efficient binary search for Unicode data directly from a static file with zero backend or dependencies. The client fetches only one 256-byte record per step, using signposts from `meta.json` to optimize initial narrowing, then performs real-time network-driven binary search, visualized in an interactive log.
Release dclient 0.5a2 — A client CLI utility for Datasette instances
Release dclient 0.5a1 — A client CLI utility for Datasette instances
Release dclient 0.5a0 — A client CLI utility for Datasette instances
Release datasette-oauth 0.1a0 — Datasette as an OAuth provider
Tool Mobile Data Tables: Responsive Patterns Demo — # Mobile Data Tables: Responsive Patterns Demo
Release datasette-auth-tokens 0.4a12 — Datasette plugin for authenticating access using API tokens
Release datasette 1.0a25 — An open source multi-tool for exploring and publishing data