How to self-host Fider on your own VPS without Docker
Run Fider v0.38.2, the open-source feedback board, on your own Ubuntu server with ox and no Docker: a Go build, Postgres and the config that ran.
To self-host Fider you need an Ubuntu server, a fork of the Fider repo with one ox.toml file added, a mail relay it can send through, and five variables. In our run the first deploy took about 4 minutes, and ox set up the Postgres database where Fider keeps its posts, votes and users.
How we tested On Oct 17, 2026, ox deployed Fider v0.38.2 from commit e492af4a on a fresh DigitalOcean server with 8 vCPUs and 16 GB of memory. The run then redeployed it, backed it up and rebooted the server. Then a separate test agent, one that did not write the config, signed in, posted an idea and saw it on the home page with its vote after a reload, and checked the app's services and its backup.
Fider is a feedback board for feature requests and suggestions. Visitors post ideas, vote on them and comment, and the team marks the status of each idea. The code is open source under the AGPL v3 license. Fider is a Go server with a React interface, and the server renders each page's first view itself, using the V8 engine through v8go. It keeps everything in Postgres, uploaded images included.
ox deployed Fider v0.38.2 (commit e492af4a) on Oct 17, 2026 on a fresh DigitalOcean server with 8 vCPUs and 16 GB of memory; the first deploy took 4 minutes and a redeploy took 78 seconds.
- First deploy: 4 minutes, from adding the project until the app passed the run's first checks.
- Redeploy of the same commit: 78 seconds, until the app passed the checks again.
- Server: DigitalOcean, 8 vCPUs and 16 GB of memory (
s-8vcpu-16gb), with this app alone on it. Every one of the 85 apps we deployed ran on this one size, so it was not picked for this app. - Memory in use after the reboot: 722 MB of 15986 MB, for the whole server: Ubuntu, the app and its staging copy, its services, Caddy and the ox agent. On a server with no apps, ox's tests on real servers hold the agent to 40 MB or less and Caddy to 50 MB or less.
- Services ox runs for it:
postgres. - Source: github.com/getfider/fider at v0.38.2, commit
e492af4a.


