Prism ships for Linux as an AppImage: one file, no installer, no root, no package manager. That makes it the easiest of the three platforms to try and the easiest to remove — delete the file and you are done, apart from one config directory.
Linux also has the fewest assumptions baked in, which means a couple of things that "just work" on macOS need a decision here. This walks through all of them.
Install
Download the AppImage
Prism-Linux-x86_64.AppImage from the latest release.Make it executable
chmod +x Prism-Linux-x86_64.AppImage. Nothing runs without this.Put it somewhere stable
~/Applications or ~/.local/bin are both fine. Moving it later means running the new copy once from the new location.Run it
http://127.0.0.1:8765/admin.chmod +x Prism-Linux-x86_64.AppImage mkdir -p ~/Applications mv Prism-Linux-x86_64.AppImage ~/Applications/ ~/Applications/Prism-Linux-x86_64.AppImage
Your first run creates one directory
$XDG_CONFIG_HOME/prism/ (defaults to ~/.config/prism) ├── config.json providers, search, MCP servers, agent choices ├── model_remapping.json aliases, known models, default model ├── stats.db request history, SQLite in WAL mode ├── analytics_id.txt random telemetry id ├── codex_catalog.json generated when Codex is set up ├── logs/proxy.log the log file ├── searxng/ managed search engine data, once bootstrapped └── prism.lock single-instance lock, held while running
flock on prism.lock. A duplicate launch exits with "prism is already running" rather than fighting over the port. If that message appears after a crash, the lock is released as soon as the stale process is gone.FUSE, and the one-line workaround
AppImages mount themselves through FUSE 2. Most rolling distributions and Ubuntu up to 22.04 ship it, but several newer releases ship FUSE 3 only, and the AppImage then refuses to start with a "dlopen(): error loading libfuse.so.2" message.
# Option 1 — add the FUSE 2 compatibility library sudo apt install libfuse2 # Debian/Ubuntu sudo dnf install fuse-libs # Fedora # Option 2 — no root, no extra package: extract and run ./Prism-Linux-x86_64.AppImage --appimage-extract-and-run
The second option unpacks to a temporary directory and runs from there. It costs a little startup time and still works normally otherwise, which is why it is a fine permanent answer on a machine where you would rather not install anything.
The tray icon, and why it may be missing
Prism's main window is the tray icon. On GNOME, top-bar icons require an AppIndicator-compatible extension — GNOME shipped the support out of process and it is not enabled by default. If there is no icon, the app is probably running fine; check the admin UI URL to confirm.
On KDE Plasma, XFCE, Cinnamon, MATE and most other desktops the icon appears with no extra work. Under Wayland, tray behaviour follows the compositor's XDG StatusNotifier support.
Auto-start at login
Turning on auto-start writes a standard freedesktop entry — no systemd unit, no root:
# ~/.config/autostart/prism.desktop [Desktop Entry] Type=Application Name=Prism Comment=Prism local AI proxy Exec=/home/you/Applications/Prism-Linux-x86_64.AppImage Terminal=false X-GNOME-Autostart-enabled=true
Because the entry holds an absolute path, moving the AppImage invalidates it. Prism compares the entry against the running executable at every launch and repoints a stale one, so the fix is simply to launch it once from where it now lives. Auto-start respects $XDG_CONFIG_HOME if you have moved that.
.AppImage file itself. After enabling auto-start, open the entry and check that Exec= points at your AppImage rather than at something under /tmp/.mount_*. If it points into the mount, edit the line to the AppImage path and it will work at the next sign-in.Running on a server or a headless box
The tray process is a GTK application and needs a display. On a machine without one, run the proxy directly:
./Prism-Linux-x86_64.AppImage --serve # Listening: # http://127.0.0.1:11434 LLM endpoints + /mcp + /health + /v1/stats # Not started in this mode: # http://127.0.0.1:8765/admin the admin UI
--serve run has no web interface. Edit config.json and model_remapping.json directly, then POST to /__reload_model_remap__ to apply changes without a restart.For a real systemd unit, point ExecStart at the AppImage with --serve, set Restart=on-failure, and keep it as a user service so it inherits the same $XDG_CONFIG_HOME and finds the config it built. Binding beyond loopback is possible via PRISM_HOST, with an explicit warning in the log when you do it.
Updates
The AppImage replaces itself in place: it downloads the new AppImage, swaps the running file to <path>.old, relaunches, and deletes the old copy a few seconds after the previous process exits. If you are running the plain binary rather than an AppImage, the updater unpacks Prism-Linux.tar.gz over the install directory instead.
Releases are published for x86_64. On an arm64 machine, build from source with go build — the binary is pure Go with CGO_ENABLED=0, so there is nothing to configure.
Config and data live outside the AppImage
Nothing important is stored inside the AppImage, so replacing it never loses your providers, keys, stats or MCP servers. Deleting the config directory is a full reset — worth knowing before you do it while troubleshooting.
# Full reset, keeping nothing rm -rf ~/.config/prism # Reset stats only rm ~/.config/prism/stats.db
logs/proxy.log holds startup output and every upstream error. Turn on Debug Logs in the Proxy tab to also capture full request and response bodies for translation problems — it logs a great deal, so leave it off once you are done.