# useinterstellar/interstellar architecture

> Architecture diagram of the GitHub repository useinterstellar/interstellar, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/useinterstellar/interstellar
- Repository: https://github.com/useinterstellar/interstellar

## Overview

Interstellar is a browser-based web proxy with an app-and-game portal. The principal workflow is a user opening the interface, launching a destination, and having browser proxy workers route its requests through the configured proxy engines. The README also documents tabs, cloaking, themes, password protection, and cloud-gaming support. Server routes, proxy-worker routing, game-asset forwarding, and analytics behavior are supported by sampled source; several UI-to-client connections are inferred from the product structure and documented features, so uncertain wiring is left out.

Main entry points: [`src/server.js`](https://github.com/useinterstellar/interstellar/blob/main/src/server.js) (HTTP server), [`static/sw.js`](https://github.com/useinterstellar/interstellar/blob/main/static/sw.js) (Proxy service worker), [`static/index.html`](https://github.com/useinterstellar/interstellar/blob/main/static/index.html) (Portal pages), [`static/assets/js/launcher.js`](https://github.com/useinterstellar/interstellar/blob/main/static/assets/js/launcher.js) (Proxy launcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Web interface"]
  node_pages["Portal pages<br/>[index.html]"]
  node_launcher["Proxy launcher<br/>[launcher.js]"]
  node_tabs["Tab system<br/>[tabs.js]"]
  node_settings["Settings and themes<br/>[settings.html]"]
  node_storage["Browser settings storage<br/>[storage.js]"]
end

subgraph group_proxy["Proxy runtime"]
  node_sw["Proxy service worker<br/>[sw.js]"]
  node_uvconfig["Ultraviolet config<br/>[uv.config.js]"]
  node_scramjetconfig["Scramjet config<br/>[scramjet.config.js]"]
  node_uv["Ultraviolet engine"]
  node_scramjet["Scramjet engine"]
end

subgraph group_server["Server services"]
  node_server["HTTP server<br/>[server.js]"]
  node_auth["Optional login<br/>[config.js]"]
  node_analytics["Analytics proxy<br/>[analytics.js]"]
  node_gamesproxy["Game asset proxy<br/>[games.js]"]
  node_wisp["Wisp transport<br/>[server.js]"]
  node_version["Version metadata<br/>[version.js]"]
end

subgraph group_content["Portal content"]
  node_catalog["Apps and games catalogs<br/>[apps.json]"]
  node_gamespage["Games portal<br/>[games.html]"]
end

node_user(("User"))
node_destination(("Web destinations"))
node_githubassets(("GitHub game assets"))
node_analyticsupstream(("Google Analytics"))

node_user -->|"requests pages"| node_server
node_server -->|"checks credentials"| node_auth
node_server -->|"serves pages"| node_pages
node_server -->|"mounts routes"| node_gamesproxy
node_server -.->|"mounts analytics"| node_analytics
node_server -->|"routes upgrades"| node_wisp
node_server -->|"resolves metadata"| node_version
node_user -->|"uses portal"| node_pages
node_pages -->|"launches proxy"| node_launcher
node_pages -->|"presents catalog"| node_catalog
node_user -->|"opens games"| node_gamespage
node_gamespage -.->|"uses game catalog"| node_catalog
node_user -->|"changes preferences"| node_settings
node_settings -.->|"persists preferences"| node_storage
node_user -->|"uses tabs"| node_tabs
node_launcher -.->|"uses proxy worker"| node_sw
node_sw -->|"loads config"| node_uvconfig
node_sw -->|"loads config"| node_scramjetconfig
node_sw -->|"dispatches UV requests"| node_uv
node_sw -->|"dispatches Scramjet requests"| node_scramjet
node_uv -->|"fetches proxied requests"| node_destination
node_scramjet -->|"fetches proxied requests"| node_destination
node_destination -.->|"uses transport"| node_wisp
node_gamesproxy -->|"fetches assets"| node_githubassets
node_server -.->|"proxies analytics"| node_analyticsupstream
node_analytics -.->|"fetches and forwards"| node_analyticsupstream

click node_server "https://github.com/useinterstellar/interstellar/blob/main/src/server.js"
click node_auth "https://github.com/useinterstellar/interstellar/blob/main/config.js"
click node_analytics "https://github.com/useinterstellar/interstellar/blob/main/src/analytics.js"
click node_gamesproxy "https://github.com/useinterstellar/interstellar/blob/main/src/games.js"
click node_pages "https://github.com/useinterstellar/interstellar/blob/main/static/index.html"
click node_launcher "https://github.com/useinterstellar/interstellar/blob/main/static/assets/js/launcher.js"
click node_tabs "https://github.com/useinterstellar/interstellar/blob/main/static/assets/js/tabs.js"
click node_settings "https://github.com/useinterstellar/interstellar/blob/main/static/settings.html"
click node_storage "https://github.com/useinterstellar/interstellar/blob/main/static/assets/js/storage.js"
click node_catalog "https://github.com/useinterstellar/interstellar/blob/main/static/assets/json/apps.json"
click node_gamespage "https://github.com/useinterstellar/interstellar/blob/main/static/games.html"
click node_sw "https://github.com/useinterstellar/interstellar/blob/main/static/sw.js"
click node_uvconfig "https://github.com/useinterstellar/interstellar/blob/main/static/assets/ultraviolet/uv.config.js"
click node_scramjetconfig "https://github.com/useinterstellar/interstellar/blob/main/static/assets/scramjet/scramjet.config.js"
click node_uv "https://github.com/useinterstellar/interstellar/tree/main/static/assets/ultraviolet"
click node_scramjet "https://github.com/useinterstellar/interstellar/tree/main/static/assets/scramjet"
click node_wisp "https://github.com/useinterstellar/interstellar/blob/main/src/server.js"
click node_version "https://github.com/useinterstellar/interstellar/blob/main/src/version.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_pages,node_launcher,node_tabs,node_settings,node_storage,node_user toneBlue
class node_sw,node_uvconfig,node_scramjetconfig,node_uv,node_scramjet toneAmber
class node_server,node_auth,node_analytics,node_gamesproxy,node_wisp,node_version toneMint
class node_catalog,node_gamespage toneRose
class node_destination,node_githubassets,node_analyticsupstream toneIndigo
```

## Components

### Web interface

- [Portal pages](https://github.com/useinterstellar/interstellar/blob/main/static/index.html): `static/index.html`
- [Proxy launcher](https://github.com/useinterstellar/interstellar/blob/main/static/assets/js/launcher.js): `static/assets/js/launcher.js`
- [Tab system](https://github.com/useinterstellar/interstellar/blob/main/static/assets/js/tabs.js): `static/assets/js/tabs.js`
- [Settings and themes](https://github.com/useinterstellar/interstellar/blob/main/static/settings.html): `static/settings.html`
- [Browser settings storage](https://github.com/useinterstellar/interstellar/blob/main/static/assets/js/storage.js): `static/assets/js/storage.js`

### Proxy runtime

- [Proxy service worker](https://github.com/useinterstellar/interstellar/blob/main/static/sw.js): `static/sw.js`
- [Ultraviolet config](https://github.com/useinterstellar/interstellar/blob/main/static/assets/ultraviolet/uv.config.js): `static/assets/ultraviolet/uv.config.js`
- [Scramjet config](https://github.com/useinterstellar/interstellar/blob/main/static/assets/scramjet/scramjet.config.js): `static/assets/scramjet/scramjet.config.js`
- [Ultraviolet engine](https://github.com/useinterstellar/interstellar/tree/main/static/assets/ultraviolet): `static/assets/ultraviolet`
- [Scramjet engine](https://github.com/useinterstellar/interstellar/tree/main/static/assets/scramjet): `static/assets/scramjet`

### Server services

- [HTTP server](https://github.com/useinterstellar/interstellar/blob/main/src/server.js): `src/server.js`
- [Optional login](https://github.com/useinterstellar/interstellar/blob/main/config.js): `config.js`
- [Analytics proxy](https://github.com/useinterstellar/interstellar/blob/main/src/analytics.js): `src/analytics.js`
- [Game asset proxy](https://github.com/useinterstellar/interstellar/blob/main/src/games.js): `src/games.js`
- [Wisp transport](https://github.com/useinterstellar/interstellar/blob/main/src/server.js): `src/server.js`
- [Version metadata](https://github.com/useinterstellar/interstellar/blob/main/src/version.js): `src/version.js`

### Portal content

- [Apps and games catalogs](https://github.com/useinterstellar/interstellar/blob/main/static/assets/json/apps.json): `static/assets/json/apps.json`
- [Games portal](https://github.com/useinterstellar/interstellar/blob/main/static/games.html): `static/games.html`

### Other components

- **User**
- **Web destinations**
- **GitHub game assets**
- **Google Analytics**

## Connections

- User → HTTP server: requests pages
- HTTP server → Optional login: checks credentials
- HTTP server → Portal pages: serves pages
- HTTP server → Game asset proxy: mounts routes
- HTTP server → Analytics proxy: mounts analytics
- HTTP server → Wisp transport: routes upgrades
- HTTP server → Version metadata: resolves metadata
- User → Portal pages: uses portal
- Portal pages → Proxy launcher: launches proxy
- Portal pages → Apps and games catalogs: presents catalog
- User → Games portal: opens games
- Games portal → Apps and games catalogs: uses game catalog
- User → Settings and themes: changes preferences
- Settings and themes → Browser settings storage: persists preferences
- User → Tab system: uses tabs
- Proxy launcher → Proxy service worker: uses proxy worker
- Proxy service worker → Ultraviolet config: loads config
- Proxy service worker → Scramjet config: loads config
- Proxy service worker → Ultraviolet engine: dispatches UV requests
- Proxy service worker → Scramjet engine: dispatches Scramjet requests
- Ultraviolet engine → Web destinations: fetches proxied requests
- Scramjet engine → Web destinations: fetches proxied requests
- Web destinations → Wisp transport: uses transport
- Game asset proxy → GitHub game assets: fetches assets
- HTTP server → Google Analytics: proxies analytics
- Analytics proxy → Google Analytics: fetches and forwards
