Simon Willison’s Weblog

Subscribe
Atom feed

Elsewhere

Filters: Sorted by date

I wanted a Python library that could parse SQLite SELECT statements, so I vibe coded this one up based on a specification I reverse-engineered from SQLite's own parser behavior.

There's an interactive playground here for trying it out in the browser (via Pyodide).

Release tiny-haversine 0.1.1 — A Python package with a C module for haversine() - as a WASM experiment
Release tiny-haversine 0.1.0 — A Python package with a C module for haversine() - as a WASM experiment
Release sqlite-ast-conformance 0.1 — A language independent conformance suite for implementations of a SQLite SELECT query parser
Release datasette 1.0a24 — An open source multi-tool for exploring and publishing data
Tool Minesweeper — Play a classic Minesweeper game directly in your browser with support for three difficulty levels: Easy, Medium, and Hard. Use left-click to reveal cells and right-click to place flags, or toggle between reveal and flag modes on mobile with long-press support. The game features a timer to track your speed, mine counter to monitor remaining flags, and immediate visual feedback when you win or hit a mine.
Research What we learned today about this ChatGPT “container” environment — Experiments in the ChatGPT sandbox reveal that general outbound internet access from Python and other user code (such as HTTP requests) is entirely blocked, while package managers like pip and npm are permitted to fetch dependencies using curated internal registry proxies. The container provides a privileged fetching mechanism (`container.download`) for select public URLs, which is more powerful than standard code-based networking.
Research Cloudflare Workers with Python and SQLite — Exploring the intersection of Cloudflare Workers, Python (via Pyodide), and SQLite persistence, this project demonstrates practical techniques for building serverless applications with both JavaScript and Python runtimes on the Cloudflare platform. JavaScript Workers, paired with D1 for persistent SQLite storage, handled form input, basic routing, and a page view counter.
Release datasette-visible-internal-db 0.1.1a2 — Datasette plugin for making the internal database visible for debugging
Release claude-code-transcripts 0.6 — Tools for publishing transcripts for Claude Code sessions
None
TIL Cloudflare response header transform rules — I serve Python files from my `tools.simonwillison.net` subdomain, which is a GitHub Pages site that's served via Cloudflare. For example:
Release datasette-llm 0.1a0 — LLM integration plugin for other plugins to depend on
None
TIL Previewing Claude Code for web branches with GitHub Pages — I'm a big user of [Claude Code on the web](https://code.claude.com/docs/en/claude-code-on-the-web), Anthropic's poorly named cloud-based version of Claude Code which can be driven via the web or their native mobile and desktop applications.
Release multipart-form-data-conformance 0.1a0 — A conformance suite for HTTP multipart form data
Release datasette-scale-to-zero 0.3.2 — Quit Datasette if it has not received traffic for a specified time period
Tool Bookmarklets Collection — Access a collection of practical bookmarklets for web development and general browsing tasks. Each bookmarklet can be installed by dragging it to your bookmarks bar on desktop browsers or by copying the code for mobile Safari. The collection includes tools for revealing page anchor points and viewing page source code with formatting options, all presented with detailed documentation and source code inspection capabilities.
Tool Seamless Sandboxed Iframe Prototype — Embed untrusted content safely within a webpage using a sandboxed iframe that automatically adjusts its height without allowing cross-origin access. The prototype uses `postMessage` to communicate height changes between the sandboxed iframe and parent page, enabling seamless content display while maintaining security restrictions. Various content examples demonstrate how the sandbox handles dynamic content, images, and attempts at malicious behavior.
Research DuckDB Security Constraints for Untrusted Query Execution — Evaluating DuckDB’s sandboxing features for secure untrusted query execution, this project demonstrates how to configure read-only access, restrict file and network operations, and enforce query timeouts in Python environments. Native settings like `read_only`, `enable_external_access`, and `allowed_paths` effectively limit users to preapproved data sources, while locking configuration via `lock_configuration=true` ensures that these controls cannot be altered by malicious queries.
Research String Redaction Library — Designed to detect secrets in text, the String Redaction Library leverages statistical analysis of character patterns—such as vowel/consonant ratios and digit presence—rather than relying on specific secret formats or regular expressions. It identifies highly random or non-English-like alphanumeric strings, hashes, and tokens without context awareness, making it easy to scan for hard-to-spot secrets in source code or logs.
Research whenwords Esoteric Languages — Showcasing the versatility of the whenwords time formatting specification, this project features parallel implementations in three esoteric programming languages: LOLCODE, Rockstar, and WebAssembly Text (WAT). Each version adapts the time formatting logic—such as "3 hours ago" and duration parsing—using the idiomatic constructs and limitations of its language, producing transpiled or compiled code for JavaScript, Python, or a compact WASM binary.
Tool Lobsters Latest Comments Bookmarklet — Browse Lobste.rs comment threads with an enhanced "Latest" tab that displays all comments in chronological order with newest first, making it easier to catch up on recent discussion activity. The bookmarklet adds reply-to links showing parent comment relationships and includes a "Copy Thread" feature to export the entire discussion as numbered plain text.
None
TIL Taking Neon I at the Crucible — I took the Neon I intensive week-long evening class at [the Crucible](https://www.thecrucible.org/) in Oakland, with teachers Dan Kuppe and Kat. I learned to make a neon sign! It's still awaiting final infusion of gas, but I'll share photos here once it's finished.
Release pwasm 0.1a0 — A WebAssembly engine in pure Python
Release denobox 0.1a2 — Run JavaScript code and WASM in a Deno sandbox
Release denobox 0.1a1 — Run JavaScript code and WASM in a Deno sandbox
Release denobox 0.1a0 — Run JavaScript code and WASM in a Deno sandbox
Release datasette-transactions 0.1a0 — API for executing multiple queries within a transaction
Tool v86 Linux Emulator — Run Linux commands in your browser using x86 emulation powered by v86, a JavaScript/WebAssembly-based x86 emulator. This tool executes a minimal Buildroot Linux distribution directly in your browser, with typical boot times between 10-30 seconds depending on your device and connection speed. Enter commands in the input field to interact with the Linux shell and view output in the terminal window.
Release datasette-public 0.4a0 — Make selected Datasette databases and tables visible to the public