Project Code:https://github.com/hyperlane-dev/hyperlane
Introduction
Hyperlane is not just a standalone HTTP server library — it is supported by a rich ecosystem of utilities, plugins, and companion crates that extend its capabilities. This article provides a comprehensive overview of the recommended tools in the Hyperlane ecosystem, explaining what each one does and how it integrates with your Hyperlane-based applications.
The Hyperlane Ecosystem at a Glance
The Hyperlane ecosystem includes tools for:
- Utility functions — General-purpose helpers for common tasks
- Logging — Structured logging tailored for Hyperlane
- Time handling — Date and time utilities
- Process management — Recoverable spawn and thread pool
- HTTP utilities — HTTP request helpers and WebSocket plugins
- Data encoding — Binary encoding/decoding
- File operations — File reading, writing, and manipulation
- URL handling — URL encoding/decoding
- API documentation — OpenAPI/Swagger integration
- Validation — Chinese ID card validation
- Server management — Server lifecycle management
Core Utilities
hyperlane-utils
The hyperlane-utils crate provides a collection of general-purpose utility functions that complement the Hyperlane framework. These utilities cover common patterns that arise in web server development, such as string manipulation, data transformation, and common algorithmic helpers.
std-macro-extensions
std-macro-extensions extends Rust's standard library with additional macros that simplify common patterns. When building Hyperlane applications, these macros can reduce boilerplate and make your code more concise.
future-fn
future-fn provides utilities for working with async functions and futures. In the context of Hyperlane, it helps manage complex async middleware chains and handler compositions.
Logging and Time
hyperlane-log
hyperlane-log is a logging solution designed specifically for Hyperlane applications. It provides structured logging with configurable output formats and levels. Integrating it into your Hyperlane server gives you visibility into request processing, middleware execution, and error conditions.
hyperlane-time
hyperlane-time offers date and time utilities optimized for server-side use. It handles time formatting, parsing, and timezone conversions — essential for HTTP date headers, logging timestamps, and session management.
color-output
color-output adds colored terminal output to your logs and console messages. This is particularly useful during development when you want to quickly distinguish between different log levels or message types.
Process and Task Management
recoverable-spawn
recoverable-spawn provides a spawn mechanism that can recover from task panics. In a Hyperlane server, this ensures that a panic in one request handler doesn't crash the entire server process. It aligns with Hyperlane's TaskPanicHook pattern:
struct TaskPanicHook;
impl ServerHook for TaskPanicHook {
async fn new(_: &mut Stream, ctx: &mut Context) -> Self {
let error = ctx.try_get_task_panic_data().unwrap_or_default();
Self
}
async fn handle(self, stream: &mut Stream, ctx: &mut Context) -> Status {
let data = ctx.get_mut_response().set_status_code(500).set_body("panic").build();
stream.try_send(data).await;
Status::Continue
}
}
server.task_panic::<TaskPanicHook>();
recoverable-thread-pool
recoverable-thread-pool extends the recoverable spawn concept to thread pools. For Hyperlane applications that offload CPU-intensive work to a thread pool, this crate ensures that panics in worker threads are caught and handled gracefully.
HTTP and Network Utilities
http-request
http-request simplifies making HTTP requests from within your Hyperlane application. Whether you need to call external APIs, proxy requests, or implement a reverse proxy, this utility provides a clean interface for HTTP client operations.
hyperlane-plugin-websocket
hyperlane-plugin-websocket is a dedicated WebSocket plugin for Hyperlane. While Hyperlane has built-in WebSocket support, this plugin extends it with additional features like automatic reconnection, message framing, and broadcast capabilities.
hyperlane-broadcast
hyperlane-broadcast provides a broadcast mechanism for sending messages to multiple connected clients. This is useful for implementing chat systems, real-time notifications, and live updates. It integrates with Hyperlane's SSE and WebSocket capabilities.
urlencoding
urlencoding handles URL encoding and decoding, which is essential for processing query parameters, path segments, and form data in HTTP requests.
Data Processing
bin-encode-decode
bin-encode-decode provides binary encoding and decoding utilities. For Hyperlane applications that need to handle binary protocols or process binary request/response bodies, this tool simplifies the conversion between binary and text formats.
file-operation
file-operation offers a set of file manipulation utilities. Combined with Hyperlane's static file serving capabilities, this crate helps manage file uploads, downloads, and transformations:
let file_path = format!("{static_path}{path}");
let file_extension = FileExtension::get_extension_name(&file_path);
let content_type = FileExtension::parse(&file_extension).get_content_type();
let file_data = tokio::fs::read_to_string(&file_path).await.unwrap();
ctx.get_mut_response().set_body(file_data);
chunkify
chunkify splits data into chunks for streaming or batch processing. This is particularly useful when implementing SSE or streaming file downloads in Hyperlane:
let data = ctx.get_mut_response()
.set_header(CONTENT_TYPE, TEXT_EVENT_STREAM)
.set_body(Vec::new())
.build();
stream.try_send(data).await;
for i in 0..10 {
let body = format!("data:{i}{HTTP_DOUBLE_BR}");
stream.try_send(&body).await;
}
compare-version
compare-version provides semantic version comparison utilities. This is useful for implementing API versioning in your Hyperlane application, allowing you to route requests based on the requested API version.
API Documentation
utoipa
utoipa is an OpenAPI documentation generator for Rust. Integrating it with Hyperlane allows you to automatically generate OpenAPI/Swagger specifications for your API endpoints. This is invaluable for API discoverability and client code generation.
Validation
china_identification_card
china_identification_card provides validation for Chinese national ID card numbers. If your Hyperlane application serves users in China and needs to validate identity documents, this utility handles the validation logic.
Server Management
server-manager
server-manager provides server lifecycle management utilities. It complements Hyperlane's ServerControlHook by offering additional features for managing server instances, monitoring health, and orchestrating deployments.
clonelicious
clonelicious simplifies cloning operations for complex data structures. In Hyperlane applications where you need to clone Context or Stream data for parallel processing, this crate reduces the boilerplate.
Integrating Ecosystem Tools with Hyperlane
The recommended tools are designed to work together seamlessly. Here's how you might combine several of them in a typical Hyperlane application:
-
Use
hyperlane-logfor structured request/response logging -
Use
hyperlane-timefor timestamp generation in logs and HTTP headers -
Use
http-requestfor outbound API calls from your handlers -
Use
hyperlane-plugin-websocketfor enhanced WebSocket features -
Use
utoipafor API documentation generation -
Use
recoverable-spawnfor robust task spawning -
Use
urlencodingfor safe URL parameter handling -
Use
file-operationandchunkifyfor file serving and streaming
Project Structure with Ecosystem Tools
The recommended project directory structure accommodates these ecosystem tools:
├── application/controller/domain/exception/mapper/middleware/model/repository/service/utils/view
├── bootstrap/application/framework
├── config/application/framework
├── plugin/database/env/logger/mysql/postgresql/process/redis
├── resources/docker/env/sql/static/templates
The plugin directory is where you integrate ecosystem tools like hyperlane-log, hyperlane-broadcast, and hyperlane-plugin-websocket. The utils directory under application is where you place utility wrappers around crates like urlencoding, bin-encode-decode, and compare-version.
Installation
Most ecosystem tools can be added via Cargo:
cargo add hyperlane-utils
cargo add hyperlane-log
cargo add hyperlane-time
cargo add recoverable-spawn
cargo add http-request
cargo add hyperlane-plugin-websocket
cargo add utoipa
Conclusion
The Hyperlane ecosystem provides a comprehensive set of tools that extend the core framework's capabilities. From logging and time handling to WebSocket plugins and API documentation, these crates are designed to work together and with Hyperlane's core APIs. By leveraging these ecosystem tools, you can build feature-rich, production-ready web applications with less custom code and more reliability.
Project Code:https://github.com/hyperlane-dev/hyperlane
Top comments (0)