Show HN: Caddy 2 - <AUTHOR> https://caddyserver.com/v2 <comment><AUTHOR> Hi HN -- this is what I've been working on for the last 14 months, with the help of many contributors and the backing of several sponsors. (Thank You!)

Caddy 2 is a fresh new server experience. Some things might take getting used to, like having _every_ site served over HTTPS unless you specify [http://](http://) explicitly in your config. But in general, it will feel familiar to v1 in a lot of ways. If you've used v1 before, I recommend going into v2 with a clean-slate using our Getting Started guide: [https://caddyserver.com/docs/getting- started](https://caddyserver.com/docs/getting-started)

I'm excited to finally get this out there. Let me know what questions you have!

<comment><USER2> Hey Matt - thanks for creating and maintaining Caddy all these years! Like others have said in this thread, it is so easy to set up and maintain that it really does feel like "magic".

In terms of speeding up adoption of Caddy 2, it may be useful to have a list somewhere of the concrete improvements between the two (as I'm sure there are many). A (very) brief look and search around only yielded this article[1] which referenced another link of improvements that now 404s[2].

Cheers,

[1] [https://caddyserver.com/v1/blog/caddy-2-ready-for- developers](https://caddyserver.com/v1/blog/caddy-2-ready-for-developers)

[2] [https://github.com/caddyserver/caddy/tree/v2#list-of- improve...](https://github.com/caddyserver/caddy/tree/v2#list-of-improvements)

<comment><USER3> Adoption for me would be to have an official apt repo :)

<comment><AUTHOR> I mean, we want one too, but it's ridiculously hard: [https://news.ycombinator.com/item?id=23072385](https://news.ycombinator.com/item?id=23072385)

Help? :D

<comment><USER4> I think the parent poster would already be happy with an APT repo provided by Caddy. It wouldn't need to be included in Debian itself.

When you can make dpkg files, making an apt repo is trivial (using reprepro shipped with Debian)

And when it's your repo, you make the rules about packaging what dependencies into which file(s)

But by having an apt repo (that users would subscribe to), you make it much easier for users to keep up to date

<comment><USER5> We do have one!

[https://caddyserver.com/docs/install#debian-ubuntu- raspbian](https://caddyserver.com/docs/install#debian-ubuntu-raspbian)

<comment><USER6> Oooh this is great news, I can finally quit updating Caddy by hand!

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> I know that HN is usually the first to outrage when a project website is too verbose or does not explain the product, but I just want to take a moment to say WHAT A GREAT WEBSITE Caddy has!

\- The first screen tells me everything I need to know about what Caddy is and why it stands out

\- Scroll down on how to setup (hattip to whoever did the angled asciinema embed. Looks so cool)

\- Every page worth of scroll is _exactly_ the right amount of information with links to dig deeper

\- The Upcoming features at the end is such a great touch as well.

\- All this in a UI which looks absolutely great!

Excellent work guys and congratulations on the V2 launch! Been playing with Caddy quite a bit for personal projects, and been a very happy user. Will definitely be using v2 more! :)

<comment><AUTHOR> D'aww, thank you!

I was really nervous to post this on HN because HN has also been the source of great misery for me in the past, frankly. But I'm relieved at the overall positivity today. Maybe because it's Star Wars Day we're all in a good mood?

I'm glad you like the landing page. Took me a couple weeks of trying and throwing designs away, then a few days of concerted effort, just standing in front of my text editor cranking out HTML and CSS best I could muster. The visual touches aren't perfect but I'm quite pleased.

... come to think of it, reading the criticism from HN on other projects made me hyper-aware of certain things, like explaining what the product actually does, and how to lay it out, and not mess with scrolling, etc etc. (But not the toxic comments, I skip those.)

<comment><USER8> You have a really impressive site about a really impressive product. Kudos.

The only constructive criticism I'd offer immediately for the new updates is that they look very light on detail about setting up a production deployment on different platforms -- things like running Caddy as a service that starts automatically, monitoring its health and restarting if necessary, ensuring that any important security updates are known about and installed, etc. It's great to have so much that "just works" and a simple developer experience demonstrated immediately, but the other stuff is still important too.

Edit: I see [https://caddyserver.com/docs/install](https://caddyserver.com/docs/install) now talks about some of these issues for Caddy 2. In that case, perhaps it would be useful to add a prominent link there from the v2 page at [https://caddyserver.com/v2](https://caddyserver.com/v2)? I was half-expecting the "Download" button to take me to such a page, and was very surprised to find myself sent to GitHub (particularly since there are neither instructions about downloading nor visible links to the assets to download actually visible on the GH page you arrive at).

<comment><AUTHOR> Thanks -- honestly, the website was the least of my concerns up to this point, but it'll get more attention now that the software is actually released.

<comment><USER8> In that case, having a smart and informative site already is even more of an impressive achievement. :-)

I don't personally think much needs to change dramatically. It's already useful and seems reasonably well organised. As someone who hadn't previously heard of Caddy other than incidentally and who is currently setting up some new projects for which Caddy is a very interesting find this evening, that production-ready setup information is _the_ key information that was missing for me until I found the other page (and as it happens, I found it via a link that wingworks helpfully posted in this HN discussion, not via browsing the Caddy site or a search engine).

If I were to add one other possibly helpful point, the configuration via HTTP request idea is interesting, but everywhere I've seen it mentioned on the site so far seemed to imply it is on by default and did not say anything about locking it down. Again, this looks potentially useful for a quick start experimenting with Caddy or maybe for development purposes, but it doesn't seem like a killer feature and it's obviously a concern for using it in production if anything like that doesn't default to safe.

<comment><AUTHOR> Please do try to mount an attack on your server's admin endpoint; let me know if you're able to break into it.

Keep in mind that if your system runs untrusted code, all bets are off: there's not really anything we can do as a single user space process to protect it. If your system runs untrusted code, you'll need to make sure your _system_ is locked down properly... maybe you can use a permissioned unix socket for the admin endpoint, or just disable it entirely... it's really up to you. I think our defaults are safe though. Let me know if they aren't.

<comment><USER8> Sorry, maybe I wasn't clear.

I was trying to explain that during my initial browsing of the Caddy site, I found several references to using the API endpoints to configure Caddy, but nothing in the same places to say how to secure it or whether it was enabled by default. I wasn't talking about any sort of cunning attack, simply the issue of having such functionality accessible to anyone who could visit /config/ and knew anything about HTTP.

I did later discover the relevant configuration in the JSON config structure documentation, including the flag to disable it that is what I really wanted to know about. It just seemed like the kind of important detail that would be worth linking from places that introduce the REST API, such as the section about it on your v2 landing page, if you're refining the site.

<comment><USER9> My understanding is that the config is available via localhost only. It most instances it does not need to be disabled. I think the hope is that it will be left enabled in production, not disabled.

<comment><USER8> You mean because it's on a different port that typically wouldn't be opened in the firewall to allow remote access?

<comment><USER5> The default listen address is "localhost:2019", which means it'll only accept requests from apps running on the same machine. If you're running untrusted code on the same machine, then that might be problematic for you. You can also change the admin endpoint to be a unix socket instead of a TCP endpoint which allows you to use linux file permissions to protect it.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> I started using caddy v1 thanks to lightning-fast and simple TLS setup and extremely simple configuration in general, thanks to the excellent docs and handy plugins for common stuff like cors, rewrites and fastcgi.

Shortly after upgrading to caddy v2, I switched to nginx, after spending way too much time trying to make sense of the new Caddyfile and docs (the thing I miss the most of the docs is the plugin list, along with the cors plugin, and in general the non-existant entry curve of Caddy v1). Tbh, I also miss the one-liner install script <3

I'm genuinely sorry for the project; I didn't mind at all any of the previous so-called shady behavior (I personally don't object at all against a developer trying to make a living out of his own open-source project); I've been using caddy for four years now, and I really hope to switch back to it, one day.

Thank you for your work, mholt! <3

<comment><AUTHOR> As francislavoie said, the website with its nice one-click custom download page and list of registered plugins is a lot of work. It'll come, but it's not ready yet. Much like the v1 release 5 years ago where the interactive download page didn't come until about a year later, it'll take some time. Hopefully not a full year though. :)

I've already got the new build server mostly written -- should be way faster.

<comment><USER11> Maybe this has changed since I looked at things yesterday, but I couldn't find a list of default plugins anywhere on the website, nor how to configure those default plugins. I think this is what the person you're replying to is talking about.

On the old site, there was a plugin documentation page that made it trivial to see what the plugins were called and what options they took.

I eventually asked my local copy of Caddy what plugins were available, which answered one of the two questions, but am I missing some kind of documentation page?

The interactive, custom build page is an unrelated, but also interesting topic. About a year ago, I was using abiosoft's Caddy Builder image to build a Caddy docker image with the plugins I wanted, but this no longer seems to work even for Caddy V1, and I don't think it has been updated for V2. It would be awesome if there were an official Caddy Builder docker image. Even if the website existed, I would still have to wrap that binary in a docker image somehow for my own use cases.

But, these are all just my personal opinions -- I'm sure you have your own priorities for the project, and I'm excited to see V2 has officially released!

<comment><USER12> The list of core plugins (now called modules) is here: [https://caddyserver.com/docs/modules/](https://caddyserver.com/docs/modules/)

If you're navigating from the homepage, click on "Documentation" at the top, then click on "modules" on the left navbar just above "JSON Config Structure". That list is generated directly from the source code, so it is the definite list of what's included by default and supported by the native JSON config.

The other way is, as you found out, to run `caddy list-modules` to get the definitive list of what's packed into the binary.

<comment><USER11> Thanks, this is what I was looking for!

</comment></comment></comment></comment></comment><comment><USER13> I have been using Caddy for quite some time now, as a replacement for "python -m SimpleHTPServer" and by just flipping a switch as real webserver and this is such great news. I am so happy you end up going down the route of an open license, this right here is a game changer. I can't even begin to imagine the ins and outs that must have been crossing your mind in the last year. But, as things stands, I am very sure there is a bright future for Caddy. What a fantastic piece of software. I am one more to be grateful for this product. Thank you. You are helping people.

</comment><comment><USER14> I recently switched my site from using Amazon Linux 1 + Apache + manual setup to Amazon Linux 2 + Caddy 2 + automated Ansible setup. The documentation for Caddy 2 wasn't quite 100% at the time, but it looks like it's in much better shape now. But Caddy 2 just worked, and gave me SSL seamlessly out of the box, zero config. Love it! My entire Caddyfile looks like this:

       giftyweddings.com {
         encode gzip
         reverse_proxy localhost:8080  # Go web server
       }

       www.giftyweddings.com {
         redir https://giftyweddings.com{uri} permanent
       }

Also, mholt's "Caddy saves money" quip on the homepage was true in my case. After the switch I was able to downsize my instance to a very small size and save about 50% on my AWS bill, down to less than $10 per month. Not entirely sure it was due to Caddy, but I "blame" it on that anyway. :-)

<comment><USER14> The one thing I found tricky was getting the systemd config file correct (I'm not a Linux pro). Looks like he's addressed that too, with this README and demo systemd config -- nice! [https://github.com/caddyserver/dist/tree/master/init](https://github.com/caddyserver/dist/tree/master/init)

<comment><AUTHOR> That systemd file was def. a community effort.

Glad to hear Caddy is working for you!

</comment></comment></comment><comment><USER15> YESSS so happy there's now an apt install method:

        echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
        apt update && apt install caddy

<comment><USER3> Yeah, not gonna use just any apt source. I'll pass.

<comment><USER5> You may already know this, but it's very tricky to package Golang projects in official debian repos because they require that every dependency be a separate package. This is a ton work both upfront and to maintain in the long-term, so we haven't made much progress on that front.

We'd love to get some help from people who are more comfortable with the debian ecosystem though! It's definitely something we want to achieve, but for the short term we had to make the decision to simply release the .deb via [https://gemfury.com](https://gemfury.com) which provides us with free APT repo hosting for open source projects.

<comment><USER3> So you're saying that even if your app compiles to a single binary, that's a requirement?

I understand why, but it's indeed quite a pain.

<comment><USER5> Yup. It's a bummer. [https://go- team.pages.debian.net/packaging.html](https://go- team.pages.debian.net/packaging.html)

<comment><USER16> Unless I'm missing something, that only says you need to package all dependencies if it is a library. Which means you could make a binary-only statically compiled package without adding a bunch of dependencies right?

Of course, that isn't helpful if you need to compile with extra plugins, but in that case you are probably using standard go tools and not apt packages anyway.

<comment><USER5> See [https://github.com/Debian/dh-make- golang/issues/131](https://github.com/Debian/dh-make-golang/issues/131)

We were specifically told that we would need to have all our dependencies packaged. Debian needs to be able to validate that it was built entirely from source code from library packages, not from a binary built externally.

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> I liked v1 a whole lot. I'm interested in v2, though I'm extremely skeptical of the additional complexity of the config adapter layer ([https://caddyserver.com/docs/config- adapters](https://caddyserver.com/docs/config-adapters)) - I'm more or less sold on having an internal JSON structure with a DSL on top of it (allowing dynamic/programatic config is really interesting), but the idea of having _multiple_ different DSLs or config syntax bindings for it seems a bit much.

The biggest feature in Caddy 2, from what I can tell, is the new HTTP config API, and I'd love to see a practical example of what could be done with that.

<comment><AUTHOR> Don't worry about the "additional complexity" \-- config adapters are modular, and only the Caddyfile adapter is baked into the standard modules. Just plug in the adapters you need. Caddy functionality can grow rather infinitely without bloat because of this.

Some adapters are 1:1 translations so they are just a few lines of code: [https://github.com/caddyserver/json5-adapter/blob/master/jso...](https://github.com/caddyserver/json5-adapter/blob/master/json5.go)

True, the Caddyfile adapter is a bit of a beast because it is extensible itself -- but it's a _lot_ cleaner and more flexible than the v1 implementation, where the Caddyfile was its _native_ config syntax.

Believe me, this is a big improvement.

Anyway, you don't have to use the adapters if you don't want to. That's the beauty of it.

More info on the architecture and config adapters:

\- [https://caddyserver.com/docs/architecture](https://caddyserver.com/docs/architecture)

\- [https://caddyserver.com/docs/config- adapters](https://caddyserver.com/docs/config-adapters)

</comment></comment><comment><USER18> Awesome! We use Caddy at Sourcegraph ([https://sourcegraph.com/search?q=caddy+repo:%5Egithub%5C.com...](https://sourcegraph.com/search?q=caddy+repo:%5Egithub%5C.com/sourcegraph/sourcegraph%24+f:dev/&patternType=regexp)) and love it. Caddy makes it much easier to run our app in local dev (with HTTPS and other nice things).

<comment><USER19> Same here! We are huge fans of Caddy at Narration Box ([https://narrationbox.com](https://narrationbox.com)) and we are considering replacing NGINX completely in our Django production stack. (Currently we only use Caddy for development and staging) The author of Caddy, Matt Holt, is a really great person and is extremely responsive on Twitter and GitHub. Highly recommend checking them out.

<comment><USER20> I'm really curious your reasons / why you like Caddy over Nginx. Thoughts?

<comment><USER19> Nginx requires too much configuration. It is very brittle if you do not have a full time DevOps person monitoring things. E.g. for production web apps, take a look at the amount of tooling that has been developed to manage Nginx:

[https://www.digitalocean.com/community/tools/nginx](https://www.digitalocean.com/community/tools/nginx)

[https://github.com/yandex/gixy](https://github.com/yandex/gixy)

This is not a criticism of Nginx per se, it comes from a time when Apache is the only other alternative and end-user UX is hardly priority. An analogy would be systemd and pm2, pm2 have few advantages over systemd on paper but in practice it has a much more pleasant UX and saner defaults even though it requires a separate installation on most servers while systemd is available by default. It is the difference between Heroku and AWS. For the 99th percentile of efficiency Nginx still beats Traefik and Caddy, but sometimes scaling servers is cheaper than hiring DevOps staff.

</comment></comment></comment></comment><comment><USER21> I love Caddy 1, been using it for years after my annoyances with nginx. I've never looked back. Built-in TLS setup is amazing but the killer is that you can host a website with only a few lines of configuration in a single file. Now I'm managing dozens of websites with a single file with only ~4 lines of config per domain (most of it is the same).

I was nervous about Caddy 2 because I could imagine the core was better but I couldn't fathom how the config process could be any better than v1 (my favorite part). I was wrong - the v2 config introduces some clever ideas which makes it better too. It has a great simplicity to it that is extremely powerful and I found that I could get rid of a couple of the plugins I used with v1 because you can harness the power of the v2 matchers to do so many things.

Thank you mholt and thank you francislavoie, Caddy 2 is awesome!

</comment><comment><USER22> I am a happy user of Caddy v1, and I want to thank you developers! It's made my life much easier, managing TLS automatically for my home server, and having a less than 10 lines adequate config for 3 web services I use behind it. I even forgot I was using Caddy, which is a proof of how great it is for systems integration.

I'll be looking forward to v2 in a few weeks, when I will upgrade to newer ubuntu and go full ZFS.

Thank you!

<comment><AUTHOR> Love reading stuff like this, thank you.

</comment></comment><comment><USER23> I just heared about Caddy v2 four days ago on a reddit post and it is awesome! Thanks a lot for your great work :)

It is by far the easiest solution I could find to install a reverse proxy which can route by the URL /api/* and gets an automatic Let's Encrypt Certificate.

</comment><comment><USER24> Hi mholt!, I am building an ecommerce SaaS.Obviously,i will have each domain pointed to my server.Is Caddy a good choice for automatically getting a certificate for each website?Are there any limitations? Thanks!

<comment><AUTHOR> Yes, it is! Ask Jack Ellis at Fathom Analytics, they're doing this for their customers: [https://usefathom.com/blog/bypass- adblockers](https://usefathom.com/blog/bypass-adblockers) \-- and I think they have a new blog post and video coming out soon about it.

Feel free to post in our forums with questions! [https://caddy.community](https://caddy.community)

<comment><USER25> We've had great fun with Caddy for Version 1 of our custom domains feature.

For Version 2, we've done a lot of work with Matt and the solution we've now reached is:

1\. DynamoDB as storage for certificates, allowing sharing between servers without regenerating during an issue with an availability zone

2\. Multiple Caddy reverse proxy servers in different regions

3\. AWS Global Accelerator to route the user to the closet server to them

It's so great because we can also proxy our CDN through Caddy (yes, it needs to go through the user's custom domain), and we've got insanely fast response times on that.

We've load tested the proxy servers and they can handle an incredible amount, we're very pleased with the solution.

I will be publishing and sharing an article soon, detailing my journey and our final solution.

<comment><USER26> Love this! I'm really REALLY interested in this post because I'm facing the same issue and TBH I'm not that great with servers myself.

</comment></comment></comment></comment><comment><USER27> I used caddy on and off for many years and finally went back for good.

For one, the community support is fantastic. Matt, Francis, you will not recognize me from my name here but you were first class helpers (and still are).

The fact that caddy has an API is a breakthrough. Automating config provisioning is a godsend

I belive that you child easily take over Traefik in the edge router space if configuration was a bit more modular (today is is Caddyfile, or API and no external sources of data such as the docker daemon (there was some discussion about that with the owner of Lucas Lorentz @lucaslorentz but it is I think dead-ish).

I moved yesterday all my prod from Traefik to caddy and it works just great.

Thanks a lot for caddy!

<comment><USER5> Thanks for the kind words! It's appreciated :)

</comment></comment><comment><USER28> For all the criticism of golang, the fact that it can be used to craft superb software like this is a testament to its real-world efficacy.

<comment><USER29> Sooo... you bring up something I could use some "learn me somes" on... golang. Recently, in my personal life when choosing a "next language" to learn I chose Rust over Go because it seemed to offer everything Go does, and then some (like them systems level programmings). However, at my current employer, Go has a solid following and I'm unlikely to sell Rust (or even want to[1]): could you please speak to that real-world efficacy or what things you think it does superbly well to enable software like this?

I tried briefly to find some guides on go over the weekend, but an awful amount of them are targeted to using "X web framework," which seems utterly worthless (or boring) to me. I guess, to your point, I could go read through the Caddy source code and see what I find since this seems like a nice and useful application using Go.

[1]: There's almost no reason to sell a team on any new technology if there isn't a substantial gain from it. For the org I am at, I don't believe, Rust offers much over Go for most of the use cases. Sure, it certainly can be _faster_ but who fucking cares? Most of what we do isn't bound by machine time, it's bound by developer time. Thus, I seek to learn me some golang and what virtues it offers.

<comment><USER28> Go is excellent for writing CLI's and network services since it comes with built-in cross-platform sockets, HTTP, easy-concurrency, crypto, SSL and a comprehensive standard library. You don't _need_ an overarching framework. You can pick and choose helper libs if you really need them.

Doing the same in something like C++ or Java is a headache simply because the standard library is not sufficient and you waste valuable time in framework and library decision making.

I learnt golang through books. The traditional GOPL, and OReilly's "Concurrency in Go". "Go Programming Blueprints 2nd Edition" shows how to implement several projects using (mostly) the Go standard library.

(Sometimes developer time is not always the top most consideration though. There is one internal service that we refactored from Python -> Golang -> C++ for low-latency and low-memory performance.)

Not tried Rust yet.

</comment></comment></comment><comment><USER30> Started using Caddy because of OOTB ssl support which literally took 5m setup in container.

Have been running Caddy in production for a year with no issues and much rejoice over my 3 loc config which I can literally memorize.

All praise to Caddy's devs gj

</comment><comment><USER31> I have been using Caddy v1 for more than a year now as a web server for some of my production sites. I'm really happy with the simplicity of it and especially out of the box SSL support with LetsEncrypt. I believe with v2 I will be moving more of my sites to Caddy. Thank you for all the hard work :)

<comment><AUTHOR> Thank you for sharing your experience. Glad to hear it. Feel free to join our forums and be a part of the community! [https://caddy.community](https://caddy.community) \- could always use more people with experience helping out. :)

</comment></comment><comment><USER32> I just upgraded a server to Caddy 2 this past weekend. It's running a single WordPress site.

There were some gotchas in converting the Caddyfile to the new format, but I eventually sorted it out. Caddy 2's method of updating the config made the iteration process a lot faster.

<comment><AUTHOR> Thanks for sharing your experience!

I'll admit I got bit by a few differences between the v1 Caddyfile and the v2 Caddyfile too. Namely forgetting * at the end of a path _prefix_ matcher. (In Caddy 2, path matches are exact, unless you suffix with a *.)

<comment><USER32> How can I best share my config and learnings on this?

<comment><USER12> The Caddy forum[0] would be one place! If you're writing a tutorial, protips, or anything like that, there's a Wiki category just for that.

[0] [https://caddy.community/](https://caddy.community/)

</comment></comment></comment></comment><comment><USER33> Hi Matt,

Thanks for the nice piece of software. I like Caddy a lot. I would like to better integration with docker in terms of automated exposure of docker services based on labels for example. Similar how traefik does. That would be really nice to have.

<comment><AUTHOR> I've always felt like that was kind of a hack, but with Caddy's API it's doable. I don't really use Docker myself, so... want to contribute the feature? I'll show you how to integrate it.

You might be interested in this discussion: [https://github.com/lucaslorentz/caddy-docker- proxy/issues/13...](https://github.com/lucaslorentz/caddy-docker- proxy/issues/130)

</comment></comment><comment><USER9> Excellent. I'm really excited about Caddy 2. We've been using Caddy 1 to server all our main sites over https and simply for the last 4 years. I moved away from Apache and have never ever looked back.

Well done Matt and Francis

<comment><AUTHOR> Thank you Toby :) Glad you've been with us for so long! Thank you for your support.

</comment></comment><comment><USER34> I really like Caddy and use it for general side projects. Super simple setup, handles all the LetsEncrypt certificates for me, can be running different apps on different paths.

<comment><USER35> Same here. Using it for all "small" projects, no idea on what to expect on large ones though.

<comment><AUTHOR> We have several companies using it for tens of thousands of their customer sites. It's the only server we know of that can handle hundreds of thousands of certificates efficiently!

</comment></comment></comment><comment><USER36> This new version looks amazing. I was actually looking at it earlier today. I had to postpone my upgrade because I couldn't find any alternative or how to include the http.git plugin which I rely on. Any direction in that regard will be appreciated. Congratulation for your work.

<comment><USER5> There's a git plugin for v2 here: [https://github.com/vrongmeal/caddygit](https://github.com/vrongmeal/caddygit)

<comment><AUTHOR> Still WIP but very promising, and pure Go too!

</comment></comment></comment><comment><USER37> I am using Caddy v2 in a Nomad cluster to serve static pages. Works great. Time to upgrade to the final v2. Thanks for a great piece of software.

</comment><comment><USER38> Since the author appears to be in the comments, I'll ask here:

What benefits does this provide for the common Nginx usage (reverse proxy to a number of Python/etc application servers)? I see automatic HTTPS and HTTP/2\. Am I missing something else notable?

<comment><AUTHOR> It's written in Go, so right out the gate you get stronger memory safety guarantees than other servers written in C, which results in more secure software on your edge.

Caddy's HTTPS/TLS implementation is among the most robust in the industry - powered by Go's performant and fairly bulletproof TLS stack, and combined with CertMagic's advanced TLS automation logic, your sites can stay online through situations that are problematic for other setups.

Fewer moving parts means less that can go wrong. Caddy will make you more productive and lower your costs.

An on-line config API is nice if you are automating anything.

You might even be able to use your existing nginx config to begin your transition: [https://github.com/caddyserver/nginx- adapter](https://github.com/caddyserver/nginx-adapter)

</comment></comment><comment><USER39> Congrats on the launch Matt. I've been a long time Caddy user as a reverse_proxy for my home server. Using Caddy has been a wonderful experience.

Thanks!

</comment><comment><USER40> You accidentally a word or two here:

> If the latest OCSP staple indicates that a revocation, Caddy automatically > replaces the certificate with a new one.

<comment><AUTHOR> Ha, oops. Thanks.

</comment></comment><comment><USER41> It is nice to see an alternative to Nginx. I am glad that Caddy took a stab at it.

It is good that the author is looking to have some kind of stable monetization too. It's hard enough to maintain OSS from time perspective. I hope that it works out for him.

<comment><USER42> Not the only alternative. There is also wonderful Traefik and hard-to-config Envoy for example :)

</comment></comment><comment><USER43> I see a mention of using it as an ingress controller, but not much in the docs. Is there more details on this or is this better suited to run in a container as opposed to using nginx for that and leave the ingress to traefik/etc?

<comment><USER5> We have an ingress controller plugin here: [https://github.com/caddyserver/ingress](https://github.com/caddyserver/ingress)

It's still very much a work-in-progress and could use help to complete.

</comment></comment><comment><USER44> This is really a side-note. I think Caddy is great.

> Still the only web server to use TLS automatically and by default.

This sounds great at first. It also makes it too easy to hit the Let's encrypt rate-limit by mistake and get stuck for a week. I really think that the default should be to use the staging environment certs[1] instead and have the user actively decide when they are ready to go live.

[1]: [https://letsencrypt.org/docs/staging- environment/](https://letsencrypt.org/docs/staging-environment/)

<comment><AUTHOR> We thought of this! As francislavoie said, Caddy's retry logic involves switching to the Let's Encrypt staging endpoint until the DNS resolves properly. That is coupled with exponential backoff.

Hitting the staging endpoint as a test isn't a perfect thing, by the way -- it can help where DNS records are misconfigured, but for things like rate limits or other state _internal to the CA server_ , switching endpoints will only give you a false positive.

So, better to not hit that problem in the first place, and to make sure your DNS records are configured properly first.

You can read more about these best practices here: [https://docs.https.dev/acme-ops#avoid-using-a-production- ca-...](https://docs.https.dev/acme-ops#avoid-using-a-production-ca-endpoint- while-testing-or-developing)

</comment></comment><comment><USER29> How fast is this bad boi? Or are there any benchmarks I can look at? I can tell the sell here, isn't "fastest EVAR" but how fast is it? Or where is fucking righteous, and where is it horrible? I'm guessing it's doing okay since it's

Regardless, looks super cool, and excited to give this a try. One last thing... great job on the website, seriously 11/10 for a developer/command- line tool. Clearly says it does, shows some neat shit it does, and even looks pretty darn good doing it :)

<comment><USER45> some benchmarks posted at [https://caddy.community/t/caddy-v2-http-2-http-3-benchmarks/...](https://caddy.community/t/caddy-v2-http-2-http-3-benchmarks/8052/)

</comment></comment><comment><USER25> Huge fan of Caddy. The on-demand TLS is incredible.

<comment><AUTHOR> 5 years later and it still feels like magic.

(Thank you, Let's Encrypt)

</comment></comment><comment><USER46> As a webdev noob, the amount of simple and powerful features is astonishing. Just look at that: [https://caddyserver.com/docs/caddyfile/directives/reverse_pr...](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy)

Thousand line nginx config files reduced to nothing. You can literally run it "configured" from the command line.

<comment><USER47> But this is pretty much at the level of nginx config, except that nginx had more time and has more features and more flexibility because of that.

</comment></comment><comment><USER48> The pairing of Caddy & LetsEncrypt have been spectacular for shipping TLS software with way less pain.

We're currently on a funny (Caddy docker external reverse proxy -> Nginx docker internal reverse proxy -> docker app) config. Our user admins can do custom TLS via Caddy, and thereby end the years of Nginx TLS pain. Meanwhile, we get to keep doing most of the fun Nginx tricks internally to make sure our GPU graph visual analytics streaming tech does cool things. It's been a breath of fresh air.

We've been watching Caddy 2. Project history like phoning home for a school project (this might have gotten people sued and endangered others!) taught us to be especially careful w/ upgrades, but w/ Nginx going open core startup and now being part of F5, I've gone pretty down on Nginx and up on Caddy over the last few years. The more we want to do more w/ Nginx, the more we want to get off Nginx for the internal proxy, so looking forward to Caddy continuing to improve!

</comment><comment><USER49> Is there a quickstart that just goes: do this to make a reverse proxy? i.e. you have a great manual, but I'm looking for a tutorial.

<comment><USER50> I'm afraid I agree with a few sibling comments here, the documentation, although good, still feels a bit light for 2.0 (I recently set up a caddy reverse proxy on a legacy host, in order to be able to avoid an old version of openssl - and decided to go with 2.0 - then in pre-release).

That said, if your needs are simple, the examples are pretty good - a caddy file shouldn't have to be too many lines:

[https://caddyserver.com/docs/caddyfile/directives/reverse_pr...](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy#examples)

Ed: or see the quick-start section - linked in a sibling comment.

</comment></comment><comment><USER51> I just realised that caddy and PapaParse - two things I've used quite a lot - were built by the same person. Nice!

</comment><comment><USER52> Is the license still the same. Pay for commercial user or compile on your own. Any change over the years?

<comment><USER53> Changed: [https://github.com/caddyserver/caddy/issues/2786](https://github.com/caddyserver/caddy/issues/2786)

</comment></comment><comment><USER54> Hi @mholt, thanks a lot for Caddy. It is really awesome and we are considering using it for www.mailerlite.com landing pages. The problem that we have right now is that there is no Cloudflare plugin built-in for V2 so it is a show stopper for us.

Congrats on the release!

<comment><AUTHOR> Cloudflare plugin, that does what exactly?

You mean like this one? [https://github.com/caddy- dns/cloudflare](https://github.com/caddy-dns/cloudflare)

(I'm using it today, works great. Assuming that's what you meant.)

<comment><USER55> How to use this plugin with a Caddyfile?

<comment><AUTHOR>
        tls {
            dns cloudflare <api_token>
        }

Replace <api_token> with your API token, or you can store it in an env variable and use {env.CLOUDFLARE_API_TOKEN} for example.

<comment><USER54> That's what I already tried and got:

Error during parsing: getting DNS provider module named 'cloudflare': module not registered: tls.dns.cloudflare

Using latest docker image.

<comment><AUTHOR> "Latest", as in "1 hour ago" latest, or "15 minutes ago" latest? Because the 2.0 image (not RCs) is needed and I think it only got published a few minutes ago.

Edit: You also need to plug it in.

        xcaddy build --with github.com/caddy-dns/cloudflare

<comment><USER54> I have just tried again, used caddy:latest and got the same error. Didn't mean to take much of your time, I can open up a GitHub issue if it's the better way to resolve this.

EDIT: I have just seen your edit. Will try and report back.

Thanks for your time!

<comment><USER5> Make sure to run "docker pull caddy"!

Also, see the docs on docker hub: [https://hub.docker.com/_/caddy/](https://hub.docker.com/_/caddy/)

You'll need to build Caddy with the builder image to add the DNS plugin, see the section titled "Adding custom Caddy modules".

<comment><USER54> Yes, it works like this, thanks @mholt and @francislavoie for the help. I thought it was baked into caddy already. :-)

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER56> I really like Caddy and use it e.g. in Try Playwright: [https://github.com/mxschmitt/try- playwright/blob/master/fron...](https://github.com/mxschmitt/try- playwright/blob/master/frontend/Caddyfile)

For me as a user, the documentation is sometimes not very clear if it comes to Caddyfile syntax vs. JSON. It would be maybe better to always provide both or configurable via some switch e.g. (maybe its only for me not always fully clear).

-> Great product, nice security settings by default and for me definitely the way to go.

</comment><comment><USER57> Love the simpler middleware system. This will go a long way.

</comment><comment><USER58> Found out about Caddy 1 when I was trying to enable https using Let's Encrypt cert years ago, it was easy to setup and it just work.

Well done on Caddy 2 and thank you!

</comment><comment><USER59> Is there a caching layer/plugin for Caddy 2? http.cache existed for Caddy 1, but I couldn't find it in the Caddy 2 documentation.

<comment><AUTHOR> We have a WIP distributed cache module here: [https://github.com/caddyserver/cache- handler](https://github.com/caddyserver/cache-handler)

</comment></comment><comment><USER60> The REST API for dynamic updates is attractive. Was it influenced by Envoy? Are there any influences/overlap with Envoy? Is Caddy overlapping in the space of Envoy in any notable way?

I will say that getting started with and learning the configuration landscape of Envoy is quite painful, so the simplicity and approachability of Caddy has always been attractive.

<comment><AUTHOR> > Was it influenced by Envoy?

Not really -- it was more like, I sat down and thought about it: "I want to be able to change ANYTHING about my server using a simple REST endpoint. Hmm..." and then I remembered that JSON can be traversed using path-like notation. I'm not the first to implement this kind of API, but it wasn't a borrowed design. It's elegant as heck though. Every time I use it, I'm like "Ahhh that felt nice."

> Are there any influences/overlap with Envoy?

Probably, but I don't use Envoy. I'm pretty confident that Caddy 2 is capable of doing anything Envoy can do (with the added benefit of memory safety) -- just gotta write modules for it, maybe with some extension to the core to expose surface for those modules to hook into, but shouldn't be too hard to do that.

> Is Caddy overlapping in the space of Envoy in any notable way?

Yeah I think so; it's a greatly flexible reverse/sidecar proxy.

I hope you enjoy using it!

</comment></comment><comment><USER61> Looks great. I have fond memories of Caddy 1.x, but I keep looking for a reverse proxy that can do social auth to protect selected endpoints (I was betting on Traefik having an easy to setup extension for that, but 2.x has been a challenge in other ways...).

Anyone know if Caddy 2 has any such extension beyond the basic auth provider I see in the docs?

<comment><USER5> Yep! greenpau has been doing a ton of work on authentication modules recently.

See here for a list of some of the plugins we have available so far for Caddy v2: [https://caddy.community/t/list-of- caddy-2-modules/7839](https://caddy.community/t/list-of-caddy-2-modules/7839)

A user has been working on an OAuth2 plugin recently: [https://caddy.community/t/caddy2-redirect-from-within- caddya...](https://caddy.community/t/caddy2-redirect-from-within-caddyauth- authenticator/7804)

<comment><USER62> Is the JWT plugin usable yet? There are no instructions.

<comment><USER5> I just contacted the maintainer and he let me know it should be ready to use in the coming days. Check back in a few days! :)

<comment><USER62> Thanks for asking. It's the only thing keeping me from switching over really.

<comment><USER5> FYI the docs are now up if you want to try it out and give feedback (open issues on github) [https://github.com/greenpau/caddy-auth- jwt#overview](https://github.com/greenpau/caddy-auth-jwt#overview)

</comment></comment></comment></comment></comment></comment><comment><USER63> Slightly disappointed because they changed the Caddyfile syntax. I think it's a bit more verbose now, compared to v1.

<comment><AUTHOR> Some parameters might have one or two more words to type, but the growth in flexibility is enormous, and we felt it was worth the tradeoff. You can see a comparison here: [https://caddyserver.com/docs/v2-upgrade#caddyfile](https://caddyserver.com/docs/v2-upgrade#caddyfile)

We also think _slightly_ more verbosity in the v2 Caddyfile is actually a good thing. Aside from more flexibility, it makes it a little clearer what's going on, and concerns are better separated.

For example, the reverse proxy is no longer in the business of rewriting requests: there are other directives for that.

In fact, we completely got rid of "rewrite hacks" that involved appending path components to the URI so they could be routed, then needing to strip those before proxying.

Request matching is very powerful in Caddy 2: you can still easily match on paths in-line with your handler directives, but you can also match on any other part of the request (client IP, query string, regular expressions, etc) with an intuitive @-block syntax: [https://caddyserver.com/docs/caddyfile/matchers](https://caddyserver.com/docs/caddyfile/matchers)

Anyway, I think you'll feel right at home with it after a while. I've been using it for months now and it's _so simple_ overall.

(I also use the JSON config directly on a couple of my servers, where the behavior I need to express is way more elegant and concise than in the Caddyfile.)

<comment><USER63> Thanks for the response! Looking forward to upgrade my stuff. Is there a reason why you decided to introduce an entirely new configuration method via JSON?

<comment><AUTHOR> Yep, there are several reasons, you can read about them here: [https://github.com/caddyserver/caddy/wiki/v2:-FAQ#why- json-f...](https://github.com/caddyserver/caddy/wiki/v2:-FAQ#why-json-for- configuration-why-not-any-other-serialization-format)

Basically, it is highly interoperable and allows us to build config adapters on top of it, so you don't _have_ to use JSON if you really don't want to. Most people use the Caddyfile. You can use YAML or TOML or CUE if you prefer those. Or heck, you can use your nginx config: [https://github.com/caddyserver/nginx- adapter](https://github.com/caddyserver/nginx-adapter)

</comment></comment></comment></comment><comment><USER64> I've started using caddy 2 couple of days ago, I am using Caddyfile because json based configuration looks really awful and is hard to maintain (quick changes take a lot of time). The only problem I've encountered is that you can't turn off TLS for a route using Caddyfile. Why is that?

<comment><AUTHOR> You definitely can, just prepend your site address with [http://](http://) or use port :80 (the HTTP port).

More info:

\- [https://caddyserver.com/docs/caddyfile/concepts#addresses](https://caddyserver.com/docs/caddyfile/concepts#addresses)

\- [https://caddyserver.com/docs/automatic- https#overview](https://caddyserver.com/docs/automatic-https#overview)

</comment></comment><comment><USER59> Does Caddy request separate certificates for domains served through it, or is it handled using SANs?

<comment><AUTHOR> Both, technically.

CommonName has been deprecated for years, so all of Caddy's certificates (and all of Let's Encrypt's) are SAN certificates. Caddy manages single-SAN certs, in accordance with recommended best practices: [https://docs.https.dev/acme- ops#use-one-name-per-certificate](https://docs.https.dev/acme-ops#use-one- name-per-certificate)

(We learned from experience that single SAN scales better and is less prone to troubles. For example, Caddy sites were not affected by the recent Let's Encrypt revocation incident because it manages only single-SAN certificates. And frankly, that shouldn't matter since you don't have to manage them.)

<comment><USER59> Ah, TIL.

I was asking because right now my nginx/certbot setup requests a single certificate for all my domains, and I would like to have them separate.

(I'm sure you can do that with certbot, I just haven't tweaked my setup, yet)

<comment><USER65> A certificate can be issued for as many, or as few domains as you'd like.

Look at certbot's -d parameter, this does not have anything to do with nginx, apache, caddy or any other web server.

<comment><USER59> Is that also possible when using --nginx? Or only in "vanilla" mode?

<comment><USER65> The nginx autoconfiguration plugin has no influence on how many domains the certificate you're requesting will be valid for.

Example: We run a SaaS on our client's domains, so for every client, we have to run `certbot -d subdomain.client1.com,client1.ourdomain.com,staging.client1.ourdomain.com,...`

That means we run certbot with ~4 domains (we include staging and other subdomains) for each client we have. This is highly automatable.

Whether you use nginx autoconfiguration or not is up to you.

<comment><USER59> I don't understand you.

Does the nginx autoconfiguration allow separate certificates, or do you simply say "don't use that"?

<comment><USER65> No no, you should totally use separate certificates (for our SaaS that's crucial, otherwise we would let our competitors know who our entire client base is, if all the domains would be included in one certificate)

I don't know too much about certbot's nginx plugin, I don't use it and don't see the benefit to be honest, we ran into problems with it (it didn't work for us because our clients have to set up a CNAME DNS entry, and that domain has to be included in the certificate)

We simply run certbot without the nginx plugin, and then have a config template for new virtual servers in nginx, based on a template. Certbot's nginx plugin would mess with our config constantly, changing from version to version, leaving artifacts, and we didn't like that.

<comment><USER59> Thanks for the advice! I'll look at it all on the weekend.

<comment><USER65> Good luck! I'd also recommend splitting the config into multiple files, like it has been best practice for the last decades [1] (link goes to Arch (which I also recommend using) but the advice is not Arch specific)

[1] [https://wiki.archlinux.org/index.php/Nginx#Managing_server_e...](https://wiki.archlinux.org/index.php/Nginx#Managing_server_entries)

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER66> and does it currently work with python apps that work via wsgi?

<comment><USER5> There's no wsgi transport built-in, we haven't found any golang libraries that let us do this yet. For now, until we find a solution, we recommend using something like gunicorn and use the `reverse_proxy` directive in Caddy to proxy to it.

<comment><USER15> I'm no *SGI expert, but ASGI might be easier to bridge with the Golang-style concurrency-model than WSGI. Not sure if there are any libraries for go<->ASGI yet though.

<comment><USER5> A quick search is telling me no.

[https://www.google.com/search?q=golang+%22asgi%22](https://www.google.com/search?q=golang+%22asgi%22)

<comment><USER15> This one looks semi-legit but inactive [https://github.com/ostcar/geiss](https://github.com/ostcar/geiss)

<comment><USER5> Yeah we can't use an archived repo, unfortunately.

</comment></comment></comment></comment></comment></comment><comment><USER67> At what point does one use Caddy over writing a server with few lines in Go/Node. A bit confused on the use case of Caddy.

<comment><USER68> Use Caddy wherever you'd otherwise use Apache HTTPD, nginx, IIS, traefik, Kong, etc...

<comment><USER69> Why traefik? They both seem to be amazing modern web servers

</comment></comment></comment><comment><USER70> Great work and good luck for launch of this.

</comment><comment><USER71> Is there a tool that will parse a v1 config and report breaking changes and recommendations for upgrading to v2?

<comment><AUTHOR> Nothing automated, but our upgrade guide will get you most of the way: [https://caddyserver.com/docs/v2-upgrade](https://caddyserver.com/docs/v2-upgrade)

Still, I recommend just going into v2 with a blank slate and just discover it anew. :)

</comment></comment><comment><USER72> Great work Matt, congrats on the launch!

<comment><AUTHOR> Ah, I knew I recognized that username!

Thanks Andrew ;)

How'd your thesis defense go? Wish I could have... ya know... been there.

</comment></comment><comment><USER73> Is anyone here using Caddy with Dokku? I'd love to replace Nginx with a technology I know.

<comment><USER5> If you're just using nginx as a reverse proxy in your setup, it's almost certain Caddy can do the job! Come ask for help on the community forums if you need it [https://caddy.community](https://caddy.community)

</comment></comment><comment><USER74> Will there be a time when performance will be relevant for Caddy?

<comment><AUTHOR> Is it too slow for you?

<comment><USER74> In comparison with other webservers it is slower. For me it's okay but metrics!

<comment><AUTHOR> * Citation needed? (I mean, yes, of the thousands of dimensions of a web server, Caddy is not the fastest or leanest in all of them, but what's important to you?)

Counterpoints:

\- [https://twitter.com/mattiasgeniar/status/1249751608721911814](https://twitter.com/mattiasgeniar/status/1249751608721911814)

\- [https://twitter.com/JackEllis/status/1257396020662673414](https://twitter.com/JackEllis/status/1257396020662673414)

<comment><USER75> Counter-counterpoint: [https://twitter.com/fuolpit/status/1257633475634626560](https://twitter.com/fuolpit/status/1257633475634626560) :)

</comment></comment></comment></comment></comment><comment><USER76> I'm not trying to offend anyone but am I the only one here who doesn't like the way this tool is pitched? It is mentioned on HN like a dozen times before.

</comment><comment><USER77> Soo who is building a UI for caddy servers?

<comment><USER12> A wild UI was observed [https://github.com/shynome/caddy2-ui](https://github.com/shynome/caddy2-ui) ! So it can probably be a community effort

</comment></comment><comment><USER78> I somewhat remember the Caddy team having a history of shady behavior: advertisements in headers, hostility towards contributors, telemetry you have to opt-out of. Has any of this changed or has it become worse?

<comment><AUTHOR> The headers was one of the worst days of my life, believe me. I heard your feedback loud and clear and they were removed shortly thereafter... now about 3 years ago: [https://caddy.community/t/the-realities-of-being-a-foss- main...](https://caddy.community/t/the-realities-of-being-a-foss- maintainer/2728?u=matt)

The telemetry server was shut down months ago and v2 has no telemetry client. Although, the counts we gathered were informative. We learned a lot about MITM activity on the Internet, the health and maturity of TLS clients, and how many connections Caddy has secured (trillions, if you're wondering).

As for whether things have gotten worse, I suppose that's up to you!

<comment><USER79> Why did you do it? What have you sought to achieve with it? It's always a head scratcher for me why people building open source tools would put time and effort towards telemetry. Advertisments in HTTP headers? That's a new one. Advertise to whom, devs looking at a browser debug console?

<comment><AUTHOR> It was for a class during my grad program. It was an academic interest in understanding client behavior on the Internet that wasn't limited to proprietary networks like Cloudflare or Google.

We collected some good measurement data -- anonymous, technical, non-personal, etc -- but the terabytes added up and the academic community didn't seem particularly responsive to it in the end. The "opt-in" / "opt-out" depended on how you built/obtained Caddy, but essentially we made it a compile-time decision so that we could reduce biases from the data. By deciding on the download page whether telemetry was enabled, we could also know how representative the data actually was: otherwise it'd be meaningless.

We also wanted to know how widely Caddy was being used. Telemetry was mostly just counts of things, so that's how we know that Caddy has secured trillions of HTTPS requests and managed millions of certs. But it was expensive to run.

The "ads" in headers were _intended_ to be a friendly nod to our sponsors who made it possible. It was a novel idea. I thought it was a good balance of non- intrusive and perfectly visible at the same time: developers who were peering into HTTP requests would see the headers and our sponsors would get some benign recognition from their target audience, while nobody else would see them. It also was supposed to encourage purchasing commercial licenses, which didn't have that header. The licenses were necessary to continue funding a desperately underfunded project.

Needless to say that didn't work out and the only reason the Caddy project didn't shut down entirely is because corporate sponsors (Ardan Labs and one other to be announced probably next week) believed in the project enough to pick it up.

So anyway, I also got college credit for implementing an Internet measurement system, which was really fun and interesting. And as mmalone said adjacently, open source projects _really_ need to know what kind of usage they're getting. With no way to engage customers except at their voluntary discretion, it's impossible to know how to improve the project. Open source is, by definition, an open feedback loop. It only closes if users come back and provide information.

A lot of other major open source projects or free software ship telemetry, even on by default sometimes -- see Windows, Chrome, Ubuntu, Firefox, VS Code, macOS, and countless others. Yet nobody cares.

But having that information was critical in shaping the development of Caddy 2, FWIW.

<comment><USER80> >Yet nobody cares.

People care about each and every one of those. It's disingenuous to pretend that Caddy was singled out.

<comment><USER5> Look at the amount of vitriol Caddy got when it originally announced telemetry: [https://news.ycombinator.com/item?id=16958674](https://news.ycombinator.com/item?id=16958674)

It's not a stretch to say that other projects didn't get as much hate for it. It really hurt the project's momentum when there was such a strong reaction against it.

<comment><USER80> It is absolutely a stretch. Mozilla is _still_ catching hell for it. People have _switched operating systems_ over this. Caddy is no different in that regard... except that its creator did the right thing and got rid of it. Mozilla and Microsoft haven't.

</comment></comment></comment></comment></comment></comment></comment><comment><USER81> EDIT: No more Telemetry nvm

<comment><AUTHOR> It's out. The server was shut down months ago and v2 doesn't have a telemetry client at all.

<comment><USER81> Thanks for letting me know!</comment></comment></comment>


The Field Equations of Gravitation (Nov 25th 1905) - <AUTHOR> http://einsteinpapers.press.princeton.edu/vol6-trans/129 <comment><USER2> The date is not 1905 but 1915. And I think 1915 is only the beginning of the general relativity. Also Hilbert was one day late on Einstein's publication.

[https://en.wikipedia.org/wiki/David_Hilbert#Physics](https://en.wikipedia.org/wiki/David_Hilbert#Physics)</comment>


Dos and Don's in Pull Request Review - <AUTHOR> Common PR issues are:
- The PR is too long. The PR is left open. No one reviews the PR.
- The reviewer keeps nitpicking minor mistakes. The author keeps repeating the same mistakes.
- The conversation is not responsive. Discussion becomes steamy. Nothing is resolved.
To nurture a healthy PR process, both author and reviewer should have a mutual understanding of the following 16 common dos and don'ts in PR review:
1. Fast but Not Furious 2. Small 3. Precise 4. Review Before Creating 5. Reply and React ...
Read more
https://link.medium.com/LomQ2URqp1 <comment><USER2> Link un-shortened is [https://medium.com/better-programming/pull-request- etiquette...](https://medium.com/better-programming/pull-request-etiquettes- for-reviewer-and-author-f4e80360f92c)

(Feel free to submit the full article directly. Last time it was blocked because it was a link.medium.com URL I think.)</comment>


Modern Cucumber and Rails: No More Training Wheels - <AUTHOR> http://blog.carbonfive.com/2011/11/07/modern-cucumber-and-rails-no-more-training-wheels/

<comment><USER2> I'm glad Cuke decided to dump web_steps. Features written with those steps really did look terrible. However, I think there is a fine line to be careful of. You can pretty easily wind up with a near one-to-one correlation between features and custom steps. But writing good features and steps should take the same skill and care as writing good code.</comment>


Monitoring my kids browsing activity - <AUTHOR> https://email@example.com/monitoring-my-kids-web-browsing-activity-4871930b06be <comment><USER2> I'm not meaning this as an attack, you are obviously free to parent how you feel best and that may include constant monitoring of internet activity.

But, out of genuine curiosity, how did you go about weighing the psychological effects of your children being under constant surveillance with the want/need to monitor their time spent on a computer? Will you adjust your monitoring as your children age, or leave it in place regardless of age while they live under your roof?

I haven't had to face this decision yet, and I'm not sure how I will approach it down the line as my kid grows. I understand it is a difficult one. But one thing I am hesitant about is the complete normalization of constant surveillance, and the other is that my kid will (perhaps only subconsciously) believe that I do not trust them.

My kid should know they have a right to privacy in this world, and they should know that I trust them. But, I also don't want them exposed to the many negatives of the internet. It's a hard -- if not impossible -- balance to strike, and I am always interested in how parents with older kids weighed the pros and cons of their decision.

<comment><AUTHOR> I think the important part is transparency. My kids know that we can check up on them at any time, we don't hide it. While we don't actively monitor what they do during their free time, there is a mutual understanding that during the school/homework time their focus needs to be on studying and not idle browsing, playing games, or chatting with friends.

I agree with you that you don't want to create a relationship where your kids think you don't trust them. But kids also need to understand that trust is something you earn by being honest and responsible. I rarely check up on my one of my kids with whom I have a high degree of trust.

I am also more worried about what they start doing on the Internet (or what the Internet will start doing to them) once they hit their teen years like being exposed to cyberbullying or child predators. As a parent, I need to be able to shield them from that as much as possible or, at minimum, know when it happens. And I think just like a lot of parents I may struggle with finding the right balance between their privacy and their safety and well-being.

</comment></comment><comment><AUTHOR> And having some fun coding in the process.</comment>


15 Movies the Critics Got Wrong - <AUTHOR> http://features.metacritic.com/features/2010/15-movies-the-critics-got-wrong/

<comment><USER2> That's why I usually don't care what critics say. Or I take it as a clue to do the opposite. Tastes differ. And my taste seem to differ a lot.

This being said, Freddy Got Fingered is one of my favorite movies.</comment>


MySpace turns to games to regain prominence - <AUTHOR> http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2010/03/10/BUF81CDRV1.DTL&type=business&tsp=1 <comment><USER2> _Just as MySpace made a real commitment to music, to have the best musicians and have the best content, we're now making the same type of commitment with games_

Hopefully their game player won't be as nasty as their music player. I mean, yeah, it's great that they did that, and they made a big impact on music in that area, but _wow_ was it nasty the last time I poked it with a stick.

</comment><comment><USER3> In perhaps related news, Chris DeWolfe recently bought a little company called MindJolt which operates the largest arcade portal on Facebook with something like 2.4m daily users.

[http://techcrunch.com/2010/03/03/chris-dewolfe-mindjolt- aust...](http://techcrunch.com/2010/03/03/chris-dewolfe-mindjolt-austin- ventures/)

</comment><comment><USER4> Good luck with that.</comment>


Babylon Health labels clinician a 'Twitter troll' over AI chatbot inaccuracy - <AUTHOR> https://techcrunch.com/2020/02/25/first-do-no-harm/ <comment><USER2> This is pretty worrying, both that there appear to be significant medical issues with the chatbot advice, and that their product analytics aren't mature enough to be able to tell them that.

They claim the doctor who raised concerns ran ~2400 tests, with 20 legitimate errors. An error rate of "0.8%".

The doctor who raised the issues claims this is more like 800 tests run to completion (where you can even get results), and that many of these were repeated tests, so far fewer separate tests. This would suggest an error rate of more like 2.5-10%, depending on how many repetitions he was making.

Separate to this, Babylon published this data about his usage of the app in a press release without his permission. They say this is ok because it's not personal data, but while it likely doesn't count as health data I would say that it is personal data. That said I'm sure one could diagnose Munchausen Syndrome with it, so potentially it is health data. It is _very_ worrying that they have such a cavalier attitude to data protection.

<comment><USER3> As for the personal data aspect, why does that come as a surpise to you? Babylon Health's website is full of Google tracking, which to me raises a huge concern. Now I get you do it in regards to your home page, but when it comes to user account pages, that's really dubious to me.

</comment></comment><comment><USER4> What they should have done was said, thank you for raising these concerns, come work with us or advise on how we can improve our service.

</comment><comment><USER5> Babylon's actions do not surprise me in the slightest. As a former employee I have grave concerns about the way this company operates.

Senior management seems bi-polar at best. The cult like leader preaches great culture and vision on a path to change to world, yet on the other hand being ruthless to the point of people burning out and getting fired (more like "disappeared") for standing up against unreasonable requests and risky management decisions.

Their technology teams and platforms are a shambles. Lots of staff members question the accuracy and validity of the "AI" behind the chat bot. When a simple linear regression used to "predict" your step count is presented as if it is a breakthrough in AI then one starts to worry.

Almost all teams suffer from burnout, low morale and everything is constantly a top priority for management. The average tenure of a permanent employee is 9 months. Not a very good sign for a healthcare company.

I would not be surprised if this turns into a Theranos style scandal. (Just dont ever mention the words Theranos to the founder or higher ups as that will be the end of your time at Babylon)

</comment><comment><USER6> Babylon Health is lucky to have him do their testing for free. normally you have to pay SMEs a lot to test your application</comment>


Sentence Tree: Visualize sentences as you type - <AUTHOR> https://foxtype.com/sentence-tree <comment><USER2> Very cool.

Unfortunately, it failed on the first sentence that I typed: "Wherefore art thou Romeo?"

Perhaps it doesn't work on Victorian-style writing.

Still, it's an interesting project!</comment>


U.S. tests nuclear power system to sustain astronauts on Mars - <AUTHOR> https://www.reuters.com/article/us-space-nuclear/u-s-tests-nuclear-power-system-to-sustain-astronauts-on-mars-idUSKBN1F72T8 <comment><USER2> As far as I understand it they are pumping the equivalent thermal energy as an actual operating core would produce into the reactor casing and assembly using a specially designed electrical insert that uses external power.

This isn't a fission test. It's a mechanical engineering test. Still cool.

<comment><USER3> From my understanding the fission part is "easy", the hard part is taking the heat and converting to electricity efficiently and reliably.

The Mars Curiosity rover among other probes use a thermocouple based generators to create electricity from the fission heat[1]. Extremely robust , no moving parts, but extremely inefficient just a few percent converted to electricity the rest to heat. The heat is very useful on mars though due to the low temps, kinda like your combustion engine in your car, the waste heat can be used to provide useful heating, but still most needs to be rejected and it only puts out about 100 watts of electricity.

This new one looks to be striling engine based which means its going to have much better efficiency since it is a more standard heat engine with moving parts, prob 20-40%. Hence the higher output. However that comes with much more complexity and things to go wrong over long term use.

I still wonder if there is much more efficiency to be had from thermocouple's if the research effort was put into it, it would be similar to solar cell improvements over the last few decades. You just don't hear about thermocouple R&D and if it where improved to say a typical solar cell efficiency of 18-20% it would open all sorts of doors.

1\. [https://en.wikipedia.org/wiki/Radioisotope_thermoelectric_ge...](https://en.wikipedia.org/wiki/Radioisotope_thermoelectric_generator)

<comment><USER4> In fact the fission[1] part in such small scale is hard. Curiosity and other probes using thermonuclear batteries harness alpha decay[2], which is relatively easy as it happens whether or not you want it to happen, but creates also much less power. In that case the hard part is to obtain material with appropriate half-life and other properties. Perhaps best material for this is Pu-238, which is far more expensive to create than weapons grade plutonium.

1\. [https://en.m.wikipedia.org/wiki/Nuclear_fission](https://en.m.wikipedia.org/wiki/Nuclear_fission)

2\. [https://en.m.wikipedia.org/wiki/Alpha_decay](https://en.m.wikipedia.org/wiki/Alpha_decay)

<comment><USER5> I don't think "thermonuclear" is the right term for the batteries in probes. Wikipedia says "thermoelectric"[1], as the electricity is generated directly by thermocouples.

"Thermonuclear" usually refers to the sorts of fusion reactions found in stars and modern nuclear warheads.

[1]: [https://en.wikipedia.org/wiki/Radioisotope_thermoelectric_ge...](https://en.wikipedia.org/wiki/Radioisotope_thermoelectric_generator)

<comment><USER4> Thanks for correction. Unfortunately I'm not able to edit it anymore.

</comment></comment></comment></comment></comment><comment><USER6> I would love to have more details about this reactor. How much is the total mass? What is the expected power output over time? What kind of heat sink is necessary? But in any case this is really cool development.

<comment> T-A There is a veritable orgy in nuclear tech for space here:

[https://beyondnerva.wordpress.com/](https://beyondnerva.wordpress.com/)

See also

[https://github.com/briligg/moonwards/wiki/Nuclear- Reactors--...](https://github.com/briligg/moonwards/wiki/Nuclear-Reactors </comment></comment><comment>Kilopower-\(KRUSTY\))

</comment><comment><USER7> What happens if the launch rocket fails? That's been the main concern of sending nuclear reactors into space thus far, right? Has this been addressed here?

<comment><USER6> It is too bad that most people are so afraid of anything nuclear. I hate to say it, but maybe people working on nuclear power need to change the name. Isotopic power would have pretty bland associations.

Uranium 235 is a very low level radioactive metal. Even if the rocket blew up, the isotopic fuel would remain intact (that is, not vaporized into breathable particles). The radioactivity from a Uranium 235 isotopic reactor comes after the reactor has been running for some period of time (from byproducts of the nuclear reaction), not the original fuel itself.

<comment><USER8> Consider the thermal Plutonium power sources that have been sent on outer Solar System missions. One of those crashing is a much more serious problem than a new U-235 reactor, since Plutonium is very toxic.

<comment><USER9> Plutonium isn't toxic, not any more than any other heavy metal.

<comment><USER10> It is radiotoxic

<comment><USER9> Nope, it is not. Not anymore than the straight radiation you would get from it.

When you talk of radiatoxicity what is usually meant is the hot particle theory which says that a bit of radioactive material lodged in one place is more likely to cause cancer, because the radiation given off repeatedly hits the same tissue. It turns out that in cohort studies done this is not true. Specifically people who have inhaled plutonium, an inadvisable thing to do, actually have lower rates of lung cancer.

Pu-238 has some radioactivity, although not as much as many fission products. Radioactivity is bad. But the fear over plutonium toxicity is actually overblown beyond the baseline radioactive dose it provides.

</comment></comment></comment></comment></comment></comment><comment><USER11> If each core really is the size of a paper towel roll, then this seems like a solid step toward me eventually owning a nuclear-powered car.

<comment><USER12> This oddly reminds me of the story of Fallout.

[https://en.wikipedia.org/wiki/Fallout_(series)#Setting](https://en.wikipedia.org/wiki/Fallout_\(series\)#Setting)

<comment><USER13> I love the story of Fallout. They decided to use nuclear reactors on cars because there as a lack of petroleum. It was too late though since the Great War started (and ended) a couple of years later.

</comment></comment></comment><comment><USER14> I find it frustrating NASA talking about putting people on Mars but if you look at reality, it can't even put astronauts in the orbit anymore. What about solving that problem first, and when it's done, then we can dream about Mars...

Or are we going to outsource such mundane tasks like manned orbital space flight to the Russians and Chinese forever, while we are proudly preparing the colonization of Mars? /s

<comment><USER15> I find it encouraging the private sector is filling the gap. Musk's vision is clear if you assemble all the pieces his companies have built on Mars: solar and battery power, tunnel boring for both shelter, water, and air (which could imply return fuel he can do O2+H2).

Solar might not be the most efficient for Mars, but he can bring tons of it without messing with nuclear politics and PR. Note also the Boring Company TBM diameter is less than the BFS. Don't be surprised if a TBM one of the first payloads.

[https://en.wikipedia.org/wiki/SpaceX_Mars_transportation_inf...](https://en.wikipedia.org/wiki/SpaceX_Mars_transportation_infrastructure#Passenger_spaceship)

[https://www.boringcompany.com/faq/](https://www.boringcompany.com/faq/)

<comment><USER16> I agree that Elon's companies do have suspiciously many things to do with Mars habitats.

However, the reliability of the tech we have is _severely_ lacking. To get off Mars, you are going to need a rocket. So then you need to land a rocket on Mars.

Fully fueled.

You also need a backup. We simply do not have that kind of reliability yet, and I don't think we're even close.

Fine, we'll fuel it _on Mars_. That means a remote robotic mining-facility and rocket-fuel-plant, in nearly no atmosphere, in cold temps, up to 16 light- minutes away (at worst, true). So it's gotta be totally autonomous. And not explode while people are in transit. And it's likely going be on a pole, so that you have easy access to fuelstuffs. Which is boring as all heck compared to Valles Marianas (not a big deal, admittedly)

If we have that tech on Mars, then the economy of Earth is going to look a LOT different. Self-driving cars aren't the half of it.

Mars, in a nutshell, is VERY Hard.

</comment></comment></comment><comment><USER17> Unanswered in article:

How long does the power unit lasts until you have to replace the paper-towel- roll-sized U-235 core? Where are they going to put the old ones?

What's the plug interface? Can I charge my iPhone? What about my electric razor?

Are they going to test burying one in red sand for 15+ years and see if it can be dug up to phone home in an emergency?

<comment><USER18> And in 15 years, do you need to import a new core from Earth or what - have a uranium mining and refining operation up and running by then?

<comment><USER19> Enriched uranium is one of the few supplies for which it's probably economically sustainable to provide continuously from Earth.

</comment></comment></comment><comment><USER20> Part of Nasa's Game Changing Development program:

[https://www.nasa.gov/directorates/spacetech/game_changing_de...](https://www.nasa.gov/directorates/spacetech/game_changing_development/index.html)

</comment><comment><USER21> _" Testing on components of the system, dubbed KRUSTY..._"

Named after Krusty the Clown?

<comment><USER22> KRUSTY stands for "Kilopower Reactor Using Stirling TechnologY".

<comment><USER23> That's a retronym. Earlier tests in the series were named DUFF.

<comment><USER24> At least they didn't name it HOMER. You don't want that guy in charge of a nuclear reactor.

</comment></comment></comment></comment><comment><USER25> I'm curious, where does one get the nuclear fuel on Mars? Does it have to be flown all the way from the Earth?

<comment><USER26> Definitely. You can probably mine uranium on Mars but that would require a bunch of infrastructure and other power sources. These babys are way down- rated so they can run on a single loading of fuel for decades, like nuclear submarines. Good old E=MC^2.

<comment><USER27> I don't think there is any uranium to be had there. For such heavy elements to get deposited in ore near the surface takes special circumstances, such as those of Earth.

<comment><USER28> What pertinent "special circumstances" do you mean?

<comment><USER29> Tectonic activety I suspect.

<comment><USER30> Tharsis region?

<comment><USER29> When was anything there last active?

<comment><USER30> Does it matter? It's not as if the deposits migrate.

<comment><USER31> On Earth they certainly do, if you choose the right time scale.

<comment><USER30> Right, because the Earth has tectonic activity. Mars? Not so much. Geology should have been stable over the 500 million years since Mars last had significant geological activity.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER32> How will they cool it?

<comment><USER33> It's radiatively cooled, just as RTGs are.

</comment></comment><comment><USER34> I want one!

</comment><comment><USER35> This thread is a great example of why I love HN. I clicked on Comments expecting to see a bunch of "nuclear = devils energy" posts, but what I found was reasoned discussion weighing the real pros and cons of this particular use case.

</comment><comment><USER36> Q

</comment><comment><USER37> I am not sure this is a good idea.

Nuclear reactor is an easy way out of a problem that has alternative solutions. Restriction on using nuclear power for previous missions did a lot of good in terms of researching and perfecting the alternatives (solar arrays).

Restricting the use of nuclear power does not prevent missions, it only adds to the cost of the mission, which is not really a technical problem.

Maybe launching one, fresh, yet inert reactor, is not a big issue. The issue starts when we fly a lot of them and they start falling back to Earth after some service time.

It is relatively easy to build safe reactors on Earth (if only everybody was interested in safety and not their own agenda). It is much more difficult when you are going to shoot the entire device into space and you can't have 1000:1 of shields and casings.

<comment><USER38> There is essentially no actual ecological or serious fear about these devices. The weapons ban was meant to help avoid nuclear exchange between nations; there's very little scientific data that shows there's added cost or risk of thousands of reactors falling to Earth and causing radiation poisoning.

Nuclear is exceptionally safe and all the recent accidents (and ones in the past, really) are all due to human stupidity and bypassing several failsafes. You can argue that's an issue that will never go away, and that's true in the absolute sense, but it's not a nuclear problem. It's a human issue. We're holding ourselves back for scientific research because of arbitrary issues; and the weapons test ban didn't even solve nuclear proliferation anyway.

Solar won't be held back because nuclear is finally an option. They serve two different purposes entirely.

<comment><USER39> > It's a human issue.

Which could be applied to any challenge that humanity face. This basic human weaknesses is always what holds us back in any endeavour. It is dangerous to just dismiss it as "arbitary". You have to deal with these issues if you want to make big projects achieve their objectives.

<comment><USER40> It's fine to put yourself to a danger willingly. It's not fine to put your neighbors to a danger without their consent.

The problem with many pieces of large-scale tech is potential harmful side effects on unrelated people who did not ask for that.

<comment><USER39> Yes, I agree. People are often nonchalant about those low probability dangers. But a single death from Cancer is just as bad as the death of an astronaut, perhaps worse as they have not consented to the risk or understand it. We should care about that, especially as space exploration is such an optional undertaking which people don't have to support. That is why there is a range safety system and why anything radioactive needs to be treated with caution.</comment></comment></comment></comment></comment>


How to register my company in USA from outside & get L-1A (Business Visa)? - <AUTHOR>

Hi, I have been operating my I.T. training & consulting firm for the past 3+ years from Hyderabad, India. Most of my clients are from the USA.
I need help or info to do two things: 1. Register my company in the US.
Preferably a Delaware state registration.
2. Apply for a L-1A Business visa. So I can travel to-from the US freely to develop my company.
If you or your friends have already done this, could you please share some info, links on this. This will help us get started smoothly.
Thanks, Srinath VJ 214 556 9578 +91 94407 19852 email@example.com <comment><USER2> Get in touch with one of the startup lawyers from SF, which usually give you a first overview on the phone for free. You should definitely spend a bit of money to work with on one of them on a simple incorporation. I've personally had very good experiences with George Grellas.

A few of the often mentioned tech startup lawyers include George Grellas (<http://grellas.com>), Scott Edward Walker (<http://walkercorporatelaw.com>), Ryan Roberts (<http://startuplawyer.com>).

<comment><USER3> I second Scott's work. Highly recommend

</comment></comment><comment><USER4> Doesn't it cost somewhere in the neighborhood of $100K to $200K for a non-US resident to move to the US to start a company?</comment>


Ask HN: How will you handle a team member who always comes late and leaves early? - <AUTHOR> <comment><USER2> If I am not not their supervisor and they are not specifically impacting my ability to get my own work done, I would mind my own business. Because it is thankfully not any part of my job description to monitor the time my coworkers spend in office.

<comment><USER3> This. A million times, this.

You aren't aware of what they have going on, who in management they have discussed his with, nor what accommodations have been made for them via management. And they shouldn't have to discuss it with you unless they choose to.

If it's affecting your ability to work (beyond the action itself making you cranky and anxious), then bring it up to your supervisor, and make sure it gets followed up on.

</comment></comment><comment><USER4> That depends on whether he/she delivers or not. I've had people working for me that didn't seem to care about the clock but as long as they delivered their share (and sometimes more) I never cared too much.

What I do have a problem with is people that are there strictly 9-to-5 _without_ delivering. That's a much bigger problem. (Obviously, just being there 9-5 is no problem that should be the norm, that people are only there for the time that you actually pay them.)

</comment><comment><USER5> This breaks down in to 2 situations:

\- They are coming in late and leaving early and completing all their assigned tasks. There is no problem.

\- They are coming in late and leaving early and not completing their tasks. This requires at the very least a discussion about meeting the goals set for this employee and what it means to complete them. If you have a formal discussion with the employee about their goals and how they are not meeting them and they do not improve then you have a case to remove them.

I suppose there are some smaller inconveniences that go along with someone not being around but they can be pretty easily resolved.

\- They should be easily reachable at the very least from 9-5 regardless of the time they actually spend at the office. No one should be stuck waiting on them for an answer to something.

\- Other employees may doing an unfair share of tasks that crop up during the day. If an unexpected task comes down from on high or from a client or whatever you usually task someone handy with with it. If this employee is never around they will likely never be tasked with something like this. Just remember to keep them in mind for things like this and shoot them an email/text to inform them.

</comment><comment><USER6> Two points:

1\. I'm assuming that you mean a team member who comes in late and leaves early, but doesn't do any additional work outside of the office environment? I know of many people who leave the office early and work from home.

2\. The key metric here is delivery - I'd much rather someone who works fewer hours but delivers results over someone who works long hours, but doesn't deliver.

</comment><comment><USER7> Seems like this question is from the perspective of a 9-5er who doesn't have visibility into this person's performance or workflow.

I look like the in-late-out-early guy part of the time, especially when I'm working late at home a lot. If you have to wonder, though, your problem is with management, not me.

</comment><comment><USER8> If he does what he's supposed to do then let him be. If it's affecting his work you better have a talk with him.

<comment><USER9> Exactly that. If it's some "policy" and not something objective you will sound clueless. Many people just sit in corporate environments waiting for the clock to hit 6, and do nothing until they leave. You don't want this kind of behavior.

In case his work is time sensitive, it's a different problem.

<comment><AUTHOR> That's the challenge I am facing. We are very flexible with the timings. It usually works for us. We seldom find people misusing this freedom. But then, once in a while we come across this situation. I am not sure asking the person to stretch a little more will help the coarse. I want him to be motivated intrinsically.

<comment><USER10> _We seldom find people misusing this freedom._

Then you need to clearly communicate expectations. You said elsewhere that you don't expect a full 8 hours, but are unhappy with 4-5. What is the quantity of work you want done? And it can't just be accomplishing tasks on deadline, because your scheduling process is based on a certain number of man hours per week.

 _I want him to be motivated intrinsically._

Intrinsically? OK, how much of the company does he own?

None? LOL. The biggest con perpetrated against programmers is that they can be made to care so much about something that isn't theirs for reasons that aren't money. If this guy is outside of that, it's a more healthy mental state to have about a job. So what do you offer that another employer won't do the same/better on?

</comment></comment></comment></comment><comment><USER11> Approach the problem not in terms of the hours they are working but in terms of the outcomes (whether that's not completing tasks, or lack of availability to clients, or something else).

For example, if they aren't delivering what they should: Have the conversation with them, explaining that they aren't completing the work they should be. They need to do something about this and one solution might be to spend more time it.

Note that this is also the early stage of what in the UK would be the normal process of dealing with under-performing employees, that might eventually result in termination.

</comment><comment><USER12> You left out the important bit: Is he actually working less than 8 hour days (or whatever is the norm in your country), or is he simply working less hours than the rest of the team.

Only in the first case do you need to have that difficult talk with him. In the other case, the best plan would be to use him as an example for the rest of the team to emulate. Get your work finished and get out. If the rest of the team isn't doing that, it'll come back to bite you in terms of long term productivity and team happiness.

<comment><AUTHOR> We don't follow any norms for work timings. We are flexible.

And I wouldn't mind if he finishes his work and moves out. But, it's not happening that way. I am concerned about others in the team who might be demotivated because of this person.

<comment><USER12> Still unclear: Is the guy working 8 hour days or not?

And now extra unclarity: If you are flexible and have no expectations for how many hours comprise a day, how is it possible that one could "leave early?"

If you've handwaved like this to the employee, it shouldn't come as a surprise that his definition of "no norms, flexible" might differ to yours. Give him an expectation, and maybe he'll meet it.

<comment><AUTHOR> This guy isn't working 8 hours a day and we don't expect him to work 8 hours a day.

I don't mind when person finishes his task in couple of hours and leaves the office. But, I am concerned when a person calls it a day after working for 4-5 hours without completing his task. 'Flexible timings' shouldn't translate to 'Flexible work'.

<comment><USER13> It sounds like the issue to less to do with the hours worked and more to do with timely delivery.

Does this person know what the are expected to deliver on any given day/week/month? If not, they may think they are delivering acceptable outcomes.

Can you set clear weekly targets for this person to achieve?

<comment><AUTHOR> Usually, the tasks we have takes weeks or sometimes months to achieve. I think the best approach would be to break down these tasks and track them on weekly/daily basis.

<comment><USER14> I would support that, but weekly only. Daily meetings are typical micromanagement and waste more time and morale than they gain.

Just have a frank chat on the lines of "dude, i hate to say this but we are not delivering. We have to change our ways a bit. Here's a list of things I need in the next two months: you have to nail one each week. I don't care which one, just give me one each week. I ask you because I trust you can do it, I think you have more potential than others. We just have to get something to show, y'know? If that doesn't happen they'll come down on me and make life hard for everyone; but if we show we're running full speed, we become heroes and will have larger buckets when money rains." For extra safety, give him a list 30% to 50% longer than necessary, and review it with him right there to let him drop a few of the scariest items and still have enough to cover the planned timestamp. He will feel a bit more involved in choosing his own destiny.

There is a chance the guy will bolt for good shortly after: this would mean he hated the place already, good riddance. If he stays on and improves his ways, the challenge is on you to keep finding realistic week-long targets, or you can relax it a bit and have two or three-weeks targets instead.

Extra-bonus: have this meeting on Tuesday morning, starting the system the following week. On monday he will hate you, from Wednesday on his morale will suffer; and it gives him enough time to clear any competing interest (either professional or private).

<comment><AUTHOR> That's great piece of advice. Appreciate that.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> correct me if I'm wrong, but given the way you stated the question, it sounds to me your real concern isn't whether she's delivering enough work, but rather, whether her hours will give the impression to the rest of the team that "working less is ok" and potentially demotivate others.

is this what you're asking? if so, might help to clarify that in the question statement

</comment><comment><USER16> If that member survives in the org without getting fired for this behavior, it shows he/she is productive and delivers the result. If at all, you worry it may create negative impact on your organisation's culture, you may offer better position and make use of member's skills for their own as well as organisation's growth leading to win-win situation.

</comment><comment><USER17> * Root cause the issue, this might be just result of motivation issues.(salary, recognition, stress, office politics, not challenging work and etc.I mean you name it.) * Try to find this was the case all the time or just started recently. * Use the scrum(in a micro management way?), let him answer three questions everyday.

Are you his manager or just team member? If you are a team member which means you might also have a problem which appears this way, this guy working hours beside.

</comment><comment><USER18> How long has he been in the company? Is he a new member or is there a track record of delivering/not delivering stuff?

</comment><comment><USER19> I am more interested in how so many people can complete their tasks and manage their time so perfectly everything is done by 6pm and can be picked up at 9am the next day with no hitches.

Amazing time managers, with perfect foresight and judgment abilities.

<comment><USER20> Not really.

My job finishes at 5.30pm, an hour or so before I'll start winding up any bigger jobs ready to pick them up in the morning.

Anyone who's consistently having to work overtime are unable to manage their time correctly.

<comment><USER19> Perhaps a different angle.

If done at 4pm, just leave, do something else, volunteer a project. No need to be seen to put in 'required hours;. Delivery is important. If anyone sticks around for required hours they're being dishonest with their team about their capacity.

For overtime, a good manager depends on honesty of their staff to gauge their capacity. A staff member that sticks around until required time doing nothing but pretending they are doing tasks is being dishonest about their capacity.

</comment></comment></comment><comment><USER21> If the person is not working their full hours commitment that they agreed to to when they accepted the job (e.g. 40 hours for a regular full time job ) it is time for them to go. It is illegal (fraud) to bill for a full days work, but not work the full day for the hours billed.

If they are skimping on things like working a full day without using their vacation time and clearing leaving early with the boss. Then the person is probably skimping on other important things that will eventually come back to bite the team, themselves, or even worse the company.

People that do this are not trustworthy and should be distanced from those that do their full hours and bill their time accurately. Insure the boss knows of the illegal activity so he can work with H.R. to get the person out of there as soon as possible so you can get a more trustworthy replacement. How much work they complete or the quality of it is no substitute for committing fraud.

<comment><USER22> a bit too concerned about form and not enough about function. might want to reconsider your priorities.</comment></comment>


Amazon's internal numbers on Prime Video, revealed - <AUTHOR> https://www.reuters.com/article/us-amazon-com-ratings-exclusive/exclusive-amazons-internal-numbers-on-prime-video-revealed-idUSKCN1GR0FX <comment><USER2> Not surprising that The Grand Tour and The Man in the High Castle are the top two. The Grand Tour is basically just Top Gear, which was one of the most popular shows in the world when it was on, and The Man in the High Castle is pretty unique in terms of the story for a top production budget show. The rest of Amazon's lineup can be described in terms of other shows, like Bosch is a standard cop/detective show with a gritty main character. This shows that Amazon needs to focus on truly original content and not rehash the same old ideas that have been done a dozen times before. All their big winners are unique.

<comment><USER3> I can say The Grand Tour is when I started using Prime Video for anything... their interface is pretty bad in general, imho. Multi-season watching when I first looked into it was atrocious.</comment></comment>


Adding Interval Sets to Redis - <AUTHOR> http://blog.togo.io/how-to/adding-interval-sets-to-redis/

<comment><USER2> For what it's worth, postgresql supports intervals (ranges) as of 9.1. [http://www.postgresql.org/docs/9.2/static/rangetypes.html](http://www.postgresql.org/docs/9.2/static/rangetypes.html)

There's also a fantastic ip4r extension for postgresql that lets you efficiently query IP ranges (which the article says was the motivation for adding interval sets to redis).

I use it for storing maxmind's IP database to figure out where our visitors come from in SQL queries -- given an IP address, I can find the city. zip code, lat/lon, etc. Which lets me easily figure out things like "what percentage of our users that purchased something this year are in this particular UPS shipping zone?"

</comment><comment><USER3> This is a dupe of a post a long time ago, but if you haven't read it, it's a great read and shows how well-architected Redis is.

<comment><USER4> Original thread: [http://news.ycombinator.com/item?id=5663727](http://news.ycombinator.com/item?id=5663727)</comment></comment>


Twas the night before Disrupt - <AUTHOR> http://jordancooper.wordpress.com/2011/05/20/twas-the-night-before-disrupt/

<comment><USER2> Psyched! Here's the official wiki for the hackathon => [https://github.com/hackdisrupt/TechCrunch-Disrupt- Hackathon-...](https://github.com/hackdisrupt/TechCrunch-Disrupt-Hackathon- NYC-2011/wiki)

</comment><comment><USER3> genius.</comment>


The Socialist Lavatory League - <AUTHOR> https://www.lrb.co.uk/v41/n09/owen-hatherley/the-socialist-lavatory-league <comment><USER2> The "Radar Key"s he mentions are very interesting -- standard key for disabled people to access disabled restrooms in the UK: [https://www.bbc.com/news/blogs-ouch-22602836](https://www.bbc.com/news/blogs- ouch-22602836)

</comment><comment><USER3> tory cuts have been deep for a decade now</comment>