Configuration

Three separate things, often confused: what the operator sets for the whole instance, what the process is told through its environment, and what each account chooses for itself.

config.toml

Written to ~/.config/ontoplano/config.toml on first run, and edited by the operator or through /admin. Its shape is the OntoplanoConfig interface, so this table is that interface.

[server]

Key Type Means
host string
port number

[database]

Key Type Means
path string

[week]

Key Type Means
firstDay number
generateDay number

[registration]

Key Type Means
mode RegistrationMode

[account]

Key Type Means
allowEmailChange boolean Whether a person may move their account to another address.

allowEmailChange

Whether a person may move their account to another address.

Off unless the instance says otherwise: an email address is what an account is here — it signs in and it receives the reset link — so letting it be changed is the operator's call, not the account holder's.

[reports]

Key Type Means
clientErrors boolean Whether the app may ask people to send in client-side errors.

clientErrors

Whether the app may ask people to send in client-side errors.

Off by default: a stack trace is somebody's data leaving their browser, so the instance opts in, and then each person is asked once and can say no. Nothing is ever sent before both have said yes.

[ui]

Key Type Means
undoSeconds number Seconds a delete waits, undoably, before it happens. Zero turns it off.

[media]

Key Type Means
maxKilobytes number The biggest single picture this instance accepts, in kilobytes.
recipeImages number How many pictures one recipe may carry. One of them is the main one.
entryImages number How many pictures one notebook entry may carry.
accountMegabytes number Everything one account's pictures may add up to, in megabytes.

maxKilobytes

The biggest single picture this instance accepts, in kilobytes.

Enforced on the server against the bytes actually received, not against what the browser said it was sending. Pictures are rows in the same SQLite file as everything else, so this is also the number that decides how fast that file grows.

[newsletter]

Key Type Means
enabled boolean Whether this instance keeps a list of people to tell when it changes.
origin string The site allowed to post the form, if the form is not on this host.

enabled

Whether this instance keeps a list of people to tell when it changes.

Off unless the instance says otherwise, like every other feature that collects an address from somebody who is not an account holder: a self-hosted install has nothing to announce, and a subscribe form on it is a box that fills up with whatever crawlers put in it.

On, it opens one public endpoint — /api/subscribe — which takes an address, sends one confirmation, and does nothing at all until that link is followed.

origin

The site allowed to post the form, if the form is not on this host.

ontoplano.com is a different origin from app.ontoplano.com, so the footer form is a cross-origin POST and the browser will not send it without being told. Empty means same-origin only, which is what a self-hosted instance wants even with the list turned on.

[instance]

Key Type Means
tagline string The one line under the name on the signed-out front page.

tagline

The one line under the name on the signed-out front page.

Here rather than in the component because it is the operator's sentence, not the app's: somebody running this for a household or a team should be able to say what their instance is without editing Svelte. Empty falls back to the line below.

Environment

Every ONTOPLANO_* variable the code actually reads, and where it is read. A variable that stops being consulted leaves this table by itself, which is the point — an env var nobody reads any more is the kind of thing that stays in a deployment script for years.

Variable Read in
ONTOPLANO_ALLOW_PUSH scripts/guard-push.mjs
ONTOPLANO_APP_URL scripts/build-docs-site.mjs
ONTOPLANO_ASSET_ORIGIN scripts/build-twa.mjs
ONTOPLANO_BACKUP_RETENTION_DAYS src/lib/server/services/legal.ts
ONTOPLANO_BAN_CONTROL src/lib/server/services/protection.ts
ONTOPLANO_BAN_CONTROL_CMD src/lib/server/services/protection.ts
ONTOPLANO_CONFIG_DIR src/lib/server/config.ts
ONTOPLANO_CONTACT_EMAIL src/lib/server/services/legal.ts
ONTOPLANO_DATA_DIR scripts/migrate.mjs, src/lib/server/config.ts
ONTOPLANO_DEMO src/lib/server/settings.ts
ONTOPLANO_DEMO_EMAIL src/lib/server/settings.ts
ONTOPLANO_DEMO_MAX_ACCOUNTS src/lib/server/settings.ts
ONTOPLANO_DEMO_TTL_MINUTES src/lib/server/settings.ts
ONTOPLANO_DOCS_URL src/lib/server/settings.ts
ONTOPLANO_FAIL2BAN_LOG src/lib/server/services/protection.ts
ONTOPLANO_FAMILY_SEATS src/lib/server/settings.ts
ONTOPLANO_HEALTH_TOKEN src/lib/server/settings.ts, src/routes/api/jobs/reminders/+server.ts, src/routes/api/jobs/weekly-reviews/+server.ts, src/routes/healthz/+server.ts
ONTOPLANO_HTTPS src/hooks.server.ts
ONTOPLANO_JURISDICTION src/lib/server/services/legal.ts
ONTOPLANO_MAIL_FROM src/lib/server/services/push.ts
ONTOPLANO_OPERATOR src/lib/server/services/legal.ts
ONTOPLANO_ORIGIN scripts/build-twa.mjs
ONTOPLANO_OWNER_ID src/lib/server/settings.ts
ONTOPLANO_PAYMENT_PROVIDER src/lib/server/settings.ts
ONTOPLANO_POLICY_UPDATED src/lib/server/services/legal.ts
ONTOPLANO_PRICE_CURRENCY src/lib/server/settings.ts
ONTOPLANO_PRICE_FAMILY_MONTHLY_CENTS src/lib/server/settings.ts
ONTOPLANO_PRICE_FAMILY_YEARLY_CENTS src/lib/server/settings.ts
ONTOPLANO_PRICE_MONTHLY_CENTS src/lib/server/settings.ts
ONTOPLANO_PRICE_YEARLY_CENTS src/lib/server/settings.ts
ONTOPLANO_REGISTRATION src/lib/server/services/registration.ts
ONTOPLANO_REQUIRE_VERIFIED_EMAIL src/lib/server/services/access.ts
ONTOPLANO_REVIEW_MAIL_OFFSET_HOURS src/lib/server/services/review-mail.ts
ONTOPLANO_SELF_HOST src/lib/server/services/billing.ts, src/lib/server/settings.ts
ONTOPLANO_SELLS src/lib/server/services/billing.ts
ONTOPLANO_SITE_COOKIE_DOMAIN src/lib/server/settings.ts
ONTOPLANO_SITE_URL src/lib/server/settings.ts
ONTOPLANO_SKIP_MIGRATION_CHECK src/lib/server/db/assert-migrated.ts
ONTOPLANO_STAGING src/lib/server/settings.ts
ONTOPLANO_TRIAL_DAYS src/lib/server/settings.ts
ONTOPLANO_TRIAL_REQUIRES_CARD src/lib/server/settings.ts
ONTOPLANO_TRUST_PROXY src/lib/server/rate-limit.ts
ONTOPLANO_VAPID_PRIVATE_KEY src/lib/server/services/push.ts
ONTOPLANO_VAPID_PUBLIC_KEY src/lib/server/services/push.ts

Per-account settings

Rows in user_settings, one per account per key. These are choices a person makes about their own copy of the app, not the operator.

Key Constant
onboarding.done ONBOARDED_KEY
planner.grid_end_hour GRID_END_KEY
planner.grid_start_hour GRID_START_KEY
shopping.currency CURRENCY_KEY
ui.hiddenSections HIDDEN_SECTIONS_KEY
ui.navOrder NAV_ORDER_KEY
ui.sectionColors SECTION_COLORS_KEY
ui.style STYLE_KEY
ui.theme THEME_KEY
ui.tutorialSeen TUTORIAL_KEY
user.timezone TIMEZONE_KEY
week.firstDay WEEK_FIRST_DAY_KEY
week.generateDay WEEK_GENERATE_DAY_KEY