A cross-platform serialization library that lets you read binary data directly without parsing or unpacking it first.
gepheum/skir
A declarative schema language that generates type-safe data models and RPC code for TypeScript, Python, Java, Go, C++ and more from one .skir file.
Open-source alternative to:Protocol Buffers
- Stars
- 316
- Forks
- 10
- Open issues
- 1
- Last commit
- 17 days ago
What is it?
Skir is a schema language for defining data types and APIs in a single .skir file. A command-line generator turns these definitions into native code for TypeScript, Python, Java, Go, C++, Rust, Kotlin, Swift and several other languages, so client and server share one contract.
The generated types are deeply immutable, with all fields required at construction time. The project supports sum types with constant or typed variants, key-indexed arrays with lookup APIs, and three serialization modes: dense JSON, readable JSON and binary. It also includes schema evolution checks so older data stays deserializable as definitions change.
For services, Skir provides SkirRPC, a lightweight HTTP RPC layer with a built-in Studio app for browsing and testing methods. Types can also be imported directly from GitHub repositories, and a VS Code extension with a language server adds validation, completion and formatting.
Key features
- 01Generates type-safe code for 10+ languages from one schema file.
- 02Produces deeply immutable types with all fields required at construction.
- 03Supports sum types with constant or typed variants.
- 04Offers dense JSON, readable JSON and binary serialization.
- 05Includes SkirRPC, an HTTP RPC layer with a built-in Studio for testing methods.
- 06Allows importing types from GitHub repositories.
Use cases
- Sharing request and response types between a TypeScript frontend and a Python or Go backend.
- Replacing Protocol Buffers definitions with a schema language that has sum types and key-indexed arrays.
- Defining typed APIs that need an HTTP RPC layer and a browsable test UI.
- Sharing data structures across several projects through GitHub imports.
Quick start
- 1
Open the getting started guide for setup and workflow
- 2
Write a .skir schema file and generate code for your target language
Things to know
- The Elixir generator is community-maintained rather than official.
Topics
FAQ
- What is skir?
- A declarative schema language that generates type-safe data models and RPC code for TypeScript, Python, Java, Go, C++ and more from one .skir file. Skir is a schema language for defining data types and APIs in a single .skir file. A command-line generator turns these definitions into native code for TypeScript, Python, Java, Go, C++, Rust, Kotlin, Swift and several other languages, so client and server share one contract.
- Is skir free to use? What license does it have?
- skir is open source under the MIT license. Check the license terms before using it in commercial products.
- Is skir still maintained?
- Actively maintained. The last commit to skir was on Oct 6, 2026.
- What can I use skir for?
- Sharing request and response types between a TypeScript frontend and a Python or Go backend. Replacing Protocol Buffers definitions with a schema language that has sum types and key-indexed arrays. Defining typed APIs that need an HTTP RPC layer and a browsable test UI. Sharing data structures across several projects through GitHub imports.
- How do I install skir?
- Open the getting started guide for setup and workflow Write a .skir schema file and generate code for your target language
- Where can I get skir?
- The source code and installation instructions are on GitHub: https://github.com/gepheum/skir
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A language-independent RPC framework with a code generator that builds interoperable clients and servers across many programming languages.
End-to-end typesafe APIs for TypeScript with no schemas or code generation, sharing types between server and client.
A command-line tool for calling gRPC servers, like curl but using JSON input over gRPC, with schema discovery via server reflection or proto files.
A pluggable linter and auto-fixer that enforces Protocol Buffer style guide rules without requiring a protoc compiler.
Cross-platform desktop app framework for building small, fast apps with TypeScript in the main process and webviews, with Zig, Rust, Go, or Odin also supported.