What you need
An Ubuntu LTS server. The run used the size in the facts above and measured the memory there.
A GitHub account to fork
getfider/fider, and an ox account made by signing in with GitHub.An SMTP relay. Fider has no passwords: people sign in with a code or link sent by email, and its hosting docs say it cannot start without an email provider. The run used a test mail catcher on the server, so sending through a real relay was not tested.
The steps
In the ox dashboard, choose Add a server. ox shows one install command with a fresh token in it. Paste it into a root shell on your Ubuntu machine. It installs the ox agent and Caddy.
Fork getfider/fider and check out the tag v0.38.2, the release the run deployed. Add the ox.toml shown below at the top of the repo. The run added no other file. Commit and push. Next write a fider.env file on your laptop with the five keys listed under the variables section. Write BASE_URL as the literal text ${PUBLIC_URL}, and give the other four your own values. With the ox CLI signed in, run:
ox new <you>/fider
ox review fider --from-file fider.env --waitox names the project after the repo, so it is fider here. The review stores your values and starts the first deploy, and --wait prints the run's log until it ends. The quickstart shows the same steps in the browser.
Our run served Fider on its preview address, so a domain of your own was not part of it. The domains page covers adding one.
The first site, sign-in and a first idea
When the deploy is green, open the address ox shows for the project. Until a site exists, a new Fider install sends every visit to its sign-up page, where you type a name for the site, your own name and your email. Fider mails a confirmation link, and opening it makes you the site's administrator. The run made its first site with the same request that form sends, and read the confirmation mail from the test mail catcher.
The test agent then used Fider as a visitor does. It signed in with an email address the site had not seen. Fider asked for a name and mailed a 6-digit code that is good for 15 minutes. A wrong code was refused with "Invalid or expired verification code", and the right one signed the agent in as a regular member.
To post an idea, press "Enter your suggestion here..." on the home page, give it a title and a description, and press "Submit your idea". In the run the idea stayed on the home page with its vote after a reload. The Admin menu, comments and statuses were not tested.
The ox.toml, line by line
# Fider 0.38.2 (a feedback board: a Go server with a React UI it renders on
# the server through v8go) on ox's postgres, as its operator would write it
# from the Dockerfile: the Makefile's build-server, build-ssr and build-ui
# targets, then `fider migrate` and `fider`. It runs from the release and
# reads dist/, ssr.js, views/, locale/ and migrations/ there; uploads go to
# the database (BLOB_STORAGE defaults to sql), so nothing is kept.
# The server panics at start without these (app/pkg/env/env.go); the example
# file is .example.env, which ox does not read. BASE_URL is the site's own
# address: it goes into every mailed sign-in link. SMTP is the default mail
# type; a relay with no login leaves EMAIL_SMTP_USERNAME and _PASSWORD unset.
required_variables = ["JWT_SECRET", "BASE_URL", "EMAIL_NOREPLY", "EMAIL_SMTP_HOST", "EMAIL_SMTP_PORT"]
[app]
# HOST is ox's (127.0.0.1) and PORT its own: the server listens on HOST:PORT.
start = "exec ./fider"
health = "/_health"
[build]
# The make targets run npm and npx, so ox installs the lockfile's packages
# (npm ci, as the Dockerfile's UI stage) before them.
commands = [
"COMMITHASH=$OX_RELEASE make build-server",
"make build-ssr",
"make build-ui",
]
# The server does not create its tables; `fider migrate` does.
migrate = "./fider migrate"
[services]
postgres = {}The config follows Fider's Dockerfile: three build steps, then the migrations, then the server.
required_variablesnames the five keys Fider stops without. Itsenv.gopanics at start withoutJWT_SECRET,BASE_URLandEMAIL_NOREPLY, and with the default SMTP mail type also without the relay's host and port. The repo's example file is.example.env, which ox does not read, so this list takes its place and ox asks for the keys before the first deploy.DATABASE_URLis required too, but ox fills it from the Postgres service.startruns the binary the build leaves in the release folder. Fider readsHOSTandPORTitself, and ox sets both for every app. It loadsdist/,ssr.js,views/,locale/andmigrations/from its working directory, so it runs from the release.healthis Fider's own/_healthroute. It pings the database and answers "Healthy". ox switches traffic to a new release only after it answers.The three build
commandsare Makefile targets.build-servercompiles the Go server into one binary namedfider, andCOMMITHASH=$OX_RELEASEstamps the commit into it.build-ssrextracts and compiles the translations and bundlesssr.js, the script the server runs in V8.build-uibuilds the browser's JavaScript and CSS intodist/. These targets run npm and npx, so ox first installs the packages frompackage-lock.json, as the Dockerfile's UI stage does, and it reads the Go and Node versions fromgo.modand.nvmrc.migrateruns./fider migrate. The server never creates its own tables, so this command applies the SQL files inmigrations/. ox runs it after the build and before traffic moves, and dumps Postgres first.[services]asks for Postgres, and ox hands Fider its address asDATABASE_URL. There is no[storage]section: Fider'sBLOB_STORAGEsetting defaults tosql, so uploads live in Postgres and no folder has to survive a deploy.
There are no workers. Fider's background jobs, such as sending mail, run inside the web process, and the test agent saw them finish in that process's log.
BASE_URL
JWT_SECRET
EMAIL_NOREPLY
EMAIL_SMTP_HOST
EMAIL_SMTP_PORTBASE_URL is ${PUBLIC_URL}, a reference ox fills in with the project's address. Fider's docs say it must match the address people open, because Fider builds every link from it, including the ones in mail. JWT_SECRET is a long random value that Fider uses to sign its tokens. Fider's docs say changing it signs every user out. EMAIL_NOREPLY is the sender address on every mail, and the run used an example.com one. EMAIL_SMTP_HOST and EMAIL_SMTP_PORT name the relay, and the run's were the mail catcher's. A relay that needs a login also takes EMAIL_SMTP_USERNAME and EMAIL_SMTP_PASSWORD, which the run left unset. See variables for how references work.
Postgres and the staging copy
Postgres is the only service. The run also deployed a staging copy with its own database and its own site, and the memory figure above counts both.
Updates and backups
To move to a new release, merge its tag into your fork and push, or run ox deploy fider --wait. ox builds the new release beside the running one, runs fider migrate, and switches once /_health answers. The Postgres dump it takes first was there after the run's redeploy. Fider's docs also say to back up before an update and to read the release notes for breaking changes.
Backups need no setup. The run's Back up now made a Postgres dump, which holds the posts, users and uploaded images. Run ox backups fider to list backups, or ox backups fider now postgres --wait to make one. A restore was not tested. The backups page covers copies in an S3 bucket. The self-hosting page lists the other apps ox has deployed.
Frequently asked questions
Do I need Docker to self-host Fider?
No. Fider's own hosting docs describe Docker Compose, but the source builds with plain Makefile targets and runs as one Go binary. ox builds it from your fork on the server, installs Postgres beside it and keeps it running as a system service. An update is a push to your fork or one deploy command.
How do I create the first Fider admin account?
Open the site's address after the first deploy. Fider sends you to its sign-up page, where you enter a site name, your name and your email. It mails a confirmation link, and opening the link makes you the administrator. Fider has no passwords, so that mail has to arrive. Real mail delivery was not tested.
How much memory does self-hosted Fider use?
On the run's server, the whole machine used the memory the facts show after a reboot. That counts Fider, its staging copy, Postgres, Caddy and the ox agent. The build also runs Go and npm on the server. ox works on any server from 1 GB up and tells you when memory is why an app stopped.
What email setup does Fider need?
Fider cannot start without an email provider, because it signs people in by emailed code or link. Its docs list SMTP, Mailgun and Amazon SES. The run used SMTP with a test mail catcher, so only the SMTP settings are in the config, and sending through a real relay was not tested.
New to running apps on your own server? How ox self-hosts your apps shows what ox sets up on your server.
