A graphical server OS optimized for self-hosting https://start9.com
  • Rust 56.9%
  • TypeScript 36%
  • Shell 2.8%
  • Roff 1.9%
  • JavaScript 1.3%
  • Other 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Dominion5254 5dcb299a36
fix(wrt): remove the inbound VPN client routing switch (#4264)
"Switch to all traffic" / "Switch to LAN only" deleted the peer as soon as
its confirm was accepted and only then opened the re-add form, so cancelling
that form left the client with no peer at all.

The switch was never an in-place change: routing lives in the client's own
AllowedIPs, and the router keeps no client private key, so changing it means
re-provisioning the client either way. The action was a delete plus an Add
with name and IP prefilled, presented as a toggle. Remove it and let the
existing Delete and Add do the same thing explicitly.

Also drops the add dialog's now-unused defaults, the switch's six dictionary
keys in every locale, and the help/book text describing it, and shares the
used-IP list and add-then-show-config logic in add().
2026-10-16 10:39:14 -06:00
.agents feat: ship the package-service skill with the guide (#3971) 2026-09-16 19:32:22 -06:00
.cargo feat(net): automatic gateway configuration — port forwarding (PCP/NAT-PMP/UPnP) + private-domain DNS (RFC 2136) (#3306) 2026-06-25 10:14:51 -06:00
.claude/skills/start9-frontend feat: load package icons on demand instead of inlining them (#4202) 2026-10-12 17:40:50 -06:00
.forgejo feat(sdk): support Forgejo package CI alongside GitHub (#4240) 2026-10-15 12:08:34 -06:00
.github feat(sdk): support Forgejo package CI alongside GitHub (#4240) 2026-10-15 12:08:34 -06:00
.husky ci(format): fast prettier gate + pre-commit hook to catch formatting before CI 2026-07-16 00:54:31 +00:00
apt add encryption subkey to gpg key 2026-08-13 23:33:49 -06:00
build feat(packaging): direct OCI image exports and deterministic SquashFS (#4153) 2026-10-15 16:53:38 -06:00
debian fix(ci): alpha apt publish collects artifact directories as debs (#3744) 2026-08-19 13:27:27 -06:00
projects fix(wrt): remove the inbound VPN client routing switch (#4264) 2026-10-16 10:39:14 -06:00
rfcs feat(repo): compile changelog fragments on product releases (#4191) 2026-10-08 19:21:41 -06:00
scripts feat(sdk): support Forgejo package CI alongside GitHub (#4240) 2026-10-15 12:08:34 -06:00
shared-libs feat(rpc-toolkit): serve a handler tree as MCP tools (#4247) 2026-10-16 10:17:05 -06:00
.browserslistrc refactor: reorganize start-os into all-products monorepo (#3352) 2026-06-29 11:29:56 -06:00
.editorconfig chore: unify prettier config and pin version across web + sdk 2026-06-01 10:32:12 -06:00
.git-blame-ignore-revs ci: gate manpage + TS binding freshness (#3440) 2026-07-08 08:29:09 -06:00
.gitignore fix(start-sdk): keep the packaging skills in the guide's tree (#3978) 2026-09-17 08:52:39 -06:00
.lintstagedrc.json fix(start-sdk): point the template's .prettierrc at the SDK's shared config (#4151) 2026-10-05 17:26:56 -06:00
.prettierignore fix(start-os): allow long UI sideload uploads (#4135) 2026-10-02 13:36:55 -06:00
.prettierrc.json chore(fmt): normalize formatting — one config per language, reproducible rustfmt (#3437) 2026-07-08 00:26:54 -06:00
AGENTS.md feat(sdk): support Forgejo package CI alongside GitHub (#4240) 2026-10-15 12:08:34 -06:00
angular.json fix(web): skip zod's eval probe under the ui csp (#3916) 2026-09-11 09:25:26 -06:00
ARCHITECTURE.md feat(rpc-toolkit): emit zod schema modules from serde shapes (#4230) 2026-10-15 15:36:24 -06:00
Cargo.lock feat(rpc-toolkit): serve a handler tree as MCP tools (#4247) 2026-10-16 10:17:05 -06:00
Cargo.toml feat: use visit-rs-generated types and RPC bindings in production (#4140) 2026-10-09 19:19:17 -06:00
CLAUDE.md refactor: reorganize start-os into all-products monorepo (#3352) 2026-06-29 11:29:56 -06:00
deny.toml chore(license): fixes from license hygiene audit (#3627) 2026-08-06 10:52:14 -06:00
devmode.sh merge 036, everything broken 2024-03-20 13:32:57 -06:00
index.html chore(fmt): normalize formatting — one config per language, reproducible rustfmt (#3437) 2026-07-08 00:26:54 -06:00
LICENSE Update LICENSE (#2441) 2023-10-05 19:37:31 +00:00
Makefile feat(sdk): support Forgejo package CI alongside GitHub (#4240) 2026-10-15 12:08:34 -06:00
NOTICE.md feat: use visit-rs-generated types and RPC bindings in production (#4140) 2026-10-09 19:19:17 -06:00
package-lock.json feat(rpc-toolkit): serve a handler tree as MCP tools (#4247) 2026-10-16 10:17:05 -06:00
package.json feat(rpc-toolkit): emit zod schema modules from serde shapes (#4230) 2026-10-15 15:36:24 -06:00
README.md docs(repo): consolidate contributor guidance and audit repository docs (#4139) 2026-10-02 15:58:05 -06:00
rustfmt.toml chore(fmt): normalize formatting — one config per language, reproducible rustfmt (#3437) 2026-07-08 00:26:54 -06:00
SECURITY.md feat(repo): compile changelog fragments on product releases (#4191) 2026-10-08 19:21:41 -06:00
taplo.toml fix(start-os): remove openInternally from CheckPortRes 2026-07-15 12:11:04 -06:00
tsconfig.json refactor: reorganize start-os into all-products monorepo (#3352) 2026-06-29 11:29:56 -06:00
tsconfig.lib.json refactor: reorganize start-os into all-products monorepo (#3352) 2026-06-29 11:29:56 -06:00

StartOS Logo

Start Technologies

GitHub release (with filter) Static Badge Static Badge Website

What is this?

This repository is the monorepo for all Start9 products. Its flagship is StartOS — an open-source Linux distribution for running a personal server, handling discovery, installation, network configuration, data backup, dependency management, and health monitoring of self-hosted services.

Products live under projects/ and reuse code from shared-libs/. The OS, CLI, registry, and tunnel binaries are thin wrappers over the Rust start-core library; StartWRT owns its router backend and reuses that library's networking and utility modules. All Angular apps build through one root workspace; the SDK and container runtime have separate Node builds.

Directory Product What it is
projects/start-os/ StartOS The server OS — startbox/start-container bins, web UI + setup wizard, container runtime, OS packaging
projects/start-cli/ start-cli CLI for managing servers, registries, and packaging
projects/start-registry/ start-registry Package registry API and asset server (registrybox)
projects/start-tunnel/ StartTunnel VPN/forwarding server (tunnelbox) + its web UI
projects/start-wrt/ StartWRT OpenWrt-based router OS (startwrt bin + embedded web UI), flashable image for the SpaceMiT K1
projects/start-sdk/ Start SDK @start9labs/start-sdk for building StartOS service packages
projects/brochure-marketplace/ Marketplace site Public marketplace site (marketplace.start9.com)
projects/start-docs/ Docs site The documentation website (docs.start9.com)
shared-libs/crates/start-core/ — The entire Rust backend library shared by all bins
shared-libs/ts-modules/ — Shared TypeScript modules (Angular libraries + non-Angular SDK core)
shared-libs/crates/patch-db/ — Diff-based reactive state store (first-party crate)

Tech stack: Rust backend (Tokio/Axum), Angular frontend (Taiga UI), Node.js container runtime with LXC, and a custom diff-based database (Patch-DB) for reactive state synchronization. Services run in isolated LXC containers, packaged as S9PKs — a signed, merkle-archived format supporting partial downloads and cryptographic verification.

See ARCHITECTURE.md for how the pieces fit together.

What can you do with StartOS?

StartOS lets you self-host services that would otherwise depend on third-party cloud providers — giving you full ownership of your data and infrastructure. Browse available services on the Start9 Marketplace, including:

  • Bitcoin & Lightning — full Bitcoin node, Lightning node, BTCPay Server, and other payment infrastructure
  • Communication — Matrix, SimpleX, and other messaging platforms
  • Cloud Storage — Nextcloud, Vaultwarden, and other productivity tools

Services are added by the community. If a service you want isn't available, you can package it yourself.

Getting StartOS

Buy a Start9 server

The easiest path. Buy a server from Start9 and plug it in.

Build your own

Follow the install guide to install StartOS on your own hardware.

Build from source

git clone https://github.com/Start9Labs/start-technologies.git
cd start-technologies

See AGENTS.md for the shared toolchain and development workflow, and projects/start-os/AGENTS.md to build a StartOS image.

The rest of the monorepo

StartOS is the flagship, but it shares this repo with the rest of the Start9 stack:

  • StartTunnel — a self-hosted VPN / reverse-proxy server that gives a StartOS box a public address and clearnet port forwarding without relying on a third-party tunnel.
  • StartWRT — an OpenWrt-based router OS for home self-hosting: per-profile subnets and WiFi, inbound/outbound VPN, DDNS, and secure remote access, shipped as a flashable image for the SpaceMiT K1.
  • start-cli — the command-line client for StartOS servers and registries, and the tool that builds and signs service packages (.s9pk).
  • Start SDK — the @start9labs/start-sdk TypeScript SDK and packaging toolchain for wrapping any app into an installable StartOS service.
  • start-registry — the registry server that hosts and serves marketplaces of packaged services.
  • Marketplace site — the public marketplace at marketplace.start9.com, built on the same UI components the OS uses.
  • Docs site — the documentation website at docs.start9.com.

Documentation

  • ARCHITECTURE.md — how the monorepo fits together
  • AGENTS.md — environment setup, build, test, and format workflow
  • SECURITY.md — how to report a vulnerability, and what is in scope

Contributing

There are multiple ways to contribute: work directly on a product in this repo, package a service for the marketplace, or help with documentation and guides. See AGENTS.md or visit start9.com/contribute.

To report security issues, email security@start9.com. See SECURITY.md for what is in scope and what happens next.

License

MIT — see LICENSE. Copyright (c) 2023 Start9 Labs, Inc.

A short list of third-party files carry their own terms; NOTICE.md names every one of them. Anything not listed there is MIT.