Skip to content

Devbox does not pull *-dev outputs into build environment (headers missing) #2761

Description

@silverhadch

What happened?

When using nix-shell / nix develop, adding a library package implicitly makes its headers available via the dev output (through normal buildInputs semantics).

Devbox does not do this. As a result, headers are missing unless the user manually adds <package>.dev.

This breaks common C/C++ expectations and makes Devbox environments subtly incomplete compared to standard Nix shells.


Expected result

yaml.h should be available automatically, as it is in nix-shell / nix develop when adding libyaml.


Actual result

Compilation fails because headers are missing:

main.c:1:10: fatal error: yaml.h: No such file or directory

Workaround

Manually add the dev output:

devbox add libyaml.dev

After this, compilation succeeds.


Why this is a problem

  • In nixpkgs, headers live in the dev output by design.
  • nix-shell users reasonably expect headers to be present when a library is added.
  • Devbox requires users to know about and manually add output-specific derivations, which defeats the abstraction Devbox aims to provide.
  • This is especially painful for newcomers unfamiliar with outputs = [ "out" "dev" ].

Suggested fix

Devbox should automatically include the dev output for library packages (or at least for packages commonly used as build dependencies), matching nix-shell / mkShell behavior.

At minimum, this behavior should be documented very clearly.


Steps to reproduce

  1. Initialize devbox:

    devbox init
    
  2. Add packages:

    devbox add libyaml gcc
    
  3. Create a test file:

    echo '#include <yaml.h>
    void main(){}' > main.c
    
  4. Enter shell:

    devbox shell
    
  5. Compile:

    gcc main.c
    

Command

devbox add libyaml

devbox.json

Without workaround

{
  "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.16.0/.schema/devbox.schema.json",
  "packages": [
    "libyaml@latest"
  ],
  "shell": {
    "init_hook": [
      "echo 'Welcome to devbox!' > /dev/null"
    ],
    "scripts": {
      "test": [
        "echo \"Error: no test specified\" && exit 1"
      ]
    }
  }
}

With workaround (devbox add libyaml.dev)

{
  "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.16.0/.schema/devbox.schema.json",
  "packages": [
    "libyaml@latest",
    "libyaml.dev"
  ],
  "shell": {
    "init_hook": [
      "echo 'Welcome to devbox!' > /dev/null"
    ],
    "scripts": {
      "test": [
        "echo \"Error: no test specified\" && exit 1"
      ]
    }
  }
}

Devbox version

0.16.0

Nix version

nix (Nix) 2.31.2+2

What system does this bug occur on?

Linux (x86_64)


Debug logs

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions