Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
Self-host XWiki
updated Oct 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Oct 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
A Java enterprise wiki with structured data: pages can carry typed forms and classes, be queried and rendered through scripting, and be extended from an in-app extension manager with hundreds of add-ons. It is LGPL-2.1-or-later and runs in Tomcat against PostgreSQL, MySQL or MariaDB; the official image ships Tomcat, the JDBC driver and LibreOffice for office-document import.
Runs on a VPS from $12/mo (Kamatera 4GB, 4 GB RAM) · prices checked Sep 2026
Our recommendation
Pick XWiki when a wiki is not enough and you want structured data on your pages: typed classes and forms, queries over them, scripting in page content, and an in-app extension manager with hundreds of add-ons, which is how teams build their own small applications inside it. It is an LGPL-2.1-or-later Java platform that runs in Tomcat against PostgreSQL, MySQL or MariaDB; our snippet is upstream's postgres-tomcat compose file with a pinned image and a generated database password, and the first start runs the Distribution Wizard that creates the admin and installs the default flavor. The image's Tomcat is configured with a 1 GB Java heap by default and bundles LibreOffice for office imports; upstream's Docker image publishes no RAM minimum, so our 2 GB floor is an estimate from that heap plus LibreOffice. Among the catalog's wikis, DokuWiki, MediaWiki, BookStack, Outline, Docmost and Wiki.js are all lighter to run; XWiki is the one to choose when the structured-data and application features are the point.
XWiki's Docker compose file and image configuration carry a few decisions you should make deliberately:
non-negotiableIt is a Java application with a fixed heap: Tomcat's setenv.sh sets -Xmx1024m unless your JAVA_OPTS includes its own -Xmx, so a small server will swap and a large wiki needs more. Startup is slow by design, and the Distribution Wizard on first visit downloads and installs extensions before the wiki is usable; whoever reaches port 8080 first runs it, so do that yourself straight away.
non-negotiableWiki content lives in PostgreSQL; the /usr/local/xwiki volume is the permanent directory with installed extensions, configuration, the search index and temp files. Back up both together. Upstream's .env ships DB_PASSWORD=xwiki; our snippet generates one, and the same value must reach both containers.
non-negotiableUpstream tracks the database as postgres:latest and tells you to pin a major if you want to control when a major upgrade reaches your data volume; we pin one, and the volume path follows the current PostgreSQL layout, so moving majors is a dump-and-restore. The image tags come in families: a version tag like ours, stable-postgres-tomcat for the current cycle and lts-postgres-tomcat for the long-term-support line, which upstream marks separately in its versions.json. Move the pin yourself rather than tracking a floating tag.
non-negotiableThe compose file publishes plain HTTP on 8080 and sets init: true so LibreOffice's child processes are reaped; keep both. Put a TLS reverse proxy in front before users log in; the wizard and the admin login both travel over that port.