Migrating from another platform
We ship free, open-source migration tools as a standalone CLI. It’s not a plugin on purpose: you run it once on your server, it writes straight into the Xentium database, and all it leaves behind is the migration log (ACP → System → Migration History).
Available adapters
Section titled “Available adapters”| Adapter | Source | Status |
|---|---|---|
@xentium/migrate-wp |
WordPress, from a WXR export file (wp-admin → Tools → Export). You don’t need a WordPress install or database access. | ✅ Available |
@xentium/migrate-phpbb |
phpBB 3.1+, over a direct MySQL connection. The xentium-forum plugin must be installed and enabled on the target (we check before anything runs). Users keep their passwords. |
✅ Available |
@xentium/migrate-xenforo |
XenForo 2.x, over a direct MySQL connection. Needs the xentium-forum plugin on the target. Users with native bcrypt hashes keep their passwords. |
✅ Available |
| vBulletin, WoltLab Suite | direct database connection | Planned |
Running a migration
Section titled “Running a migration”# 1. Always start with a dry run: it inspects, extracts and reports, and writes NOTHINGpnpm --filter @xentium/migrate-wp migrate -- \ --file my-export.xml \ --db "postgresql://user:pass@localhost:5432/xentium" \ --dry-run
# 2. The real run (asks you to confirm; --yes skips that)pnpm --filter @xentium/migrate-wp migrate -- --file my-export.xml --db "postgresql://…"
# Forums: point at the board's MySQL database instead of a file# (same flags for @xentium/migrate-xenforo; --prefix overrides the table prefix)pnpm --filter @xentium/migrate-phpbb migrate -- \ --source-db "mysql://user:pass@host:3306/phpbb" \ --db "postgresql://…" --dry-runThe target has to be an installed Xentium (run the wizard first). Migrations can be resumed: we track every imported item in an import map, so if a run is interrupted, the next one continues where it stopped instead of creating duplicates. Accounts that match an existing user by email are merged into that user.
What carries over
Section titled “What carries over”- Users: accounts, display names, join dates and a best-effort role mapping (admins → Administrator, moderators → Moderator). Where the source has password hashes (the database adapters; for XenForo we pull them out of its serialized auth data), users keep their passwords: we check the old hash on their first login and quietly upgrade it to argon2. WXR exports don’t contain hashes, so WordPress users reset their password once.
- Content: categories with their hierarchy, posts/articles (converted to the TipTap format; headings, lists, quotes, code, images and links survive), tags and member comments (threaded one level deep). For forums: the whole node tree, threads (locked, pinned, view counts) and posts with their BBCode converted.
- Social graph where the source has one: XenForo reactions become likes (every reaction type turns into a like), follows carry over 1:1 and ignores become blocks. phpBB foes become blocks. phpBB’s friend flag is a private buddy list, so we don’t turn it into public follows. A block cancels follows in both directions, as it does in Xentium, and we recount every like and follower total.
- Not migrated: themes and styling (Xentium has its own appearance system), the old platform’s plugins, private messages, guest comments (comments on Xentium need an account), and, in this version, media files and attachments (we link to them by URL but don’t download them). The migration report lists everything we skipped and why.