CyberIntel ⬡ News
★ Saved ◆ Cyber Reads
← Back ◬ AI & Machine Learning Apr 24, 2026

russellromney/honker

Simon Willison Archived Apr 24, 2026 ✓ Full text saved

russellromney/honker "Postgres NOTIFY/LISTEN semantics" for SQLite, implemented as a Rust SQLite extension and various language bindings to help make use of it. The design of this looks very solid. It lets you write Python code for queues that looks like this: import honker db = honker . open ( "app.db" ) emails = db . queue ( "emails" ) emails . enqueue ({ "to" : "alice@example.com" }) # Consume (in a worker process) async for job in emails . claim ( "worker-1" ): send ( job . payload ) job . a

Full text archived locally
✦ AI Summary · Claude Sonnet


    russellromney/honker Simon Willison’s Weblog Subscribe Sponsored by: Sonar — Now with SAST + SCA for secure, dependency-aware Agentic Engineering. SonarQube Advanced Security 24th April 2026 - Link Blog russellromney/honker ( via ) "Postgres NOTIFY/LISTEN semantics" for SQLite, implemented as a Rust SQLite extension and various language bindings to help make use of it. The design of this looks very solid. It lets you write Python code for queues that looks like this: import honker db = honker . open ( "app.db" ) emails = db . queue ( "emails" ) emails . enqueue ({ "to" : "alice@example.com" }) # Consume (in a worker process) async for job in emails . claim ( "worker-1" ): send ( job . payload ) job . ack () And Kafka-style durable streams like this: stream = db . stream ( "user-events" ) with db . transaction () as tx : tx . execute ( "UPDATE users SET name=? WHERE id=?" , [ name , uid ]) stream . publish ({ "user_id" : uid , "change" : "name" }, tx = tx ) async for event in stream . subscribe ( consumer = "dashboard" ): await push_to_browser ( event ) It also adds 20+ custom SQL functions including these two: SELECT notify( ' orders ' , ' {"id":42} ' ); SELECT honker_stream_read_since( ' orders ' , 0 , 1000 ); The extension requires WAL mode, and workers can poll the .db-wal file with a stat call every 1ms to get as close to real-time as possible without the expense of running a full SQL query. honker implements the transactional outbox pattern , which ensures items are only queued if a transaction successfully commits. My favorite explanation of that pattern remains Transactionally Staged Job Drains in Postgres by Brandur Leach. It's great to see a new implementation of that pattern for SQLite. Posted 24th April 2026 at 1:50 am Recent articles DeepSeek V4 - almost on the frontier, a fraction of the price - 24th April 2026 Extract PDF text in your browser with LiteParse for the web - 23rd April 2026 A pelican for GPT-5.5 via the semi-official Codex backdoor API - 23rd April 2026 This is a link post by Simon Willison, posted on 24th April 2026 . databases 112 postgresql 159 sqlite 461 rust 107 Monthly briefing Sponsor me for $10/month and get a curated email digest of the month's most important LLM developments. Pay me to send you less! Sponsor & subscribe Disclosures Colophon © 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
    💬 Team Notes
    Article Info
    Source
    Simon Willison
    Category
    ◬ AI & Machine Learning
    Published
    Apr 24, 2026
    Archived
    Apr 24, 2026
    Full Text
    ✓ Saved locally
    Open Original ↗