Settings

The Settings page is the configuration surface for everything. Every section maps to a [section] block in config.toml, and every field you see is one key in the typed config tree (starship/core/config/__init__.py). Saving writes that file; the web server validates and persists it, and updates the in-memory config.

How a save actually works

When you Save, the dashboard POSTs the whole config to /api/config. The server:

  1. Rebuilds a StarshipConfig from the JSON (from_dict).
  2. Runs validate() — if anything fails, nothing is written and the errors come back inline.
  3. Backs up the current config.toml to config.toml.bak, then writes the new config.toml.
  4. Swaps the in-memory svc.config pointer to the new config and returns needs_restart: true.

That last step is the subtle one: Save updates the config object in RAM, but it does NOT re-initialise any already-running module. Long-lived things (driver poll loops, ASCOM/Alpaca threads, the PHD2 socket, the web server) captured their settings at startup and keep using those values until the service is rebuilt. Settings that are read fresh every time they're used pick up the change immediately; settings read once at startup do not.

Save vs. Save+Restart

Two save buttons at the bottom of every section:

Save — writes config.toml (after backing up to config.toml.bak) and updates the in-memory config. Some settings take effect immediately (see "What's live"); others need a restart.

Save+Restart — saves as above, then triggers a graceful service restart (POST /api/config/restart → request_restart()). Use this for any setting where you're not sure.

What "restart" means here

The restart is in-process, not a reboot and not even a process exit. request_restart() sets a flag and signals the run loop; the runner (scripts/run_starship.py) tears the service down, re-reads config.toml from disk, and builds a brand-new StarshipService from it — all in the same Python process (the command window stays open). This is why "the config in RAM" matters: a plain Save changes RAM but leaves the old threads running against their startup snapshot; only the rebuild on restart re-creates those threads from the freshly loaded file.

Restart takes about 1–2 seconds. It won't lose a running sequence — the sequencer is part of the same service and resumes from its journal after the rebuild.

What's live (no restart)

Changes that take effect on the next use, because the code reads them fresh each time:

Because these are re-read per operation, a plain Save is enough — but Save+Restart is always harmless.

What needs Save+Restart

Anything bound to a long-lived connection, thread, or server captured at startup:

If unsure, use Save+Restart.

Where the newer knobs live

Autofocus ([autofocus])

The autofocus tunables all live in Settings → Autofocus and are live on save (re-read on every Refocus and every Focus Wizard run). The learned calibration is not in Settings; the Wizard writes a Refocus recipe — focus position, step, half-range, points-per-arm, backlash — to focus_recipe.json next to config.toml. See the dedicated Autofocus topic for what each knob does, the current Wizard/Refocus model, and the recommended tunings — that page is the source of truth for this section. A few AutofocusConfig fields are schema-committed but PENDING (not yet wired); the Autofocus topic flags them, and the refocus-trigger fields here have live equivalents in [sequencer].

Sections that are mostly schema-only (PENDING)

Some sections render in Settings but several of their fields are schema-committed, not yet read by any code — they exist so future versions don't need a config migration. Saving them is harmless; they simply do nothing until the feature ships. The largest are:

Where a field is PENDING the field tooltip/spec says so; this page and the per-feature topics call it out honestly rather than implying it works.

Backups

Every save first copies the current config.toml to config.toml.bak. One level deep — saving twice in a row overwrites the bak. If a backup write fails (e.g. permissions) it's logged but the save still proceeds. For real history, keep config.toml in version control.

Validation

validate() runs before any write. If it returns errors, the save is rejected and nothing is written. Common failures:

Validation errors are displayed inline with the section that triggered them, and Save is blocked until they're fixed.

Environment overrides

A handful of sections (solo, safety, web, audit, phd2, allsky) can be overridden at launch with STARSHIP_<SECTION>_<KEY> environment variables (e.g. STARSHIP_SOLO_HOST=192.168.1.42). These apply on load, on top of whatever is in config.toml. They are not written back to the file, so the Settings page shows the file value, not the override — keep that in mind if a launched value doesn't match what Settings displays.

The Licence tab

Not everything in Settings maps to config.toml. Settings → Licence is a self-contained tab that shows your edition and supporter-licence status, this computer's licence ID, and an activation-key field with Activate / Refresh now. It talks to the licence server and the local ~/.starship/license.key, not to your config file — saving config never touches it and it never needs a restart. See the dedicated Licence & editions topic for how the gate, the two editions, and the daily offline-safe refresh work.

How it ties into the rest of Starship

Astroworx Starship v22.2.10 · this page is the in-app help of that buildDownload · HTTP API