spikard

mcp
Security Audit
Pass
Health Pass
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 115 GitHub stars
Code Pass
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

Codegen-first polyglot web toolkit: one Rust core, 14 language bindings, spec-driven codegen (OpenAPI, AsyncAPI, GraphQL, gRPC, SQL to HTTP) and a 13-tool MCP server. Experimental, pre-1.0, MIT.

README.md
spikard - polyglot web toolkit

One web toolkit, every language.

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, tower-http middleware, an MCP server for coding agents, and fixture-driven cross-language testing.

Rust core · Python · TypeScript · Ruby · PHP · Elixir · Go · Java · C# · Kotlin · Dart · Swift · Zig · WASM · C FFI

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 });
More examples (Ruby · PHP · Elixir · Go · Java · C# · Kotlin · Dart · Swift)

See the examples directory in the repository for working examples in every supported language.

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:

How bindings work
Language bindings (Python, Node, Ruby, Go, Java, C#...)
        |
        v
FFI / NAPI / PyO3 / Magnus / runtime bridge
        |
        v
crates/spikard-http      Router, middleware, auth
crates/spikard-core      HTTP types, validation, errors
crates/spikard-codegen   OpenAPI, GraphQL, AsyncAPI, JSON-RPC

Bindings are generated from the Rust API surface via alef. Binding code stays thin: type conversion, error conversion, and runtime integration. Business logic, validation, middleware, and codegen all live in Rust.

Specification support
  • OpenAPI 3.0 — Route definitions to specs, parameter validators, Swagger/ReDoc UI
  • GraphQL — SDL schema parsing, query execution, introspection, Handler trait integration
  • AsyncAPI 3.0 — Channel/operation extraction, message validators, WebSocket integration
  • OpenRPC — JSON-RPC 2.0 method handlers, parameter validation, batch requests
Middleware stack

Compression (gzip/brotli), rate limiting, timeouts, request IDs, authentication (JWT/API key), static files. Configured via ServerConfig structs. All middleware is implemented in Rust via tower-http.

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.

Project status
  • Experimental and pre-1.0 — see the note at the top of this README. APIs change between releases.
  • Binding packages follow the Rust crate version.
  • E2E coverage is fixture-driven and shared across supported language targets.
  • See CONTRIBUTING.md for guidelines on modifying generated bindings.

License

MIT License — see LICENSE for details.

Reviews (0)

No results found