[{"data":1,"prerenderedAt":790},["ShallowReactive",2],{"project-49712278":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":49,"post_text":52,"what":53,"said":88,"maker_in_thread":255,"shape":268,"grid":272,"attempts":751,"same_week":752,"maker_shows":45,"maker_hidden":782,"reader_version":783,"card":784},"49712278","Capsule","Single-file web apps that save their data into SQLite","title","Show HN: Capsule – Single-file web apps that save their data into SQLite","https:\u002F\u002Fwithcapsule.app\u002F","withcapsule.app","bashtian",1789479100,2026,380,166,99,4366,3,"legend","dev_tools","single-file app packaging","desktop_app",[24,25,26,27,28],"sqlite","single file app","offline web app","local-first","html app","mixed",-0.129,{"positive":32,"neutral":33,"mixed":34,"critical":35},23,34,7,30,94,{"idea":38,"execution":41,"design":44,"privacy":46,"docs":47,"performance":48},{"positive":39,"critical":40},19,15,{"positive":42,"critical":43},0,4,{"positive":45,"critical":45},1,{"positive":42,"critical":43},{"positive":42,"critical":45},{"positive":45,"critical":42},[45,42,42,42,42,50,18,45,51,50,50,45,18,43,50,18,42,42,18,51,18,50,45,18,50,45,18,18,18,51,45,51,18,45,18,45,18,50,45,43],5,2,"Hey HN,\n\nI always had the problem that building HTML pages is really simple now, but trying to save data required hosting it somewhere, and sharing it afterwards was not easy. Over the last few months, I've been building an app called Capsule (it’s also the file extension name) written in Rust with Tauri 2.0 that allows packing an HTML app and its data into a single SQLite file.\n\nThe HTML file and any related assets are directly embedded in the database. User data can either be saved as a localStorage key\u002Fvalue store or via a MongoDB-inspired collections API as documents, saved in a table in t",{"problem":54,"audience":60,"pricing":68,"motivation":69,"time_to_build":68,"stack":73,"openness":86,"stage":87,"team_size":86},{"value":55,"source":56,"evidence":57},"Saving and sharing data from HTML apps requires hosting them somewhere","maker",[58],{"id":59},"post",{"value":61,"source":62,"evidence":63},"People who want personal or small-team document-like apps without hosting or SaaS subscriptions","inferred",[64,65],{"id":59},{"id":66,"by":11,"text":67},"49712926","If try to do data management in Excel or need to download an app just to save some recipes, this could be an alternative. For example you can track time and billing with a nice…",null,{"value":70,"source":56,"evidence":71},"Saving data in HTML apps required hosting and sharing was hard",[72],{"id":59},[74,78,82],{"value":75,"source":56,"evidence":76},"Rust",[77],{"id":59},{"value":79,"source":56,"evidence":80},"Tauri 2.0",[81],{"id":59},{"value":83,"source":56,"evidence":84},"SQLite",[85],{"id":59},"unknown","beta",{"praise":89,"objections":117,"requests":166,"questions":204,"alternatives":224},[90,106],{"value":91,"source":92,"evidence":93},"Good idea for local-first, shareable small apps","commenter",[94,98,102],{"id":95,"by":96,"text":97},"49712942","zackify","love this idea!",{"id":99,"by":100,"text":101},"49714427","thesurlydev","With the battle of AI versus human agency raging I have a prediction that local-first desktop apps are going to make a comeback. It's nice to see something like this make it…",{"id":103,"by":104,"text":105},"49726368","edwardbonnett","could see this being handy for a little game with the save bundled in",{"value":107,"source":92,"evidence":108},"Useful for AI-generated mini apps",[109,113],{"id":110,"by":111,"text":112},"49713204","dgf18","Many big companies are starting now to test agentic coding to automate business processes. This could be a nice tool to distribute apps for workflows that aren't big enough to…",{"id":114,"by":115,"text":116},"49714056","razerbeans","I love this idea! One of the fallouts from widespread AI adoption that I've seen: They're very good at creating visual artifacts, but if you ever have to provide data in those…",[118,133,144,155],{"value":119,"source":92,"evidence":120},"Security risk: malicious documents and file delivery",[121,125,129],{"id":122,"by":123,"text":124},"49713829","tamimio","New way to deliver viruses just dropped! Great idea but it can be abused for sure.",{"id":126,"by":127,"text":128},"49715377","rvz","Attackers \u002F Malware Developers: \"A document as a web app?, What could possibly go wrong?\"",{"id":130,"by":131,"text":132},"49713528","redog","This seems ripe for an injection attack. Can it be inspected before running?",{"value":134,"source":92,"evidence":135},"Proprietary, closed source",[136,140],{"id":137,"by":138,"text":139},"49716280","writtenone","This is proprietary. Yuck",{"id":141,"by":142,"text":143},"49715791","Brajeshwar","Personally, you lost me at `.capsule`. I assume this is your format? Now, what happenss when you are not around or I don't have access to you when it is needed most?",{"value":145,"source":92,"evidence":146},"Merging and sync across copies is unclear or weak",[147,151],{"id":148,"by":149,"text":150},"49713800","jawns","My take: If your app needs to update and preserve state (using SQLite or any other DB), it is probably not something you want to pass around as a bundled file. Or at least, it's…",{"id":152,"by":153,"text":154},"49713943","sigmonsays","if state is best shared, why keep it w\u002F the code? You're gonna end up having to build a complex state sync system to a central DB anyways...",{"value":156,"source":92,"evidence":157},"macOS download shows damaged-app warning",[158,162],{"id":159,"by":160,"text":161},"49713984","dzink","Looks useful, but the Mac download shows \"“Capsule” is damaged and can’t be opened. You should eject the disk image.\" and then you realize it could be ripe for malicious payloads…",{"id":163,"by":164,"text":165},"49714336","Jonovono","“Capsule.app” is damaged and can’t be opened. You should move it to the Trash.",[167,182,189],{"value":168,"source":92,"evidence":169},"Open source the app or spec",[170,174,178],{"id":171,"by":172,"text":173},"49714987","m-p-3","It kinda reminds me of MS Access, which ended up being a pain in the butt for IT departments, but also covered a need within some department with limited resources. Really…",{"id":175,"by":176,"text":177},"49717192","annrap1d","Is this open source ?",{"id":179,"by":180,"text":181},"49715780","smy20011","Do you plan to open source it? Seems like a proprietary app & spec.",{"value":183,"source":92,"evidence":184},"Native HTTP API without CORS limits",[185],{"id":186,"by":187,"text":188},"49741817","sago350","I’ve been experimenting with Capsule and really like the concept. I confirmed that external REST APIs work from Capsule via fetch(). I’d like to use Capsule as a…",{"value":190,"source":92,"evidence":191},"Cloud storage sync",[192,196,200],{"id":193,"by":194,"text":195},"49737820","eternityforest","I've always wanted something like this! But I'd want to see some kind of clouds storage sync to actually use it for anything practical. Maybe it could include YJS, with agents…",{"id":197,"by":198,"text":199},"49720288","andix","I really like the idea. It's so easy to create small tools with AI now, but hard to install them as local apps or share them. But I'm missing a few relevant features: 1. syncing…",{"id":201,"by":202,"text":203},"49724396","ferflowhq","Love the UI. Simple and clean. Html instead of full app is nice idea. Make online sharing for collaboration edit, but yep need cloud storage.",[205,213,217],{"value":206,"source":92,"evidence":207},"How are conflicting copies merged",[208,209],{"id":114,"by":115,"text":116},{"id":210,"by":211,"text":212},"49714553","domh","I wish there was a way to see the underlying HTML\u002FJS and schema of these container files. Maybe you can on the desktop app? But it would be cool to see what's happening under the…",{"value":214,"source":92,"evidence":215},"Can the file be inspected before running",[216],{"id":130,"by":131,"text":132},{"value":218,"source":92,"evidence":219},"Can the file be read as plain text",[220],{"id":221,"by":222,"text":223},"49716616","manlymuppet","Is the file still fairly readable as plain text when opened with any old text editor? Is this asking too much?",[225,236,243,250],{"value":226,"source":92,"evidence":227},"File System Access API in browsers",[228,232],{"id":229,"by":230,"text":231},"49714845","mg","> but trying to save data required hosting it somewhere With the File System Access API, webpages nowadays can read and write local files just like desktop applications:…",{"id":233,"by":234,"text":235},"49712892","eleventen","You can get a cheap approximation of this with chromium browsers + Filesystem API and a PWA manifest for that native-ish feel. AI has reignited my interest in building based 100%…",{"value":237,"source":92,"evidence":238},"Trilium standalone mode with OPFS",[239],{"id":240,"by":241,"text":242},"49722553","ezst","For the curious, the note taking app Trilium has a \"standalone\" mode¹, built on top of OPFS² and sqlite OPFS persistence, such that your notes (~web pages here) are stored in…",{"value":244,"source":92,"evidence":245},"PocketBase",[246],{"id":247,"by":248,"text":249},"49715445","ninininino","I'm surprised to not see Pocketbase mentioned in this thread at all. https:\u002F\u002Fpocketbase.io\u002Fdocs\u002F \"PocketBase is an open source backend consisting of embedded database (SQLite)…",{"value":251,"source":92,"evidence":252},"Decker",[253,254],{"id":130,"by":131,"text":132},{"id":126,"by":127,"text":128},{"comments":256,"answered":257,"key":258},13,9,[259,262,265],{"id":260,"text":261},"49717223","There are a few things in Capsule to avoid corruptions of the file during syncing. The DELETE journal mode is used and writes are batched into transactions so that updates are…",{"id":263,"text":264},"49713066","If you want to distribute apps to many users this would probably be a better solution. The main benefit of Capsule is the personal document like app. You create a capsule, move…",{"id":266,"text":267},"49715081","Each document record is saved with UUID and timestamps. When deleting a record the data is removed but the record keeps a tombstone so only the ID remains. For conflicts…",{"commenters":269,"max_depth":270,"maker_replies":256,"first_comment_mins":271,"lifespan_hours":16},122,12,33,[273,275,279,282,285,288,292,295,298,301,303,306,309,311,315,318,320,322,324,326,329,332,335,339,342,343,346,349,352,355,358,360,363,364,367,371,374,377,380,382,385,388,390,393,395,398,401,404,406,407,409,413,416,419,421,422,424,427,429,432,435,438,442,445,448,453,455,458,461,463,466,469,472,475,477,479,481,484,487,490,494,495,498,500,502,505,510,513,515,517,520,523,526,529,532,535,538,542,544,547,549,551,554,558,563,565,567,571,574,576,580,582,585,589,592,595,598,600,602,604,606,609,613,615,619,622,625,629,631,635,637,639,641,643,647,651,655,657,661,665,667,671,673,677,680,683,687,691,695,698,702,704,706,710,714,716,720,725,729,732,735,737,739,743,745,747],[229,42,45,274,230,42],"project\u002Fcritical\u002Fidea",[276,42,42,277,278,42],"49715121","other\u002Fneutral\u002Fnone","pspeter3",[280,42,42,277,281,42],"49716009","jg0r",[283,42,42,277,284,42],"49716605","Lord_Zero",[286,42,42,277,287,42],"49723586","realPubkey",[289,42,42,290,291,42],"49715123","commenter\u002Fneutral\u002Fnone","emaro",[293,42,42,290,294,42],"49715546","simongray",[296,42,42,290,297,42],"49716044","maelito",[299,42,42,290,300,42],"49716502","tbrockman",[302,42,42,290,294,42],"49717071",[304,42,42,290,305,42],"49723547","whizzter",[307,42,42,290,308,42],"49723616","bithammerthunde",[310,42,42,290,230,42],"49724029",[312,42,42,313,314,42],"49724812","other\u002Fneutral\u002Fprivacy","tgv",[316,42,42,313,317,42],"49727916","cush",[319,42,42,313,314,42],"49736871",[321,42,42,313,317,42],"49740307",[323,42,42,313,314,42],"49750664",[325,42,42,290,230,42],"49751257",[327,42,42,313,328,42],"49739234","lenkite",[330,42,42,290,331,42],"49721772","DANmode",[333,42,42,290,334,42],"49715418","darkvertex",[336,42,50,337,338,42],"49725090","project\u002Fpositive\u002Fidea","rtvn83",[340,42,50,337,341,42],"49729067","cosmic_cheese",[240,45,45,274,241,42],[344,45,42,277,345,42],"49726897","zhynn",[347,51,45,274,348,42],"49714916","nater5000",[350,51,50,337,351,42],"49715428","pbronez",[353,51,50,337,354,42],"49716109","crab_galaxy",[356,51,42,277,357,42],"49717719","dizzard",[260,51,42,359,11,45],"maker\u002Fneutral\u002Fexecution",[361,51,42,277,362,42],"49717023","adrianwaj",[148,18,45,274,149,42],[365,18,45,274,366,42],"49714246","Reviving1514",[368,18,45,369,370,42],"49716559","project\u002Fcritical\u002Fexecution","teraflop",[372,18,18,373,357,42],"49717774","project\u002Fmixed\u002Fidea",[375,18,50,337,376,42],"49714424","latexr",[378,18,18,373,379,42],"49722757","wwn_se",[381,18,42,290,376,42],"49724014",[383,18,50,337,384,42],"49720097","lateatdesk",[386,18,50,337,387,42],"49722503","kaninricer",[389,18,50,337,308,42],"49723629",[391,18,42,290,392,42],"49724137","alwillis",[394,18,42,277,308,42],"49724440",[396,18,50,337,397,42],"49727004","benhurmarcel",[399,43,42,277,400,42],"49713834","thederf",[402,43,42,277,403,42],"49714009","windsurfer",[405,43,42,277,400,42],"49716640",[233,50,45,274,234,42],[263,50,42,408,11,45],"maker\u002Fneutral\u002Fidea",[410,50,18,411,412,42],"49713902","project\u002Fneutral\u002Fidea","ramon156",[414,50,45,274,415,42],"49714504","al_borland",[417,50,50,418,234,42],"49714604","project\u002Fpositive\u002Fdesign",[114,420,50,337,115,42],6,[266,420,42,359,11,45],[423,420,45,274,379,42],"49722822",[425,34,18,373,426,42],"49717756","zarrdoz",[171,428,50,337,172,42],8,[430,428,42,431,11,45],"49715594","maker\u002Fneutral\u002Fnone",[433,428,50,434,172,42],"49718563","maker\u002Fpositive\u002Fnone",[436,257,18,411,437,42],"49713981","olaulailadila",[439,257,42,440,441,42],"49714502","commenter\u002Fneutral\u002Fidea","derpyzza",[443,257,42,277,444,42],"49714892","ligarota",[446,257,42,277,447,42],"49715598","saejox",[449,450,18,451,452,42],"49712736",10,"project\u002Fneutral\u002Fnone","lewisjoe",[454,450,42,411,11,45],"49712820",[456,450,42,277,457,42],"49713462","paweladamczuk",[459,450,42,277,460,42],"49713938","yoz",[462,450,42,277,164,42],"49714405",[464,450,42,277,465,42],"49715800","fallinditch",[467,450,42,277,468,42],"49713615","alexis2b",[470,450,42,277,471,42],"49712828","Dwedit",[473,450,42,277,474,42],"49713664","throw101010",[476,450,42,277,471,42],"49715015",[478,450,42,277,441,42],"49714559",[480,450,42,277,465,42],"49715600",[482,450,42,277,483,42],"49720654","krapp",[485,450,18,411,486,42],"49713308","lukasbm",[488,450,18,411,489,42],"49713921","ProfDreamer",[491,492,18,411,493,42],"49712708",11,"andai",[66,492,42,411,11,45],[496,270,18,411,497,42],"49715991","veqq",[130,256,45,499,131,42],"project\u002Fcritical\u002Fprivacy",[197,501,18,373,198,42],14,[503,40,18,373,504,42],"49714281","rc-1140",[506,507,18,508,509,42],"49713101",16,"project\u002Fneutral\u002Fdesign","gadders",[511,507,18,508,512,42],"49718735","p2detar",[514,507,18,508,509,42],"49726742",[99,516,50,337,100,42],17,[518,516,42,277,519,42],"49714650","rglover",[521,516,42,277,522,42],"49714882","dsparkman",[524,516,42,277,525,42],"49714983","explorigin",[527,516,45,528,483,42],"49720598","project\u002Fcritical\u002Fnone",[210,530,18,531,211,42],18,"project\u002Fneutral\u002Fdocs",[533,530,42,534,11,45],"49715742","project\u002Fneutral\u002Fexecution",[536,39,18,411,537,42],"49715109","xyrez",[539,540,42,277,541,42],"49715649",20,"tombert",[186,543,18,534,187,42],21,[545,543,42,546,11,45],"49745716","project\u002Fpositive\u002Fexecution",[110,548,50,337,111,42],22,[550,548,18,411,172,42],"49714919",[552,32,42,277,553,42],"49719730","francislavoie",[555,556,42,277,557,42],"49715212",24,"nzoschke",[559,560,45,561,562,42],"49722938",25,"project\u002Fcritical\u002Fdocs","flossly",[159,564,45,369,160,42],26,[247,566,18,411,248,42],27,[568,569,18,411,570,42],"49722484",28,"rramon",[572,573,18,411,305,42],"49723525",29,[575,35,50,337,317,42],"49727885",[577,578,18,508,579,42],"49713231",31,"lolakutty",[581,578,42,508,11,45],"49713777",[583,578,45,584,579,42],"49714570","project\u002Fcritical\u002Fdesign",[586,587,42,277,588,42],"49723714",32,"molsongolden",[590,587,42,277,591,42],"49723772","ra",[593,271,18,411,594,42],"49719818","rupertsworld",[596,33,42,277,597,42],"49718577","probablyStimmed",[193,599,18,411,194,42],35,[601,599,42,546,11,45],"49745759",[603,599,50,337,194,42],"49750404",[122,605,45,499,123,42],36,[607,605,42,608,11,45],"49714212","project\u002Fneutral\u002Fprivacy",[610,611,18,534,612,42],"49728495",37,"admiralrohan",[141,614,45,274,142,42],38,[616,617,18,411,618,42],"49715933",39,"starcast2026",[620,617,42,290,621,42],"49716058","messh",[201,623,18,624,202,42],40,"project\u002Fmixed\u002Fdesign",[626,627,45,274,628,42],"49767813",41,"shamsalom94",[152,630,45,274,153,42],42,[632,633,18,411,634,42],"49713460",43,"blamestross",[636,633,42,411,11,45],"49713705",[638,633,45,274,634,42],"49715475",[221,640,18,508,222,42],44,[126,642,45,499,127,42],45,[644,645,18,411,646,42],"49720862",46,"shepherdjerred",[648,649,50,337,650,42],"49721696",47,"nbhankes",[652,653,18,531,654,42],"49729675",48,"anderspetersson",[163,656,45,369,164,42],49,[658,659,18,451,660,42],"49715044",50,"uneekname",[662,663,18,411,664,42],"49722351",51,"radicalbit",[179,666,45,528,180,42],52,[668,669,45,274,670,42],"49713352",53,"fdeth",[137,672,45,528,138,42],54,[674,675,18,411,676,42],"49713473",55,"tonymet",[678,675,42,679,11,45],"49714406","project\u002Fneutral\u002Fperformance",[681,675,50,682,676,42],"49715400","project\u002Fpositive\u002Fperformance",[684,685,18,373,686,42],"49722284",56,"rtpg",[688,689,45,274,690,42],"49718939",57,"yuedongze",[692,693,45,274,694,42],"49718210",58,"4ndrewl",[696,697,45,499,447,42],"49715645",59,[699,700,18,411,701,42],"49726475",60,"MattCruikshank",[703,700,42,277,345,42],"49726889",[705,700,42,277,701,42],"49728716",[707,708,18,451,709,42],"49721236",61,"jayde2767",[711,712,50,337,713,42],"49716439",62,"bbstats",[103,715,50,337,104,42],63,[717,718,45,528,719,42],"49716541",64,"altern8",[721,722,50,723,724,42],"49712757",65,"project\u002Fpositive\u002Fnone","pmkary",[726,727,45,528,728,42],"49713998",66,"xd1936",[730,727,42,290,731,42],"49714337","j-pb",[733,727,42,290,734,42],"49714350","mionhe",[736,727,45,369,415,42],"49714521",[738,727,18,451,441,42],"49714469",[740,741,18,451,742,42],"49720503",67,"xori",[175,744,18,451,176,42],68,[95,746,50,337,96,42],69,[748,749,42,277,750,42],"49714779",70,"orliesaurus",[],[753,758,763,768,772,777],{"id":754,"name":755,"points":756,"category":757},"49711544","Fugleramme",2391,"creative",{"id":759,"name":760,"points":761,"category":762},"49637385","rivendell.dmitrybrant.com",633,"learning_science",{"id":764,"name":765,"points":766,"category":767},"49693971","Inflight Simulator",446,"games",{"id":769,"name":770,"points":771,"category":762},"49649789","Bodily Oddities",341,{"id":773,"name":774,"points":775,"category":776},"49712102","modem-thing",210,"hardware",{"id":778,"name":779,"points":780,"category":781},"49659647","Hacker News, without AI",207,"consumer_social",false,"v2",{"id":785,"name":5,"line":6,"ai":782,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":786,"top":18,"kw":787,"maker":11,"domain":10,"tier":19,"attempts":42,"strip":788,"url":9,"mix":789,"praise":91,"objection":119,"sub":21},49712278,-0.13,[24,25,26,27,28],"1000053125513453003235135133321231313514",[32,33,34,35],1793991166981]