Important
If you want to develop with hyperion, make sure to jump to the Section "Developing with hyperion"
Hyperion can be started in two different ways, depending on your preference and setup.
Options:
- Docker (convenient, little setup effort)
- Manual install (high performance, medium setup effort)
Docker is recommended if you want to try Hyperion, develop for it or want to host it without being distracted by some configurations and installations.
Manual installation makes sense if you want to avoid docker overhead or prefer hosting your own databases in your own environment.
docker compose up -d backendRequirements:
- UV Package manager (see: Documentation: Install uv)
- Docker (see: Documentation: Get started with Docker)
- Python3
Permanently rebuilding docker images during development is really annoying and slows down development speed. Hyperion uses Redis and MariaDB as its main databases. For a full breakdown on the architecture, refer to the CONTRIBUTING.md. This section only describes on how to start hyperion backend.
By default, hyperion comes with two example .env files:
.env.example(granular configuration, manual deployments).env.docker(minimal configuration, docker deployments)
For a docker deployment, only the .env.docker is relevant
Hyperion uses a smart configuration that works for both Docker and local development with a single file.
- Go to the project root directory.
- Copy the example configuration:
- Linux/Mac:
cp .env.example .env - Windows:
copy .env.example .env
- Linux/Mac:
Caution
Always generate secret JWT keys. The example file contains insecure defaults. In production, always generate a secure and secret JWT token.
Important
This section assumes you have UV already installed and configured. If you need to install uv, refer to the uv documentation
Hyperion uses UV as its packaging manager. UV is a rust based pypi compatible packaging manager, which helps us organise our dependencies.
To get python3.14, simply run
uv python install 3.14UV will install Python 3.14 for you. You can verify your installation running:
uv python listThis will give you a neat list of all available python installations.
Mine looks like this:
cpython-3.14.0-windows-x86_64-none C:\Python314\python.exe
cpython-3.14.0b1-windows-x86_64-none <download available>
cpython-3.14.0b1+freethreaded-windows-x86_64-none <download available>
cpython-3.13.4-windows-x86_64-none C:\Users\<USER>\AppData\Roaming\uv\python\cpython-3.13.4-windows-x86_64-none\python.exe
cpython-3.13.4+freethreaded-windows-x86_64-none <download available>
cpython-3.13.2-windows-x86_64-none C:\Program Files\Python313\python.exe
cpython-3.13.2+freethreaded-windows-x86_64-none C:\Program Files\Python313\python3.13t.exe
cpython-3.12.11-windows-x86_64-none C:\Users\<USER>\AppData\Roaming\uv\python\cpython-3.12.11-windows-x86_64-none\python.exe
cpython-3.12.10-windows-x86_64-none C:\Users\<USER>\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.12\python.exe
cpython-3.11.13-windows-x86_64-none C:\Users\<USER>\AppData\Roaming\uv\python\cpython-3.11.13-windows-x86_64-none\python.exe
cpython-3.11.6-windows-x86_64-none C:\Program Files\Python311\python.exe
cpython-3.10.18-windows-x86_64-none C:\Users\<USER>\AppData\Roaming\uv\python\cpython-3.10.18-windows-x86_64-none\python.exe
cpython-3.10.5-windows-x86_64-none C:\Program Files\Python310\python.exe
cpython-3.9.23-windows-x86_64-none <download available>After downloading python 3.14, we want to create a new virtual environment to separate all dependencies from our base python.
- Open the folder
backend/ - Run
uv sync.
This command creates a venv and downloads all pyproject.toml dependencies.
source .venv/bin/activate.venv/Scripts/activate.ps1Note
In my experience Windows prohibits the activation of venvs due to some configurations.
If you get an error similar to "cannot be loaded because the execution of scripts is disabled on this system"., you need to disable your Execution policy.
For further info on this error and fix, refer to this StackOverflow discussion: https://stackoverflow.com/a/18713789
We use Docker to run the infrastructure (Database, Redis, PMA) so you don't have to install them manually on your machine. Your code runs locally for easy debugging.
Go back to the project root directory and run
docker compose up -d database redis pmadatabase: MariaDB 11.4redis: Redis 8.4pma: PhpMyAdmin
Navigate to backend/ and run following command in your terminal:
python -m src.mainThis will startup hyperion backend.
Note
We enabled DEBUG=True by default in the configuration. Running hyperion in debug mode will restart the backend automatically whenever you change any file within the backend directory.
Alternatively you can use uvicorn using following command:
uvicorn src.main:app --port 2468 --reloadThe result will be the same.
| URL | Description |
|---|---|
| http://127.0.0.1:2468/docs | Swagger UI where you can execute commands |
| http://127.0.0.1:8081 | PhpMyAdmin (username: hyperion; password: hyperion) - managing the mariadb. |
| http://127.0.0.1:8080 | Hyperion DMX interface (looks ugly but works) |
Hyperion lets you create an admin user at first startup. This is only possible during the initial setup when no users exist.
- For that open your browser at
127.0.0.1:2468/docs. - Then Scroll down to the section "startup".
- Expand the endpoint
/api/startup/create-admin-user - Click the button "try it out"
- Fill out the JSON with your desired username, password, first and lastname.
Important
You can choose whatever username, first and last name you like. I went with my real name and the username admin. Password must match hyperions password policy. For the sake of simplicity, I chose Test1234!.
From now on, you can log in with your username and password using the /api/accounts/login endpoint.
- For that open your browser at
127.0.0.1:2468/docs. - Scroll up to the section "accounts"
- Expand the endpoint
/api/accounts/login - Click the button "try it out"
- Fill out the field
usernameandpasswordwith the credentials you chose earlier.
Note
If your current login expires, you can refresh it by just sending a single request to /api/accounts/refresh. That way you don't have to login again all 15 mins.

