Numlex Documentation
Using Numlex
Report issue

Settings & appearance

The eight Settings categories — General, Notebook, Editing, Numbers, Dates & Times, Constants & Units, Styling and About — and every appearance, formatting and footer behavior.

Numlex’s settings are organized into eight categories, selected from a compact row of icon-over-label tiles across the top of the window — General, Notebook, Editing, Numbers, Dates & Times, Constants & Units, Styling and About. Notebook sits immediately after General. Each page is one readable column of grouped rows with native switches, pickers and sliders, and every preference is stored locally on your Mac; nothing here syncs anywhere.

Which page owns what

CategoryOwns
GeneralInterface language, Auto/Light/Dark appearance, the Dock/App Switcher application icon and the sales-tax configuration
NotebookSheet Behavior, Floating Total controls and notebook preferences
EditingOperator helpers and automatic insertions — anything that rewrites text as you type
NumbersRegional number format, paste conversion, how answers are displayed and copied
Dates & TimesThe work calendar (holiday region, hours per workday) and custom timezone aliases
Constants & UnitsApp-wide constants and custom units (one segmented surface)
StylingTypography, answer column, syntax colors, live preview
AboutThe app identity, Check for Updates and the automatic-check schedule

First launch

A genuinely new install opens on a one-time calculation bloom: ten real calculations in the app’s own editor palette gather around the app icon and settle into the official slogan with a single Get Started button. The sequence runs once and stops; with Reduce Motion the final lockup is simply there, immediately usable, with no staged animation.

Pressing Get Started records the first launch and mounts the notebook. Existing installs never see the bloom. There is no Replay command anywhere in the app — the welcome sequence is not a feature you can re-run.

General

Interface

ControlValuesNotes
Interface languagethe shipped app languagesLocalizes the UI only — it never changes the numeric format.
AppearanceAuto / Light / DarkApplies to the whole app immediately. Auto follows macOS live; Light and Dark pin the app and ignore system changes. Fresh installs default to Auto.
Application iconDark / LightThe Dock and App Switcher icon only. Dark (the fresh default) is the app’s standard icon; Light is the alternate shipped inside the app. Switching applies immediately and is remembered; it never changes the Finder icon of the app itself or any document.

Tax

The app-global sales-tax configuration for the financial tax phrases (stored in the settings, never exported to .nlx). The controls live in a localized Tax group on the General page; Tax is not a separate navigation tile.

ControlValuesNotes
Preset regionCustom + the bundled presetsSeeds the tax name and rate once at selection time (AU GST 10, GB VAT 20, DE VAT 19, NL VAT 21, and more). Presets carry official regional rates with their source information. The United States carries no automatic rate: selecting it seeds the name only, leaves the rate unset and requires a manual entry; a manual 0% is allowed and distinct from unset.
Tax namefree text (bounded)Accepted case-insensitively by the tax phrases: sales tax, VAT and GST are always registered, plus this name. Default Sales Tax.
Tax ratepercent, 0…<100Used by + VAT, VAT on …, pre-tax price of … and gross price of …. Empty = automatic tax disabled; those phrases then fail with set sales tax in Settings → Tax.

Every change applies immediately, re-evaluates the sheets live and never changes a sheet’s content, caret, selection or scroll. See Finance & investments for the exact formulas.

Notebook

Notebook is the second Settings page, immediately after General. It owns Sheet Behavior, notebook preferences and the Floating Total controls.

Sheet Behavior

  • On launch — choose Open Last Edited Sheet (default) or New Sheet. The launch decision runs once per process; opening another window does not create another launch sheet.
  • Use ⌘N for — choose New Sheet (default) or New Window.
  • Start sheets with — choose Regular Line (default) or Heading.
  • Sort sheets by — choose Date Edited (default), Date Created or Name; sorting applies within the active folder.

Notebook preferences

  • Line numbers (on by default) shows a number beside each input line.
  • Hide sidebar button when collapsed (off by default) hides the toolbar button while the sidebar is collapsed; reopen it with ⌃⌘S (Control-Command-S) or View → Toggle Sidebar.
  • Sidebar rows show each sheet’s creation date and line count on one line; the date ellipsizes only when the two labels cannot fit.

Minimal Mode

Choose View → Minimal Mode or press ⌘⇧M. It is per-window and session-only, starts off in each window, and is available only in the focused, ready main-window scene. It is disabled in Settings, during the welcome/reveal, in native full screen and while a native mode transition is in progress. Minimal Mode hides only the sidebar and Floating Total footer; inline total lines and answers remain. It does not change saved sidebar or Floating Total preferences, sheet content or export/print output.

Editing

Everything here changes the text you type, never an evaluated value.

Operators

ControlEffect
Pad operators with spaces1+1 becomes 1 + 1
Replace * with ×3*3 becomes 3 × 3
Replace backtick ` with +5`5 becomes 5 + 5
Use QuickOperators5p5 → 5 + 5, 5m5 → 5 − 5, 5x5 → 5 × 5, 5d5 → 5 ÷ 5

QuickOperators act only between two digits and never inside identifiers (0x1F is never rewritten).

Automatic insertions

ControlEffect
Format numbers with thousand separatorsGroups numbers as you type (10000 → 10,000). Answer grouping is a separate Numbers setting.
Insert previous answer after typing operator on new lineAfter pressing return, typing any operator (+ − × ÷) starts a line that reuses the previous answer as a live token.

Numbers

Regional format

The region preset changes how numbers are typed, pasted, grouped and displayed — and which separator function calls expect.

FormatExampleDecimalGroupingFunction argument separator
Systemplatformlocalelocale; if the system decimal separator is a comma, otherwise ,
North America1,234.56.,,
Western Europe1.234,56,.;
Eastern Europe1 234,56,NBSP (a space is accepted in input);

Changing the region can re-interpret numbers in the open sheet. Numlex warns with the list of answers that would change and only applies the change when you confirm.

Two independent switches sit in the same group: Convert foreign numbers on paste (turns a pasted 1,234.56 into the local form, leaving prose and already-local numbers alone) and Show thousands separator.

Auto-convert single units

Settings → Numbers → Auto-convert single units is off by default. Choose Local units to convert an eligible standalone measurement to the locale’s metric, US or UK unit for its answer and totals. Eligibility is deliberately strict: the line must contain exactly one numeric literal and one built-in physical unit. The typed line is never rewritten.

Explicit conversions, arithmetic and rates, currencies, custom units and compound expressions keep their existing behavior. Bare temperature (20 C) and bare fuel-economy (8 L/100km) lines evaluate as plain unitless numbers and remain unchanged; explicit conversion such as 20 C to F is still required.

Answer display

ControlValuesEffect
Rounding2…10 decimal placesGlobal answer rounding. Calculation precision is never changed — only the displayed and copied value.
Compact large numberson/off100000 displays as 100k; copied values keep full precision.
Default answer format → NotationAutomatic, Decimal, Scientific, Engineering, Fraction, Timespan, CustomHow numeric answers are shown and copied. Timespan applies only to time-dimension quantities; anything else falls back to Automatic.
Fraction denominatorboundedLargest denominator the fraction approximation may use.
Negative numbersminus prefix, parentheses, trailing minusDisplay-only style for negative results.
Currency symbolbefore/before-spaced/after/after-spacedWhere the currency symbol sits.
Custom formata number skeletonA locale-neutral pattern such as #,##0.00, up to 96 characters.

Automatic shows a plain or compact value with a scientific fallback at very large magnitudes (|v| ≥ 1e16) and never switches to engineering notation by itself. An invalid custom pattern is still saved and editable, but it never reaches rendering: those answers fall back to Automatic until it is fixed.

The full pattern grammar, the four regions and the paste rules are documented in Number formats & result display; the Timespan notation is documented in Dates & times.

Formatting is display-only

Switching the notation, rounding an answer or changing the currency style never changes a value, an answer token’s payload, a dependency or a total. Only the rendered and copied text changes.

Dates & Times

The Dates & Times category owns the app-global temporal preferences, split into two groups.

Work calendar — a Holiday region picker (Automatic = the active number context’s system region, plus the 25 supported ISO country profiles) and an Hours per workday stepper (clamped to 1…24, default 8). Workdays are Monday–Friday minus the region’s public holidays; an unsupported region or an out-of-catalog year makes a dated workday query fail strictly instead of silently ignoring holidays. The bundled holiday profiles cover 25 countries for 2019–2035 and work offline.

Custom timezones — up to 100 rows, each a user alias and an IANA identifier. Every row reports a live validation state: empty, incomplete, invalid name, duplicate, reserved by a built-in place, unknown timezone, or active. Aliases are matched case/whitespace-insensitively and can never steal a bundled city/country/IATA/ICAO/IANA identifier or a GMT/UTC/fixed abbreviation. Only active rows reach the timezone lookup (time in <alias>).

The whole block is app-global and never exported to .nlx. See Dates & times for the temporal grammar and the offline timezone catalog.

Constants & units

Settings → Constants is one segmented surface with two tables:

SectionRow limitValues
Constants100A finite unitless scalar, a percentage, or a single-fiat-code money value; may reference other constants; dependencies resolve independently of row order.
Units100A multiple of an existing unit (12 feet) or the literal new unit (an independent dimension).

Each row shows a live status — incomplete, invalid name, duplicate, reserved, invalid expression, unknown dependency, cycle, limit reached. Invalid rows stay visible but inactive: they reserve no name and are never referenced.

Constants and custom units are app-global. .nlx sheet exports never embed them. The naming rules, limits and rejected values are in Custom units & constants.

Styling

Typography

Font size (a continuous slider) and font design — System Default, Rounded, Serif, Monospaced. The chosen size is the single source of truth for the editor, the answer column and the preview, so line-height and baseline stay consistent.

New in 4.9.3: notebook text can also use any font family installed on your Mac.

  • The Font menu lists the four built-in designs directly and adds an Installed Fonts submenu with every family macOS reports as installed. Family names come from macOS and are shown exactly as macOS spells them.
  • Once a family is selected, a Face row appears for that family’s exact weight/style. Its first entry, Regular, means “the family’s regular face” rather than a specific PostScript name; the remaining entries are the family’s installed faces. Choosing a different family starts at Regular again.
  • Choosing a built-in design clears the custom family and face — the design is both the selection and the fallback.
  • If a chosen family is not installed right now, the stored name is kept (so the font comes back when it is reinstalled) and marked Unavailable in Settings while notebook text falls back to the selected built-in design. Nothing is rewritten and nothing breaks.
  • The choice is app-global: it lives in the settings store (never per sheet, never in a .nlx file) and applies to the editor, the answer column (total rows and the footer value included), the live Preview, and the export dialog’s Notebook font, which inherits it. An explicit family/face chosen inside the export dialog stays session-only.
  • Line height stays fontSize × 1.6 for the four built-in designs. A font whose natural metrics are taller raises it automatically (the tallest of the regular/semibold/heavy faces plus 4 pt), so glyphs are never clipped; the same value drives the editor, the answers and the preview.
  • A typography change reflows and re-measures rows in place. It never replaces your text or touches sheet content, line identifiers, tokens, caret, selection, marked text, focus, scrolling or the calculated values — and colour-only changes still repaint without any re-layout.

Answer column

ControlValuesEffect
Width140–400 pt (default 200)The column’s width, set as a precise slider. The same value can be set by dragging the thin divider between the editor and the answers — left grows the column, right shrinks it.
AlignmentLeading / TrailingWhere answers sit inside the adjustable answer column.
BackgroundNeutral / Sand / Slate / Sage / BlushThe column’s surface color. Answer text stays high-contrast on every choice.

New in 4.9.2: the width is adjustable (140–400 pt, default 200). It is presentation-only: stored app-wide in the settings store (never per sheet, never in a .nlx file) and changing it never touches a sheet’s content, values, tokens, caret, selection, scroll position or the editor. A drag updates the column live and saves exactly once on release. In a window that cannot fit the editor’s 280 pt minimum plus the chosen width, the column is capped to what remains, so the layout always stays safe.

Syntax colors

Eight roles can be styled independently — Numbers, Operators, Variables, Units, Specifiers, Headings, Comments and Labels.

Each role offers preset swatches (Standard Text, Cyan, Green, Pink Purple, Blue, Money Purple), a Custom color picked with the system color picker, and Default, which restores that role’s factory preset without touching any other role.

Reset Syntax Colors restores all eight roles at once; your font and answer column settings are kept. A live Preview block renders the current role colors as you change them.

The money-marker color, answer-token color and caret color are deliberately fixed — they are not part of the role set.

About

The About page is the app’s identity and its update home:

ItemBehaviour
IdentityA centered block with the current app icon (following the chosen Dark/Light icon live), the name “Numlex” and the localized app version.
DocumentationA native link to https://numlex.tech/docs/.
GitHubA native link to https://github.com/Qulierm/Numlex.
Check for Updates…Starts a check now (the same action as Numlex → Check for Updates…). Disabled while a check is already running.
Automatically check for updatesThe native switch over Sparkle’s own persisted preference; scheduling follows Sparkle’s defaults (roughly every 24 hours, with its own consent prompt). Numlex never forces a check on launch.

Checks read the HTTPS feed at https://numlex.tech/appcast.xml, and a downloaded release must carry a valid EdDSA signature that is verified before the archive is extracted. If this build has no packaged update metadata (for example a development run), the group says so and stays disabled instead of failing.

The automatic-check flag is not part of Numlex’s settings store or .nlx exports.

Updating from an older version: 4.8.0 was the first release with the updater, and 4.9.6 is the current release. Users on 4.7.0 or earlier install the current release manually once; from 4.8.0 on, updates arrive in-app and a current build reports “up to date”.

Answer context menu

Right-click (or Control-click) an answer for its native menu. The menu exists only for rows that have one: quiet lines (blank, header, skipped), malformed money/date/function errors and the weather-unavailable row offer no menu at all.

ItemApplies toBehaviour
Copy Answeranswers with a menuCopies the exact displayed value.
Round (0…10 dp slider)eligible numeric answers (the slider appears only where rounding applies)Re-rounds just this answer, independent of the global 2…10 rounding. The source line is untouched.
Number Formatnumeric answersA local notation for this answer; Default clears the override.
Reset Formatting to Defaultsanswers that carry an overrideAppears only when an override exists; clears it.
Convert to Normal Linesubtotal/grand-total rowsReplaces the command with a full-precision numeric literal; a named form keeps its name = prefix.
Delete Lineanswers with a menuRemoves the source line of that answer.

The menu is fully native and follows the system appearance. A local override never changes the value, a token that references the line (tokens render with their own or the global format), a dependency or a total — see Answer tokens and Tags, subtotals & statistics.

Line highlights

Line highlights are not in the answer context menu. They are applied from the app menu Format → Highlight (None, Yellow, Orange, Green, Blue, Purple, Pink) or the editor’s text context menu, and they target the caret’s logical line (or every selected logical line) — so headings, comments and plain prose can be highlighted too.

  • A highlight belongs to the line, not its position, so it follows the line when lines are inserted or removed above it.
  • Highlights persist with the sheet: a stale entry is dropped and, for a duplicate, the first valid color wins.
  • Highlight is decoration only — it never affects evaluation, answers or tokens. See Sheets & files.

Layout details

ItemValue
Answer column widthadjustable, 140–400 pt (default 200 pt); capped by the window so the editor keeps at least 280 pt
Line-number guttervisible: 54 pt indent (36 pt gutter + 18 pt leading); hidden: 18 pt
Total bar vs inline totalthe bottom Total panel is dimension-agnostic and sums the evaluated magnitude of every ordinary scalar answer row once, excluding inline total rows so the two never double-count; inline total lines are a separate section-scoped command that is always active
Bottom Total bubbleshows the localized label beside the value while both fit, and collapses to a value-only bubble when the value would collide with the label — the label, its gap and its spacer claim are removed, and the bubble’s height and the reserved footer space never change

Before the main window first appears, Numlex restores its saved frame only when at least 100 pt overlaps a connected display in both dimensions. Otherwise it starts at 800×600, centered in the primary visible area when it fits; if there is no suitable primary visible area, SwiftUI centers the fallback on its default display. The saved sidebar visibility is independent; a legacy store without that choice defaults to the expanded sidebar. This choice is made synchronously; currency rates load separately and neither their request nor its result delays or repeats window placement.

Persistence

  • Every preference is written locally in the app’s settings store; the app is fully functional offline and no setting is uploaded.
  • Sheet-level data (per-answer overrides, line highlights, sheet content) lives with the sheet and its .nlx export.
  • Constants, custom units, temporal preferences, the tax configuration, the footer statistic and the answer column width are app-global and are never embedded in .nlx.

The floating Total panel is configurable: right-click it to choose Sum, Average, Count or Median (one native checked menu, localized). The choice is an app-global, persisted setting (never part of .nlx), and it changes only the footer — never the sheet content, caret, selection, IME, scroll position or the editor. Count shows an exact integer; the other statistics use the existing global number presentation. Derived aggregate rows (inline totals, subtotals, grand totals, tag aggregates, dividers) never contribute, and the default Sum matches the previous Total. An unknown value falls back to Sum. See Tags, subtotals & statistics.

The documentation page’s footer is a currency-rate source attribution, not a Settings control.

Floating Total

The Notebook page owns four Floating Total controls:

  • Show (on by default) controls visibility in both placements. When off, neither a reserved footer nor an overlay is shown; inline total lines still evaluate and render.
  • Avoid overlapping answers (on by default) reserves footer space beneath the answers. When off, the same interactive footer overlays the bottom of the answer viewport without taking layout space.
  • Include referenced lines (on by default) counts the source row of each answer token; when off, source rows are excluded, while rows displaying a token still count.
  • Include variable declaration lines (on by default) counts declaration rows such as x = 5; when off, only rows using those variables count.

The three contribution controls apply consistently to Sum, Average, Count and Median, and to PDF/print snapshots. They affect which eligible rows contribute, not which result types are eligible.

Found an issue in these docs? Report it on GitHub