Project

twilic

0.0
The project is in a healthy, maintained state
Ruby implementation of a fast, compact binary wire format for modern data transport.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 5.25
~> 13.2
~> 1.69
 Project Readme

Twilic (Ruby)

Ruby implementation of the Twilic wire format and session-aware encoder/decoder.

This gem's default Twilic.encode / Twilic.decode API targets Twilic v2.

What this gem provides

  • Dynamic encoding/decoding (Twilic.encode, Twilic.decode)
  • Schema-aware encoding (Twilic.encode_with_schema)
  • Batch and micro-batch encoding (Twilic.encode_batch, SessionEncoder#encode_micro_batch)
  • Stateful features (base snapshots, state patch, template batch, control stream, trained dictionary)

Project layout

twilic-ruby/
  lib/twilic.rb                   # public API
  lib/twilic/core/                # wire, model, codec, session, protocol, v2
  scripts/                        # Rust interop fixtures and smoke checks
  docs/

The repository root stays thin: require "twilic" only. Implementation details live under lib/twilic/core/, similar to internal/core/ in the Go module.

Requirements

  • Ruby 3.3 or later

Install

gem install twilic

Or add to your Gemfile:

gem "twilic"

Quick start

require "twilic"

value = Twilic.map(
  "id" => Twilic.u64(1001),
  "name" => Twilic.string("alice")
)

bytes = Twilic.encode(value)
decoded = Twilic.decode(bytes)
puts Twilic.equal(decoded, value) # => true

Session encoder example

require "twilic"

enc = Twilic.new_session_encoder

value = Twilic.map(
  "id" => Twilic.u64(1),
  "role" => Twilic.string("admin")
)

bytes = enc.encode(value)

Development

Run checks locally:

bundle install
bundle exec rake test

Rust client interop smoke check (Ruby server -> Rust client):

bash scripts/check-rust-client-interop.sh

Ruby client interop smoke check (Rust server -> Ruby client):

bash scripts/check-ruby-client-interop.sh

Run both directions:

bash scripts/check-interop.sh

Note: these scripts expect ../twilic-rust to exist as a sibling directory.

Markdown formatting

Documentation is formatted and linted with Prettier and markdownlint (see docs/CONTRIBUTING.md).

CI and release (GitHub Actions)

  • CI workflow: .github/workflows/ci.yml
  • Interop workflow: .github/workflows/interop.yml
  • Release workflow: .github/workflows/publish-gem.yml (tag v* must match lib/twilic/version.rb)

Spec parity

This gem mirrors the Twilic wire format spec at twilic/twilic and stays in lockstep with the Rust, Go, and Zig reference implementations.

See docs/SPEC-TEST-TRACEABILITY.md for the spec-section to test mapping.

License

This project is licensed under the MIT License - see the LICENSE file for details.