Skip to content

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

@silverhadch

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriageIssue needs triage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions