Qalculate! is a multi-purpose cross-platform desktop calculator. It is simple to use but provides power and versatility normally reserved for complicated math packages, as well as useful tools for everyday needs (such as currency conversion and percent calculation).
Features include a large library of customizable functions, unit calculations and conversion, physical constants, symbolic calculations (including integrals and equations), arbitrary precision, uncertainty propagation, interval arithmetic, plotting, and a user-friendly interface.
Screenshots
Observed history
| App | Change | Version | When ↑ |
|---|---|---|---|
| updated | 5.13.0 | 6 Oct 2026 |
Upstream releases
Release notes supplied by the developer. These dates are not Flathub package publication times.
5.13.05 Oct 2026
Changes:
- Add temporary check box to function edit dialog
- Fix bookmark removed when deleting history item immediately above
- Fix segfault when adding bookmark to most recent history item
- Fix calculate as you type result cleared or added to history again when history is modified
- Fix result containing interval with zero as lower value not displayed automatically
- Fix too long lines in history with some fonts
- Fix number of decimals for currency quantity when currency is placed before quantity
- New function: ymd() (returns the number of calendar years, months, and days between two dates)
- Return exact value for more argument values in lambertw() function
- Integrate sqrt(ax + b)/x and 1/(x × sqrt(ax² + bx + c))
- Do not use same "n" variable for different unknown integer values in equation result (e.g. e^e^x = 1)
- Solve e^x = ln(x), a × sin(x) = a × tan(x), and a × sin(x) = −a × tan(x)
- Solve f(x) = f(x²) and f(x) = −f(x²) for trigonometric functions, and exponentiation
- Do not return x = −infinity as solution for a^x = 0
- Fix a = 1 and b = 1 solution for a^x = b when the value of a and b are unknown
- Fix uncertainty propagation with duplicate equal data set functions
- Fix trigonometric functions with function in argument not calculated when angle unit is not radians
- Fix division by zero warning for some expressions with zero quantity (e.g. "1 m × 0 kg")
- Fix inconsistent (over)use of secondary exchanges rate sources
- Minor bug fixes and feature enhancements
5.12.013 Jul 2026
Changes:
- LaTeX input and output (using latex() function or "$\...$" syntax)
- Solve a*x^b+c*d^x=0 for real x
- Solve equations with absolute value and complex x (x*abs(x)=a, x^2*abs(x)=a, and a*f(x)+b*abs(x)=c)
- Improve simplification of a^(c/d)/b^(c/d) in exact mode (e.g. cbrt(12)/cbrt(4)=cbrt(3))
- Apply logical and bitwise operation entrywise to vectors and matrices
- Allow symbols with suffix when input using backslash (e.g. \x_n = "x_n", with n shown as subscript in output)
- Add argument for reverse conversion to roman(), bijective(), and bcd() functions
- Add tsp and tbsp abbreviations, change cup to exactly 240 mL (U.S. legal), and add U.S. customary cup, tablespoon, and teaspoon
- Mixed units conversion improvements/fixes
- Add "Insert parentheses" shortcut action (default "Ctrl+Shft+("), which always inserts empty parentheses after cursor
- Update conversion list immediately during calculate-as-you-type (do not wait until added to history)
- Fix conversion of feet and inches when using ' and " (e.g. 5'2" to cm)
- Fix a*x+b*ln(x)=c where sgn(a)!=sgn(b) (only one solution were found)
- Fix segfault when calculating limit for expression with sinh or cosh (also affects integrals with infinite lower or upper limit)
- Fix RPN syntax for expressions with multiple functions
- Fix cursor and text position with RTL keyboard layouts
- Fix duplicated character when using plasma keyboard alternate character popup
- Minor bug fixes and feature enhancements
5.11.025 May 2026
Changes:
- Add set functions (union, intersect, setdiff, setxor, isMember, isSubset) and operators (∪, ∩, ∖, ⊖, ∈, ⊆, etc.)
- Add characters(), count(), digitSum(), and digitalRoot(), find(), popCount(), string(), and while() functions
- Support negative row and column values in element(), row(), and column() functions
- Support matrix[row][column] syntax
- Support text objects in sort() function
- Add third optional argument to interval() function to allow exclusion of exact endpoints
- Ignore "to" and "where" (and equivalent symbols) inside quotation marks
- Ignore dot in front of plus or minus (for consistent behavior in line with entrywise operators)
- Show "Division by zero" warning for all divisions by zero
- Make display of expressions with time units in time format more consistent
- Fix parse status and calculate-as-you-type when "where" expression defines a new symbol
- Fix removal of currency symbol in immediately in front value when copying result without unit
- Fix support for vector in argument of many functions (erf, mod, exp, etc.)
- Fix explicit conversion to mixed units for year variants
- Fix first digit missing in return value of integerDigits() in some cases
- Fix segfault when Calculator object is destroyed with uninitialized random state
- Fix infinite loop when referencing subfunction in another subfunction
- Fix segfault in replace() with variable specified using where expression, e.g. "replace(v, x, 1) where v = x"
- Fix segfault when data set function name is followed immediately by a single dot
- Fix v[i]=a syntax for vector element assignment
- Convert degree Celsius to Fahrenheit and vice versa in Gnome search provider
- Minor bug fixes and feature enhancements
5.10.030 Mar 2026
Changes:
- Improve factorization and simplification (particularly with radicals, logarithms, and absolute value)
- Add ton of refrigeration, slug, mol/dm³, mol/L, and molar units
- Add pcm, ppm, ppb, ppt, and ppq (parts per …), and lakh and crore variables
- Add XAG, XAU, XPD, and XPT currencies (precious metals)
- Use a maximum 4 decimals and minimum of 2 decimals by default for display of value of converted currencies
- Improve handling of "to mixed" after previous conversion statement (e.g. "1 m to in to mixed")
- Improve interval calculation, with interval arithmetic, with division by zero and/or both real and complex numbers in derivative of expression
- Treat 0^0 as undefined (instead of equal to 1), and fix limit for 0^0
- Set initial random seed using /dev/random
- Do not show warning about denominators assumed non-zero when converting to expression with non-unit objects
- Do not show negative exponents (if "negexp" is deactivated) when expressions contains unknown variables, even if all units have negative exponents
- Do not show possibly real expression in complex exponential form
- Initial support for comparison of vectors and matrices
- Allow use of apostrophe as thousands separator in input, when specified as such by locale
- Fix segfault with recursive variable in "where" expression
- Fix segfault in some cases when argument in det() contains only a single element
- Fix wrong simplification of "sin(2-cosh(x)^2/x+x)"
- Fix negative exponents always used for units with rounding set to (halfway) down or up
- Fix adaptive interval display for calculate-as-you-type result
- Minor bug fixes and feature enhancements

