Dev Containers
This guide explains how to use Dev Containers for Noir development, enabling consistent development environments across different machines and cloud-based development through GitHub Codespaces.
What are Dev Containers?
Dev Containers provide a full-featured development environment inside a Docker container. They ensure all developers work with the same tools, dependencies, and configurations, eliminating "works on my machine" issues.
For Noir development, Dev Containers offer:
- Pre-installed Noir toolchain (nargo, noirup)
- Pre-installed Barretenberg backend (bb, bbup)
- Consistent development experience across platforms
- Quick onboarding for new contributors
Using Dev Containers Locally
Prerequisites
- Docker installed and running
- Visual Studio Code or similar (ex. Cursor, Roo, etc)
- Dev Containers extension or similar
Setting up a Noir Dev Container
- Create a
.devcontainer/devcontainer.json
file in your project root. This will add the devcontainer feature built by Aztec Labs, and the Noir extension.
{
"name": "Noir Development",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/aztecprotocol/devcontainer-features/noir:1": {},
"ghcr.io/aztecprotocol/devcontainer-features/barretenberg:1": {}
},
"customizations": {
"vscode": {
"extensions": [
"noir-lang.vscode-noir"
]
}
}
}
-
Open your project in your IDE
-
When prompted, click "Reopen in Container" or use the Command Palette (
Ctrl/Cmd + Shift + P
) and select "Dev Containers: Reopen in Container" -
The IDE will build the container and set up your development environment with Noir and Barretenberg pre-installed
Using GitHub Codespaces
GitHub Codespaces provides cloud-hosted Dev Container environments, allowing you to develop Noir projects directly in your browser or in VS Code.
Quick Start with Codespaces
The easiest way to get started is using the Tiny Noir Codespace template:
- Visit the repository
- Click the "Code" button and select "Create codespace on main"
- GitHub will create a cloud-based development environment with Noir pre-configured
Adding Codespaces to Your Project
To enable Codespaces for your own Noir project, use the same .devcontainer/devcontainer.json
configuration shown above. When contributors visit your repository, they can create a Codespace with all necessary tools pre-installed.
Available Devcontainer Features
The AztecProtocol devcontainer features provide:
Noir Feature
- Installs
nargo
CLI for compiling and testing Noir programs - Installs
noirup
for managing Noir versions - Automatically configures the latest stable version
Barretenberg Feature
- Installs
bb
CLI for proving and verification - Installs
bbup
for managing Barretenberg versions - Provides backend support for Noir programs
Configuration Options
You can customize the Dev Container setup by modifying the features in devcontainer.json
:
{
"features": {
"ghcr.io/aztecprotocol/devcontainer-features/noir:1": {
// Feature-specific options (if available)
},
"ghcr.io/aztecprotocol/devcontainer-features/barretenberg:1": {
// Feature-specific options (if available)
}
}
}
Tips for Development
-
Free Tier: GitHub Codespaces offers up to 60 hours free per month for personal accounts
-
Performance: For resource-intensive operations like proving, local Dev Containers may perform better than Codespaces
-
Persistence: Changes made in a Dev Container are preserved in the container. Use version control to save your work
-
Extensions: The Noir VS Code extension is automatically installed, providing syntax highlighting, LSP support, and debugging capabilities
Next Steps
- Set up a Dev Container for your Noir project
- Explore the Noir VS Code extension features
- Learn about debugging Noir programs in your containerized environment