cbrewster
cbrewster on Hacker News
Posted by
cbrewster on Friday August 14, 2026 @12:27PM
from the turbopuffer.com dept.
Posted by
cbrewster on Wednesday July 29, 2026 @10:51AM
from the blog.exe.dev dept.
Posted by
cbrewster on Saturday July 11, 2026 @02:15PM
from the zerofs.net dept.
Posted by
cbrewster on Thursday July 09, 2026 @11:25PM
from the restate.dev dept.
Posted by
cbrewster on Tuesday July 07, 2026 @06:40PM
from the rockwotj.com dept.
Posted by
cbrewster on Tuesday June 09, 2026 @03:58PM
from the blog.gitbutler.com dept.
Posted by
cbrewster on Tuesday May 26, 2026 @01:20PM
from the slatedb.io dept.
Posted by
cbrewster on Thursday February 26, 2026 @01:38PM
from the blog.replit.com dept.
Posted by
cbrewster on Wednesday December 17, 2025 @04:50PM
from the blog.replit.com dept.
Posted by
cbrewster on Friday August 04, 2023 @08:24PM
from the blog.replit.com dept.
Now you need to batch your requests to your intermediate server
You can talk to support about missing the notification about your reservation and they'll still let you put in an order.
Fair, but its still a real issue and solved in a similar way: Nix has finer grained reproducibility -- not only at the environment level but also at the derivation level. Being able to pick and choose which dependencies to update while ensuring other packages are left exactly the same is valuable to us.
For context, I'm referencing our (legacy) base image for projects on Replit:
Polygott (
https://github.com/replit/polygott/).
The image contains dependencies needed for 50+ languages. This means repls by default are packed with lots of commonly used tools. However, the image is massive, takes a long time to build, and is difficult to deploy.
Unfortunately, slimming the image down is not really an option: people rely on all the tools we provide out of the box.
What happens when you need to update some dependency within that image? Now you have to do an image rebuild. If you're lucky only the top-most layers will be rebuilt and the base layers stay the same, if you're unlucky nearly the whole image is rebuilt. Usually we just want to update some subset of dependencies, but during the rebuild some other dependencies may get updated unintentionally (eg if they aren't pinned to a particular version). For most, this may not be an issue but at Replit, everyone's projects use this base Docker image. Unintended updates can cause breakage for our users.
Author here. It's titled this way because Docker seems to come up in a lot of discussions around Nix and is often compared with Nix. Partly because of their overlap in functionality but also because people may not understand the difference between the two.
The goal here was to a) highlight the different use-cases between the two tools b) compare the tools in the areas that they overlap and c) show how both tools can be used together.
Author here. In our case, we had a large base Docker image called Polygott (
https://github.com/replit/polygott) it pulls in dependencies for 50+ different languages from various repositories. We would pin things where possible, but its still very difficult to ensure reproducible builds.
Additionally, docker builds have free access to the network to do anything it would like. Nix goes to great lengths to sandbox builds and limit network access. Anything accessed from a network requires a pinned sha 256 hash to ensure the remote data hasn't changed. (https://nixos.wiki/wiki/Nix#Sandboxing)
Author here. As with most things, its all about the trade-offs. Docker has certainly proved itself and that approach has worked on a massive scale. However, its not a silver bullet. For us at Replit, our Docker approach was causing issues: our base image was large and unmaintainable and we had almost no way of knowing what changed between subsequent builds of the base image.
We've been able to utilize Nix to address both of those issues, and others who may be in a similar scenario might also find Nix to be valuable.
Of course Nix comes with its own set of opinions and complexities but it has been a worthwhile trade-off for us.
While you can copy files from different stages, I wouldn't consider this to be the same thing as composing two base images together. Like the example in the post, you can't take the Rust and NodeJS images and tell Docker to magically merge them. You can copy binaries & libraries from one to the other but that seems extremely tedious and error prone.
Whereas Nix makes it rather trivial to compose together the packages you need (eg Rust, NodeJS) in your environment.
It was more of a silly demonstration showing what's possible and less about being practical. :)
Yeah, we are really excited about the future Nix will bring for us at Replit. Soon, language version incompatibility will be a thing of the past on Replit.
Yup, you can setup Haskell with Nix. I'm not too familiar with Haskell, but it looks like Nix even has a collection of Haskell packages (including lens). This looks like it is a good resource for getting started with Nix + Haskell
https://notes.srid.ca/haskell-nix, you should be able to follow along in a Nix repl. I recommend forking on of the example repls from the blog post.
Sorry, building nix environments from scratch is still rough around the edges and we are working to improve that at the moment.
When hosting a web server, your app must listen on 0.0.0.0, adding that to your repl seems to make that work. I will make sure that is in our docs for web hosting.
Working Racket web app: https://replit.com/@ConnorBrewster/racket-server
The config files should be visible again, sorry for the delay!
Hi, one of the authors here.
The Nix environment on Replit is under development right now, we hid the configuration files to clean up the filetree as most users shouldn't need to know about the config files unless they are customizing the repl environment.
However, we are reverting that change for now since we don't offer a good way to access those files yet. I'll reply here once they are visible again.