Codegen-first polyglot web toolkit. A Rust core plus 14 language bindings generated by alef — spec-driven codegen (OpenAPI, AsyncAPI, GraphQL, JSON-RPC, gRPC, and SQL→HTTP), type-safe routing,...
概要
Codegen-first polyglot web toolkit. A Rust core plus 14 language bindings generated by alef — spec-driven codegen (OpenAPI, AsyncAPI, GraphQL, JSON-RPC, gRPC, and SQL→HTTP), type-safe routing,...
README
Install · Why spikard · Quick example · MCP server · Docs
[!IMPORTANT] spikard is experimental and pre-1.0. APIs change between releases, and not every binding is at the same level of maturity. It is not yet recommended for production.
That is also the invitation: this is the point where feedback actually shapes the design. If you try it and something is wrong, awkward, or missing, please open an issue. If you want to help, good first issues are scoped to be finishable in an evening, and CONTRIBUTING.md explains the generated-bindings workflow.
Why spikard
| Capability | Details |
|---|---|
| Type-safe across bindings | HTTP routing with path, query, body, and header validation. Errors convert losslessly between languages. |
| Polyglot bindings | Python, TypeScript/Node, Ruby, PHP, Elixir, Go, Java, C#, Kotlin, Dart, Swift, Zig, WASM, Rust, and C FFI. |
| Schema codegen | Parse OpenAPI 3.0, AsyncAPI 3.0, GraphQL SDL, and JSON-RPC 2.0 specs. Generate handlers and validators per binding. |
| SQL to HTTP codegen | Annotate SQL queries with @http GET /path, @http_auth bearer:jwt, and emit route metadata and OpenAPI specs. |
| Tower middleware | Compression, rate limiting, timeouts, request IDs, JWT/API-key auth, and static file serving. |
| Lifecycle hooks | onRequest, preValidation, preHandler, onResponse, and onError. |
| WebSocket & SSE | Bidirectional streams and server-sent events. |
| Fixture-driven testing | Shared JSON fixtures drive tests across language bindings for behavioral consistency. |
| CLI & MCP server | Initialize projects, generate code, validate schemas, and integrate with MCP-compatible tools. |
Installation
Each binding ships through its native package manager.
| Target | Package | Install |
|---|---|---|
| Rust | spikard on crates.io |
cargo add spikard |
| CLI | spikard-cli on crates.io |
cargo install spikard-cli or cargo binstall spikard-cli |
| Python | spikard on PyPI |
pip install spikard |
| Node.js | @spikard/node on npm |
npm install @spikard/node |
| WASM | @spikard/node-wasm on npm |
npm install @spikard/node-wasm |
| Ruby | spikard on RubyGems |
gem install spikard |
| PHP | goldziher/spikard on Packagist |
composer require goldziher/spikard |
| Elixir | spikard on Hex |
Add {:spikard, "~> 0.17"} to mix.exs |
| Go | github.com/Goldziher/spikard |
go get github.com/Goldziher/spikard |
| Java | dev.spikard:spikard on Maven Central |
Maven/Gradle — see Java README |
| C# | Spikard on NuGet |
dotnet add package Spikard |
| Kotlin | dev.spikard:spikard on Maven Central |
Maven/Gradle — see Kotlin README |
| Dart | spikard on pub.dev |
dart pub add spikard |
| Swift | Spikard via SwiftPM |
Add to Package.swift |
| Zig | spikard via build.zig.zon |
Add to build manifest |
| C FFI | spikard-ffi shared/static library |
GitHub Releases |
Quick example
Python
from spikard import Spikard
from msgspec import Struct
class User(Struct):
id: int
name: str
app = Spikard()
@app.get("/users/{id:int}")
async def get_user(id: int) -> User:
return User(id=id, name="Alice")
if __name__ == "__main__":
app.run(port=8000)
TypeScript
import { Spikard } from "@spikard/node";
const app = new Spikard();
app.get("/users/{id:int}", async (id: number) => {
return { id, name: "Alice" };
});
app.run({ port: 8000 });
MCP server
The CLI ships an MCP server so a coding agent can scaffold and
generate spikard projects directly. It is enabled by default (spikard-cli feature mcp) and speaks
stdio out of the box; streamable HTTP is available via the mcp-http feature.
{
"mcpServers": {
"spikard": {
"command": "spikard",
"args": ["mcp"]
}
}
}
Thirteen tools are exposed, covering project init, codegen from every supported spec format, the SQL→HTTP pipeline, AsyncAPI fixture and test-app generation, schema validation, and a feature summary. See the MCP documentation for the full tool list and worked flows.
SQL to HTTP
Annotate a SQL query and spikard emits the route, an OpenAPI 3.1 fragment, and a typed handler stub that calls into the generated query function:
-- @name GetUser
-- @returns :one
-- @http GET /users/{id}
-- @http_auth bearer:jwt
SELECT id, name, email FROM users WHERE id = $1;
Query parsing and type inference come from scythe; spikard reads scythe’s analyzed-query IR and overlays the HTTP vocabulary on top. scythe stays library-agnostic and owns no HTTP concepts. See the SQL codegen guide.
Architecture
All bindings call a shared Rust core through thin language-native layers:
Development
task setup # Install dependencies
task build # Build Rust core (debug)
task test # Run Rust tests
task test:all # Run all tests (Rust + bindings)
task e2e:all # Generate + build + run e2e tests
task format # Format all code
Run task --list for the full task catalog.
License
MIT License — see LICENSE for details.
インストール
This server does not publish a one-line install command.
Open the repository installation guide設定
{
"mcpServers": {
"spikard": {
"command": "spikard",
"args": ["mcp"]
}
}
}