[{"data":1,"prerenderedAt":354},["ShallowReactive",2],{"project-15691409":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":35,"aspects":36,"strip":43,"post_text":46,"what":47,"said":78,"maker_in_thread":190,"shape":199,"grid":202,"attempts":315,"same_week":316,"maker_shows":292,"maker_hidden":346,"reader_version":347,"card":348},"15691409","Datasette","Create and publish an API for SQLite databases","title","Show HN: Datasette – Create and publish an API for SQLite databases","https:\u002F\u002Fsimonwillison.net\u002F2017\u002FNov\u002F13\u002Fdatasette\u002F","simonwillison.net","simonw",1510617747,2017,269,44,86,2242,4,"legend","data","sqlite api publishing","cli",[24,25,26,27,28],"sqlite","rest api","sql api","read-only database","csv to sqlite","curious",0.156,{"positive":18,"neutral":32,"mixed":33,"critical":34},9,1,2,16,{"execution":37,"design":38,"idea":40,"docs":41,"privacy":42},{"positive":33,"critical":34},{"positive":39,"critical":39},0,{"positive":34,"critical":39},{"positive":39,"critical":39},{"positive":39,"critical":39},[39,33,39,39,39,39,39,39,39,39,39,39,44,39,45,39,45,39,39,39,39,39,39,39,39,45,39,44,39,45,39,44,33,44,45,39,45,45,45,45],5,3,null,{"problem":48,"audience":46,"pricing":46,"motivation":58,"time_to_build":46,"stack":62,"openness":76,"stage":77,"team_size":76},{"value":49,"source":50,"evidence":51},"Publishing a SQLite database as a read-only, queryable JSON API","maker",[52,55],{"id":53,"by":11,"text":54},"15693459","The \"REST API for your database\" thing isn't actually the part of this I'm most excited about - there are quite a few entries in that category already, such as…",{"id":56,"by":11,"text":57},"15691431","A couple of demos: https:\u002F\u002Ffivethirtyeight.datasettes.com\u002F contains SQLite versions of every CSV published by the FiveThirtyEight crew to https:\u002F\u002Fgithub.com\u002Ffivethirtyeight\u002Fdata…",{"value":59,"source":50,"evidence":60},"Make arbitrary datasets deployable as read-only, scalable APIs",[61],{"id":53,"by":11,"text":54},[63,72],{"value":64,"source":65,"evidence":66},"Python","inferred",[67,68],{"id":53,"by":11,"text":54},{"id":69,"by":70,"text":71},"15692472","tomcam","Asynchronous, easily configurable at runtime, and an exemplar of Python code by one of the creators of Django. Quite a treat.",{"value":73,"source":50,"evidence":74},"SQLite",[75],{"id":53,"by":11,"text":54},"unknown","launched",{"praise":79,"objections":103,"requests":122,"questions":143,"alternatives":158},[80,96],{"value":81,"source":82,"evidence":83},"Useful idea for publishing datasets; congratulated on launch","commenter",[84,88,92],{"id":85,"by":86,"text":87},"15691572","wsxiaoys","Congrats for the launch! I was searching for such tool exact yesterday:) I understand the benefits of Immutable pattern, but it'll be nice if datasettle could provide interface…",{"id":89,"by":90,"text":91},"15692855","mythrwy","Cool little utility. Like the fact you can pass SQL in the query string. Have to look for a use for this. Maybe internal use apps that update SQLite periodically from a larger…",{"id":93,"by":94,"text":95},"15692125","dangoor","This is really cool! It'd be fun to have a GraphQL variant of this.",{"value":97,"source":82,"evidence":98},"Name praised as brilliant",[99],{"id":100,"by":101,"text":102},"15696562","dgudkov","The name is brilliant.",[104,111,118],{"value":105,"source":82,"evidence":106},"Requires Cloudflare in the demos, a negative for some deployers",[107],{"id":108,"by":109,"text":110},"15693040","rmbeard","This looks great except for the fact that it runs through cloudflare, that's a big negative for me and will restrict a little my ability to deploy this. However, I can still see…",{"value":112,"source":82,"evidence":113},"Does not work on Windows",[114],{"id":115,"by":116,"text":117},"15696065","ccarse","Disappointed this doesn't work on Windows, looks really cool.",{"value":119,"source":82,"evidence":120},"No support for writable databases",[121],{"id":85,"by":86,"text":87},[123,131,139],{"value":124,"source":82,"evidence":125},"Writable API or interface for periodic updates",[126,127],{"id":85,"by":86,"text":87},{"id":128,"by":129,"text":130},"15691683","justboxing","Congrats on shipping! I have a sqlite DB with historical Visa data, and I want to expose it as an API (like your software does), but with API key. Not a python user here, can you…",{"value":132,"source":82,"evidence":133},"GraphQL variant",[134,135],{"id":93,"by":94,"text":95},{"id":136,"by":137,"text":138},"15693544","ZenoArrow","I'd also like to see the GraphQL version of this, mainly because of GraphQL's strongly typed schema definitions. Means less work required to validate inputs.",{"value":140,"source":82,"evidence":141},"API key or authentication support",[142],{"id":128,"by":129,"text":130},[144,151],{"value":145,"source":82,"evidence":146},"How pagination works",[147],{"id":148,"by":149,"text":150},"15691833","anonfunction","Any examples of how it handles pagination? Couldn't find it in the README.md",{"value":152,"source":82,"evidence":153},"Whether the Datasette name conflicts with the Commodore trademark",[154],{"id":155,"by":156,"text":157},"15691545","timbit42","Does Commodore own the trademark for the Datasette name?",[159,166,170,176,183],{"value":160,"source":82,"evidence":161},"PostgREST",[162],{"id":163,"by":164,"text":165},"15691494","hamandcheese","See also: PostgREST, which turns a PostgreSQL database into a rest API. https:\u002F\u002Fpostgrest.com\u002F",{"value":167,"source":50,"evidence":168},"sandman2",[169],{"id":53,"by":11,"text":54},{"value":171,"source":50,"evidence":172},"sqlite-web",[173],{"id":174,"by":11,"text":175},"15691703","The immutable thing is pretty key to the whole project - if you do need a writable API there are a few options out there already though. https:\u002F\u002Fgithub.com\u002Fcoleifer\u002Fsqlite-web…",{"value":177,"source":82,"evidence":178},"xmysql",[179],{"id":180,"by":181,"text":182},"15695796","o1lab","shameless plug (for MySql) : https:\u002F\u002Fgithub.com\u002Fo1lab\u002Fxmysql ``` XMYSQL : One command to generate REST APIs for any MySql Database. > 20+ releases to npm in last 2 weeks. > Have…",{"value":184,"source":82,"evidence":185},"SQLiteProxy",[186],{"id":187,"by":188,"text":189},"15693566","assafmo","Shameless plug: I made something similar a while back - https:\u002F\u002Fgithub.com\u002Fassafmo\u002FSQLiteProxy Not as fancy as OP's, but runs great in production since last June :-)",{"comments":32,"answered":18,"key":191},[192,193,196],{"id":56,"text":57},{"id":194,"text":195},"15695612","I don’t need cryptographic guarantees because I’m not dealing with untrusted data: if you want to screw up Datasette’s caching model by deliberately creating two different…",{"id":197,"text":198},"15692257","I love how optinionated Click is, especially around how CLI tools should be documented. I feel like I built a better tool because Click guided me towards best CLI design practices.",{"commenters":200,"max_depth":44,"maker_replies":32,"first_comment_mins":18,"lifespan_hours":201},34,27,[203,205,209,211,213,216,219,222,225,227,230,233,235,239,241,242,246,248,252,256,259,261,263,265,268,271,274,276,279,281,282,285,286,288,289,291,293,296,298,301,304,307,310,313],[56,39,39,204,11,33],"project\u002Fneutral\u002Fnone",[206,39,33,207,208,39],"15694095","project\u002Fcritical\u002Fexecution","vog",[194,39,39,210,11,33],"project\u002Fneutral\u002Fexecution",[163,33,39,212,164,39],"other\u002Fneutral\u002Fnone",[214,33,39,212,215,39],"15692644","everdev",[217,33,39,212,218,39],"15693392","hucker",[220,33,39,212,221,39],"15693922","patricius",[223,33,39,212,224,39],"15693987","evv555",[226,33,39,212,218,39],"15694581",[228,33,39,212,229,39],"15694084","michalskop",[231,34,39,212,232,39],"15692179","stedalus",[197,34,39,234,11,33],"project\u002Fpositive\u002Fdesign",[236,34,39,237,238,39],"15692910","other\u002Fneutral\u002Fperformance","pletnes",[69,45,44,240,70,39],"project\u002Fpositive\u002Fexecution",[187,18,39,212,188,39],[243,44,45,244,245,39],"15693434","project\u002Fneutral\u002Fdesign","ptype",[53,44,39,247,11,33],"project\u002Fpositive\u002Fidea",[249,44,45,250,251,39],"15693624","project\u002Fneutral\u002Fidea","stdbrouw",[253,44,39,254,255,39],"15693660","commenter\u002Fneutral\u002Fidea","lukechilds",[257,44,39,254,258,39],"15693816","_wmd",[260,44,39,254,11,33],"15695577",[180,262,39,212,181,39],6,[155,264,39,212,156,39],7,[266,264,39,212,267,39],"15691582","bazzert",[269,264,39,212,270,39],"15693398","ifdefdebug",[272,264,39,212,273,39],"15691639","mastax",[275,264,39,212,156,39],"15692025",[148,277,45,278,149,39],8,"project\u002Fneutral\u002Fdocs",[280,277,39,278,11,33],"15691926",[93,32,44,247,94,39],[283,32,39,212,284,39],"15692758","slaymaker1907",[136,32,45,250,137,39],[85,287,45,244,86,39],10,[174,287,39,244,11,33],[89,290,44,247,90,39],11,[115,292,33,207,116,39],12,[100,294,44,295,101,39],13,"project\u002Fpositive\u002Fnone",[128,297,45,204,129,39],14,[299,297,39,300,11,33],"15691710","project\u002Fneutral\u002Fprivacy",[302,297,45,300,303,39],"15699840","malingo",[305,297,45,210,306,39],"15692030","toomuchtodo",[308,297,45,210,309,39],"15701135","technomalogical",[108,311,45,312,109,39],15,"project\u002Fmixed\u002Fexecution",[314,311,39,210,11,33],"15693131",[],[317,322,327,332,337,342],{"id":318,"name":319,"points":320,"category":321},"15670827","SpeechBoard",190,"creative",{"id":323,"name":324,"points":325,"category":326},"15681755","Free Math",138,"productivity",{"id":328,"name":329,"points":330,"category":331},"15666088","Impostor Roster",117,"other",{"id":333,"name":334,"points":335,"category":336},"15700629","rooster",96,"languages",{"id":338,"name":339,"points":340,"category":341},"15694266","Sanity",90,"web_saas",{"id":343,"name":344,"points":345,"category":321},"15686504","2D Isometric Editor",78,false,"v2",{"id":349,"name":5,"line":6,"ai":346,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":350,"top":18,"kw":351,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":352,"url":9,"mix":353,"praise":81,"objection":105,"sub":21},15691409,0.16,[24,25,26,27,28],"0100000000005030300000000305030515303333",[18,32,33,34],1794036560842]