Guide and reference

Everything Multitac understands.

Learn the TAC language, guided TIQs, interactive cards, Memory, Insights, supported documents, and the behavior that keeps source authoritative.

Getting started

Start a TAC

A TAC is an editable notebook where prose and calculations share one source. Start blank, choose a Start here example, open a supported text document, or begin with a guided TIQ.

In Multitac, open Start here → Getting started for an editable tour of prose, variables, dependencies, percentages, and unit conversion. Open “Getting started” in Multitac

# Weekend gathering
Planning pizza with friends.
people = 6
slices = people * 3
pizzas = ceil(slices / 8)

walk = 3.5 km
walk in miles

Results appear beside the source at wide widths and below it on compact screens. Editing people recalculates slices and pizzas.

Writing and syntax

  • Use # for a heading and // to force a line to be a note.
  • Plain sentences and Markdown-style bullets remain notes.
  • Use = for explicit, case-sensitive variables.
  • Functions use parentheses and comma-separated arguments.
  • Exponentiation is right-associative. -2^2 means -(2^2).
  • The global Decimal Places setting in Multitac Settings → Editor controls the maximum number of decimal places shown in Results, from 1 through 10 and defaulting to 2. Whole-number Results remain whole. A top-level round(value, digits) overrides this display default for that Result.

Percentages

ExpressionMeaningResult
80 + 15%Add 15% of 8092
20% of 50Take 20% of 5010
10% + 5%Add percentage values15%

Variables and dependencies

Variables are sequential and local to the notebook. Derived definitions retain their formulas. When an input changes, Multitac recalculates all affected dependents transitively.

  • A dependency cycle produces a diagnostic.
  • A broken input invalidates affected results instead of preserving stale values.
  • A unit name cannot be reused as a variable.
  • Blank lines separate total groups. Bare sum, total, avg, and average summarize the preceding group.
  • prev resets at a blank line or calculation error.

Built-in functions

Function names are case-insensitive. Aggregate functions accept values, arrays, variables, and nested arrays. Compatible units are preserved. Every supported completion is listed below with its accepted parameter shape.

FunctionMeaning and parameters
abs()abs(value) — absolute value or vector magnitude
acos()acos(value) — inverse cosine
acosh()acosh(value) — inverse hyperbolic cosine
acot()acot(value) — inverse cotangent
acoth()acoth(value) — inverse hyperbolic cotangent
and()and(values) — true when every value is true
asin()asin(value) — inverse sine
asinh()asinh(value) — inverse hyperbolic sine
atan()atan(value) — inverse tangent
atan2()atan2(y, x) — angle from x and y coordinates
atanh()atanh(value) — inverse hyperbolic tangent
average()average(values) — arithmetic mean
avg()avg(values) — arithmetic mean
cbrt()cbrt(value) — cube root
ceil()ceil(value) — rounds up
choose()choose(n, r) — combinations without repetition
clamp()clamp(value, minimum, maximum) — limits a value to a range
combin()combin(n, r) — combinations without repetition
combina()combina(n, r) — combinations with repetition
correl()correl([x], [y]) — Pearson correlation
cos()cos(angle) — cosine
cosh()cosh(value) — hyperbolic cosine
cot()cot(angle) — cotangent
coth()coth(value) — hyperbolic cotangent
count()count(values) — number of values
csc()csc(angle) — cosecant
csch()csch(value) — hyperbolic cosecant
date()date(value) or date(yyyy, m, d) — date at midnight, displayed without a time
datetime()datetime(value) or datetime(yyyy, m, d) — date and time, using midnight when no time is supplied
days()days(date1, date2) — signed day difference
daysbetween()daysbetween(date1, date2) — elapsed days from first date to second
degrees()degrees(radians) — converts radians to degrees
devsq()devsq(values) — sum of squared deviations from the mean
exp()exp(value) — e raised to a power
fact()fact(integer) — factorial from 0 through 33
fisher()fisher(value) — Fisher transformation
fisherinv()fisherinv(value) — inverse Fisher transformation
floor()floor(value) — rounds down
fromunix()fromunix(seconds) — date and time from a Unix timestamp
gamma()gamma(value) — gamma function
geomean()geomean(positive values) — geometric mean
harmean()harmean(positive values) — harmonic mean
large()large([values], rank) — value at a descending rank
ln()ln(value) — natural logarithm
log()log(value, base?) — base-10 or specified-base logarithm
log10()log10(value) — base-10 logarithm
log2()log2(value) — base-2 logarithm
max()max(values) — largest value
mean()mean(values) — arithmetic mean
median()median(values) — middle value after sorting
min()min(values) — smallest value
not()not(value) — reverses true and false
or()or(values) — true when any value is true
pearson()pearson([x], [y]) — Pearson correlation
permut()permut(n, r) — ordered selections without repetition
permutationa()permutationa(n, r) — ordered selections with repetition
permute()permute(n, r) — ordered selections without repetition
phi()phi(value) — standard normal probability density
pi()pi() — ratio of a circle’s circumference to its diameter
pick()pick(index, values) — selects a one-based list item
power()power(value, exponent) — raises a value to a power
prod()prod(values) — multiplies scalar values
product()product(values) — multiplies scalar values
radians()radians(degrees) — converts degrees to radians
root()root(degree, value) — nth root
round()round(value, digits?) — rounds to a whole number or digit count; a top-level digit count overrides the global Result display default
rsq()rsq([x], [y]) — square of Pearson correlation
sec()sec(angle) — secant
sech()sech(value) — hyperbolic secant
sign()sign(value) — returns −1, 0, or 1
sin()sin(angle) — sine
sinh()sinh(value) — hyperbolic sine
small()small([values], rank) — value at an ascending rank
sqrt()sqrt(value) — square root
stddev()stddev(values) — population standard deviation
stdev()stdev(values) — sample standard deviation
stdevp()stdevp(values) — population standard deviation
sum()sum(values) — adds values
sumsq()sumsq(values) — sum of squared values
tan()tan(angle) — tangent
tanh()tanh(value) — hyperbolic tangent
tod()tod(seconds or duration) — time-of-day duration
total()total(values) — adds values
trunc()trunc(value) — removes the fractional part
truncate()truncate(value) — removes the fractional part
unix()unix(date) — Unix timestamp in seconds
var()var(values) — sample variance
varp()varp(values) — population variance
xor()xor(values) — true when an odd number of values are true

Compatibility names

Apple and Excel names that perform the same scalar or array calculation share an implementation. TAC keeps choose(n, r) for combinations; selection uses pick(index, values…). Dotted names such as STDEV.P and VAR.S are accepted.

Units and conversions

Addition and conversion require compatible dimensions. Products and quotients preserve dimensional meaning. Offset temperatures cannot be multiplied as ordinary quantities. Type forms such as m^2 and ft^2 are normalized to typographic m² and ft².

distance = 12 km
distance in miles

speed = 65 mi / hour
time = 3.5 hours
speed * time in km
  • Angles default to radians; explicit deg works in any angle setting.
  • Volume units use US customary definitions.
  • CSS units use 96 pixels per inch and 16 pixels per em.
  • Decimal data prefixes use 1000; binary prefixes use 1024.

Supported unit reference

SymbolMeaning
Aampere — electric current
acreacre — area
Bbyte — 8 bits
barbar — pressure
bitbit — digital information
bpmbeats per minute — frequency
Ccoulomb — electric charge
calcalorie — energy
cmcentimeter — length
cm²square centimeter — area
cupUS cup — volume
cWcentiwatt — power
dayday — time
emem — relative typographic length
flozUS fluid ounce — volume
ftfoot — length
ft²square foot — area
fWfemtowatt — power
ggram — mass
galUS gallon — volume
GBgigabyte — 1,000,000,000 bytes
Gbgigabit — 1,000,000,000 bits
GiBgibibyte — 1,073,741,824 bytes
GWgigawatt — power
hahectare — area
HPmechanical horsepower — power
hrhour — time
inchinch — length
Jjoule — energy
Kkelvin — temperature
kBkilobyte — 1,000 bytes
kbkilobit — 1,000 bits
kcalkilocalorie — energy
kgkilogram — mass
KiBkibibyte — 1,024 bytes
kJkilojoule — energy
kmkilometer — length
km/hkilometer per hour — speed
kPakilopascal — pressure
ktknot — speed
kWkilowatt — power
Lliter — volume
lbpound — mass
mmeter — length
m/smeter per second — speed
mAmilliampere — electric current
MBmegabyte — 1,000,000 bytes
Mbmegabit — 1,000,000 bits
mgmilligram — mass
mimile — length
MiBmebibyte — 1,048,576 bytes
minminute — time
mlmilliliter — volume
mmmillimeter — length
monthmean Gregorian month — time
mphmile per hour — speed
msmillisecond — time
mVmillivolt — electric potential
MWmegawatt — power
mWmilliwatt — power
m²square meter — area
m³cubic meter — volume
Nnewton — force
nmnanometer — length
nminautical mile — length
nWnanowatt — power
Ohmohm — electrical resistance
ozounce — mass
Papascal — pressure
psipound per square inch — pressure
ptpoint — length
PWpetawatt — power
pWpicowatt — power
pxCSS pixel — length
radradian — angle
ssecond — time
TBterabyte — 1,000,000,000,000 bytes
Tbterabit — 1,000,000,000,000 bits
tbspUS tablespoon — volume
TiBtebibyte — 1,099,511,627,776 bytes
tonnemetric tonne — mass
tspUS teaspoon — volume
TWterawatt — power
uWmicrowatt — power
Vvolt — electric potential
Wwatt — power
weekweek — time
ydyard — length
yearmean Gregorian year — time
°degree — angle
°Cdegree Celsius — temperature
°Fdegree Fahrenheit — temperature
µmmicrometer — length
μWmicrowatt — power
µWmicrowatt — power

Equations and collections

Equations are sequential and document scoped. A bare unknown can be rearranged from a prior equation. solve(name) stores a solution, and named arguments can evaluate it. Two-by-two numeric matrix systems are supported.

Arrays and integer ranges work with sum, prod, map, and reduce. Named iterators such as a=1..3 stay local to the call.

scores = [12, 18, 24]
average(scores)
stdev.p(scores)

sum(x^2, x=1..10)

Dates and time

Dates use the device’s local time zone unless an IANA time zone is specified. date() returns midnight and displays only the calendar date. datetime() displays both date and time; date-only values such as today and tomorrow use midnight by default.

The special values yesterday, today, tomorrow, now, noon, and midnight work as Results and inside date functions. A time by itself uses today’s date. Combine a relative day and time with either at or @. Twelve-hour input accepts AM or PM with or without a space; 24-hour input is also accepted.

date(now)
datetime(now)
2:00 PM
tomorrow at 14:00
tomorrow @ 2:00PM
noon
in 3 days
3 days ago
next Monday
last Monday
2026-10-26T14:00
daysbetween(date("2027-01-01"), date("2027-04-12"))

next Monday always means the strictly future Monday, even when today is Monday; last Monday is likewise strictly in the past. in 3 days and 3 days ago are relative to the current moment. ISO inputs accept local YYYY-MM-DDTHH:mm values and values with seconds, Z, or an explicit offset.

Date durations use fixed seconds: a day is 24 hours, a year is the mean Gregorian 365.2425 days, and a month is one twelfth of that year. They are not calendar-aware month additions.

In Multitac, open Start here → Plans and decisions → Time and routines → Natural dates and times for an editable example. Open “Natural dates and times” in Multitac

Cards, pins, and live results

  • Input cards edit a source literal through a bounded range. Bounds and step can be changed while keeping the current value valid.
  • Comparison cards track any two calculated lines.
  • Plot cards visualize a numeric collection or bounded integer range as a live one-series line plot.
  • Pins preserve a reference to a stable source-line identity.
  • Mac and Apple Vision Pro can open supported results in separate live windows or panels.

Cards never become a second copy of the value. They retain source references and refresh from evaluation.

TIQ workflow

A TIQ (Thought Invoking Question) is a question-led way to create or continue a TAC. Guided, curated, and Personalization TIQs use deterministic app-authored questions. Open-ended TIQs use Apple’s on-device model where available. Both paths can gather a goal, assumptions, preferences, and constraints, then propose visible source.

  1. Choose a focused goal or exploratory path.
  2. Answer in conversation, or edit the TAC directly.
  3. Review proposed prose and expressions.
  4. Apply, revise, or discard the proposal.
  5. Undo accepted edits as ordinary document changes.

AI can draft source, but Multitac evaluates every accepted expression. Redo replays the accepted source rather than invoking the model again.

Memory and Insights

Memory Review proposes useful thoughts and calculated Results from TACs opened on the current device. New candidates wait for approval and cannot affect Memory search, TIQs, or Insights while pending. Multitac does not crawl unrelated files or scan unopened iCloud documents.

  • Open Memory → Review to approve, edit, or dismiss candidates individually or in a batch.
  • Equivalent candidates are grouped while retaining links to every contributing TAC.
  • Only approved items appear in Memory search, related suggestions, TIQs, or Insights.
  • Search approved Memory and insert a visible copy with a source comment.
  • Exclude an individual TAC, forget approved items, clear local Memory, or pause learning.

Find connections uses Apple’s on-device Foundation Model when available. It receives a bounded selection of current and related entries, treats notebook text as data, and returns suggestions with permitted source IDs. Those references are validated before display. A valid reference does not prove the interpretation is correct, so generated prose remains a suggestion to review.

AI limitations

Before Multitac first sends notebook material to Apple’s on-device model, it explains these limits and records only a local, non-identifying acknowledgement on that installation.

  • AI suggestions may be incomplete or wrong.
  • A citation identifies material supplied to the model; it does not prove the interpretation is correct.
  • Multitac evaluates separately displayed arithmetic. That calculation does not validate the surrounding generated prose or advice.
  • Review assumptions, units, source, expressions, and results before relying on or applying generated content.
  • Multitac does not provide financial, legal, medical, engineering, tax, investment, emergency, or other professional advice.

Model-driven proposals remain visible until you apply, revise, or discard them. Accepted source remains editable and can be undone like an ordinary document change. Canceling the disclosure leaves deterministic TIQs, manual editing, and calculation available without invoking the model.

Documents and sync

The native .mtac document is regular UTF-8 text. An optional JSON footer stores stable line IDs, settings, pins, cards, the notebook Memory preference, and TIQ history. Multitac hides that footer in the editor and can recover readable source if metadata is absent or damaged.

FormatEditingRich Multitac metadata
.mtacNative UTF-8 TAC sourceYes
MarkdownOpened and edited in placeNo
CalcaOpened and edited in place; saved => text retainedNo
NumiOpened and edited in placeNo

iCloud Drive transports documents through Apple’s document infrastructure. Multitac has no custom sync server or remote account database.

Platform behavior

PlatformExperience
iPhoneCompact library, push navigation, vertically arranged TAC and companion, and a current-result bar while editing.
iPadSidebar library, Inspiration browsing, adaptive side-by-side editing, keyboard support, multitasking, and document windows.
MacNested library, document windows and tabs, menus, Undo and Redo, settings, and separate result windows.
Apple Vision ProSpatially comfortable library and document windows, separate result panels, and system scene restoration.

App Shortcuts expose Start a new TIQ, Start a blank TAC, and Explore examples to Shortcuts and Siri where available.

Feature index

This index covers product capabilities outside the calculation vocabulary. Search any term to jump to the section that explains its behavior.

Writing and results

Mixed prose and calculations, headings, comments, inline :::: Results, reactive recalculation, diagnostics, result copying, pins, comparisons, plots, input cards, equation spacing, autocomplete, function and unit explanations, angle mode, Undo, and Redo.

Starting and finding work

Blank TACs, Quick TACs, guided and open-ended TIQs, Start here examples, folders, pinned folders, favorites, recently opened documents, sorting, library search, example search, documentation search, and platform deep links.

Context and guidance

Per-TAC Results, Memory Review, approved Memory, Insights, Personalization, source links, candidate approval and dismissal, reviewed wording, hide and restore, Add to Memory from this TAC, local Memory controls, and reviewable on-device AI suggestions.

Documents and platform behavior

Native .mtac, Markdown, Calca, Numi, import, export, Share, autosave, iCloud Drive, tabs and windows on Mac, adaptive sidebars and navigation, touch-and-hold menus, keyboard shortcuts, Home Screen Quick Actions, accessibility labels, VoiceOver, Dynamic Type, and reduced motion.

Current limits

  • Currency and cryptocurrency calculations are deliberately unsupported.
  • English input is supported for the first release.
  • There is no cloud AI fallback, collaboration service, remote account, rich-text attachment system, or native ink canvas.
  • The current plot card is a single-series line plot.
  • Calendar months and years are fixed-duration calculation units, not calendar-aware additions.
  • Some capabilities depend on Apple’s on-device model availability.