A scientific calculator that supports math-like syntax with user-defined variables, functions, differentiation, integration, and complex numbers.

GitHub Repo
>> f(x) = x(3x + 1) ← Declare functions >> a₁ = 1÷6 ← Declare variables >> 6ia√(f'(a₁))← Differentiation 1.4142135624i 2i ← Complex numbers >> (0, π, sin2ix, dx) + e^(πi) ÷ 3 ← Integration -0.3333333333 + 133.3733807458i ≈ -1/3 + 133.3733807458i >> Σ(n=0, 720, 1÷n!) ← Calculating sums 2.7182818285 e
Open a kalker session in a new tab



All the calculator features and how they're used.


Completion for special symbols

You can type special symbols (such as √) by typing the normal function or constant name and pressing tab.


Variables are defined with the following syntax: name = value

Examples: x = 3/4


Functions are defined with the following syntax: name(param1, param2, etc.) = value

Examples: f(x) = 2x+3 A(x, y) = (xy)/2

They are used like this: name(arg1, arg2, etc.)

Examples: f(3) + 3 A(2, 3)

Derivation can be done like this: name'(arg1)

Examples: f'(3) + 3 sin'(pi)

Predefined functions



A vector in kalker is an immutable list of values, defined with the syntax (x, y, z) which may contain an arbitrary amount of items. Generally, when an operation is performed on a vector, it is done on each individual item. This means that (2, 4, 8) / 2 gives the result (1, 2, 4). An exception to this is multiplication with two vectors, for which the result is the dot product of the vectors. When a vector is given to a regular function, the function is applied to all of the items in the vector.
A specific item can be retrieved from a vector using an indexer, with the syntax vector[[index]]. Indexes start at 1.
Vector comprehensionsexperimental
Vectors can be created dynamically using vector comprehension notation, which is similar to set-builder notation. The following example creates a vector containing the square of every number between one and nine except five: [n^2 : 0 < n < 10 and n != 5]. A comprehension consists of two parts. The first part defines what should be done to each number, while the second part defines the numbers which should be handled in the first part. At the moment, it is mandatory to begin the second part with a range of the format a < n < b where n defines the variable which should be used in the comprehension. Several of these variables can be created by separating the conditions by a comma, for example [ab : 0 < a < 5, 0 < b < 5].


A matrix is an immutable two-dimensional list of values, defined with the syntax [x, y, z; a, b, c] where semicolons are used to separate rows and commas are used to separate items. It is also possible to press the enter key to create a new row, instead of writing a semicolon. Pressing enter will not submit if there is no closing square bracket. Operations on matrices work the same way as with vectors, except that two matrices multiplied result in matrix multiplication. It is also possible to obtain the tranpose of a matrix with the syntax A^T, where A is a matrix and T is a literal T.
A specific item can be retrieved from a matrix using an indexer, with the syntax matrix[[rowIndex, columnIndex]]. Indexes start at 1.


Kalker looks for kalker files in the system config directory. If a file with the name default.kalker is found, it will be loaded automatically every time kalker starts. Any other files in this directory with the .kalker extension can be loaded at any time by doing load filename in kalker. Note that the extension should not be included here.


kalker officially runs on Linux, Windows, macOS, and Android.

Download for Android