# Web-Configurator — GPLv3 source release (archived)

This archive contains the source of the Unfolded Circle Web-Configurator 2.3.3, shipped
in firmware 2.9.11. It is the last version shipped while the device's licence listing carried
a GNU General Public License v3.0 entry for the Web-Configurator.

That notice was our mistake: the Web-Configurator was written in-house and was not intended
for open-source release at that stage. Rather than leave it ambiguous, we are publishing the
source. This snapshot is released under the GNU General Public License, version 3
(`GPL-3.0-only`), with our own artwork under CC BY 4.0 — see [Licensing](#licensing).

Later releases of the Web-Configurator are proprietary and are not covered by this licence.

## Status

Archived and read-only. We are not maintaining this code, tracking issues, or accepting
contributions. It is published so that anyone working with the Web-Configurator has a clear
and unambiguous basis to work from, not as the start of an open-source project.

This is the source the Web-Configurator 2.3.3 build was made from, with the deviations listed
under [Differences from the shipped bundle](#differences-from-the-shipped-bundle). Everything
needed to build, modify and run the application is here.

## Provenance

This is the Web-Configurator 2.3.3 source tree with a small, deliberate set of later changes
applied on top and a handful of files replaced: the Font Awesome Pro stylesheets swapped for
the Free edition, the third-party licence information in Settings backported together with
the translations that go with it. Nothing else from our development branch is here, so apart
from the differences below this is the source of the build that shipped in firmware 2.9.11.

Internal tooling, CI configuration and internal documentation are not included; none of it
is needed to build, run or modify the application.

Archived on 2026-08-03.

## Differences from the shipped bundle

**Font Awesome.** The build shipped on the device used Font Awesome Pro under a commercial
licence we cannot sublicense. No Font Awesome Pro material is included in this archive; it
has been replaced with the Free edition, so `npm install && npm run build` produces a Font
Awesome Free build. Icons that exist only in Pro are mapped to their nearest Free equivalent
— in the stylesheets, and at runtime for icon names stored in a device configuration — so a
number of icons look different from the shipped build. Nothing else about them changed.

**The Licences page in Settings.** Settings → Licences, and the `public/licenses.md`
attribution page behind it, are backported from a later development state; the shipped 2.3.3
build does not have them. They are included because they are the clearest statement of what
this software is made of, and of the licence this snapshot is under.

**Translations.** The UI translations are a later snapshot than 2.3.3 shipped with. Text may
differ from the device; behaviour does not.

**Unfolded Circle artwork.** The Unfolded Circle logo has been replaced with a neutral
placeholder mark. The favicon set (`public/favicon/`) and the login page background images
(`public/images/background/`) are not included, so the login page renders without its
background and browsers fall back to their default tab icon. The remaining product artwork
under `public/images/` is included — see [Licensing](#licensing).

**Version string.** An archive carries no git metadata, so the version comes from
`version.txt` rather than from `git describe`.

## Tests

`npm run test:unit` passes. Two tests are skipped, with a warning on the console: they check
the proprietary licence notice, and that template is not part of this archive.

The end-to-end suites are a different matter. `npm run test:e2e:visual` compares against
screenshots taken from the shipped build, so every baseline containing a Pro icon, the
Unfolded Circle logo or the login background fails here by design, and the `npm run test:e2e`
specs that assert on those assets fail for the same reason. We have not rebaselined them —
this is an archived snapshot, not a maintained tree.

## Licensing

| What                      | Licence                                                        |
| ------------------------- | -------------------------------------------------------------- |
| source code, and all else | GPL-3.0-only — [`LICENSE`](LICENSE)                            |
| `public/images/**`        | CC BY 4.0 — [`LICENSES/CC-BY-4.0.txt`](LICENSES/CC-BY-4.0.txt) |
| `public/fonts/**`         | SIL Open Font License — see `public/licenses.md`               |
| npm dependencies          | reproduced in full in `public/licenses.md`                     |

The artwork under `public/images/` is Unfolded Circle's own work and is licensed CC BY 4.0
rather than under the GPL, so it can be reused with attribution outside this program too;
`public/images/LICENSE` has the details. None of this licenses our trademarks — see below.

## Running this software

You can build and serve this web app anywhere — your own machine, a container, any web
server. It is not tied to Unfolded Circle hardware, and nothing here restricts where you
run it.

## Installing a custom build on a Remote

A Remote can be configured to serve a custom web application in place of the shipped Web
Configurator. This is a documented feature of the Core API; see the
[REST Core-API documentation](https://github.com/unfoldedcircle/core-api). It needs no
signing keys, unlocking, or firmware modification.

Two things to know before you do it:

- We cannot support or diagnose a Remote running a modified Web-Configurator, and faults
  caused by a modified build are not covered by our warranty. Your statutory rights in
  respect of the hardware itself are unaffected. See
  <https://www.unfoldedcircle.com/legal/warranty>.
- To go back to the shipped version: see `DELETE /api/system/install/web_configurator`
  endpoint in the [REST Core-API documentation](https://github.com/unfoldedcircle/core-api).

## Trademarks

"Unfolded Circle", the Unfolded Circle logo and Unfolded Circle product names are
trademarks of Unfolded Circle ApS. The GPL covers copyright, not trademarks; no trademark
rights are granted here.

We cannot and do not impose conditions beyond the GPL. We would ask, though: if you
publish a modified build, please make clear that it is unofficial and not affiliated with
or supported by Unfolded Circle.

## Building

Requires Node 22 (see `.nvmrc`).

```shell
# Install dependencies
npm install

# Provide the Font Awesome Free webfont — required once, before dev or build
mkdir -p public/configurator/fonts/fontawesome6
cp node_modules/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 \
   node_modules/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf \
   public/configurator/fonts/fontawesome6/

# Start development server (http://localhost:3000)
npm run dev

# Production build
BASE_URL=/configurator/ npm run build
```

The destination comes from `$fa-font-path` in `src/assets/vars/_variables.scss`. Vite applies
`base` to both the stylesheet reference and the contents of `public/`, so the two always
agree: this works unchanged whatever you set `BASE_URL` to, and `$fa-font-path` does not need
adjusting when you serve the app from a different base path.

Skipping the copy leaves the app running but renders every icon as a missing-glyph box.

### Development without a Device

The [Remote-Core Simulator](https://github.com/unfoldedcircle/core-simulator) serves the same
Core-APIs from Docker, so most work needs no hardware:

```shell
npm run sim:up     # start it (Docker is the only prerequisite)
npm run dev:sim    # dev server on :3000, pointed at the simulator
```

Log in with PIN `1234`.

### Development with a Real Device

Needed for real IR/dock hardware, touch input, OTA and the full IR code database.
Create or edit `env/.env.local` with the IP address of your Remote, e.g.:

```env
VITE_API_PROXY=http://192.168.1.100
```

Then run `npm run dev` — API and WebSocket requests will proxy to your device.
