Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
BuildKit Rust Client
A full-featured Rust client library and CLI for interacting with moby/buildkit to build container images via gRPC.
Features • Installation • Quick Start • Usage • Documentation • Contributing
Features
- Complete gRPC Implementation - Direct integration with BuildKit's gRPC API
- Multiple Build Sources - Support for local Dockerfiles and GitHub repositories
- Authentication Support - GitHub private repositories and Docker Registry authentication
- Advanced Build Options - Build args, target stages, multi-platform builds
- Real-time Progress - Live build progress and log streaming
- Cache Management - Support for cache import/export
- Registry Push - Automatic push of built images to registries
- Session Protocol - Full implementation of BuildKit's bidirectional session protocol
- HTTP/2 Tunneling - HTTP/2-over-gRPC for file synchronization
Prerequisites
- Rust 1.70+
- Docker or BuildKit daemon
- Git (for fetching proto files)
Installation
As a Library
Add to your Cargo.toml:
[]
= "0.1" # or bkit if you like
= { = "1", = ["full"] }
= "1.0"
As a CLI Tool
Proto files are automatically managed during build - no manual setup required.
Quick Start
See Usage Guide for detailed CLI and library usage examples.
Project Structure
buildkit-client/
├── src/
│ ├── main.rs # CLI tool entry point
│ ├── lib.rs # Library entry point
│ ├── client.rs # BuildKit gRPC client
│ ├── builder.rs # Build configuration
│ ├── solve.rs # Build execution logic
│ ├── progress.rs # Progress handling
│ ├── session/ # Session protocol implementation
│ │ ├── mod.rs # Session lifecycle & metadata
│ │ ├── grpc_tunnel.rs # HTTP/2-over-gRPC tunnel
│ │ ├── filesync.rs # File synchronization
│ │ └── auth.rs # Registry authentication
│ └── proto.rs # Protobuf generated code
├── proto/ # BuildKit protobuf definitions
├── examples/ # Sample Dockerfiles
├── tests/ # Comprehensive test suite
├── docker-compose.yml # Test environment setup
└── README.md
BuildKit gRPC API
This project directly uses BuildKit's gRPC API:
Control.Solve- Execute build operationsControl.Status- Stream build status updatesControl.Info- Get BuildKit informationControl.Session- Bidirectional session stream
All protobuf definitions are fetched from the moby/buildkit repository.
Documentation
- Quick Start Guide - Get up and running quickly
- Usage Guide - CLI and library usage examples with configuration options
- Architecture Guide - Complete architecture and protocol documentation
- Development Guide - Development workflows, testing, and proto management
- Testing Guide - Complete testing documentation (unit, integration, GitHub builds)
- Implementation Notes - Detailed implementation notes for contributors
Troubleshooting
BuildKit Connection Failed
# Check if BuildKit is running
# View BuildKit logs
# Restart services
Registry Push Failed
Ensure the registry allows insecure connections (for localhost):
# docker-compose.yml
services:
buildkitd:
environment:
- BUILDKIT_REGISTRY_INSECURE=true
Proto Compilation Errors
If you encounter protobuf compilation errors:
# Force rebuild (will redownload proto files)
PROTO_REBUILD=true
# Or use clone mode if download fails
PROTO_FETCH_MODE=clone
Proto files are now automatically managed by build.rs. See Development Guide for details.
Development
For detailed development workflows, testing strategies, and proto management, see Development Guide.
Quick commands:
Architecture
This project implements a complete BuildKit gRPC client with:
- Bidirectional gRPC streaming for real-time communication
- HTTP/2-over-gRPC tunneling for BuildKit callbacks
- DiffCopy protocol for efficient file synchronization
- Session management with proper metadata handling
- Registry authentication support
For detailed architecture documentation, see Architecture Guide.
License
This project is dual-licensed under MIT OR Apache-2.0.
Acknowledgments
- moby/buildkit - BuildKit project
- tonic - Rust gRPC library
- prost - Protocol Buffers implementation
- h2 - HTTP/2 implementation
Contributing
Contributions are welcome! Please feel free to submit Issues and Pull Requests.
Before submitting a PR:
- Run
cargo fmtandcargo clippy - Ensure all tests pass:
cargo test - Add tests for new features
- Update documentation as needed
Related Links
Made with ❤️ by AprilNEA