Features
- Export structs and enums to multiple languages
- Get function types to use in libraries like tauri-specta
- Supports wide range of common crates in Rust ecosystem
- Supports type inference - can determine type of
fn demo() -> impl Type
Language Support
| Language | Status | Exporter | Features |
|---|---|---|---|
| TypeScript | ✅ Stable | specta-typescript |
Full type support, generics, unions |
| Swift | ✅ Stable | specta-swift |
Idiomatic Swift, custom Codable, Duration support |
| Rust | 🚧 Partial | specta-rust |
Basic types work, structs/enums in progress |
| OpenAPI | 🚧 Partial | specta-openapi |
Primitives work, complex types in progress |
| Go | 🚧 Planned | specta-go |
Go structs and interfaces |
| Kotlin | 🚧 Planned | specta-kotlin |
Kotlin data classes and sealed classes |
| JSON Schema | 🚧 Planned | specta-jsonschema |
JSON Schema generation |
| Zod | 🚧 Planned | specta-zod |
Zod schema validation |
| Python | 🚧 Planned | specta-python |
Python dataclasses and type hints |
| C# | 🚧 Planned | specta-csharp |
C# classes and enums |
| Java | 🚧 Planned | specta-java |
Java POJOs and enums |
Legend
- ✅ Stable: Production-ready with comprehensive test coverage
- 🚧 Partial: Basic functionality implemented, complex types in progress
- 🚧 Planned: In development or planned for future release
Implementation Status
The Specta ecosystem is actively developed with varying levels of completeness:
- Production Ready (2): TypeScript and Swift exporters are fully functional with comprehensive test coverage
- Partially Implemented (2): Rust and OpenAPI exporters have basic functionality working, with complex types in progress
- Planned (7): Go, Kotlin, JSON Schema, Zod, Python, C#, and Java exporters are in development
For the most up-to-date status of each exporter, check the individual crate documentation and issue trackers.
Ecosystem
Specta can be used in your application either directly or through a library which simplifies the process of using it.
- rspc - Easily building end-to-end typesafe APIs
- tauri-specta - Typesafe Tauri commands and events
- TauRPC - Tauri extension to give you a fully-typed IPC layer.
Usage
Add the specta crate along with any Specta language exporter crate:
# Core Specta library
# Language exporters (choose one or more)
# cargo add specta_go # Go (planned)
# cargo add specta_kotlin # Kotlin (planned)
# cargo add specta_jsonschema # JSON Schema (planned)
# cargo add specta_zod # Zod schemas (planned)
Then you can use Specta like following:
TypeScript Example
use ;
use Typescript;
Multi-Language Export Example
You can export the same types to multiple languages:
use ;
use Typescript;
use Swift;
A common use case is to export all types for which specta::Type is derived into a single file:
//! NOTE: This example requires the `export` feature on the `specta` crate
use Type;
use Typescript;
Check out the docs for more information.
Motivation
This library was originally created to power the type exporting functionality of rspc, but after building it we realized that it could be useful for other projects as well so we decided to move it into a dedicated library.
A huge thanks to Brendonovich for doing a heap of early development on this library.