Skip to content
View in the app

A better way to browse. Learn more.

ernestdefoe.online

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
ernestdefoe.online

Extensions, themes & support for Flarum and Invision Community

Vibe coding for the community web. Report a bug, request a feature, or dig into the source — this is where the tools you use get built, in the open.

We do custom Bespoke Invision Community apps. If you have an idea for something you want then use the contact form to get in touch with us.

Importer — support and discussion

Featured Replies

  • Administrators
  • Community Expert

Importer / Converter for Flarum 2

Migrate an existing forum into Flarum 2 — from phpBB, vBulletin (3/4/5), XenForo, MyBB, SMF, Vanilla, NodeBB, Invision, Discourse, or Convoro. Everything is driven from the admin panel: pick a platform, connect to its database (or upload a dump), test it, then run the import in small batches with a live progress bar — so even a large forum won't time out.

Ported from the Convoro importer suite. Members keep their passwords where possible (bcrypt hashes are copied straight across; other formats are randomised so the member simply resets on first login). Post bodies are converted to Flarum's native rich-text format, so BBCode / HTML / Markdown comes across as real formatting — bold, italics, links, quotes, lists and code.

Runs on shared hosting

No queue worker and no SSH required. The import runs as a loop of small "step" requests straight from your browser, each processing one bounded batch and returning — so it can never hit a web timeout. Progress and the source→Flarum id-maps are persisted in the database, so if the tab is closed or the connection drops, reopen the page and it resumes exactly where it left off. If you do have a queue worker (e.g. fof/redis), the import is handed to it and runs fully in the background instead — either way it's safe.

The admin area

The whole tool lives on the extension's settings page.

1. The wizard

Pick a source platform, then either connect to a database (host, port, database name, username, password, and table prefix) or upload a database file (a mysqldump .sql/.sql.gz, or a SQLite file) for hosts that only hand you a dump. Nothing is written until you start.

Importer admin — connection wizard

2. Test the connection

Test connection validates the credentials, confirms it really is the platform you picked, then reports exactly what it found — here 21 Users, 4 Categories, 30 Topics, 371 Posts — so you know it will pull the right data before committing. Start import only lights up once the test passes.

Importer admin — successful connection test with row counts

3. Watch it run

Start import kicks off the batched run and shows a live progress bar with the current phase and running totals — categories, members, topics and posts — updating as it goes.

Importer admin — live progress bar with running totals

When it finishes you get a summary of everything imported, and can start another.

Importer admin — completed import summary

Supported sources

| Platform | Notes |

|----------|-------|

| phpBB 3.x | BBCode posts; bcrypt passwords copied across |

| vBulletin 3 / 4 · vBulletin 5 / 6 | one option covers both — vB5's node schema is auto-detected |

| XenForo 1.x / 2.x | BBCode posts; XF2 bcrypt passwords copied |

| MyBB 1.8 · SMF 2.0 / 2.1 | BBCode posts |

| Vanilla · NodeBB | Markdown / mixed formats; NodeBB reads its Redis store (needs the redis PHP extension) |

| Invision Community (IP.Board) | HTML posts, quotes & mentions cleaned up |

| Discourse | PostgreSQL source (needs pdo_pgsql) |

| Convoro | Convoro → Flarum; bcrypt passwords copied, so members keep their logins |

Categories are imported as tags (requires flarum/tags); if tags aren't installed, discussions and posts still import, just untagged.

How it works

  • Timeout-proof — the run is a resumable state machine; each request processes one small batch and returns, so memory stays flat and nothing runs long enough to time out. Works with or without a queue worker.

  • Resumable — progress, cursors and the source→Flarum id-maps live in the database, so a run survives a closed tab, a reload, or a dropped connection.

  • Faithful content — post bodies go source → HTML/Markdown → Flarum's formatter, landing in Flarum's native stored format so they render as proper rich text.

  • Relations preserved — members, tags, discussions, first/last-post pointers, comment counts and participant counts are all rebuilt.

Requirements & tips

  • Import into a fresh Flarum for the cleanest result.

  • A queue worker is optional — the import runs from the browser without one. If you have fof/redis + a worker, it runs in the background instead.

  • There's also a CLI for very large migrations or scripting:


  --host=127.0.0.1 --database=my_old_forum --username=root --password=secret --prefix=phpbb_
# add --test to only check the connection and show counts```

## License

MIT © ernestdefoe
  • Replies 2
  • Views 66
  • Created
  • Last Reply

Top Posters In This Topic

  • Author
  • Administrators
  • Community Expert

importer v0.1.0

First release of the Flarum 2 importer / converter.

Migrate into Flarum 2 from: phpBB 3.x · vBulletin 3/4 · vBulletin 5/6 · XenForo 1.x/2.x · MyBB 1.8 · SMF 2.0/2.1 · Vanilla · NodeBB · Invision Community (IP.Board) · Discourse · Convoro.

Highlights

  • Runs on shared hosting — a resumable, batched step machine driven from the browser; no queue worker or SSH required, and it can't time out. Uses a queue worker automatically if one is present.
  • Two ways in — connect to a live source database, or upload a mysqldump/SQLite dump.
  • Resumable — progress, cursors and source→Flarum id-maps are persisted, so a run survives a closed tab or dropped connection.
  • Faithful content — BBCode / HTML / Markdown convert to Flarum's native rich-text format (bold, italics, links, quotes, lists, code).
  • Relations preserved — members (bcrypt logins kept where possible), tags, discussions, first/last-post pointers, comment & participant counts.
  • Categories import as tags when flarum/tags is installed.

Everything is driven from the admin panel, with a live progress bar. A CLI (php flarum importer:run) is included for very large migrations.

View release on GitHub

  • 3 weeks later...
  • Author
  • Administrators
  • Community Expert

importer v0.1.1

Maintenance release from an external code review — performance, hardening, and better handling of real-world MySQL dumps. No breaking changes.

Fixed

  • Much faster NodeBB post imports. NodeBB orders posts by post id rather than by topic, so a single batch could span dozens of discussions and fire a separate query for each one. Those are now a single grouped lookup per batch.
  • Safer XenForo password migration. The stored authentication blob is now decoded without allowing object instantiation, so a malicious source database can't influence the import. A corrupt row is skipped instead of stopping the run.
  • Uploads are checked before they hit the disk. Dumps over 500 MB are rejected with a clear message, and the file's leading bytes are inspected so an obviously wrong file (an image, an archive) is refused straight away.
  • Better support for modern mysqldump output. Character-set introducers such as _binary'…' and _utf8mb4'…' are now handled — previously they could cause a table's rows to be skipped.
  • You'll be told when a dump only partly parsed. If any row batches can't be read, the upload step now warns you instead of quietly importing incomplete content.
  • The command line importer can no longer hang forever if a run gets stuck; it stops with an explanatory message.

Under the hood

Dump conversion now runs through Flarum's managed database layer rather than a direct connection, and the parser's known limitations are documented in the source.

Upgrade with composer update ernestdefoe/importer.

View release on GitHub

Guest
Reply to this topic...

Ask the developer directly

Every application here is supported by the person who built it. An account lets you post your question and get notified when it is answered.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.