Guide · tested with BookStack v26.09.1 on 16 October 2026

How to move from Confluence to BookStack

BookStack is a free, MIT-licensed wiki that you host yourself. It has no Confluence importer, and its import won't take a Confluence export as it is. What does work: a short script that rewrites the export into BookStack's own ZIP format, then BookStack's import. We tried that on two sample spaces. Here's what it takes and what comes across.

The short answer

Still choosing a wiki? See our open source Confluence alternatives comparison, or hosted vs self-hosted BookStack.

How we tested

We ran BookStack v26.09.1, the latest release on 16 October 2026, from the community linuxserver/bookstack Docker image with MariaDB 11. We used two made-up Confluence HTML space exports: one shaped like Data Center (10 pages, four levels deep) and one like Cloud (4 pages). Between them they have panels, code blocks, expand blocks, status labels, task lists, emoticons, a Jira link, a draw.io diagram, images, a PDF and links between pages. We wrote a test script to convert each export, imported it through BookStack's API, and checked the pages in a browser and through BookStack's API. Try your own space before you rely on any of this.

What BookStack says about Confluence

BookStack's own Confluence alternative page says: "We don't yet have an automated way to migrate your content directly from Confluence to BookStack." It points to its REST API as the way to automate parts of a move.

BookStack added a Portable ZIP export and import in v24.12, and it publishes the ZIP format. That format is what makes a scripted move practical. When we uploaded a Confluence export zip directly, BookStack refused it with "Could not find and decode ZIP data.json content."

Step 1: Export your Confluence space as HTML

Export the space as HTML. You get a zip with one HTML file per page, an index.html that lists the page tree, and folders of attachments and images. Our export guide covers Cloud and Data Center.

Step 2: Decide how your tree fits BookStack

Confluence pages can nest as deep as you like. BookStack has shelves, books, chapters and pages, and pages can't sit inside other pages. In our test we mapped it like this:

In ConfluenceIn BookStack
SpaceBook
Space home pageThe first page in the book
Second-level page with childrenA chapter, plus a page of the same name inside it for the parent's own text
Second-level page without childrenA page in the book
Third level and deeperPages in that chapter, in Confluence's order. The deeper nesting is lost.

That's one choice among several. If your space is really several areas, making each top-level page its own book on a shelf keeps one more level.

Step 3: Convert the export to a BookStack ZIP

A BookStack Portable ZIP holds a data.json file describing the book, its chapters and pages, plus a files/ folder. Our script did five things:

  1. Read the page tree from the export's index.html.
  2. Took each page's content from its main-content block, leaving out Confluence's breadcrumbs, attachments list and footer.
  3. Found the images and attachments linked in each page's content, copied the files into files/, and pointed the page at them with BookStack references such as [[bsexport:image:12]].
  4. Rewrote links between pages (Local-Setup_65541.html) to [[bsexport:page:65541]]. BookStack turns these into links to the new pages when it imports.
  5. In a second run, converted panels to BookStack callouts and code blocks to BookStack code blocks with their language.

BookStack only takes PNG, JPEG, GIF and WebP as images in the ZIP, so the script has to attach SVGs as files or convert them.

Step 4: Import the ZIP

  1. Go to Books and choose Import from the page's actions.
  2. Choose the ZIP and press Validate Import. BookStack lists any errors in the file.
  3. Review the contents and press Run Import.

You need the "Import content" role permission, which admin roles have by default. The API does the same with POST /api/imports and then POST /api/imports/{id}. Each of our imports took about two seconds.

The ZIP, and each file in it, must fit under BookStack's upload limit. That's FILE_UPLOAD_SIZE_LIMIT, 50 MB in BookStack's default config, plus any limits in PHP and your web server (BookStack's upload docs). A big space may need several books, or a raised limit.

What you get

In ConfluenceScript that only fixes links and filesScript that also converts macros
Page titles and orderKept, in the book, chapter and page layout above.
Text, headings, lists and tablesKept. Table cell colours are lost.
ImagesUploaded to BookStack's image gallery and shown in place.
AttachmentsFiles linked from the page body were uploaded and listed in the page's sidebar, with their real file names. Files that only appeared in Confluence's attachments list, or were linked by full Confluence address, were left behind (in our test, a .txt and a .sql file). Your script has to collect those too.
Links between pagesPoint to the new pages. Links written as full Confluence addresses still go to your old site.
Links to a headingBroken. BookStack gives headings its own IDs (bkmrk-prerequisites), so the script has to rewrite these too.
Info, note, tip and warning panelsPlain paragraphs. The panel title is an ordinary line.BookStack callouts, title in bold. A list inside a panel ends up just below it, because a callout is a single paragraph.
Panels with a background colourKept the colour.
Code blocksCode blocks with line numbers. The language and highlighting are lost, and a code title becomes a bold line above.Kept the language, with highlighting.
Expand blocksAlways open. The title becomes an ordinary line. (Our script didn't convert them.)
Status labelsPlain text.
Task listsPlain bullets. Tick boxes and done states are lost.
Confluence emoticonsBroken images, or an attachment link where the icon file was in the export. A script could swap them for emoji characters; ours didn't.
Children and table of contents macrosA fixed list of links, as it was on the day of the export.
Page tree macroGone. The export leaves it empty.
Jira issue macroThe issue key stays as a link to Jira, next to a broken icon.
draw.io diagramThe export's PNG preview shows as a plain image, so you can't edit the diagram. BookStack has its own diagrams.net editor, so you can redraw diagrams you still need there.
Authors and datesLost. Every page says it was created by whoever ran the import, at import time.
Comments, page history, blog postsPage history and blog posts aren't in an HTML export. Comments are only included if you choose that option when you export. We didn't test comments.
Page restrictionsNot carried. BookStack has its own permissions on books, chapters and pages, so set them again.

Step 5: Tidy up

  1. Check the tree. Compare each book with the export's index.html, and use Sort on the book to move anything that landed in the wrong place.
  2. Fix the macros your script didn't convert: task lists, status labels, expand blocks and emoticons.
  3. Fix links. Search for your old Confluence address to find links that still point there.
  4. Set permissions on books, chapters and pages that need them.
  5. Keep the export zip. It's your snapshot of the old space.

Other routes

Or let Tablewide move you to Docmost

Tablewide doesn't sell hosted BookStack. If you'd rather not run a wiki yourself, we move Confluence to Docmost, a different open source wiki, hosted for you from $49 a month for your whole team, with unlimited users. Our cost calculator compares that with your Confluence bill. Our own importer rebuilds the page tree in Confluence's order with the real page titles, and turns panels into callouts, status labels into status pills, task lists into to-dos and expand blocks into toggles. Code keeps its language, and attachments, images and links between pages carry over. In our tests on 13 made-up test exports (2,120 pages), every page landed under the right parent. Your space may have quirks ours didn't, which is why you check the result first. You can click around a sample wiki to see Docmost before you decide.

Some things don't carry over even with us. Links to a heading open the page at the top. Labels don't carry over yet. Docmost lists the importer as each page's author, though where the export records it, each page opens with a line naming who created and last edited it in Confluence, and when. Page restrictions aren't carried; access is set per space. You check the result before anyone switches.

Founding offer. First 20 teams: 40% off your first year, and your price locked for as long as you stay. No payment now.

Organizations in the EEA, UK or Switzerland: please use the form and don't upload an export. We'll build your preview from your public pages instead, or tell you if that isn't possible (preview terms).

Get a free preview

BookStack is a trademark of its developers, Docmost is a trademark of its developers, and Confluence is a trademark of Atlassian. Tablewide is not affiliated with or endorsed by any of them.