Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
1754dde
chore(dev): add Node development proxy for Incus UI
Luxxy-GF Nov 1, 2026
fa81a87
feat: add events layer, project switching and data layer core
Luxxy-GF Nov 1, 2026
c3d3a7c
style: trim verbose comments
Luxxy-GF Nov 1, 2026
f440321
feat(data): add persistence, tab sharing, commands and operations
Luxxy-GF Nov 2, 2026
66a1238
perf(data): skip unaffected consumers, prefetch and fix request planning
Luxxy-GF Nov 3, 2026
aebe8b0
refactor(notifications): replace sonner with the Base UI toast
Luxxy-GF Nov 4, 2026
9b7d8cf
chore(dev): use the Incus CLI remote for the development proxy
Luxxy-GF Nov 4, 2026
7f6739f
docs: document the development proxy
Luxxy-GF Nov 4, 2026
6488e4c
refactor(debug): move the events debug panel into TanStack devtools
Luxxy-GF Nov 4, 2026
b606758
refactor(instances): remove the test instance list
Luxxy-GF Nov 4, 2026
6cc9e0d
docs: make developer environment setup instructions more clear
Hye-Dev Nov 5, 2026
aee8b11
docs: streamline heading levels
Hye-Dev Nov 5, 2026
06b356a
fix(dev): harden upgrade errors, TLS warnings, and connect timeouts
Hye-Dev Nov 5, 2026
0d734be
test(dev): substantially improve test coverage
Hye-Dev Nov 5, 2026
04883ca
feat(auth): add session, enrollment and platform foundations
Luxxy-GF Nov 1, 2026
9715e05
feat(auth): add sign-in screens, TLS certificate flow and client tokens
Luxxy-GF Nov 1, 2026
f2938af
fix(routes): regenerate route tree with the auth routes
Luxxy-GF Nov 1, 2026
910814b
style(auth): drop decorative icons from sign-in screens
Luxxy-GF Nov 1, 2026
ffac2ad
test(auth): check async operations through incusFetch
Luxxy-GF Nov 5, 2026
c174f91
test(auth): give the untrusted fixture its capabilities
Luxxy-GF Nov 5, 2026
3d84ed3
style(auth): format merged session and sign-in route
Luxxy-GF Nov 5, 2026
c53fd29
Revert "style(auth): drop decorative icons from sign-in screens"
Luxxy-GF Nov 5, 2026
dafeaff
fix(auth): center the user menu icon in the sidebar column
Luxxy-GF Nov 5, 2026
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
57 changes: 57 additions & 0 deletions docs/contributing/code/development-environment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<!--
SPDX-FileCopyrightText: © 2026 Hye Ararat contributors
SPDX-License-Identifier: Apache-2.0
-->

<!--
SPDX-SnippetBegin
SPDX-SnippetCopyrightText: © 2026 Joseph Maldjian <joseph.maldjian@hyecompany.com>
-->
# Developer Environment
## Pre-requisites
- An active release of [Node.js](https://nodejs.org/en)
- The [Incus CLI client](https://linuxcontainers.org/incus/docs/main/installing/) with your [remote](https://linuxcontainers.org/incus/docs/main/remotes/) configured.
<!--
SPDX-SnippetEnd
-->

## Quick start
1. Install dependencies with `npm install`.
2. Check that the Incus CLI can reach a server with `incus remote list` and `incus info`.
3. Run `npm run dev`
4. Open the URL the command prints, for example `http://127.0.0.1:3001/ui/`.

## Choosing the remote
The development environment uses the same remote as the `incus` CLI, read from `config.yml` in the Incus config directory (`$INCUS_CONF`, or `~/.config/incus`).

- The CLI default is used by default. Change it with `incus remote switch <name>`.
- To use another remote for one run, set `INCUS_REMOTE`, or pass `--remote`:

```sh
INCUS_REMOTE=lab npm run dev
npm run dev -- --remote lab
```

`--remote` wins over `INCUS_REMOTE`. If neither is set, the CLI default is used, and `local` when there is no config.

## Environment variables
You can change the behavior of the development environment using the following environment variables:

| Variable | Default | Purpose |
| --- | --- | --- |
| `INCUS_CONF` | `~/.config/incus` | Incus CLI config directory. |
| `INCUS_REMOTE` | CLI default remote | Remote to use. `--remote <name>` takes precedence. |
| `INCUS_SOCKET` | | Socket path for the `local` remote. |
| `INCUS_DIR` | `/var/lib/incus` | Used for `$INCUS_DIR/unix.socket` when `INCUS_SOCKET` is not set. |
| `DEV_PROXY_HOST` | `127.0.0.1` | Address the proxy listens on. |
| `DEV_PROXY_PORT` | `3001` | Port the proxy listens on. This is the URL to open. |
| `DEV_PROXY_APP_PORT` | `5173` | Port for the Vite dev server started by the proxy. |
| `DEV_PROXY_CROSS_ORIGIN_ISOLATION` | unset | Set to `1` to send cross-origin isolation headers for the app. |
<!--
SPDX-SnippetBegin
SPDX-SnippetCopyrightText: © 2026 Joseph Maldjian <joseph.maldjian@hyecompany.com>
-->
| `DEV_PROXY_CONNECT_TIMEOUT_MS` | `10000` | How long the proxy waits for an upstream connect/response before returning `502`. |
<!--
SPDX-SnippetEnd
-->
32 changes: 32 additions & 0 deletions package-lock.json

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

7 changes: 6 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@
"private": true,
"type": "module",
"scripts": {
"dev": "vite dev --port 3000",
"dev": "node --experimental-strip-types scripts/incus-dev-proxy.ts",
"dev:vite": "vite dev --port 3000",
"generate-routes": "tsr generate",
"generate:incus-types": "node scripts/generate-incus-types.mjs",
"test:incus": "node --experimental-strip-types --test tests/incus/*.test.ts",
"test:dev": "node --experimental-strip-types --test tests/dev/*.test.ts",
"typecheck": "tsc --noEmit",
"build": "vite build",
"preview": "vite preview",
Expand All @@ -25,6 +27,7 @@
"@tanstack/react-router-devtools": "latest",
"class-variance-authority": "^0.7.1",
"cn": "^0.4.0",
"node-forge": "^1.4.2",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"shadcn": "^4.23.0",
Expand All @@ -40,10 +43,12 @@
"@tanstack/router-cli": "^1.132.0",
"@tanstack/router-plugin": "^1.168.40",
"@types/node": "^22.10.2",
"@types/node-forge": "^1.3.14",
"@types/react": "^19.2.0",
"@types/react-dom": "^19.2.0",
"@vitejs/plugin-react": "^6.0.1",
"babel-plugin-react-compiler": "^1.0.0",
"fake-indexeddb": "^6.2.7",
"typescript": "^6.0.2",
"vite": "^8.0.0"
},
Expand Down
Loading
Loading