Bomboni is currently a work in progress. The API may change between versions.
What is Bomboni?
Bomboni is a workspace of interconnected Rust crates that solve common challenges in building distributed systems. Rather than reinventing the wheel for each project, you can leverage Bomboni’s battle-tested utilities to handle:- Unique identifier generation with sortable ULIDs
- Google AIP-compliant API request parsing and validation
- Protocol Buffer code generation with enhanced functionality
- WebAssembly integration with TypeScript bindings
- Template rendering with Handlebars
- File system operations
Key features
Bomboni provides several powerful features that make it ideal for building modern Rust applications:ULID-based identifiers
Generate sortable, unique identifiers that work across distributed systems. Support for both random generation and worker-based approaches ensures uniqueness without coordination.Google AIP-compliant request handling
Parse and validate API requests following Google’s API Improvement Proposals (AIPs). Built-in support for filtering (AIP-160), pagination, ordering, and SQL generation.Enhanced Protocol Buffers
Extend prost-generated code with additional helper functions, field name constants, and improved type conversions. Seamless integration with serde and WebAssembly.WebAssembly ready
Full WASM support with automatic TypeScript declaration generation. Build Rust libraries that work seamlessly in browser environments.Database integration
Optional features for PostgreSQL and MySQL provide type conversions and SQL query generation from filter expressions.Architecture
Bomboni is organized as a Cargo workspace with multiple specialized crates:Core utilities
bomboni_common provides unique identifiers and UTC datetime handlingbomboni_core contains core utilities and abstractions used across the projectbomboni_macros offers convenient procedural macros
Protocol Buffers
bomboni_prost compiles Protocol Buffers with enhanced code generationbomboni_proto implements Google’s well-known protobuf types with additional functionality
Request handling
bomboni_request provides comprehensive API request utilities following Google AIP standardsbomboni_request_derive offers derive macros for request parsing and type conversion
WebAssembly
bomboni_wasm provides WebAssembly utilities for JavaScript interoperabilitybomboni_wasm_core contains core WASM utilities and TypeScript declaration generationbomboni_wasm_derive offers derive macros for generating TypeScript WASM bindings
When to use Bomboni
Consider using Bomboni when you:- Build distributed systems that need unique, sortable identifiers across multiple services
- Create gRPC APIs following Google’s API design guidelines with filtering and pagination
- Work with Protocol Buffers and need enhanced code generation or improved type handling
- Target WebAssembly and want seamless Rust-to-JavaScript interoperability with TypeScript support
- Need database integration with automatic SQL generation from filter expressions
- Want consistent utilities across multiple microservices or applications
Example use cases
Building a gRPC service
Usebomboni_common for generating unique entity IDs, bomboni_request for parsing list requests with filtering and pagination, and bomboni_proto for enhanced protobuf types. Check out the bookstore example for a complete implementation.
Creating a WASM library
Leveragebomboni_wasm to generate TypeScript declarations automatically, use bomboni_common identifiers that work in both native and WASM targets, and bomboni_proto for message passing between Rust and JavaScript.
Implementing API filtering
Usebomboni_request to parse Google AIP-160 compliant filter expressions, validate them against schemas, and generate SQL queries for PostgreSQL or MySQL databases.
Next steps
Installation
Learn how to add Bomboni to your project
Quickstart
Build your first application with Bomboni