[{"data":1,"prerenderedAt":540},["ShallowReactive",2],{"project-32212235":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":27,"sentiment":28,"stance_mix":29,"scored_comments":34,"aspects":35,"strip":44,"post_text":47,"what":48,"said":88,"maker_in_thread":229,"shape":235,"grid":240,"attempts":501,"same_week":502,"maker_shows":32,"maker_hidden":532,"reader_version":533,"card":534},"32212235","Kvass","A personal key-value store","title","Show HN: Kvass, a personal key-value store","https:\u002F\u002Fgithub.com\u002Fmaxmunzel\u002Fkvass","github.com","maxmunzel",1658660749,2022,227,116,231,2570,9,"notable","dev_tools","key-value store","cli",[21,24,25,26],"self-hosted","crdt sync","secrets storage","curious",-0.194,{"positive":30,"neutral":31,"mixed":32,"critical":33},6,26,1,19,52,{"idea":36,"privacy":39,"design":41,"docs":43},{"positive":37,"critical":38},4,11,{"positive":40,"critical":30},0,{"positive":42,"critical":32},2,{"positive":40,"critical":32},[45,32,40,32,32,42,46,46,46,32,32,32,46,46,45,40,40,46,45,40,45,32,40,32,46,46,46,32,40,40,40,32,45,46,46,40,32,32,46,46],5,3,null,{"problem":49,"audience":47,"pricing":47,"motivation":59,"time_to_build":47,"stack":66,"openness":85,"stage":86,"team_size":87},{"value":50,"source":51,"evidence":52},"Sharing files, clipboards and config values between computers without ephemeral servers or USB sticks","maker",[53,56],{"id":54,"by":11,"text":55},"32212701","The primary use case is for shuffling around files or clipboards between different computers. I also regularly use the url-sharing capability. Prior, I had to deal with ephemeral…",{"id":57,"by":11,"text":58},"32212833","Mainly self-hosting and generating share-able urls. If your key's end in \".html\" the mime type is even set accordingly and you can use it for toy-websites ;) This is by no means…",{"value":60,"source":51,"evidence":61},"Redis is in-memory and encryption is cumbersome; wanted offline-capable, self-hosted storage",[62,63],{"id":54,"by":11,"text":55},{"id":64,"by":11,"text":65},"32212875","Redis is in-memory so it's prohibitive for big files. Also kvass still works if its disconnected from the server. This is important, if you want to use it for config files. On…",[67,74,81],{"value":68,"source":69,"evidence":70},"Go","inferred",[71],{"id":72,"by":11,"text":73},"32217182","Hi mbreeze! > this seems to just be a SQLite database with values in fields? Sqlite is used as a storage format (\"SQLite competes with fopen()\"). The key-value pairs are stored…",{"value":75,"source":51,"evidence":76},"SQLite",[77,80],{"id":78,"by":11,"text":79},"32214534","SQLite allows me to keep multiple versions of the same entry, which is convenient for state merging. Half the sync logic is actually implemented in SQL. Other than that, I’m…",{"id":72,"by":11,"text":73},{"value":82,"source":51,"evidence":83},"AES-GCM encryption",[84],{"id":72,"by":11,"text":73},"open_source","launched","unknown",{"praise":89,"objections":106,"requests":144,"questions":172,"alternatives":200},[90,102],{"value":91,"source":92,"evidence":93},"Elegant design and simple API","commenter",[94,98],{"id":95,"by":96,"text":97},"32215107","mattmerc","I don't know much about the other solutions that people are mentioning in the comments, but I have to say... this looks elegant! Great job!",{"id":99,"by":100,"text":101},"32212721","prezjordan","The built-in server and remote support is pretty nice! API seems solid, and I dig the QR codes.",{"value":103,"source":92,"evidence":104},"Built-in server, remote support and QR codes are nice",[105],{"id":99,"by":100,"text":101},[107,122,137],{"value":108,"source":92,"evidence":109},"Unclear why it exists versus files or existing tools",[110,114,118],{"id":111,"by":112,"text":113},"32213028","sigmonsays","i just have a directory in git and store everything in files can anyone help explain what i'd use this for?",{"id":115,"by":116,"text":117},"32213046","pydry","I read it. Im pretty clear on what it does. Im still not feeling the why (or the differentiator from other things that store files and give you URLs). Remember when Dropbox…",{"id":119,"by":120,"text":121},"32212635","markstos","For personal use, I’ve had good luck storing things in files. Then when I need those those things, I read the files.",{"value":123,"source":92,"evidence":124},"Security concerns: custom crypto, replay attacks, plain HTTP, no TLS",[125,129,133],{"id":126,"by":127,"text":128},"32212660","losfair","Nice project! I'm wondering why you choose to implement your own cryptography routines instead of using something standard like TLS. Apparently your `DecryptData` and `Encrypt`…",{"id":130,"by":131,"text":132},"32215002","makeworld","It doesn't matter if the operations are idempotent. The point is that an eavesdropper can replay a message that sets a key, for example, overwriting whatever was there…",{"id":134,"by":135,"text":136},"32213884","mbreese","I have so many questions about this. Much of the architecture seems off to me. I like the concept, but it doesn't seem as secure as it could be. For the README, I'd hope to find…",{"value":138,"source":92,"evidence":139},"Just a wrapper around SQLite",[140],{"id":141,"by":142,"text":143},"32212607","apavlo","But it's just a wrapper around SQLite. Skip the middleman and just use SQLite.",[145,159,166],{"value":146,"source":92,"evidence":147},"Explain the use case and differentiators in the README",[148,152,155],{"id":149,"by":150,"text":151},"32212979","chrisseaton","For example > Its trivial to set up and operate kvass across multiple devices > remember the file we stored earlier? Let's get a shareable url for it!",{"id":153,"by":116,"text":154},"32212951","Dropbox explained itself pretty well. A simple one paragraph why at the top of this project's README wouldnt be amiss.",{"id":156,"by":157,"text":158},"32212704","vander_elst","What's the use case for this (besides being a nice learning project)? I didn't see this on the readme.",{"value":160,"source":92,"evidence":161},"Use TLS or PSK instead of custom encryption",[162,165],{"id":163,"by":127,"text":164},"32212829","TLS is available in pre-shared key (PSK) mode. Looks like there is ongoing work to add TLS-PSK to Go's standard library:…",{"id":134,"by":135,"text":136},{"value":167,"source":51,"evidence":168},"Port URL and QR features to skate",[169],{"id":170,"by":11,"text":171},"32212812","I think it's fair to say that skate is the more mature tool. Kvass on the other hand is more focused and simpler. Especially self-hosting kvass is even simpler than skate, and I…",[173,182,193],{"value":174,"source":92,"evidence":175},"What is the use case for a personal key-value store?",[176,180,181],{"id":177,"by":178,"text":179},"32212494","tkindy","I’m wondering what sorts of use-cases people would use a personal key-value store for. Maybe it’s just a useful foundation for building other tools on top of, like a password…",{"id":156,"by":157,"text":158},{"id":111,"by":112,"text":113},{"value":183,"source":92,"evidence":184},"Why not use Skate or Redis?",[185,189],{"id":186,"by":187,"text":188},"32212756","Sujeto","What does it do better than Skate? Or what additional things does it do, url and qr codes?",{"id":190,"by":191,"text":192},"32212836","vlan121","What is the benefit compared to the private use of Redis? Redis is under BSD licence and continues to be very actively maintained and used.",{"value":194,"source":92,"evidence":195},"Why SQLite instead of Badger?",[196],{"id":197,"by":198,"text":199},"32214321","prussian","Cool. Curious why you chose sqlite instead of something like badger [https:\u002F\u002Fgithub.com\u002Fdgraph-io\u002Fbadger] given you expose it as a key value database, which badger is.",[201,209,213,224],{"value":202,"source":92,"evidence":203},"Skate",[204,205],{"id":186,"by":187,"text":188},{"id":206,"by":207,"text":208},"32219050","resoluteteeth","I use skate to store secrets used by some personal programs. I have scripts that pull out the secrets and set them as environment variables that are used by the programs. This…",{"value":210,"source":92,"evidence":211},"Redis",[212],{"id":190,"by":191,"text":192},{"value":214,"source":92,"evidence":215},"Password managers and pass",[216,220],{"id":217,"by":218,"text":219},"32212696","tjpnz","I already use my password manager for the problem this tool is trying to solve.",{"id":221,"by":222,"text":223},"32219232","nextaccountic","For passwords specifically there's a similar tool, https:\u002F\u002Fwww.passwordstore.org\u002F - but it stores GPG-encrypted plain text files versioned with git, instead of managing a sqlite…",{"value":225,"source":92,"evidence":226},"Plain files in git or directories",[227,228],{"id":111,"by":112,"text":113},{"id":119,"by":120,"text":121},{"comments":230,"answered":37,"key":231},8,[232,233,234],{"id":54,"text":55},{"id":170,"text":171},{"id":78,"text":79},{"commenters":236,"max_depth":237,"maker_replies":230,"first_comment_mins":238,"lifespan_hours":239},74,7,25,150,[241,245,247,249,252,255,259,262,265,269,272,273,274,277,278,279,283,287,290,292,293,294,295,296,297,300,301,303,306,307,310,312,315,318,319,322,324,327,330,332,335,337,340,342,345,346,349,351,354,357,359,362,366,368,370,373,374,378,382,384,387,389,391,393,395,397,401,403,404,405,408,411,414,417,419,422,424,427,430,433,436,440,442,444,446,449,452,455,457,461,464,467,469,473,477,480,485,488,491,494,496,498],[242,40,45,243,244,40],"32213264","project\u002Fpositive\u002Fidea","jamesbfb",[177,32,46,246,178,40],"project\u002Fneutral\u002Fidea",[141,32,32,248,142,40],"project\u002Fcritical\u002Fidea",[250,32,46,246,251,40],"32212653","mosselman",[253,32,32,248,254,40],"32213800","goodpoint",[256,32,40,257,258,40],"32214431","commenter\u002Fneutral\u002Fnone","jonnycomputer",[260,32,40,257,261,40],"32216886","gkbrk",[263,32,32,264,254,40],"32217119","project\u002Fcritical\u002Fprivacy",[266,32,46,267,268,40],"32216297","project\u002Fneutral\u002Fdesign","pdpi",[270,32,40,257,271,40],"32216600","capableweb",[217,32,32,248,218,40],[54,32,40,246,11,32],[275,32,46,246,276,40],"32214509","cyberge99",[206,32,46,246,207,40],[221,32,32,248,222,40],[280,32,46,281,282,40],"32219999","project\u002Fmixed\u002Fidea","traviscj",[284,42,40,285,286,40],"32213394","other\u002Fneutral\u002Fnone","dheera",[288,42,40,285,289,40],"32216415","Skunkleton",[291,42,40,285,286,40],"32216485",[186,46,46,246,187,40],[170,46,40,246,11,32],[197,37,46,267,198,40],[78,37,40,267,11,32],[126,45,32,264,127,40],[298,45,40,299,11,32],"32212771","project\u002Fneutral\u002Fprivacy",[163,45,46,299,127,40],[302,45,40,299,11,32],"32212852",[304,45,32,264,305,40],"32214537","randomhodler84",[130,45,32,264,131,40],[308,45,40,257,309,40],"32216010","DecoPerson",[311,45,40,257,131,40],"32216553",[313,45,40,257,314,40],"32221004","tlb",[316,30,46,246,317,40],"32212599","greatNespresso",[57,30,40,246,11,32],[320,237,46,267,321,40],"32212955","mordae",[99,230,45,323,100,40],"project\u002Fpositive\u002Fdesign",[325,230,40,285,326,40],"32212891","vorticalbox",[328,230,40,285,329,40],"32213565","ponyous",[331,230,40,285,326,40],"32213725",[333,230,40,285,334,40],"32214685","rscrawfo",[336,230,40,285,289,40],"32216388",[338,230,40,285,339,40],"32222523","swah",[341,230,40,285,326,40],"32217114",[343,230,40,285,344,40],"32220499","noisy_boy",[111,18,46,246,112,40],[347,18,45,243,348,40],"32288115","staindk",[190,350,46,246,191,40],10,[352,350,40,285,353,40],"32212867","jbverschoor",[355,350,40,257,356,40],"32218179","drdaeman",[64,350,40,358,11,32],"project\u002Fneutral\u002Fperformance",[360,38,40,285,361,40],"32216095","uwagar",[363,364,46,246,365,40],"32212570",12,"VMG",[95,367,45,323,96,40],13,[134,369,32,264,135,40],14,[371,369,32,264,372,40],"32214128","koheripbal",[72,369,40,299,11,32],[375,376,40,285,377,40],"32218283",15,"mike_hock",[379,380,40,285,381,40],"32217075",16,"mahebub",[119,383,32,248,120,40],17,[385,383,46,246,386,40],"32212796","christophilus",[388,383,40,257,150,40],"32212843",[390,383,32,248,120,40],"32212903",[392,383,45,243,150,40],"32212944",[394,383,40,257,120,40],"32215767",[396,383,40,257,150,40],"32215832",[398,383,46,399,400,40],"32212982","project\u002Fneutral\u002Fnone","kaoD",[153,383,46,402,116,40],"project\u002Fneutral\u002Fdocs",[149,383,46,402,150,40],[115,383,32,248,116,40],[406,383,32,248,407,40],"32213250","amelius",[409,383,40,257,410,40],"32215532","vineyardmike",[412,383,40,285,413,40],"32213234","vbezhenar",[415,383,40,257,416,40],"32213246","NoraCodes",[418,383,40,257,150,40],"32213283",[420,383,40,257,421,40],"32213845","shreyshnaccount",[423,383,40,257,421,40],"32213853",[425,383,40,257,426,40],"32213455","dadoge",[428,383,40,285,429,40],"32213499","whenlambo",[431,383,40,285,432,40],"32213506","lkschubert8",[434,383,32,248,435,40],"32213003","VoodooJuJu",[437,383,32,438,439,40],"32213037","project\u002Fcritical\u002Fdocs","nkrisc",[441,383,45,243,410,40],"32215574",[443,383,40,257,254,40],"32213796",[156,445,46,246,157,40],18,[447,33,46,267,448,40],"32212397","raydiatian",[450,33,46,267,451,40],"32212490","nathell",[453,33,46,267,454,40],"32212790","jve",[456,33,46,399,448,40],"32212900",[458,459,40,285,460,40],"32213486",20,"mkoryak",[462,459,40,285,463,40],"32214116","nibbleshifter",[465,459,40,285,466,40],"32214153","richiebful1",[468,459,40,285,460,40],"32214378",[470,471,32,248,472,40],"32215798",21,"deltasepsilon",[474,475,32,248,476,40],"32212722",22,"d1l",[478,475,40,257,479,40],"32212849","tuxie_",[481,482,32,483,484,40],"32212921",23,"project\u002Fcritical\u002Fdesign","izhak",[486,482,46,267,487,40],"32212997","yreg",[489,482,40,285,490,40],"32213436","t0astbread",[492,482,40,285,493,40],"32214384","brontosaurusrex",[495,482,46,267,487,40],"32215380",[497,482,46,267,439,40],"32213049",[499,482,46,267,500,40],"32213227","Sardtok",[],[503,508,513,518,523,527],{"id":504,"name":505,"points":506,"category":507},"32216436","Hexapipes",537,"games",{"id":509,"name":510,"points":511,"category":512},"32179856","Pg_jsonschema",203,"data",{"id":514,"name":515,"points":516,"category":517},"32240511","Blueboat",123,"infrastructure",{"id":519,"name":520,"points":521,"category":522},"32229278","Plunk",109,"web_saas",{"id":524,"name":525,"points":526,"category":522},"32249392","Birdy",89,{"id":528,"name":529,"points":530,"category":531},"32204938","Famnom",72,"consumer_social",false,"v2",{"id":535,"name":5,"line":6,"ai":532,"cat":20,"year":13,"points":14,"comments":15,"rec":27,"s":536,"top":18,"kw":537,"maker":11,"domain":10,"tier":19,"attempts":40,"strip":538,"url":9,"mix":539,"praise":91,"objection":108,"sub":21},32212235,-0.19,[21,24,25,26],"5101123331113350035051013331000153301133",[30,31,32,33],1794036622911]