Files
start-os/core/CLAUDE.md
Matt Hill 8b89f016ad task fix and keyboard fix (#3130)
* task fix and keyboard fix

* fixes for build scripts

* passthrough feature

* feat: inline domain health checks and improve address UX

- addPublicDomain returns DNS query + port check results (AddPublicDomainRes)
  so frontend skips separate API calls after adding a domain
- addPrivateDomain returns check_dns result for the gateway
- Support multiple ports per domain in validation modal (deduplicated)
- Run port checks concurrently via futures::future::join_all
- Add note to add-domain dialog showing other interfaces on same host
- Add addXForwardedHeaders to knownProtocols in SDK Host.ts
- Add plugin filter kind, pluginId filter, matchesAny, and docs to
  getServiceInterface.ts
- Add PassthroughInfo type and passthroughs field to NetworkInfo
- Pluralize "port forwarding rules" in i18n dictionaries

* feat: add shared host note to private domain dialog with i18n

* fix: scope public domain to single binding and return single port check

Accept internalPort in AddPublicDomainParams to target a specific
binding. Disable the domain on all other bindings. Return a single
CheckPortRes instead of Vec. Revert multi-port UI to singular port
display from 0f8a66b35.

* better shared hostname approach,  and improve look-feel of addresses tables

* fix starttls

* preserve usb as top efi boot option

* fix race condition in wan ip check

* sdk beta.56

* various bug, improve smtp

* multiple bugs, better outbound gateway UX

* remove non option from smtp for better package compat

* bump sdk

---------

Co-authored-by: Aiden McClelland <me@drbonez.dev>
2026-03-06 00:30:06 -07:00

1.6 KiB

Core — Rust Backend

The Rust backend daemon for StartOS.

Architecture

See ARCHITECTURE.md for binaries, modules, Patch-DB patterns, and related documentation.

See CONTRIBUTING.md for how to add RPC endpoints, TS-exported types, and i18n keys.

Quick Reference

cargo check -p start-os                    # Type check
make test-core                             # Run tests
make ts-bindings                           # Regenerate TS types after changing #[ts(export)] structs
cd sdk && make baseDist dist               # Rebuild SDK after ts-bindings

Operating Rules

  • Always run cargo check -p start-os after modifying Rust code
  • When adding RPC endpoints, follow the patterns in rpc-toolkit.md
  • When modifying #[ts(export)] types, regenerate bindings and rebuild the SDK (see ARCHITECTURE.md)
  • When adding i18n keys, add all 5 locales in core/locales/i18n.yaml (see i18n-patterns.md)
  • When using DB watches, follow the TypedDbWatch<T> patterns in patchdb.md
  • Always use .invoke(ErrorKind::...) instead of .status() when running CLI commands via tokio::process::Command. The Invoke trait (from crate::util::Invoke) captures stdout/stderr and checks exit codes properly. Using .status() leaks stderr directly to system logs, creating noise. For check-then-act patterns (e.g. iptables -C), use .invoke(...).await.is_ok() / .is_err() instead of .status().await.map_or(false, |s| s.success()).
  • Always use file utils in util::io instead of tokio::fs when available