# Complete Corresponding Source - STARMAP "Personal Sky"

STARMAP (starmap.puddystudios.com), a product of PUDDY Inc., serves a
WebAssembly build of the **Swiss Ephemeris** astronomical library to visitors'
browsers to power its on-device "Personal Sky" topocentric recompute. The Swiss
Ephemeris is dual-licensed; **STARMAP uses it under the free copyleft license,
the GNU Affero General Public License v3.0 (AGPL-3.0)**, NOT the paid commercial
license. The WebAssembly wrapper that builds it is licensed GPL-3.0-or-later.

This archive is the **Complete Corresponding Source** for the binary STARMAP
conveys (`swisseph.wasm` + its `swisseph.js` Emscripten loader), provided per
GPL-3.0 / AGPL-3.0 section 6, plus STARMAP's own code that links it.

## Written offer

The complete corresponding source for the copyleft components STARMAP serves is
available to anyone, at no charge, from the same origin that serves the binary:

- This archive:            https://starmap.puddystudios.com/source/corresponding-source.tar.gz
- Source information page:  https://starmap.puddystudios.com/source.html
- The running binary:       https://starmap.puddystudios.com/vendor/sweph/swisseph.wasm
                            https://starmap.puddystudios.com/vendor/sweph/swisseph.js

Questions or source requests: legal@puddystudios.com

## Contents and exact versions

| Path | What | License | Upstream (exact version) |
|---|---|---|---|
| `swisseph-2.10.03/` | Swiss Ephemeris C library source, Astrodienst AG | AGPL-3.0 (free option chosen) | github.com/aloistr/swisseph tag `v2.10.03`; www.astro.com/ftp/swisseph |
| `swisseph-wasm-0.0.5-npm/` | The exact `swisseph-wasm@0.0.5` npm package STARMAP serves (its `wasm/swisseph.js` + `wasm/swisseph.wasm` are what run in the browser) | GPL-3.0-or-later (Copyright 2024 prolaxu) | npm `swisseph-wasm@0.0.5` (registry.npmjs.org/swisseph-wasm/-/swisseph-wasm-0.0.5.tgz) |
| `swisseph-wasm-main/` | The `swisseph-wasm` build harness: `compile.sh` (the Emscripten command + exported functions) that produces `swisseph.js` + `swisseph.wasm` | GPL-3.0-or-later | github.com/prolaxu/swisseph-wasm |
| `personal-sky.js` | STARMAP's controller that calls the engine | AGPL-3.0-or-later (Copyright 2026 PUDDY Inc.) | this product |
| `personal-sky-worker.js` | STARMAP's module worker that loads + runs the WASM | AGPL-3.0-or-later (Copyright 2026 PUDDY Inc.) | this product |
| `AGPL-3.0.txt` | Full GNU Affero GPL v3.0 text | - | gnu.org/licenses/agpl-3.0.txt |
| `GPL-3.0.txt` | Full GNU GPL v3.0 text | - | gnu.org/licenses/gpl-3.0.txt |

## Provenance note (version labels)

The binary STARMAP serves is the **`swisseph-wasm@0.0.5`** npm release
(`swisseph-wasm-0.0.5-npm/`, whose `package.json` reads `0.0.5`). The build
harness in `swisseph-wasm-main/` is prolaxu's source repository; **its in-repo
`package.json` reads `0.0.4` because the maintainer published the `0.0.5` npm tag
without bumping the committed version number** - the build script and the emitted
`wasm/swisseph.js` are nonetheless the `0.0.5` release. This is verifiable: the
`wasm/swisseph.js` Emscripten loader is **byte-identical** (SHA-256
`deacf156...`) across the npm `0.0.5` package, the build repo, and the file
STARMAP serves at `/vendor/sweph/swisseph.js`. The corresponding source therefore
corresponds to the conveyed binary regardless of the upstream label slip.

## How to rebuild the exact binary STARMAP serves

1. Install Emscripten (emsdk) per https://emscripten.org.
2. The build harness is `swisseph-wasm-main/`. Its `compile.sh` compiles
   `deps/swisseph/*.c`. For convenience, **`swisseph-wasm-main/deps/swisseph/` in
   this archive is already populated with the Swiss Ephemeris 2.10.03 C source**
   (identical to `swisseph-2.10.03/`), so `compile.sh` runs unedited:
   `cd swisseph-wasm-main && bash compile.sh`.
   (Upstream this directory is an empty git submodule pointing at
   github.com/aloistr/swisseph; we populated it so no submodule fetch is needed.)
3. `compile.sh` also references `deps/sweph` for an optional `--preload-file` of
   ephemeris DATA (the `.se1` files). STARMAP bypasses that preload and injects
   the `.se1` files at runtime instead (see `personal-sky-worker.js`), so the
   data preload is not required to reproduce the engine logic. The `.se1` data is
   served at https://starmap.puddystudios.com/data/ephe/ and published by
   Astrodienst at www.astro.com/ftp/swisseph/ephe/.
4. The emitted `wasm/swisseph.js` + `wasm/swisseph.wasm` are the files STARMAP
   serves at `/vendor/sweph/`.

## Ephemeris data files (not program source)

The engine reads three Swiss Ephemeris data files - `seas_18.se1`, `semo_18.se1`,
`sepl_18.se1` (the JPL DE441-derived ephemerides). These are DATA, not program
source code, so they are not part of "Corresponding Source." STARMAP serves them
verbatim at https://starmap.puddystudios.com/data/ephe/ and Astrodienst publishes
them at www.astro.com/ftp/swisseph/ephe/. They are included here by reference only.

## Notices preserved

Swiss Ephemeris is Copyright Astrodienst AG, Switzerland. The `swisseph-wasm`
wrapper is Copyright 2024 prolaxu. Their LICENSE files are retained in their
respective directories. STARMAP makes no modification to the Swiss Ephemeris
library; it links it unmodified.
