Simon Willison’s Weblog

Subscribe
Atom feed

Elsewhere

Filters: Sorted by date

Release sqlite-scanner v0.1.1 — Scan folders for SQLite database files
Release go-to-wheel 0.2 — Wrap Go binaries in Python wheels
Research WASM REPL CLI Tools — WASM REPL CLI Tools enable JavaScript and Python REPLs from the command line by leveraging WebAssembly runtimes in Go, built on the wazero engine. The project supplies separate binaries for each language—one using QuickJS WASI and the other CPython WASI—offering direct code execution, interactive shells, and a JSONL mode. JSONL mode lets external applications submit code for execution while maintaining persistent state across requests, facilitating programmatic integration.
Release go-to-wheel 0.1 — Wrap Go binaries in Python wheels
Release sqlite-scanner v0.1.0 — Scan folders for SQLite database files
TIL Running OpenClaw in Docker — I'm not brave enough to run [OpenClaw](https://openclaw.ai/) (aka Clawdbot aka Moltbot) directly on my Mac, so I decided to try running it in a Docker instead container.
None
Release shot-scraper 1.9.1 — A command-line utility for taking automated screenshots of websites
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

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
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:
None
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.
None
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.