Sync and Incremental
acs2md maintains a local state file named .convert-sync-state.json in the output directory when you use space convert with --sync or --incremental. This makes bulk exports efficient by only re-converting pages whose content has changed since the last run.
Both modes use the same state file and the same change-detection mechanism. The only difference is what happens when a page is removed from Confluence.
--incremental is the default mode. You do not need to pass it explicitly.
Use --sync only when you want local files to be deleted for removed pages.
At a glance
| Behavior | --sync | --incremental |
|---|---|---|
| State file | .convert-sync-state.json | .convert-sync-state.json |
| Skips unchanged pages | Yes | Yes |
| Re-converts changed pages | Yes | Yes |
| Local file when page is deleted in Confluence | Deleted from disk | Kept on disk |
| Summary label for removed pages | Deleted | Removed from tracking |
| Default | No | Yes |
| Best for | Live mirrors, continuity copies | Archives, compliance retention |
How the state file works
When you run space convert with either flag, acs2md:
- Reads
.convert-sync-state.jsonfrom the output directory - Fetches metadata for all pages in the space to detect changes efficiently
- Compares each page version against the version recorded in the state file
- Skips pages that have not changed, downloads and re-converts pages that have
- Rewrites internal links after conversion when link rewriting is enabled
- Updates the state file with the new version information
First run with --sync
acs2md space convert by-key DEVOPS --syncπ Converting space: DevOps (DEVOPS)
π Output directory: output/DEVOPS
π Mode: sync β state file: output/DEVOPS/.convert-sync-state.json
π Fetching page metadata for sync...
π₯ Fetched metadata for 100 pages...
π₯ Fetched metadata for 199 pages β
π Found 199 page(s) to convert (0 up-to-date)
β
Sync complete!
β
Converted: 199
β Failed: 0
β
Up-to-date (skipped): 0
ποΈ Deleted: 0
π Links rewritten: 39 files
π Output: output/DEVOPSSecond run (nothing changed)
acs2md space convert by-key DEVOPS --syncπ Converting space: DevOps (DEVOPS)
π Output directory: output/DEVOPS
π Mode: sync β state file: output/DEVOPS/.convert-sync-state.json
π Fetching page metadata for sync...
π₯ Fetched metadata for 100 pages...
π₯ Fetched metadata for 199 pages β
β
All pages are up-to-date.
β
Sync complete!
β
Up-to-date (skipped): 199
ποΈ Deleted: 0
π Output: output/DEVOPSAll 199 pages are skipped. No page content is downloaded or re-converted. Only the metadata is checked.
--sync mode
--sync is the bulk-maintenance mode designed for live mirrors and continuity copies.
- Stores tracking data in
.convert-sync-state.jsonin the output directory - Fetches metadata first to detect changes efficiently
- Downloads and re-converts only pages whose versions changed
- Removes local files for pages deleted from Confluence
- Rewrites internal links after conversion when link rewriting is enabled
When a page is removed
If a page is deleted in Confluence, --sync deletes the corresponding .md file from the output directory and removes the entry from the state file. The summary line shows Deleted: N.
When to use --sync
- Maintain a governed continuity copy of a full documentation space
- Feed a downstream system that expects a clean mirror of the space
- Scheduled exports where stale files would cause problems
- Disaster recovery archives that must reflect the current Confluence state
Example
acs2md space convert by-key DOCS \
--output-dir ./continuity/docs \
--sync--incremental mode
--incremental is the default mode, designed for archive-oriented and conservative retention workflows.
- Uses the same
.convert-sync-state.jsonmechanism as--sync - Downloads and re-converts only changed pages
- Keeps local files even if pages were removed from Confluence
- Works well when the export directory is also a historical archive
First run with --incremental
acs2md space convert by-key DEVOPS --incrementalπ Converting space: DevOps (DEVOPS)
π Output directory: output/DEVOPS
π Mode: incremental β state file: output/DEVOPS/.convert-sync-state.json
π Fetching page metadata for sync...
π₯ Fetched metadata for 100 pages...
π₯ Fetched metadata for 199 pages β
π Found 199 page(s) to convert (0 up-to-date)
β
Sync complete!
β
Converted: 199
β Failed: 0
β
Up-to-date (skipped): 0
ποΈ Removed from tracking: 0
π Links rewritten: 39 files
π Output: output/DEVOPSWhen a page is removed
If a page is deleted in Confluence, --incremental keeps the local .md file on disk. The entry is removed from the state file tracking, but the exported Markdown is preserved. The summary line shows Removed from tracking: N instead of Deleted: N.
When to use --incremental
- Space-wide compliance and audit archives that must retain all exported content
- Legal hold workflows where deletion of evidence is not acceptable
- Historical documentation snapshots that must survive upstream deletions
- Building a corpus that grows over time and never loses documents
Example
acs2md space convert by-key DOCS \
--output-dir ./archive/docs \
--incrementalMutual exclusivity
--sync and --incremental are mutually exclusive. You cannot use both in the same command.
# β
Valid
acs2md space convert by-key DOCS --sync
# β
Valid (default, same as omitting the flag)
acs2md space convert by-key DOCS --incremental
# β Invalid β mutually exclusive
acs2md space convert by-key DOCS --sync --incremental--conflict-resolution=versioned disables both sync and incremental behavior
because a timestamped directory is not a stable location for the state file.
Output structure with state file
A typical space export with sync or incremental looks like this:
./output/DOCS/
βββ .convert-sync-state.json
βββ Home.md
βββ Architecture/
β βββ Architecture.md
β βββ Deployment.md
βββ Operations/
β βββ Runbooks.md
β βββ Disaster_Recovery.md
βββ Security/
βββ Controls.md
βββ Audit_Evidence.mdThe .convert-sync-state.json file lives at the root of the output directory and tracks all pages in the space.
Choosing the right mode
| Scenario | Recommended mode |
|---|---|
| Maintain a continuity copy for disaster recovery | --sync |
| Keep a Git-backed documentation mirror up to date | --sync |
| Build a compliance archive that never deletes content | --incremental |
| Feed a RAG corpus with periodic refreshes | --incremental |
| CI/CD pipeline that publishes a space to a static site | --sync |
| Audit evidence capture that must survive source deletion | --incremental |
| Space-wide migration staging area | --sync |