base on Instant, easy, and predictable development environments <picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/app/static/img/devbox_logo_dark.svg">
<source media="(prefers-color-scheme: light)" srcset="docs/app/static/img/devbox_logo_light.svg">
<img alt="Devbox logo." src="docs/app/static/img/devbox_logo_light.svg">
</picture>
# Devbox
### Instant, easy, and predictable development environments
[](https://discord.gg/jetify)

[](https://github.com/jetify-com/devbox/releases)
[](https://github.com/jetify-com/devbox/actions/workflows/cli-release.yml?branch=main)
[](https://www.jetify.com/devbox/docs/contributor-quickstart/)
## What is it?
[Devbox](https://www.jetify.com/devbox/) is a command-line tool that lets you
easily create isolated shells for development. You start by defining the list of
packages required by your development environment, and devbox uses that
definition to create an isolated environment just for your application.
In practice, Devbox works similar to a package manager like `yarn` – except the
packages it manages are at the operating-system level (the sort of thing you
would normally install with `brew` or `apt-get`). With Devbox, you can install
over [400,000 package versions](https://www.nixhub.io) from the Nix Package
Registry
Devbox was originally developed by [Jetify](https://www.jetify.com) and is
internally powered by `nix`.
## Demo
The example below creates a development environment with `python 2.7` and
`go 1.18`, even though those packages are not installed in the underlying
machine:

## Installing Devbox
Use the following install script to get the latest version of Devbox:
```sh
curl -fsSL https://get.jetify.com/devbox | bash
```
Read more on the
[Devbox docs](https://www.jetify.com/devbox/docs/installing_devbox/).
## Benefits
### A consistent shell for everyone on the team
Declare the list of tools needed by your project via a `devbox.json` file and
run `devbox shell`. Everyone working on the project gets a shell environment
with the exact same version of those tools.
### Try new tools without polluting your laptop
Development environments created by Devbox are isolated from everything else in
your laptop. Is there a tool you want to try without making a mess? Add it to a
Devbox shell, and remove it when you don't want it anymore – all while keeping
your laptop pristine.
### Don't sacrifice speed
Devbox can create isolated environments right on your laptop, without an
extra-layer of virtualization slowing your file system or every command. When
you're ready to ship, it'll turn it into an equivalent container – but not
before.
### Goodbye conflicting versions
Are you working on multiple projects, all of which need different versions of
the same binary? Instead of attempting to install conflicting versions of the
same binary on your laptop, create an isolated environment for each project, and
use whatever version you want for each.
### Take your environment with you
Devbox's dev environments are _portable_. We make it possible to declare your
environment exactly once, and use that single definition in several different
ways, including:
- A local shell created through `devbox shell`
- A devcontainer you can use with VSCode
- A Dockerfile so you can build a production image with the exact same tools you
used for development.
- A remote development environment in the cloud that mirrors your local
environment.
## Quickstart: Fast, Deterministic Shell
In this quickstart we'll create a development shell with specific tools
installed. These tools will only be available when using this Devbox shell,
ensuring we don't pollute your machine.
1. Open a terminal in a new empty folder.
2. Initialize Devbox:
```bash
devbox init
```
This creates a `devbox.json` file in the current directory. You should commit
it to source control.
3. Add command-line tools from Nix. For example, to add Python 3.10:
```bash
devbox add
[email protected]
```
Search for more packages on [Nixhub.io](https://www.nixhub.io)
4. Your `devbox.json` file keeps track of the packages you've added, it should
now look like this:
```json
{
"packages": [
"
[email protected]"
]
}
```
5. Start a new shell that has these tools installed:
```bash
devbox shell
```
You can tell you're in a Devbox shell (and not your regular terminal) because
the shell prompt changed.
6. Use your favorite tools.
In this example we installed Python 3.10, so let's use it.
```bash
python --version
```
7. Your regular tools are also available including environment variables and
config settings.
```bash
git config --get user.name
```
8. To exit the Devbox shell and return to your regular shell:
```bash
exit
```
Read more on the
[Devbox docs Quickstart](https://www.jetify.com/devbox/docs/quickstart/).
## Additional commands
`devbox help` - see all commands
See the
[CLI Reference](https://www.jetify.com/devbox/docs/cli_reference/devbox/) for
the full list of commands.
## Join our Developer Community
- Chat with us by joining the [Jetify Discord Server](https://discord.gg/jetify)
– we have a #devbox channel dedicated to this project.
- File bug reports and feature requests using
[Github Issues](https://github.com/jetify-com/devbox/issues)
- Follow us on [Jetify's Twitter](https://twitter.com/jetify_com) for product
updates
## Contributing
Devbox is an opensource project, so contributions are always welcome. Please read
[our contributing guide](CONTRIBUTING.md) before submitting pull requests.
[Devbox development readme](devbox.md)
## Related Work
Thanks to [Nix](https://nixos.org/) for providing isolated shells.
## Translation
- [Chinese](./docs/translation/README-zh-CN.md)
- [Korean](./docs/translation/README-ko-KR.md)
## License
This project is proudly open-source under the
[Apache 2.0 License](https://github.com/jetify-com/devbox/blob/main/LICENSE)
", Assign "at most 3 tags" to the expected json: {"id":"5475","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"