| Crates.io | spikard-core |
| lib.rs | spikard-core |
| version | 0.9.2 |
| created_at | 2025-11-23 09:36:16.531416+00 |
| updated_at | 2026-01-22 13:14:03.087106+00 |
| description | Shared transport-agnostic primitives for Spikard runtimes |
| homepage | https://github.com/Goldziher/spikard |
| repository | https://github.com/Goldziher/spikard |
| max_upload_size | |
| id | 1946334 |
| size | 506,855 |
Shared transport-agnostic primitives and types for building Spikard runtimes across multiple languages and frameworks.
spikard-core provides the foundational types and traits that enable Spikard to work across multiple language bindings:
[dependencies]
spikard-core = "0.9.2"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
[dependencies]
spikard-core = { version = "0.9.2", features = ["di"] }
di - Enables dependency injection support with Tokio async runtimeuse spikard_core::{Request, Response};
use std::collections::HashMap;
// Create a request
let mut request = Request::new(
"GET".to_string(),
"/api/users".to_string(),
);
// Add headers
request.headers_mut().insert(
"Authorization".to_string(),
"Bearer token123".to_string(),
);
// Add query parameters
let mut query = HashMap::new();
query.insert("filter".to_string(), "active".to_string());
request.set_query_params(query);
// Create a response
let mut response = Response::new(200);
response.set_body(r#"{"users": []}"#.as_bytes().to_vec());
use spikard_core::validation::ValidateBody;
use serde_json::json;
let schema = json!({
"type": "object",
"properties": {
"name": { "type": "string" },
"email": { "type": "string", "format": "email" }
},
"required": ["name", "email"]
});
let body = json!({
"name": "Alice",
"email": "alice@example.com"
});
// Validate body against schema
validate_body(&body, &schema)?;
use spikard_core::compression;
let original = b"This is a long string that will be compressed";
// Gzip compression
let compressed = compression::gzip_encode(original)?;
let decompressed = compression::gzip_decode(&compressed)?;
// Brotli compression
let compressed = compression::brotli_encode(original)?;
let decompressed = compression::brotli_decode(&compressed)?;
Request - HTTP request model with headers, cookies, body, and path parametersResponse - HTTP response model with status, headers, and bodyHandlerResult - Standard result type for handlersValidationError - Structured validation errors with field-level detailsRequestContext - Request execution context with metadataRouteConfig - Route configuration with validation schemasspikard-core sits at the foundation of the Spikard architecture:
┌─────────────────────────────────────┐
│ Language Bindings │
│ (Python, Node, Ruby, PHP, WASM) │
└──────────────┬──────────────────────┘
│ implements
┌──────────────▼──────────────────────┐
│ spikard-http (Axum Runtime) │
└──────────────┬──────────────────────┘
│ uses
┌──────────────▼──────────────────────┐
│ spikard-core (Primitives) │
└─────────────────────────────────────┘
All language bindings depend on spikard-core to ensure consistent request/response handling across platforms.
MIT