# uma-technology/skymap architecture

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

- Interactive diagram: https://gitdiagram.com/uma-technology/skymap
- Repository: https://github.com/uma-technology/skymap

## Overview

SkyMap is an offline, embeddable planetarium: a Vue web layer initializes a WebAssembly C engine, supplies observer and sky data, and presents the rendered sky to users and host applications through a JavaScript bridge. Users can search and select objects, change time and viewing settings, and explore sky imagery and overlays. The engine combines astronomical calculations, coordinate projection, rendering, and feature modules; bundled catalogs, surveys, landscapes, and translations provide its content. The README documents these capabilities, while sampled source directly confirms engine initialization, star-data registration, search behavior, and host readiness messages; other subsystem wiring is represented only where documented.

Main entry points: [`src/core.c`](https://github.com/uma-technology/skymap/blob/main/src/core.c) (Engine core), [`apps/skymap-web/src/App.vue`](https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/App.vue) (Vue application), [`apps/skymap-web/src/utils/jsbridge.js`](https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/utils/jsbridge.js) (JavaScript bridge), [`apps/skymap-web/src/components`](https://github.com/uma-technology/skymap/tree/main/apps/skymap-web/src/components) (Sky controls)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interaction"]
  node_webapp["Vue application<br/>[App.vue]"]
  node_controls["Sky controls"]
  node_search["Object search<br/>[target-search.vue]"]
  node_state["UI state<br/>[index.js]"]
  node_bridge["JavaScript bridge<br/>[jsbridge.js]"]
end

subgraph group_engine["Sky engine"]
  node_enginecore["Engine core<br/>[core.c]"]
  node_modules["Sky feature modules"]
  node_projection["Sky projection<br/>[projection.c]"]
  node_renderer["WebGL renderer<br/>[render_gl.c]"]
  node_navigation["Navigation<br/>[navigation.c]"]
end

subgraph group_content["Sky content"]
  node_stars["Star catalog"]
  node_deep_sky["Deep-sky catalog"]
  node_surveys["Sky surveys"]
  node_landscapes["Landscapes"]
  node_cultures["Sky cultures"]
  node_translations["Translations"]
end

subgraph group_astro["Astronomy"]
  node_astrocalc["Astronomical algorithms"]
  node_objects["Object model<br/>[obj.c]"]
  node_observer["Observer state<br/>[observer.c]"]
end

node_user(("Sky-map user"))
node_host(("Host application"))

node_user -->|"uses"| node_webapp
node_webapp -->|"initializes"| node_enginecore
node_webapp -->|"updates"| node_state
node_webapp -->|"reports readiness"| node_bridge
node_host -->|"sends state"| node_bridge
node_bridge -->|"delivers messages"| node_webapp
node_user -->|"changes view"| node_controls
node_controls -->|"sets engine state"| node_enginecore
node_user -->|"enters query"| node_search
node_search -->|"looks up objects"| node_enginecore
node_enginecore -->|"updates view"| node_navigation
node_enginecore -->|"uses observer"| node_observer
node_enginecore -->|"computes sky"| node_astrocalc
node_enginecore -->|"manages objects"| node_objects
node_enginecore -->|"dispatches features"| node_modules
node_enginecore -->|"projects sky"| node_projection
node_enginecore -->|"draws scene"| node_renderer
node_webapp -->|"registers data"| node_stars
node_enginecore -->|"reads catalog"| node_stars
node_enginecore -->|"reads catalog"| node_deep_sky
node_enginecore -->|"reads imagery"| node_surveys
node_enginecore -->|"reads scenery"| node_landscapes
node_enginecore -->|"reads definitions"| node_cultures
node_webapp -->|"loads translations"| node_translations

click node_webapp "https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/App.vue"
click node_controls "https://github.com/uma-technology/skymap/tree/main/apps/skymap-web/src/components"
click node_search "https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/components/target-search.vue"
click node_state "https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/store/index.js"
click node_bridge "https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/utils/jsbridge.js"
click node_enginecore "https://github.com/uma-technology/skymap/blob/main/src/core.c"
click node_modules "https://github.com/uma-technology/skymap/tree/main/src/modules"
click node_projection "https://github.com/uma-technology/skymap/blob/main/src/projection.c"
click node_renderer "https://github.com/uma-technology/skymap/blob/main/src/render_gl.c"
click node_navigation "https://github.com/uma-technology/skymap/blob/main/src/navigation.c"
click node_stars "https://github.com/uma-technology/skymap/tree/main/apps/skydata"
click node_deep_sky "https://github.com/uma-technology/skymap/tree/main/apps/skydata"
click node_surveys "https://github.com/uma-technology/skymap/tree/main/apps/skydata"
click node_landscapes "https://github.com/uma-technology/skymap/tree/main/apps/skydata"
click node_cultures "https://github.com/uma-technology/skymap/tree/main/apps/skydata/skycultures"
click node_translations "https://github.com/uma-technology/skymap/tree/main/apps/skydata"
click node_astrocalc "https://github.com/uma-technology/skymap/tree/main/src/algos"
click node_objects "https://github.com/uma-technology/skymap/blob/main/src/obj.c"
click node_observer "https://github.com/uma-technology/skymap/blob/main/src/observer.c"

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_webapp,node_controls,node_search,node_state,node_bridge,node_user toneBlue
class node_enginecore,node_modules,node_projection,node_renderer,node_navigation toneAmber
class node_stars,node_deep_sky,node_surveys,node_landscapes,node_cultures,node_translations toneMint
class node_astrocalc,node_objects,node_observer toneRose
class node_host toneIndigo
```

## Components

### Web interaction

- [Vue application](https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/App.vue): `apps/skymap-web/src/App.vue`
- [Sky controls](https://github.com/uma-technology/skymap/tree/main/apps/skymap-web/src/components): `apps/skymap-web/src/components`
- [Object search](https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/components/target-search.vue): `apps/skymap-web/src/components/target-search.vue`
- [UI state](https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/store/index.js): `apps/skymap-web/src/store/index.js`
- [JavaScript bridge](https://github.com/uma-technology/skymap/blob/main/apps/skymap-web/src/utils/jsbridge.js): `apps/skymap-web/src/utils/jsbridge.js`

### Sky engine

- [Engine core](https://github.com/uma-technology/skymap/blob/main/src/core.c): `src/core.c`
- [Sky feature modules](https://github.com/uma-technology/skymap/tree/main/src/modules): `src/modules`
- [Sky projection](https://github.com/uma-technology/skymap/blob/main/src/projection.c): `src/projection.c`
- [WebGL renderer](https://github.com/uma-technology/skymap/blob/main/src/render_gl.c): `src/render_gl.c`
- [Navigation](https://github.com/uma-technology/skymap/blob/main/src/navigation.c): `src/navigation.c`

### Sky content

- [Star catalog](https://github.com/uma-technology/skymap/tree/main/apps/skydata): `apps/skydata`
- [Deep-sky catalog](https://github.com/uma-technology/skymap/tree/main/apps/skydata): `apps/skydata`
- [Sky surveys](https://github.com/uma-technology/skymap/tree/main/apps/skydata): `apps/skydata`
- [Landscapes](https://github.com/uma-technology/skymap/tree/main/apps/skydata): `apps/skydata`
- [Sky cultures](https://github.com/uma-technology/skymap/tree/main/apps/skydata/skycultures): `apps/skydata/skycultures`
- [Translations](https://github.com/uma-technology/skymap/tree/main/apps/skydata): `apps/skydata`

### Astronomy

- [Astronomical algorithms](https://github.com/uma-technology/skymap/tree/main/src/algos): `src/algos`
- [Object model](https://github.com/uma-technology/skymap/blob/main/src/obj.c): `src/obj.c`
- [Observer state](https://github.com/uma-technology/skymap/blob/main/src/observer.c): `src/observer.c`

### Other components

- **Sky-map user**
- **Host application**

## Connections

- Sky-map user → Vue application: uses
- Vue application → Engine core: initializes
- Vue application → UI state: updates
- Vue application → JavaScript bridge: reports readiness
- Host application → JavaScript bridge: sends state
- JavaScript bridge → Vue application: delivers messages
- Sky-map user → Sky controls: changes view
- Sky controls → Engine core: sets engine state
- Sky-map user → Object search: enters query
- Object search → Engine core: looks up objects
- Engine core → Navigation: updates view
- Engine core → Observer state: uses observer
- Engine core → Astronomical algorithms: computes sky
- Engine core → Object model: manages objects
- Engine core → Sky feature modules: dispatches features
- Engine core → Sky projection: projects sky
- Engine core → WebGL renderer: draws scene
- Vue application → Star catalog: registers data
- Engine core → Star catalog: reads catalog
- Engine core → Deep-sky catalog: reads catalog
- Engine core → Sky surveys: reads imagery
- Engine core → Landscapes: reads scenery
- Engine core → Sky cultures: reads definitions
- Vue application → Translations: loads translations
