Local Writing App

Linux · headless / server

Run it as a server

Install the backend on a box with no desktop — a home server, a NAS, a Raspberry Pi — and reach the writing UI from any browser on your network. A tarball plus a one-command systemd installer.

On ARM64 (e.g. a Raspberry Pi), use the arm64 server build.

This mode has no password — trusted networks only

The server binds to your whole network (0.0.0.0) so other machines can reach it, and it has no login. Anyone who can reach the box can open your projects.

Only run it this way on a private network you trust, for a single trusted user. Don’t expose the port to the public internet.

Install as a service

  1. Download and extract the tarball on the box.
  2. Run the installer from the extracted folder. It installs to /opt/local-writing-app, sets up a systemd service that starts on boot, and runs it as your user (not root):
tar -xzf local-writing-app-linux-x64-server.tar.gz
cd local-writing-app-linux-x64-server
sudo ./install-server.sh

On ARM64 (e.g. a Raspberry Pi), replace x64 with arm64 in both commands.

When it finishes, it prints the LAN address to open, e.g. http://192.168.1.20:8787. For a different port, run the installer as LWA_PORT=9000 sudo -E ./install-server.sh.

Update later

One command pulls the latest release for your channel (stable or nightly), keeps your current port and service user, and restarts:

sudo /opt/local-writing-app/update-server.sh

It follows the update channel set in the app and skips the download if you’re already current (--force reinstalls anyway).

Manage it

systemctl status local-writing-app      # is it running?
journalctl -u local-writing-app -f      # follow the logs
sudo systemctl disable --now local-writing-app   # stop & uninstall service

AI provider keys normally go in the system keychain. A headless box usually has none, so there they're saved in the app's config.yaml instead; the Settings dialog says which.

Just want it on your own desktop?

Use the Linux desktop build → — a single AppImage, no service, no root.