- Standardization: Define tools, binaries, and configurations your AI agent needs at runtime.
- Consistency: Ensure reproducible AI behavior across environments.
- Efficiency: Reduce Devbox startup time by pre-installing necessary tools.
- Customization: Tailor environments to specific AI-assisted development needs.
When should I use a Blueprint vs. a Snapshot?Snapshots and Blueprints both allow you to run devboxes with customizations. Blueprints are built programmatically and are cacheable using Docker layers, while Snapshots can be created quickly from an existing devbox.Examples:
- Blueprint: You have a coding agent that is performing a task that requires installing a specific tool. Create a blueprint with set-up steps for the tool and future devboxes will cache the installation to speed up boot and execution time.
- Snapshot: You have a coding agent in a devbox considering 3 different ways to complete a task. Create a snapshot of the initial state of the devbox, create 3 parallel devboxes from that snapshot, collate the results, and then choose the best option to continue.
Creating a Blueprint
One use case for a blueprint is preinstalling tools your AI agent may want to use. For example, let’s create a simple Blueprint that installsjq, a lightweight command-line JSON processor:
Use the Debian package manager (apt) for installing system packages on the Runloop base image.
Using Your Blueprint
Once your Blueprint’s status isbuild_complete, create a Devbox using it:
Custom files and folders
Basic Configuration with file mounts
To add individual files to your Blueprint, you can use thefile_mounts parameter. The key of the file_mounts object is the path to the file in the devbox and the value is the content of the file.
By default, blueprints are constructed by user and /home/user/ is where files are allowed to be mounted.
launch_parameters
Basic Configuration with CodeMounts
To add a CodeMount to your Blueprint:Private Repository Authentication
For private repositories, include a GitHub Personal Access Token (PAT):The Blueprint Build Process
When you create a Blueprint, Runloop builds a custom image containing all specified tools and configurations.Checking Build Status
After creating a Blueprint, check its status:{blueprint_id} with the ID returned when you created the Blueprint.
Example response:
status field indicates the current state of your Blueprint:
build_complete: Blueprint is ready to usebuild_failed: Refer to the Blueprint troubleshooting guide
Keeping Blueprints Updated
Periodically update Blueprints by building a new blueprint with the same name. This ensures that your AI agents always work with the latest code and dependencies.name, allowing for faster updates and efficient resource use.
Advanced Usage: Creating a Blueprint from a Public Image Registry
Runloop supports creating Blueprints from public image registries. This is useful when you want to use a specific version of a tool or framework.Example: Docker Hub Image (wordpress)
This process works with any image that is available on Docker Hub. The following example creates a Blueprint from thewordpress image at https://hub.docker.com/_/wordpress
Example: Public ECR Image (runloop-dnd-image)
For more information about Docker-in-Docker support and available images, see Running Docker on a Devbox.Advanced Usage: Using Secrets in Blueprints
You can securely inject secrets (like API tokens, credentials, or SSH keys) into your blueprint build process. This is useful for accessing private resources during the build, such as cloning private repositories or downloading authenticated packages.Setting Up Secrets
- Create secrets in the Settings page or via the API using the Account Secrets guide of your Runloop dashboard
- Mount secrets when creating a blueprint using the format
{ env_var_name: secret_name } - Use secrets in either
dockerfileorsystem_setup_commands
Example: Using a npm token to install a private package
This example assumes you have a npm token with theread:packages scope.
Advanced Usage: Custom Dockerfiles
For more complex environments, you can use a full Dockerfile as the basis for your Blueprint. This is useful when you need to install multiple tools or perform complex setup operations.-
Base your Dockerfile on the Runloop base image. Note that you must use the
runloop:prefix: -
Runloop will:
- Use your Dockerfile as the base
- Apply any
launch_parameters.launch_commandsspecified - Set up any defined
CodeMounts
The Runloop base image is public and can be downloaded for local testing.
Advanced Usage: Composable Blueprints
You can create a Blueprint using another Blueprint as the base. This is useful when you want to create a Blueprint that builds upon other Blueprints.FROM instruction via the Dockerfile parameter to specify the composable Blueprint for building
Advanced Usage: Customizing the Base user
You can customize the base user of a Blueprint. SSH and execs to devboxes created from this blueprint will be via the custom user.Advanced Usage: Customization via Launch Parameters
Because Blueprints map to images that launch devboxes, we share some of the same launch parameters as devboxes. See these pages for more customizable parameters:Deleting Blueprints
By default, Blueprints persist indefinitely and continue to incur storage costs. To optimize resource usage and costs, you can delete Blueprints that are no longer needed.Deleting a Single Blueprint
To delete a specific Blueprint, use its ID:Cleaning Up Old Blueprint Versions
When you create multiple versions of a Blueprint with the same name, you may want to delete older versions to reduce storage costs. Here’s how to keep only the latest version:Be careful when deleting Blueprints, as this action cannot be undone. Ensure you’re not deleting Blueprints that you may need later.
Best Practices
- Start Simple: Begin with basic Blueprints and gradually add complexity.
- Test Manually Using SSH: You can create a devbox and SSH into it and manually install tools to make sure the commands are correct before layering them into Blueprints.
- Always use
blueprint_nameinstead ofblueprint_idto ensure you’re using the latest version. Use specific Blueprint IDs only when you need version control for particular setups. - Implement
setup_commandsin your Devbox creation to keep code and dependencies up-to-date. - Regularly update your Blueprints with the latest repository changes.
- Delete unused / deprecated Blueprints.
Upcoming Features
Future releases plan to include:- Multiple repository support in a single Blueprint
- Specific branch specifications
- Git submodules support
If any of these features are critical for your use case, please let us know.
