[{"data":1,"prerenderedAt":556},["ShallowReactive",2],{"project-31170280":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":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":49,"post_text":51,"what":52,"said":95,"maker_in_thread":224,"shape":234,"grid":238,"attempts":518,"same_week":519,"maker_shows":44,"maker_hidden":548,"reader_version":549,"card":550},"31170280","Caddy","Caddy v2.5.0","title","Show HN: Caddy v2.5.0","https:\u002F\u002Fgithub.com\u002Fcaddyserver\u002Fcaddy\u002Freleases\u002Ftag\u002Fv2.5.0","github.com","francislavoie",1650993619,2022,269,112,167,2570,7,"legend","infrastructure","web server","cli",[21,24,25,26,27],"reverse proxy","automatic https","caddyfile","lets encrypt","mixed",0.133,{"positive":31,"neutral":32,"mixed":33,"critical":34},32,30,4,14,80,{"docs":37,"execution":39,"idea":42,"pricing":45,"design":46,"performance":47},{"positive":38,"critical":33},0,{"positive":40,"critical":41},8,3,{"positive":43,"critical":44},6,1,{"positive":44,"critical":38},{"positive":41,"critical":44},{"positive":44,"critical":48},5,[48,44,48,38,41,48,41,41,48,48,41,48,48,48,33,41,44,41,48,33,41,41,48,48,41,41,38,41,50,41,44,33,44,41,41,41,48,44,41,48],2,null,{"problem":53,"audience":69,"pricing":78,"motivation":51,"time_to_build":51,"stack":85,"openness":92,"stage":93,"team_size":94},{"value":54,"source":55,"evidence":56},"Serving and reverse-proxying HTTP with automatic TLS and simpler configuration than nginx","commenter",[57,61,65],{"id":58,"by":59,"text":60},"31172583","tdhz77","Single binary is nice, live config changes, let’s encrypt is built in.",{"id":62,"by":63,"text":64},"31174043","anotherevan","I'm seriously considering moving from Nginx to Caddy. There seem to be so fewer footguns involved in configuring it.",{"id":66,"by":67,"text":68},"31175206","crummy","Caddy is one of the rare pieces of software I can recommend without caveats. It just makes my life easier, no drawbacks.",{"value":70,"source":71,"evidence":72},"Developers and sysadmins running web services and reverse proxies","inferred",[73,74],{"id":58,"by":59,"text":60},{"id":75,"by":76,"text":77},"31171393","lxgr","Caddy is absolutely amazing. I'm running it on an RPi that's hosting various home automation and hobby projects, all serving HTTP to the loopback interface only, with Caddy…",{"value":79,"source":80,"evidence":81},"Open source; official builds were once commercially licensed but no longer are","maker",[82],{"id":83,"by":11,"text":84},"31186096","No. See https:\u002F\u002Fgithub.com\u002Fcaddyserver\u002Fcaddy\u002Fissues\u002F2786 And to be clear, only builds produced by the official Caddy website used to be commercially licensed (not anymore). But…",[86],{"value":87,"source":80,"evidence":88},"Go",[89],{"id":90,"by":11,"text":91},"31172816","The problem is that existing connections are inside of async functions (goroutines) that have references to the old config. AFAIK, there's no way in Go's stdlib to kill those…","open_source","launched","team",{"praise":96,"objections":120,"requests":161,"questions":181,"alternatives":204},[97,109,116],{"value":98,"source":55,"evidence":99},"Automatic HTTPS and easy configuration",[100,101,105],{"id":75,"by":76,"text":77},{"id":102,"by":103,"text":104},"31171171","qudat","I just used Caddy for the first time for https:\u002F\u002Flists.sh and was super impressed by the automatic TLS. The config was also 2 lines of code. Great work!",{"id":106,"by":107,"text":108},"31171173","always_left","I remember being a newgrad at my startup it was a huge pain to get HTTPS up and running, until I ran into Caddy. Loved it!",{"value":110,"source":55,"evidence":111},"Small configs compared to nginx",[112,113],{"id":102,"by":103,"text":104},{"id":114,"by":11,"text":115},"31172593","Caddy's defaults usually mean your config ends up being 1\u002F4 or less of the size of Nginx ultimately. Often the 'reverse_proxy' directive's defaults are good enough, if the app…",{"value":117,"source":55,"evidence":118},"Single binary and live config changes",[119],{"id":58,"by":59,"text":60},[121,136,147,154],{"value":122,"source":55,"evidence":123},"Documentation is outdated and hard to use, especially for JSON config",[124,128,132],{"id":125,"by":126,"text":127},"31177997","figassis","Caddy is my server\u002Fproxy of choice. It replaced Traefik, but I have one complaint. It looks like the documentation if very outdated. The examples in the official docs or…",{"id":129,"by":130,"text":131},"31178168","tpetry","It‘s in this state since v2 has been released. You will also find either trivial examples for the simple Caddyfile format or the very complex json format. Very often I have to…",{"id":133,"by":134,"text":135},"31171383","evv","Caddy is such a delight! I can't reccomend it fast enough when somebody mentions they are on nginx. Small random feedback: I like the idea of JSON configuration but most of the…",{"value":137,"source":55,"evidence":138},"JSON config is hard to write and read",[139,143],{"id":140,"by":141,"text":142},"31174547","pupppet","I wish Caddy went all in on the caddyfile and dumped the JSON. The meagre examples are split between the two formats, it’s tough trying to figure out how to do something that’s…",{"id":144,"by":145,"text":146},"31174587","eric4smith","Love caddy. We use it 100% on a whole bunch of servers and products. It’s the only tool that can do what it does. But that JSON config file? It’s a mistake. And I’m Being…",{"value":148,"source":55,"evidence":149},"No built-in rate limiting",[150],{"id":151,"by":152,"text":153},"31177560","POPOSYS","Unfortunately it still does not come with some good rate limiting oob, I found https:\u002F\u002Fgithub.com\u002Fmholt\u002Fcaddy-ratelimit which is \"work in progress\" only - not clear if that is ok…",{"value":155,"source":55,"evidence":156},"Performance may trail nginx in benchmarks",[157],{"id":158,"by":159,"text":160},"31176793","nreece","I like the idea behind Caddy, but concerned about performance compared to nginx. Anyone got any real-world production benchmarks? One I found from 2020 shows nginx can handle…",[162,170,174],{"value":163,"source":55,"evidence":164},"Better, more current documentation and complete JSON examples",[165,169],{"id":166,"by":167,"text":168},"31172236","skrause","A few complete, fully working example JSON configuration files for common use cases would be really useful as well.",{"id":125,"by":126,"text":127},{"value":171,"source":55,"evidence":172},"Built-in rate limiting",[173],{"id":151,"by":152,"text":153},{"value":175,"source":55,"evidence":176},"Consul integration for dynamic upstreams",[177],{"id":178,"by":179,"text":180},"31172882","amanzi","The Dynamic Upstreams feature looks good, but it doesn't seem to be as nicely integrated with Consul as Traefik is.",[182,193],{"value":183,"source":55,"evidence":184},"How dynamic upstreams and long-lived connections behave on reload",[185,189],{"id":186,"by":187,"text":188},"31171543","paulgb","Does it have implications for long-lived connections like SSE and websockets? It seems like restarts would have been disruptive to those but now might not be?",{"id":190,"by":191,"text":192},"31171652","mholt","Possibly; the long-lived connections eventually have to end when reloads (note: restarts and reloads are different) happen, to free up resources -- otherwise they leak. (The…",{"value":194,"source":55,"evidence":195},"Whether Caddy is scriptable or has SMTP\u002FIMAP proxying",[196,200],{"id":197,"by":198,"text":199},"31171523","VWWHFSfQ","Is Caddy scriptable? I don't know much about it. But ever since I discovered nginx-lua-module and OpenResty it's been pretty much a game-changer for me. Curious if other popular…",{"id":201,"by":202,"text":203},"31171726","gorgoiler","I utterly adore your project. Thank you so much. Are there plans for SMTP or IMAP proxying? Do you do SNI proxying too? I would love for Caddy to be my one stop shop for all TLS…",[205,216],{"value":206,"source":55,"evidence":207},"nginx",[208,212],{"id":209,"by":210,"text":211},"31172546","okasaki","Setting that up with nginx and acme.sh is pretty easy as well. One benefit I found with using nginx is that services are more likely to have nginx proxy example configs, and…",{"id":213,"by":214,"text":215},"31172467","sgt","I'm a heavy nginx user - there's not much that I haven't already done with it and I know the documentation quite well. Why would someone like me change to Caddy? I can see there…",{"value":217,"source":55,"evidence":218},"Traefik",[219,220],{"id":125,"by":126,"text":127},{"id":221,"by":222,"text":223},"31177348","number6","Back in the days, there was an issue with caddy regarding having to pay for it if you bundle some plugins with it. I can't remember now - must have been years ago. This is why I…",{"comments":225,"answered":226,"key":227},17,10,[228,231,233],{"id":229,"text":230},"31178631","Could you be more specific about these complaints? What examples don't work? We can't work on improving the docs if we don't get specific and actionable feedback. The docs are…",{"id":232,"text":230},"31178621",{"id":114,"text":115},{"commenters":235,"max_depth":18,"maker_replies":225,"first_comment_mins":236,"lifespan_hours":237},60,13,203,[239,242,245,247,250,251,253,254,256,260,262,265,269,270,272,275,279,281,285,288,289,291,293,295,297,299,301,303,305,307,308,311,314,317,319,321,322,325,327,330,332,335,337,339,341,344,348,351,353,355,358,360,363,365,369,373,375,378,382,383,387,391,393,394,396,397,399,401,403,407,409,411,414,416,419,421,425,428,430,431,432,435,436,438,440,443,446,448,450,452,456,459,461,464,469,471,473,477,479,482,485,489,492,495,498,500,502,504,508,510,512,514],[240,38,48,241,191,38],"31170955","maker\u002Fpositive\u002Fnone",[243,38,48,241,244,38],"31171018","config_yml",[125,38,44,246,126,38],"project\u002Fcritical\u002Fdocs",[248,38,44,246,249,38],"31178009","mads",[129,38,44,246,130,38],[229,38,38,252,11,44],"maker\u002Fneutral\u002Fdocs",[232,38,38,252,11,44],[75,44,48,255,76,38],"project\u002Fpositive\u002Fexecution",[257,44,38,258,259,38],"31172145","commenter\u002Fneutral\u002Fnone","simonw",[261,44,38,258,76,38],"31173210",[263,44,38,264,259,38],"31174824","commenter\u002Fpositive\u002Fnone",[266,44,48,267,268,38],"31172403","project\u002Fpositive\u002Fnone","m-p-3",[209,44,44,246,210,38],[114,44,38,271,11,44],"project\u002Fpositive\u002Fdesign",[273,44,48,255,274,38],"31173132","mindwok",[276,44,41,277,278,38],"31174600","project\u002Fneutral\u002Fnone","nyolfen",[133,50,41,280,134,38],"project\u002Fmixed\u002Fdocs",[282,50,38,283,284,38],"31171681","commenter\u002Fneutral\u002Fdocs","codazoda",[286,50,41,287,191,38],"31171707","project\u002Fneutral\u002Fdocs",[166,50,41,287,167,38],[290,50,38,283,191,38],"31173418",[292,50,38,264,134,38],"31173101",[213,50,41,294,214,38],"project\u002Fneutral\u002Fidea",[58,50,48,296,59,38],"project\u002Fpositive\u002Fidea",[298,50,48,296,191,38],"31173423",[300,50,38,258,214,38],"31185118",[302,50,38,258,191,38],"31186169",[304,50,48,296,134,38],"31174337",[221,50,41,306,222,38],"project\u002Fneutral\u002Fpricing",[83,50,38,306,11,44],[309,50,48,310,222,38],"31188994","project\u002Fpositive\u002Fpricing",[312,50,38,313,214,38],"31185129","commenter\u002Fneutral\u002Fpricing",[315,41,48,255,316,38],"31171312","benbristow",[318,41,48,267,191,38],"31171625",[320,41,48,267,316,38],"31172471",[102,33,48,255,103,38],[323,33,48,271,324,38],"31171290","karanbhangui",[326,33,48,241,103,38],"31171323",[328,33,48,296,329,38],"31172033","tbran",[331,33,48,267,103,38],"31172088",[333,33,41,277,334,38],"31172410","pwdisswordfish9",[336,33,41,277,103,38],"31173245",[140,48,44,338,141,38],"project\u002Fcritical\u002Fdesign",[340,48,48,255,141,38],"31174581",[342,48,38,343,11,44],"31174861","project\u002Fneutral\u002Fdesign",[345,43,44,346,347,38],"31171929","project\u002Fcritical\u002Fperformance","therein",[349,43,41,350,191,38],"31172305","project\u002Fneutral\u002Fperformance",[352,43,41,350,347,38],"31174912",[144,18,41,354,145,38],"project\u002Fmixed\u002Fdesign",[356,18,38,357,191,38],"31174714","commenter\u002Fneutral\u002Fdesign",[359,18,38,343,11,44],"31174889",[361,18,48,271,362,38],"31175020","humblepie",[364,18,41,343,191,38],"31175537",[366,40,44,367,368,38],"31175100","project\u002Fcritical\u002Fexecution","charcircuit",[370,371,48,267,372,38],"31172810",9,"andrewstuart",[374,371,48,267,191,38],"31173424",[376,371,41,294,377,38],"31173540","kdasme",[379,371,41,380,381,38],"31175196","project\u002Fmixed\u002Fperformance","joshxyz",[151,226,44,367,152,38],[384,385,48,271,386,38],"31173294",11,"LAC-Tech",[388,389,41,294,390,38],"31173707",12,"qbasic_forever",[392,389,38,277,11,44],"31173749",[106,236,48,255,107,38],[395,236,48,241,191,38],"31171719",[62,34,48,255,63,38],[66,398,48,267,67,38],15,[197,400,41,294,198,38],16,[402,400,41,277,191,38],"31171614",[404,400,38,405,406,38],"31171634","other\u002Fneutral\u002Fnone","mhitza",[408,400,38,277,11,44],"31173148",[410,400,41,277,191,38],"31173439",[412,225,41,277,413,38],"31174751","wolczek",[415,225,38,258,11,44],"31174897",[417,225,38,258,418,38],"31211378","yencabulator",[420,225,38,258,11,44],"31211667",[422,423,41,294,424,38],"31170458",18,"todotask",[426,423,41,294,427,38],"31170655","mysterydip",[429,423,41,294,191,38],"31170932",[186,423,41,350,187,38],[190,423,41,350,191,38],[433,423,44,346,434,38],"31172069","eliaspro",[90,423,38,350,11,44],[437,423,48,296,191,38],"31170781",[158,439,44,346,159,38],19,[441,439,44,346,442,38],"31177039","llanowarelves",[444,439,41,380,445,38],"31177961","ThePhysicist",[201,447,48,296,202,38],20,[449,447,41,294,434,38],"31171985",[451,447,41,277,191,38],"31173450",[453,454,44,367,455,38],"31173777",21,"goodpoint",[457,454,38,258,458,38],"31173852","glasshug",[460,454,38,287,11,44],"31173925",[462,454,38,463,455,38],"31178389","commenter\u002Fcritical\u002Fexecution",[465,466,41,467,468,38],"31170844",22,"project\u002Fneutral\u002Fexecution","torquemodwanted",[470,466,38,467,11,44],"31170881",[472,466,38,467,11,44],"31269501",[474,475,41,294,476,38],"31171115",23,"barkerja",[478,475,41,277,191,38],"31171224",[480,475,41,294,481,38],"31171262","ShakataGaNai",[483,475,41,294,484,38],"31171696","numbsafari",[486,487,41,350,488,38],"31172140",24,"getcrunk",[490,487,48,491,191,38],"31172390","project\u002Fpositive\u002Fperformance",[493,487,48,267,494,38],"31173539","tnolet",[178,496,44,497,179,38],25,"project\u002Fcritical\u002Fidea",[499,496,38,294,11,44],"31173136",[501,496,44,346,434,38],"31174451",[503,496,38,294,11,44],"31174508",[505,506,41,467,507,38],"31178854",26,"hda111",[509,506,38,467,11,44],"31179293",[511,506,38,258,507,38],"31180901",[513,506,48,255,191,38],"31181902",[515,516,48,267,517,38],"31172339",27,"nomoreusernames",[],[520,525,530,535,539,544],{"id":521,"name":522,"points":523,"category":524},"31137324","This AI Does Not Exist",434,"ai",{"id":526,"name":527,"points":528,"category":529},"31185121","Pushy",329,"creative",{"id":531,"name":532,"points":533,"category":534},"31154567","Lists.sh",271,"productivity",{"id":536,"name":537,"points":538,"category":534},"31123522","nosleep.page",252,{"id":540,"name":541,"points":542,"category":543},"31160302","Sqwok",218,"consumer_social",{"id":545,"name":546,"points":237,"category":547},"31163077","Beacon","dev_tools",false,"v2",{"id":551,"name":5,"line":6,"ai":548,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":552,"top":18,"kw":553,"maker":11,"domain":10,"tier":19,"attempts":38,"strip":554,"url":9,"mix":555,"praise":98,"objection":122,"sub":21},31170280,0.13,[21,24,25,26,27],"5150353355355543135433553303231413335135",[31,32,33,34],1794036619605]