[{"data":1,"prerenderedAt":353},["ShallowReactive",2],{"project-41678652":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":47,"what":48,"said":82,"maker_in_thread":203,"shape":205,"grid":209,"attempts":316,"same_week":317,"maker_shows":42,"maker_hidden":345,"reader_version":346,"card":347},"41678652","Better Auth","Comprehensive authentication library for TypeScript","title","Show HN: Comprehensive authentication library for TypeScript","https:\u002F\u002Fgithub.com\u002Fbetter-auth\u002Fbetter-auth","github.com","khanmitdoit",1727509919,2024,72,44,1056,3515,31,"notable","security_privacy","authentication library","library",[24,25,26,27,28],"typescript authentication","auth library","passkeys","oauth","session management","roasted",-0.496,{"positive":32,"neutral":33,"mixed":34,"critical":35},2,7,4,16,29,{"execution":38,"idea":40,"docs":43,"design":44},{"positive":39,"critical":34},0,{"positive":41,"critical":42},1,3,{"positive":39,"critical":32},{"positive":41,"critical":34},[41,46,42,39,39,41,42,39,39,39,39,42,41,42,41,39,39,41,42,41,41,41,41,42,42,41,42,42,41,46,41,39,42,39,41,41,41,41,42,39],5,"The most comprehensive authentication library for TypeScript",{"problem":49,"audience":55,"pricing":66,"motivation":66,"time_to_build":66,"stack":67,"openness":81,"stage":81,"team_size":81},{"value":50,"source":51,"evidence":52},"Handling user authentication in TypeScript applications","inferred",[53],{"id":54},"post",{"value":56,"source":51,"evidence":57},"TypeScript and Node.js developers building web apps",[58,62],{"id":59,"by":60,"text":61},"41682072","9dev","With direct dependencies on Node.js modules, you outright prevent using other runtimes like Cloudflare workers, Deno, etc. Node has decent support for WebCrypto, for example,…",{"id":63,"by":64,"text":65},"41682105","melenaos","It might be better auth, but it really needs better docs! Is this for node.js projects? I thought it would be something for a client side project.",null,[68,72],{"value":69,"source":51,"evidence":70},"TypeScript",[71],{"id":54},{"value":73,"source":74,"evidence":75},"Node.js","commenter",[76,77],{"id":59,"by":60,"text":61},{"id":78,"by":79,"text":80},"41682329","bekacru","The only place where \"node\" is necessary is for password hashing, and as there’s no cryptographically secure way to hash passwords on CF Workers or other edge runtimes it's not…","unknown",{"praise":83,"objections":102,"requests":140,"questions":160,"alternatives":169},[84,95],{"value":85,"source":74,"evidence":86},"Docs and website look clean and polished",[87,91],{"id":88,"by":89,"text":90},"41681094","bbor","Can you share your reasoning behind the tagline? It seems like a hard sell, which doesn't necessarily help the otherwise gorgeous looking website and solid-seeming API choices.…",{"id":92,"by":93,"text":94},"41681798","apsurd","The website is beautifully done. Here it is: https:\u002F\u002Ffumadocs.vercel.app\u002F edit: wow, i'm having fun and getting motivated by the creator. glad i went down this Saturday morning…",{"value":96,"source":74,"evidence":97},"Has passkeys support",[98],{"id":99,"by":100,"text":101},"41682288","dagmawibabi","Better auth has passkeys",[103,107,118,128],{"value":104,"source":74,"evidence":105},"Depends on Node.js modules, so limits other runtimes like Cloudflare Workers and Deno",[106],{"id":59,"by":60,"text":61},{"value":108,"source":74,"evidence":109},"No JWT support, which many commenters use",[110,114],{"id":111,"by":112,"text":113},"41682778","codr7","Likely the most comprehensive library lacking JWT support. I can't remember last time I used anything but JWT at work.",{"id":115,"by":116,"text":117},"41683178","claytongulick","I was wondering about this too. The project explicitly states it as a non-goal, which seems odd to me as I haven't dealt with a REST api that was session based in a decade.…",{"value":119,"source":74,"evidence":120},"Name is too generic and hard to search for",[121,125],{"id":122,"by":123,"text":124},"41681360","jakubmazanec","I cannot comment on the quality of the library, but please change the name to something else than \"Better auth\" - such generic names are difficult to search for. You do want your…",{"id":126,"by":123,"text":127},"41682476","I seriously doubt that. If I google Best auth, or \"Best auth\", or best-auth, or \"best-auth\", I'm getting generic results (eg. a Reddit thread about best auth library).",{"value":129,"source":74,"evidence":130},"Docs lack practical code samples and a why section",[131,135,139],{"id":132,"by":133,"text":134},"41682980","vunderba","Looks interesting but the README desperately needs a few practical code samples to demonstrate usage. Sidenote: HN generally frowns on creating sock puppet accounts to post…",{"id":136,"by":137,"text":138},"41682112","bilater","The API looks basically the same as any auth library and i have no idea how you approach this differently than other solutions? I checked out the docs and it looks great and you…",{"id":63,"by":64,"text":65},[141,148,156],{"value":142,"source":74,"evidence":143},"Add generic OAuth\u002FOIDC\u002FSAML SSO support",[144],{"id":145,"by":146,"text":147},"41681375","mnahkies","Looks pretty interesting, I see it supports social logins but doesn't look like generic oauth oidc \u002F saml is supported yet - I think that'd be the killer feature, as rolling your…",{"value":149,"source":74,"evidence":150},"Add practical code examples to the README",[151,152],{"id":132,"by":133,"text":134},{"id":153,"by":154,"text":155},"41687885","utkut","This looks promising! I agree with the need for more practical examples in the README. Authentication can be tricky, and clear code samples would definitely help to highlight how…",{"value":157,"source":74,"evidence":158},"Add comparisons with next-auth, Supabase auth and similar",[159],{"id":136,"by":137,"text":138},[161,165],{"value":162,"source":74,"evidence":163},"How does this differ from other auth libraries?",[164],{"id":136,"by":137,"text":138},{"value":166,"source":74,"evidence":167},"Is it for Node.js only or client-side projects too?",[168],{"id":63,"by":64,"text":65},[170,181,188,195],{"value":171,"source":74,"evidence":172},"Lucia",[173,177],{"id":174,"by":175,"text":176},"41692340","thatxliner","What about https:\u002F\u002Flucia-auth.com\u002F",{"id":178,"by":179,"text":180},"41681187","mckirk","Did you take a look at Lucia? If so, what were your thoughts on it?",{"value":182,"source":74,"evidence":183},"Keycloak",[184],{"id":185,"by":186,"text":187},"41683322","blazing234","Why would I use this when I can just use keycloak and call it a day?",{"value":189,"source":74,"evidence":190},"Supertokens",[191],{"id":192,"by":193,"text":194},"41685260","rishabhpoddar","Do checkout supertokens.com - open source auth. We have tons of features and also full TS support.",{"value":196,"source":74,"evidence":197},"next-auth \u002F Auth.js",[198,199],{"id":136,"by":137,"text":138},{"id":200,"by":201,"text":202},"41681311","neilv","I think I'll probably use Lucia for my second attempt, though initially Auth.js looked like it would work more rapidly out of the box. (I threw out the first attempt, and decided…",{"comments":39,"answered":39,"key":204},[],{"commenters":206,"max_depth":46,"maker_replies":39,"first_comment_mins":207,"lifespan_hours":208},33,440,45,[210,212,214,216,220,224,227,231,235,238,241,244,247,249,252,254,257,259,261,263,265,266,269,271,274,277,278,281,283,287,289,293,296,298,300,302,304,308,311,314,315],[59,39,41,211,60,39],"project\u002Fcritical\u002Fexecution",[99,39,46,213,100,39],"project\u002Fpositive\u002Fidea",[78,39,42,215,79,39],"maker\u002Fneutral\u002Fexecution",[217,39,39,218,219,39],"41683117","commenter\u002Fneutral\u002Fexecution","trescenzi",[221,39,39,222,223,39],"41683312","commenter\u002Fneutral\u002Fnone","maxbond",[225,39,41,211,226,39],"41683307","pmdfgy",[228,39,42,229,230,39],"41682649","project\u002Fneutral\u002Fexecution","forty",[232,39,39,233,234,39],"41684736","other\u002Fneutral\u002Fnone","Danjoe4",[236,39,39,233,237,39],"41685240","willio58",[239,39,39,222,240,39],"41685839","mhuffman",[242,39,39,243,60,39],"41690277","commenter\u002Fneutral\u002Fprivacy",[245,39,42,229,246,39],"41693758","radicalriddler",[122,41,41,248,123,39],"project\u002Fcritical\u002Fnone",[250,41,42,251,79,39],"41681462","maker\u002Fneutral\u002Fnone",[126,41,41,253,123,39],"maker\u002Fcritical\u002Fnone",[255,41,39,222,256,39],"41682569","serial_dev",[258,41,39,222,123,39],"41685885",[260,32,41,211,230,39],"41682696",[136,42,42,262,137,39],"project\u002Fmixed\u002Fdocs",[111,34,41,264,112,39],"project\u002Fcritical\u002Fdesign",[115,34,41,264,116,39],[267,34,41,264,268,39],"41683194","digger495",[132,46,41,270,133,39],"project\u002Fcritical\u002Fdocs",[145,272,42,273,146,39],6,"project\u002Fmixed\u002Fidea",[275,272,42,276,79,39],"41681493","maker\u002Fneutral\u002Fidea",[63,33,41,270,64,39],[88,279,42,280,89,39],8,"project\u002Fmixed\u002Fdesign",[282,279,42,276,79,39],"41681442",[284,279,41,285,286,39],"41682484","project\u002Fcritical\u002Fidea","politelemon",[92,279,46,288,93,39],"project\u002Fpositive\u002Fdesign",[290,291,41,264,292,39],"41681969",9,"pdyc",[294,291,39,222,295,39],"41682859","zdragnar",[153,297,42,262,154,39],10,[192,299,39,233,193,39],11,[174,301,41,248,175,39],12,[185,303,41,285,186,39],13,[305,306,41,285,307,39],"41680737",14,"splatterxl",[309,306,41,211,310,39],"41681069","davedx",[312,306,42,313,201,39],"41681082","project\u002Fneutral\u002Fidea",[178,306,39,222,179,39],[200,306,39,222,201,39],[],[318,323,328,332,336,340],{"id":319,"name":320,"points":321,"category":322},"41710227","Tavus",455,"ai",{"id":324,"name":325,"points":326,"category":327},"41701644","qrframe",401,"dev_tools",{"id":329,"name":330,"points":331,"category":327},"41711032","Sourcebot",259,{"id":333,"name":334,"points":335,"category":327},"41695756","CrystalClear Audio",223,{"id":337,"name":338,"points":339,"category":327},"41683144","htmgo",166,{"id":341,"name":342,"points":343,"category":344},"41654723","Cronexpr",160,"languages",false,"v2",{"id":348,"name":5,"line":6,"ai":345,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":349,"top":18,"kw":350,"maker":11,"domain":10,"tier":19,"attempts":39,"strip":351,"url":9,"mix":352,"praise":85,"objection":104,"sub":21},41678652,-0.5,[24,25,26,27,28],"1530013000031310013111133133151030111130",[32,33,34,35],1794036661799]