Skip to content
Switch branches/tags

Genie For Home Servers

Build Status Coverage Status Dependency Status Language grade: JavaScript

End User Programmable Virtual Assistants

This repository contains the standalone version of Genie, the end user programmable assistant. It is a single-user version, suitable for running on home servers and smart speakers.

Genie is a research project from the Stanford University Open Virtual Assistant Lab. You can find more information at

Running Genie standalone

The recommended way to run Genie is through podman, a replacement for docker that allows the container to run as your regular user (and thus access PulseAudio from your normal session). You can find the installation instructions here. If you use regular docker rather than podman, audio support might not work.

To run, use the command:

podman run --name genie -p 3000:3000 \
    -v /dev/shm:/dev/shm \
    -v $XDG_RUNTIME_DIR/pulse:/run/pulse \
    -e PULSE_SERVER=unix:/run/pulse/native \
    -v $XDG_CONFIG_HOME/genie-server:/var/lib/genie-server \
    --security-opt label=disable \

You can now navigate to to access Genie, or use your voice with the wake-word "Hey Genie".

To manage the container later, you can use:

podman start genie # start the container again
podman stop genie # stop the container
podman logs genie # look at the most recent logs of a running container

Development setup

To develop genie-server, you should clone this repository, then install the dependencies with:

dnf -y install nodejs gettext make gcc-c++ GraphicsMagick zip unzip pulseaudio-libs-devel # Fedora/RHEL
apt -y install nodejs gettext build-essential make g++ graphicsmagick zip unzip libpulse-dev # Ubuntu/Debian

You can then build the repository with:

npm ci

This will only install the minimal set of dependencies, and will not install any voice support. To enable voice, you must also install genie-client-cpp.

After installing the dependencies locally, the server can be started using npm start. The server is accessible on port 3000.