Simon Willison’s Weblog

Subscribe
Atom feed

Elsewhere

Filters: Sorted by date

Tool SQLite AST — Parse SQLite SELECT queries into abstract syntax trees and view the results in JSON and Python representations. This tool uses the sqlite-ast library running in your browser via Pyodide to analyze SQL syntax and display both the dictionary-based parse tree and a rich pretty-printed representation. It supports complex queries including compound selects, common table expressions, and window functions, and can display partial parse results when encountering syntax errors.
Release sqlite-ast 0.1a0 — Python library for parsing SQLite SELECT queries into an AST
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.
Release datasette-visible-internal-db 0.1.1a2 — Datasette plugin for making the internal database visible for debugging
Research cloudflare-workers-python-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.
Research 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.
Tool Directory Explorer Demo — Explore the contents of a local directory in your browser with an interactive file tree viewer and search functionality. This tool demonstrates the capabilities of the `webkitdirectory` input attribute to access folder structures and analyze file distribution. Once a directory is selected, view detailed statistics about file counts, total size, and file type breakdown, with options to filter by name and file extension.
Release claude-code-transcripts 0.6 — Tools for publishing transcripts for Claude Code sessions
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
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 — 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.
Tool Lobsters Latest Comments Bookmarklet — View Lobste.rs comment threads with a chronological "Latest" tab that displays all comments in a flat, newest-first layout alongside the original nested view. The bookmarklet adds reply-to links showing which comment each reply targets, and clicking timestamps in the Latest view smoothly navigates back to the threaded view with the selected comment highlighted for easy reference.
Research whenwords-esoteric-langs — 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.
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 directly in your browser using x86 emulation powered by v86. The emulator boots a minimal Linux distribution and provides a terminal interface where you can execute shell commands and view their output in real-time. Boot times typically range from 10-30 seconds depending on your device and connection speed.

Beats

Years

Tags