Packages
This is a list or map of Nix packages that should be installed in your Devbox shell and containers. These packages will only be installed and available within your shell, and will have precedence over any packages installed in your local machine. You can search for Nix packages using Nix Package Search. You can add packages to your devbox.json usingdevbox add <package_name>
, and remove them using
devbox rm <package_name>
.
Packages can be structured as a list of package names (<packages>@<version>
) or
flake references:
devbox add
will automatically format packages
based on the options and packages that
you provide.
Pinning a Specific Version of a Package
You can pin a specific version of a package by adding a@
followed by the version number to the
end of the package name. For example, to pin the go
package to version 1.19
, you can run
devbox add [email protected]
, or add [email protected]
to the packages list in your
devbox.json
:
python@3
, it will install
the latest version of python
with major version 3
.
To see a list of packages and their available versions, you can run devbox search <pkg>
.
Adding Packages from Flakes
You can add packages from flakes by adding a reference to the flake in thepackages
list in your
devbox.json
. We currently support installing Flakes from Github and local paths.
Adding Platform Specific Packages
You can choose to include or exclude your packages on specific platforms by adding aplatforms
or
excluded_platforms
field to your package definition. This is useful if you need to install
packages or libraries that are only available on specific platforms (such as busybox
on Linux, or
utm
on macOS):
platforms
or excluded_platforms
.
Valid Platforms include:
aarch64-darwin
aarch64-linux
x86_64-darwin
x86_64-linux
i686-linux
armv7l-linux
Disabling Built-in Plugins
Some packages include builtin plugins or services that are automatically started when the package is installed. You can disable these plugins usingdevbox add <package> --disable-plugin
, or by
setting the disable_plugin
field to true
in your package definition:
Env
This is a a map of key-value pairs that should be set as Environment Variables when activatingdevbox shell
, running a script with devbox run
, or starting a service. These variables will only
be set in your Devbox shell, and will have precedence over any environment variables set in your
local machine or by Devbox Plugins.
For example, you could set variable $FOO
to bar
by adding the following to your devbox.json
:
$PWD
, and $PATH
. Any other values with
environment variables will not be expanded when starting your shell.
Env From
Env from takes a string for loading environment variables into your shells and scripts. Currently it supports loading from two sources: .env files, and Jetify Secrets..env Files
You can load environment variables from a.env
file by adding the path to the file in the
env_from
field (the file must end with .env
). This is useful for loading secrets or other
sensitive information that you don’t want to store in your devbox.json
.
.env
file into your shell when you run
devbox shell
or devbox run
. Note that environment variables set in the .env
file will be
overridden if the same variable is set directly in your devbox.json
Jetify Secrets
You can securely load secrets from Jetify Secrets by runningdevbox secrets init
and creating a
project in Jetify Cloud. This will add the jetify-cloud
field to env_from
in your project.
Shell
The Shell object defines init hooks and scripts that can be run with your shell. Right now two fields are supported:init_hook
, which run a set of commands every time you start a devbox shell,
and scripts
, which are commands that can be run using devbox run
Init Hook
The init hook is used to run shell commands before the shell finishes setting up. This hook runs after any other~/.*rc
scripts, allowing you to override environment variables or further
customize the shell.
The init hook will run every time a new shell is started using devbox shell
or devbox run
, and
is best used for setting up environment variables, aliases, or other quick setup steps needed to
configure your environment. For longer running tasks, you should consider using a Script.
This is an example devbox.json
that customizes the prompt and prints a welcome message:
Scripts
Scripts are commands that are executed in your Devbox shell usingdevbox run <script_name>
. They
can be used to start up background process (like databases or servers), or to run one off commands
(like setting up a dev DB, or running your tests).
Scripts can be defined by giving a name, and one or more commands. Single command scripts can be
added by providing a name, and a string:
Include
Includes can be used to explicitly add extra configuration from plugins to your Devbox project. Plugins are parsed and merged in the order they are listed. Note that in the event of a conflict, plugins near the end of the list will override plugins at the beginning of the list. Likewise, if a setting in your project config conflicts with a plugin (e.g., yourdevbox.json
has a script with the same name as a plugin script), your project config will
take precedence.
Example: A Rust Devbox
An example of a devbox configuration for a Rust project calledhello_world
might look like the
following: