Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/actions/setup-build-env/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ runs:
ASSET_NAME="start-cli_${ARCH}-${OS}"
DOWNLOAD_URL=$(curl -fsS \
-H "Authorization: token ${{ github.token }}" \
https://api.github.com/repos/Start9Labs/start-os/releases \
https://api.github.com/repos/Start9Labs/start-technologies/releases \
| jq -r '[.[].assets[] | select(.name=="'"$ASSET_NAME"'")] | first | .browser_download_url')
if [ -z "$DOWNLOAD_URL" ] || [ "$DOWNLOAD_URL" = "null" ]; then
echo "Error: Could not find asset '$ASSET_NAME' in Start9Labs/start-os releases"
echo "Error: Could not find asset '$ASSET_NAME' in Start9Labs/start-technologies releases"
exit 1
fi
curl -fsSL \
Expand Down
4 changes: 2 additions & 2 deletions .github/actions/setup-publish-env/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ runs:
ASSET_NAME="start-cli_${ARCH}-${OS}"
DOWNLOAD_URL=$(curl -fsS \
-H "Authorization: token ${{ github.token }}" \
https://api.github.com/repos/Start9Labs/start-os/releases \
https://api.github.com/repos/Start9Labs/start-technologies/releases \
| jq -r '[.[].assets[] | select(.name=="'"$ASSET_NAME"'")] | first | .browser_download_url')
if [ -z "$DOWNLOAD_URL" ] || [ "$DOWNLOAD_URL" = "null" ]; then
echo "Error: Could not find asset '$ASSET_NAME' in Start9Labs/start-os releases"
echo "Error: Could not find asset '$ASSET_NAME' in Start9Labs/start-technologies releases"
exit 1
fi
curl -fsSL \
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ jobs:
steps:
- name: Free up disk space
if: ${{ inputs.FREE_DISK_SPACE }}
uses: Start9Labs/start-os/.github/actions/free-disk-space@master
uses: Start9Labs/start-technologies/.github/actions/free-disk-space@master

- name: Setup build environment
uses: Start9Labs/start-os/.github/actions/setup-build-env@master
uses: Start9Labs/start-technologies/.github/actions/setup-build-env@master

- name: Checkout services repository
uses: actions/checkout@v6
Expand All @@ -89,7 +89,7 @@ jobs:
shell: bash

- name: Upload each s9pk as its own artifact
uses: Start9Labs/start-os/.github/actions/upload-each@master
uses: Start9Labs/start-technologies/.github/actions/upload-each@master
with:
pattern: "*.s9pk"
retention-days: 14
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,10 @@ jobs:
steps:
- name: Free up disk space
if: ${{ inputs.FREE_DISK_SPACE }}
uses: Start9Labs/start-os/.github/actions/free-disk-space@master
uses: Start9Labs/start-technologies/.github/actions/free-disk-space@master

- name: Setup build environment
uses: Start9Labs/start-os/.github/actions/setup-build-env@master
uses: Start9Labs/start-technologies/.github/actions/setup-build-env@master

- name: Checkout services repository
uses: actions/checkout@v6
Expand Down Expand Up @@ -128,7 +128,7 @@ jobs:
contents: write
steps:
- name: Setup publish environment
uses: Start9Labs/start-os/.github/actions/setup-publish-env@master
uses: Start9Labs/start-technologies/.github/actions/setup-publish-env@master

- name: Checkout services repository
uses: actions/checkout@v6
Expand Down Expand Up @@ -169,7 +169,7 @@ jobs:

- name: Extract version
id: version
uses: Start9Labs/start-os/.github/actions/extract-version@master
uses: Start9Labs/start-technologies/.github/actions/extract-version@master

- name: Filter s9pk files for GitHub release
id: filter_s9pk
Expand Down Expand Up @@ -327,7 +327,7 @@ jobs:
shell: bash

- name: Upload each s9pk as its own artifact
uses: Start9Labs/start-os/.github/actions/upload-each@master
uses: Start9Labs/start-technologies/.github/actions/upload-each@master
with:
pattern: "*.s9pk"
retention-days: 14
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/startos-iso.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ jobs:
ASSET_NAME="start-cli_${ARCH}-${OS}"
DOWNLOAD_URL=$(curl -fsS \
-H "Authorization: token ${{ github.token }}" \
https://api.github.com/repos/Start9Labs/start-os/releases \
https://api.github.com/repos/Start9Labs/start-technologies/releases \
| jq -r '[.[].assets[] | select(.name=="'"$ASSET_NAME"'")] | first | .browser_download_url')
curl -fsSL \
-H "Authorization: token ${{ github.token }}" \
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/tagAndRelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@ jobs:
ASSET_NAME="start-cli_${ARCH}-${OS}"
DOWNLOAD_URL=$(curl -fsS \
-H "Authorization: token ${{ github.token }}" \
https://api.github.com/repos/Start9Labs/start-os/releases \
https://api.github.com/repos/Start9Labs/start-technologies/releases \
| jq -r '[.[].assets[] | select(.name=="'"$ASSET_NAME"'")] | first | .browser_download_url')
if [ -z "$DOWNLOAD_URL" ] || [ "$DOWNLOAD_URL" = "null" ]; then
echo "Error: Could not find asset '$ASSET_NAME' in Start9Labs/start-os releases"
echo "Error: Could not find asset '$ASSET_NAME' in Start9Labs/start-technologies releases"
exit 1
fi
curl -fsSL \
Expand All @@ -64,7 +64,7 @@ jobs:

- name: Extract package ID and version
id: extract
uses: Start9Labs/start-os/.github/actions/extract-version@master
uses: Start9Labs/start-technologies/.github/actions/extract-version@master

- name: Check production registry
id: check
Expand Down Expand Up @@ -119,7 +119,7 @@ jobs:
Release:
needs: Tag
if: needs.Tag.outputs.skip == 'false'
uses: Start9Labs/start-os/.github/workflows/release.yml@master
uses: Start9Labs/start-technologies/.github/workflows/release.yml@master
with:
TAG: ${{ needs.Tag.outputs.tag }}
FREE_DISK_SPACE: ${{ inputs.FREE_DISK_SPACE }}
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,4 @@ Already enforced or checked elsewhere (listed here for completeness; documented
- [`projects/brochure-marketplace/AGENTS.md`](projects/brochure-marketplace/AGENTS.md) — public marketplace site
- [`projects/start-docs/AGENTS.md`](projects/start-docs/AGENTS.md) — documentation website
- [`shared-libs/AGENTS.md`](shared-libs/AGENTS.md) — shared libs container: [`crates/start-core`](shared-libs/crates/start-core/AGENTS.md) (Rust backend), [`web`](shared-libs/ts-modules/AGENTS.md) (Angular workspace + UI/setup-wizard/shared libs)
- `shared-libs/crates/patch-db/` — first-party crate (upstream: github.com/Start9Labs/patch-db)
- `shared-libs/crates/patch-db/` — first-party crate (maintained in-tree; the standalone `Start9Labs/patch-db` repo is being retired)
2 changes: 1 addition & 1 deletion ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ start-os/ # repo root (monorepo)

- **`projects/start-sdk/`** — TypeScript SDK for packaging services (`@start9labs/start-sdk`), flattened with source in `lib/`. It imports the shared `@start9labs/start-core` lib (`shared-libs/ts-modules/start-core/` — core types, ABI, effects interface, also consumed directly by web) and bundles it into its published `dist/`, so container-runtime and external service developers install a single package. Its `Makefile`/`s9pk.mk` is the source of truth for the published tarball.

- **`shared-libs/crates/patch-db/`** — first-party crate providing diff-based state sync (CBOR encoded). Backend mutations produce diffs pushed to the frontend over WebSocket for reactive UI. See the [patch-db repo](https://github.com/Start9Labs/patch-db).
- **`shared-libs/crates/patch-db/`** — first-party crate providing diff-based state sync (CBOR encoded). Backend mutations produce diffs pushed to the frontend over WebSocket for reactive UI. See the [patch-db crate](https://github.com/Start9Labs/start-technologies/tree/master/shared-libs/crates/patch-db).

## Build pipeline

Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ All products share a single Rust backend library (`start-core`) and a single Ang
| `shared-libs/ts-modules/` | — | Shared Angular libraries (the Angular workspace is rooted at the repo root) |
| `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](https://github.com/Start9Labs/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.
**Tech stack:** Rust backend (Tokio/Axum), Angular frontend (Taiga UI), Node.js container runtime with LXC, and a custom diff-based database ([Patch-DB](https://github.com/Start9Labs/start-technologies/tree/master/shared-libs/crates/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](ARCHITECTURE.md) for how the pieces fit together.

Expand Down
2 changes: 1 addition & 1 deletion projects/start-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "start-cli"
version = "1.0.0" # VERSION_BUMP
edition = "2024"
license = "MIT"
repository = "https://github.com/Start9Labs/start-os"
repository = "https://github.com/Start9Labs/start-technologies"

[[bin]]
name = "start-cli"
Expand Down
4 changes: 2 additions & 2 deletions projects/start-docs/bitcoin-guides/book.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ default-theme = "ayu"
preferred-dark-theme = "ayu"
additional-css = ["./theme/youtube.css", "./theme/tabs.css", "./accent.css"]
additional-js = ["./theme/youtube.js", "./theme/tabs.js", "./theme/home-link.js"]
git-repository-url = "https://github.com/Start9Labs/start-os"
edit-url-template = "https://github.com/Start9Labs/start-os/edit/master/docs/bitcoin-guides/{path}"
git-repository-url = "https://github.com/Start9Labs/start-technologies"
edit-url-template = "https://github.com/Start9Labs/start-technologies/edit/master/docs/bitcoin-guides/{path}"
site-url = "/bitcoin-guides/"

[output.html.fold]
Expand Down
2 changes: 1 addition & 1 deletion projects/start-os/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "start-os"
version = "0.4.0-beta.10" # VERSION_BUMP
edition = "2024"
license = "MIT"
repository = "https://github.com/Start9Labs/start-os"
repository = "https://github.com/Start9Labs/start-technologies"

[[bin]]
name = "startbox"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,13 @@ export function makeEffects(context: EffectContext): Effects {
T.Effects["exportServiceInterface"]
>
}) as Effects["exportServiceInterface"],
exportRangeServiceInterface: ((
...[options]: Parameters<Effects["exportRangeServiceInterface"]>
) => {
return rpcRound("export-range-service-interface", options) as ReturnType<
T.Effects["exportRangeServiceInterface"]
>
}) as Effects["exportRangeServiceInterface"],
getContainerIp(...[options]: Parameters<T.Effects["getContainerIp"]>) {
return rpcRound("get-container-ip", {
...options,
Expand Down
2 changes: 1 addition & 1 deletion projects/start-os/debian/postinst
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ VERSION_ID="${VERSION}"
PRETTY_NAME="StartOS v${VERSION_ENV}"
HOME_URL="https://start9.com/"
SUPPORT_URL="https://docs.start9.com/0.3.5.x/support"
BUG_REPORT_URL="https://github.com/Start9Labs/start-os/issues"
BUG_REPORT_URL="https://github.com/Start9Labs/start-technologies/issues"
VARIANT="${ENVIRONMENT}"
VARIANT_ID="${ENVIRONMENT}"
EOF
Expand Down
4 changes: 2 additions & 2 deletions projects/start-os/docs/book.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ default-theme = "ayu"
preferred-dark-theme = "ayu"
additional-css = ["./theme/youtube.css", "./theme/tabs.css", "./accent.css"]
additional-js = ["./theme/youtube.js", "./theme/tabs.js", "./theme/home-link.js"]
git-repository-url = "https://github.com/Start9Labs/start-os"
edit-url-template = "https://github.com/Start9Labs/start-os/edit/master/projects/start-os/docs/{path}"
git-repository-url = "https://github.com/Start9Labs/start-technologies"
edit-url-template = "https://github.com/Start9Labs/start-technologies/edit/master/projects/start-os/docs/{path}"
site-url = "/start-os/"
2 changes: 1 addition & 1 deletion projects/start-os/scripts/manage-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

set -e

REPO="Start9Labs/start-os"
REPO="Start9Labs/start-technologies"
REGISTRY="https://alpha-registry-x.start9.com"
S3_BUCKET="s3://startos-images"
S3_CDN="https://startos-images.nyc3.cdn.digitaloceanspaces.com"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ import { DomainHealthService } from './domain-health.service'
}
@if (
address().hostnameInfo.metadata.kind === 'ipv4' &&
address().access === 'public' &&
address().hostnameInfo.port !== null
) {
<button
Expand Down Expand Up @@ -257,13 +258,20 @@ export class GatewayActionsComponent {

try {
if (this.packageId()) {
await this.api.pkgBindingSetAddressEnabled({
const params = {
internalPort: iface.addressInfo.internalPort,
address: addressJson,
enabled,
package: this.packageId(),
host: iface.addressInfo.hostId,
})
}
// A range spans >1 port and lives in a separate subtree, so it has its
// own endpoint; a single-port binding is exactly 1.
if (addr.count > 1) {
await this.api.pkgBindingSetRangeAddressEnabled(params)
} else {
await this.api.pkgBindingSetAddressEnabled(params)
}
} else {
await this.api.serverBindingSetAddressEnabled({
internalPort: 80,
Expand All @@ -285,6 +293,7 @@ export class GatewayActionsComponent {
this.address().hostnameInfo.hostname,
this.gatewayId(),
port,
this.address().count,
)
}

Expand All @@ -298,7 +307,11 @@ export class GatewayActionsComponent {
showPortForwardValidation() {
const port = this.address().hostnameInfo.port
if (port === null) return
this.domainHealth.showPortForwardSetup(this.gatewayId(), port)
this.domainHealth.showPortForwardSetup(
this.gatewayId(),
port,
this.address().count,
)
}

async deleteDomain() {
Expand Down
Loading