Skip to content
/ kumi Public

Kumi is a declarative rules-and-calculation DSL for Ruby that staticaly analyzes and compiles your business logic.

License

Notifications You must be signed in to change notification settings

amuta/kumi

Repository files navigation

Kumi

CI Gem Version License: MIT

Try the interactive demo →


What is Kumi?

Kumi is a declarative DSL for building calculation systems.

Schemas define:

  • Input shape (scalars, arrays, nested structures)
  • Declarations (computed values and boolean conditions)
  • Dependencies between declarations

The compiler:

  • Performs type checking
  • Detects unsatisfiable constraints
  • Determines evaluation order
  • Generates code for Ruby or JavaScript

Use Cases

Calculation systems appear in: tax engines, pricing models, financial projections, compliance systems, insurance underwriting, shipping rate calculators.


Status: experimental. Public API may change. Typing and some static checks are still evolving.

Feedback: have a use case or hit a rough edge? Open an issue or reach out (andremuta+kumi@gmail.com).


Examples

  • US Tax Calculator (2024) — a single schema computes federal, state, and FICA taxes across multiple filing statuses. Open in the demo.
  • Monte Carlo Portfolio — demonstrates probabilistic simulations and table visualizations. Open in the demo.
  • Conway's Game of Life — showcases array operations powering a grid-based simulation. Open in the demo.

Install

gem install kumi

Requires Ruby 3.1+. Runtime dependencies: mutex_m and zeitwerk (bundled via Rubygems).

Quick Start

require 'kumi'

module Double
  extend Kumi::Schema

  schema do
    input { integer :x }
    value :doubled, input.x * 2
  end
end

# Execute in Ruby
result = Double.from(x: 5)
result[:doubled]  # => 10

# or just call the method directly
Double._doubled(x: 5) # => 10

# Export to JavaScript (same logic)
Double.write_source("output.mjs", platform: :javascript)
# ./output.mjs
# export function _doubled(input) {
#   let t1 = input["x"];
#   let t3 = t1 * 2;
#   return t3;
# }

You can also override the compilation strategy without touching code by setting KUMI_COMPILATION_MODE to jit or aot (e.g. export KUMI_COMPILATION_MODE=aot).

Try the interactive demo (no setup required).


Documentation

To regenerate function docs: bin/kumi-doc-gen


License

MIT License. See LICENSE.

About

Kumi is a declarative rules-and-calculation DSL for Ruby that staticaly analyzes and compiles your business logic.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages