
drop is a rootless Linux sandbox that keeps your distribution and hides your home directory; this issue covers its install, a working session, a climb from 1 to 386 stars after its Show HN, and the container work it cannot do.
drop starts a shell that looks like your machine while running in its own. Your username and working directory stay the same, every program you have already installed is still on PATH, and the home directory a program sees is a fresh one. Yours is somewhere the sandbox cannot reach. 1drop starts from the environment you already have and seals off the parts a program has no business touching. That difference decides which tool you want.bubblewrap, nsjail and runc can seal off the same things. Wrobel's reason for writing another one is that those are building blocks: bubblewrap describes itself as a sandbox building block, and Flatpak uses it as one. Drop ships the assembled version instead, driven by a TOML config and meant to be run directly. 6drop init # create an environment for the directory you are in
drop run # open a sandboxed shell in that environment
drop run -e vault13 ps aux # run one command in an environment by name
drop run --runtime gvisor ps aux # same sandbox, syscalls through a user-space kernel
drop ls # list the environments you have made
drop rm vault13 # throw one away
drop edit base # edit the config every environment starts fromdrop init in ~/project and it writes ~/.config/drop/home-alice-project.toml, then makes ~/project writable inside the sandbox with .git left read-only. Each environment keeps its own home under ~/.local/share/drop/envs/<id>/home, so whatever a program installs there never reaches the real one. 57~/.bashrc is present and read-only, so appending to it returns Read-only file system, and ~/.ssh does not exist at all. 1base.toml mounts your shell startup files and ~/.gitconfig read-only, and its comments tell you to check them for secrets before trusting the defaults. 8runtime = "gvisor" in the config, or pass --runtime gvisor, and a user-space kernel answers them instead and forwards only a filtered set to the host. 9
runsc installed separately. The documentation says compatibility problems are rare and that the runtime can be switched back and forth per environment. 9passt, the package that gives the sandbox its isolated networking:sudo apt-get install passt # Debian, Ubuntu
sudo dnf install passt # Fedora
sudo pacman -S passt # Arch| Path | Exact command | When to use it | Source |
|---|---|---|---|
| Release binary | ARCH=amd64; curl -o drop -L https://github.com/wrr/drop/releases/latest/download/drop-linux-$ARCH && install drop ~/.local/bin/ | The normal path; no compiler and no account. Set ARCH=arm64 on an ARM machine. | Drop — Installation |
| AUR | yay -S drop-bin | Arch, from a package another user maintains. | drop-bin on the AUR |
| Go toolchain | CGO_ENABLED=0 go install github.com/wrr/drop/cmd/drop@latest | You have Go 1.25 or newer and would rather build than download. | Drop — Installation |
| From source | git clone https://github.com/wrr/drop.git && cd drop && make get-deps && make build | Reading the code or patching it. | drop README |
drop run, and this is where a two-minute install becomes a ten-minute one. Ubuntu 24.04 and later keep user-namespace creation behind an AppArmor allowlist, so the binary needs a profile:DROP_BIN=$(which drop) && sudo tee /etc/apparmor.d/drop << EOF
abi <abi/4.0>,
include <tunables/global>
profile drop $DROP_BIN flags=(unconfined) {
userns,
}
EOF
sudo systemctl reload apparmor.servicepasst into /proc/<pid>/ns only for Podman. Both are documented with their exact commands. 10rm -rf ~". Against a malicious dependency or a prompt injection, he says you need more. 20bubblewrap and nsjail, through gVisor under Docker with runsc, or through an LXC container or a microVM. 24 The project's answer is configuration rather than capability: it is the assembled, day-to-day version of parts you would otherwise wire together per project. 6passt, put the binary in your PATH, run drop init and then drop run inside a project directory, and check that ~/.ssh has gone while your toolchain still works.github.com
github.com
news.ycombinator.com
news.ycombinator.com
droprun.sh
news.ycombinator.com
droprun.sh
droprun.sh
droprun.sh
droprun.sh
github.com
web.archive.org
web.archive.org
web.archive.org
web.archive.org
github.com
github.com
github.com
aur.archlinux.org
news.ycombinator.com
news.ycombinator.com
news.ycombinator.com
news.ycombinator.com
news.ycombinator.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.