[{"data":1,"prerenderedAt":426},["ShallowReactive",2],{"project-47874647":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":45,"post_text":46,"what":47,"said":83,"maker_in_thread":167,"shape":176,"grid":180,"attempts":388,"same_week":389,"maker_shows":42,"maker_hidden":418,"reader_version":419,"card":420},"47874647","Honker","Postgres NOTIFY\u002FLISTEN Semantics for SQLite","title","Show HN: Honker – Postgres NOTIFY\u002FLISTEN Semantics for SQLite","https:\u002F\u002Fgithub.com\u002Frussellromney\u002Fhonker","github.com","russellthehippo",1776945191,2026,327,84,119,4366,3,"legend","dev_tools","sqlite messaging library","library",[24,25,26,27,28],"sqlite","notify listen","job queue","pubsub","wal","curious",0.235,{"positive":32,"neutral":33,"mixed":34,"critical":35},12,20,0,5,37,{"performance":38,"idea":40,"docs":43,"execution":44},{"positive":39,"critical":18},1,{"positive":41,"critical":42},8,2,{"positive":34,"critical":34},{"positive":39,"critical":34},[34,35,34,34,34,39,18,18,18,39,39,18,35,34,18,18,34,34,18,18,34,34,18,34,34,35,35,35,39,18,35,39,35,18,35,35,18,18,35,35],null,{"problem":48,"audience":55,"pricing":46,"motivation":64,"time_to_build":46,"stack":68,"openness":81,"stage":82,"team_size":81},{"value":49,"source":50,"evidence":51},"Gives SQLite apps push-style event delivery and queues without running a broker","maker",[52],{"id":53,"by":11,"text":54},"47874837","Hey HN, I built this. Honker adds cross-process NOTIFY\u002FLISTEN to SQLite. You get push-style event delivery with single-digit millisecond latency without a damon\u002Fbroker, using…",{"value":56,"source":57,"evidence":58},"Developers running apps on SQLite who want pub\u002Fsub and work queues","inferred",[59,60],{"id":53,"by":11,"text":54},{"id":61,"by":62,"text":63},"47876567","nzoschke","Thanks for this! I have a proliferation of small apps backed by SQLite. And most of these need a queue and scheduler. I home rolled some stuff for it but was always pining for…",{"value":65,"source":50,"evidence":66},"Bring Postgres-style LISTEN\u002FNOTIFY semantics to SQLite apps without a server",[67],{"id":53,"by":11,"text":54},[69,73],{"value":70,"source":50,"evidence":71},"SQLite",[72],{"id":53,"by":11,"text":54},{"value":74,"source":75,"evidence":76},"Python","commenter",[77],{"id":78,"by":79,"text":80},"47875381","andersmurphy","Is the main use case for this for languages that only have access to process based concurrency? Struggling to see why you would otherwise need this in java\u002Fgo\u002Fclojure\u002FC# your…","unknown","beta",{"praise":84,"objections":100,"requests":116,"questions":129,"alternatives":148},[85,93],{"value":86,"source":75,"evidence":87},"Clever use of WAL file polling for cross-language notifications",[88,89],{"id":78,"by":79,"text":80},{"id":90,"by":91,"text":92},"47899366","davisphan04","Interesting approach—using WAL file stat instead of polling queries is clever. Curious how it behaves under high write contention?",{"value":94,"source":75,"evidence":95},"Atomic commit of messages with business writes",[96],{"id":97,"by":98,"text":99},"47876399","tuo-lei","atomic commit with the business data is the selling point over separate IPC. external message passing always has the 'notification sent but transaction rolled back' problem and…",[101,112],{"value":102,"source":75,"evidence":103},"stat polling is inefficient and may hurt CPU and battery",[104,108],{"id":105,"by":106,"text":107},"47932579","nawi","The 1 ms pragma data version polling is a nice way to bypass the lack of a server process. didyou measure the impact on cpu or battery life for applications running on lower…",{"id":109,"by":110,"text":111},"47875062","ArielTM","kqueue\u002FFSEvents is tempting here, but Darwin drops same-process notifications. If you've got a publisher and listener in the same process the listener just never fires. Nasty…",{"value":113,"source":75,"evidence":114},"Darwin drops same-process notifications so filesystem watchers fail",[115],{"id":109,"by":110,"text":111},[117,122],{"value":118,"source":75,"evidence":119},"Handle WAL checkpoint and truncation correctly",[120,121],{"id":97,"by":98,"text":99},{"id":109,"by":110,"text":111},{"value":123,"source":75,"evidence":124},"Support SQLAlchemy and ORM integration",[125],{"id":126,"by":127,"text":128},"47878345","robertlagrant","If I'm using SQLAlchemy, can this integrate? It seems to want to make the db connection itself.",[130,138],{"value":131,"source":75,"evidence":132},"How does it behave under high write contention or many listeners",[133,134],{"id":90,"by":91,"text":92},{"id":135,"by":136,"text":137},"47881211","agentbonnybb","This is the kind of skill-level tool I wish existed earlier — I hit the exact pain point running a daily-chronicle site off SQLite + a static deploy a week ago. Ended up with a…",{"value":139,"source":75,"evidence":140},"Is stat-based polling better than inotify or pragma data_version",[141,145],{"id":142,"by":143,"text":144},"47875217","Retr0id","Couldn't you use inotify (and\u002For some cross-platform wrapper) to watch for WAL changes without polling?",{"id":146,"by":11,"text":147},"47881226","Oh cool, so using io uring plus pragma data version would actually beat stat on Linux holistically speaking? The stat choice was all about cross platform consistency over inotify…",[149,156,160],{"value":150,"source":75,"evidence":151},"Postgres LISTEN\u002FNOTIFY",[152],{"id":153,"by":154,"text":155},"47877712","JoelJacobson","Shameless plug: In the upcoming release of PostgreSQL 19, LISTEN\u002FNOTIFY has been optimized to scale much better with selective signaling, i.e. when lots of backends are listening…",{"value":157,"source":50,"evidence":158},"pg-boss, Oban, Celery, Sidekiq (named as inspiration)",[159],{"id":53,"by":11,"text":54},{"value":161,"source":75,"evidence":162},"AWS SQS",[163],{"id":164,"by":165,"text":166},"47877449","nodesocket","Awesome. I’m currently using AWS SQS which invokes lambda functions for asynchronous tasks like email sends, but Honker seems like a great local replacement. Any conflicts or…",{"comments":168,"answered":169,"key":170},31,15,[171,172,175],{"id":53,"text":54},{"id":173,"text":174},"47881950","honk",{"id":146,"text":147},{"commenters":177,"max_depth":41,"maker_replies":168,"first_comment_mins":178,"lifespan_hours":179},35,21,164,[181,183,187,189,193,197,200,203,206,208,210,213,215,218,220,222,225,227,229,231,235,237,240,242,246,248,251,253,256,258,260,262,264,266,268,270,272,274,276,278,281,283,286,289,290,292,294,295,297,299,301,303,305,307,309,311,313,316,317,319,321,324,326,330,331,333,335,337,341,344,346,349,351,354,355,357,362,364,367,369,373,377,380,382,384],[53,34,34,182,11,39],"project\u002Fpositive\u002Fidea",[184,34,34,185,186,34],"47875266","commenter\u002Fpositive\u002Fnone","hk1337",[173,34,34,188,11,39],"other\u002Fneutral\u002Fnone",[190,34,35,191,192,34],"47875270","project\u002Fpositive\u002Fperformance","arowthway",[194,34,34,195,196,34],"47875976","other\u002Fneutral\u002Fperformance","WJW",[198,34,34,195,199,34],"47876343","slashdev",[201,34,34,195,202,34],"47876675","vlovich123",[204,34,34,195,205,34],"47879470","Polizeiposaune",[207,34,34,195,202,34],"47884681",[209,34,34,195,199,34],"47907525",[211,34,39,212,202,34],"47876645","project\u002Fcritical\u002Fperformance",[146,34,34,214,11,39],"project\u002Fneutral\u002Fperformance",[216,34,18,214,217,34],"47884501","xenadu02",[219,34,18,214,202,34],"47884711",[78,34,18,221,79,34],"project\u002Fneutral\u002Fidea",[223,34,18,221,224,34],"47875422","infogulch",[226,34,34,221,11,39],"47881328",[228,34,18,221,224,34],"47881686",[230,34,34,221,11,39],"47882646",[232,34,39,233,234,34],"47882978","project\u002Fcritical\u002Fidea","ncruces",[236,34,34,221,11,39],"47883203",[238,34,39,212,239,34],"47887621","vrajat",[241,34,34,182,11,39],"47881173",[243,34,34,244,245,34],"47884262","commenter\u002Fneutral\u002Fnone","zbentley",[247,34,18,221,224,34],"47875396",[249,34,35,182,250,34],"47875808","noveltyaccount",[252,34,18,214,234,34],"47876858",[254,34,34,244,255,34],"47876887","psadri",[257,34,34,244,234,34],"47876956",[259,34,34,214,11,39],"47881386",[261,34,18,214,234,34],"47882800",[263,34,34,244,11,39],"47883111",[265,34,34,244,255,34],"47885787",[267,34,18,214,224,34],"47878124",[269,34,34,214,11,39],"47886927",[271,34,34,244,224,34],"47894737",[273,34,34,244,11,39],"47895265",[275,34,34,244,11,39],"47900433",[277,34,34,214,11,39],"47906721",[279,34,18,221,280,34],"47877384","rich_sasha",[282,34,34,182,11,39],"47881397",[284,34,18,214,285,34],"47888834","grumbelbart2",[287,39,34,288,11,39],"47888037","project\u002Fneutral\u002Fnone",[153,42,34,195,154,34],[291,42,34,188,11,39],"47881008",[293,42,34,195,11,39],"47888586",[142,18,18,214,143,34],[296,18,34,214,11,39],"47881011",[298,18,34,244,143,34],"47881441",[300,18,34,214,11,39],"47881559",[302,18,34,244,143,34],"47881872",[304,18,34,214,11,39],"47883030",[306,18,34,214,11,39],"47885320",[308,18,18,214,217,34],"47884579",[97,310,35,182,98,34],4,[312,310,34,288,11,39],"47881040",[314,310,35,182,315,34],"47890221","kippinsula",[61,35,35,182,62,34],[318,35,34,288,11,39],"47883434",[109,320,39,212,110,34],6,[322,320,34,323,11,39],"47881569","maker\u002Fneutral\u002Fnone",[325,320,34,244,217,34],"47894403",[327,328,18,221,329,34],"47959579",7,"aleken",[105,41,18,214,106,34],[135,332,35,182,136,34],9,[334,332,34,214,11,39],"47881253",[336,332,34,288,11,39],"47883129",[338,339,39,233,340,34],"47875767",10,"PunchyHamster",[342,339,35,182,343,34],"47876082","blacklion",[345,339,18,221,340,34],"47892499",[126,347,18,348,127,34],11,"project\u002Fneutral\u002Fdocs",[350,347,34,348,11,39],"47900439",[352,347,35,353,127,34],"47946322","maker\u002Fpositive\u002Fnone",[164,32,35,182,165,34],[356,32,34,288,11,39],"47881090",[358,359,35,360,361,34],"47884708",13,"project\u002Fpositive\u002Fnone","aldielshala",[90,363,18,214,91,34],14,[365,169,18,214,366,34],"47888014","Oxlamarr",[368,169,34,214,11,39],"47888571",[370,371,18,221,372,34],"47931778",16,"vogje01",[374,375,35,376,245,34],"47884461",17,"project\u002Fpositive\u002Fexecution",[378,375,34,379,11,39],"47885299","project\u002Fneutral\u002Fexecution",[381,375,34,244,245,34],"47895125",[383,375,34,244,11,39],"47895343",[385,386,35,182,387,34],"47874946",18,"GangstaAgents",[],[390,394,399,403,408,413],{"id":391,"name":392,"points":393,"category":20},"47920787","dirac",393,{"id":395,"name":396,"points":397,"category":398},"47882697","Tolaria",318,"productivity",{"id":400,"name":401,"points":402,"category":398},"47899844","WUPHF",260,{"id":404,"name":405,"points":406,"category":407},"47886517","How LLMs Work",245,"learning_science",{"id":409,"name":410,"points":411,"category":412},"47937380","Auto-Architecture",241,"hardware",{"id":414,"name":415,"points":416,"category":417},"47876071","Turning a Gaussian Splat into a videogame",236,"games",false,"v2",{"id":421,"name":5,"line":6,"ai":418,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":422,"top":18,"kw":423,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":424,"url":9,"mix":425,"praise":86,"objection":102,"sub":21},47874647,0.24,[24,25,26,27,28],"0500013331135033003300300555135153553355",[32,33,34,35],1794036699292]