The Game Panel specification

ADR-0001: The panel is a single system, not a panel and an engine

Context

The panel was first built as two systems: a panel, holding the frontend, and an engine behind it holding everything else. Each had its own repository, and the panel was installed as an application that depended on the engine as a library.

The panel ships as a single binary, so both repositories have to end up inside it.

Modules extend the panel, and a module that provides frontend functionality has to reach into both halves.

Decision

The panel is one system. There is no separate frontend panel over a backend engine, and no separate engine repository: one repository holds the engine, the modules built on it, the entry point and the build that produces the binary. The frontend is part of that system, server-rendered, rather than a client application talking to it.

Alternatives

A panel and an engine as separate systems, each in its own repository, with the panel installed as an application depending on the engine as a library. Both repositories still have to be part of one binary, and a module providing frontend functionality becomes much more complex when the frontend is a system of its own.

Consequences

Easier:

Harder:

Constrained:

Sources