#math #calculator #cli #command-line

app kalk_cli

A calculator that supports user-defined functions, variables and units, and can handle fairly ambiguous syntax

24 releases

0.3.14 Feb 22, 2021
0.3.13 Jan 30, 2021
0.3.9 Dec 28, 2020
0.2.2 Dec 9, 2020
0.1.10 Jun 14, 2020

#15 in Math

Download history 1/week @ 2020-11-15 11/week @ 2020-11-22 7/week @ 2020-11-29 75/week @ 2020-12-06 91/week @ 2020-12-13 8/week @ 2020-12-20 48/week @ 2020-12-27 84/week @ 2021-01-03 15/week @ 2021-01-10 39/week @ 2021-01-17 10/week @ 2021-01-24 30/week @ 2021-01-31 37/week @ 2021-02-07 317/week @ 2021-02-14 27/week @ 2021-02-21 12/week @ 2021-02-28

258 downloads per month

MIT and LGPL-3.0+

3.5K SLoC


Crates.io npm GitHub Docs.rs Build status

Kalk is a calculator (both program and library) that supports user-defined variables, functions, and units (experimental, limited). It runs on Windows, macOS, Linux, Android, and in web browsers (with WebAssembly).

Kanban | Website


  • Operators: +, -, *, /, !
  • Groups: (), ⌈⌉, ⌋⌊
  • Pre-defined functions and constants
  • User-defined functions and variables. f(x, y) = xy, x = 5
  • User-defined units (experimental). unit m = cm/100, 2m/50cm, 50cm to m
  • Understands fairly ambiguous syntax. Eg. 2sin50 + 2xy
  • Syntax highlighting
  • Special-symbol completion on tab. Eg. write sqrt and press tab. It will be turned into .
  • Sum function: sum(start, to, expression) Eg. sum(1, 3, 2n+1) is the same as 2*1+1 + 2*2+1 + 2*3+1 = 15
  • Load a file including predefined functions and constants. For example, if you're going to use Kalk for physics, you load up your file with physics functions/constants when starting Kalk. -i file
  • Misc: separate expressions by a semicolon to write them on the same line, use the ans variable to get the value of the previously calculated expression.


There are currently three different libraries related to kalk.

  • kalk: The Rust crate that powers it all.
  • @paddim8/kalk: JavaScript bindings to kalk. This lets you use it in the browser, thanks to WebAssembly.
  • @paddim8/kalk-component: A web component that acts as a frontend to @paddim8/kalk, which lets you use kalk in the browser with a command line-like interface.



Pre-compiled binaries for Linux, Windows, and macOS (64-bit) are available in the releases page.


Minimum rust version: v1.36.0. Make sure you have diffutils gcc make and m4 installed. If you use windows: follow the instructions here (don't forget to install mingw-w64-x86_64-rust in MSYS2).


Run cargo install kalk_cli


  1. Go into the kalk_cli directory.
  2. Run cargo build --release
  3. Grab the binary from targets/release


A more complete reference can be found on the website


Defining: name(parameter1, parameter2, ...) = expression
Example: f(x) = 2x+3

Using: name(argument1, argument2)
Example: f(2)


Defining: name = expression
Example: x = 3

Using: name
Example: x

Units (experimental, are likely to not work properly)

Note: You only need to define the relationship between two units once. You will be able to convert between both of them. Defining: unit name = expression
Example: unit deg = (rad*180)/π

Using: Use them freely in expressions.
Example: 2m/50cm

Converting: expression to unit
Example: 2 m to cm


~503K SLoC