Browser extension for exporting Confluence and Jira content to Markdown, CSV, images, and ZIP archives. Works through your active browser session -- no separate API token required.
| Field | Value |
|---|---|
| Status | Active |
| Type | Browser extension / host-page extraction tool |
| Host browsers | Chrome / Chromium, Yandex Browser |
| Primary stack | Manifest V3, React 18, TypeScript, Vite, CRXJS, Tailwind CSS |
| Release artifacts | confx-chrome.zip, confx-yandex.crx, SHA256SUMS |
When you export a page or issue, ConfX produces a ZIP archive:
confluence-page.zip
README.md # navigable index for subtree exports
manifest.json # source metadata and export metadata
pages/
page-title.md # page or issue content as Markdown
tables/
section-table.csv # extracted tables as CSV
images/
image-001.png # inline images downloaded from the host
attachments/
original-file.pdf # page attachments when export is enabled
- Markdown -- main page or issue content converted from Confluence/Jira HTML.
- CSV -- extracted tables, one file per table.
- Images -- inline images downloaded from the host, deduplicated when enabled.
- Attachments -- page attachments up to the configured size limit.
- Comments -- page and inline (fragment) comments with authors, resolved status, and replies, embedded in Markdown between
confx:commentsmarkers and saved ascomments.json/inline-comments.json. - manifest.json -- source host, page ID, title, version, space, labels, export timestamp.
- Markdown + attachments -- creates Markdown pages, keeps tables in Markdown, downloads inline images, and includes page attachments when enabled.
- Markdown only -- creates Markdown pages and keeps tables in Markdown. Images and file attachments are not downloaded.
- CSV tables only -- creates CSV files for real user tables only. Markdown pages, images, attachments, and Confluence UI tables are excluded.
Feature screenshots
- Page export: export the current Confluence page as Markdown, CSV tables, images, comments, and a manifest.
- Space export: export all pages in a Confluence space when the current page context supports it.
- Subtree export: recursively export child pages and generate a navigable
README.md. - Picker: select a block on the page, preview it, and export only that block.
- Watch (experimental): track saved snapshots and inspect changes over time.
- Jira support: extract useful Jira issue content when the current tab is a Jira issue.
- Rule engine: configure section/table extraction rules for Confluence page conventions.
ConfX injects a content script on HTTP/HTTPS pages, but the floating Open in ConfX button is shown only when the page is detected as Confluence or Jira.
- Confluence detection prefers Atlassian metadata such as
ajs-page-id, then known Confluence URL routes. - Jira detection prefers
ajs-issue-key, then known Jira issue routes such as/browse/KEY-123. - Generic paths that merely contain values like
ABC-123are ignored to reduce false positives.
The button can be disabled independently for Confluence and Jira in Settings. The Settings panel also includes current-tab diagnostics showing detected kind, host, source, and button visibility state.
Watch subscriptions are stored locally in the browser profile. They are not sent to a remote service.
- Storage area:
chrome.storage.local. - Troubleshooting key:
cx.subscriptions.v1. - Each subscription stores a baseline snapshot plus a bounded local check history.
- Accepting changes updates the baseline snapshot but keeps recent check history.
When a check finds added or changed pages, ConfX can export the selected changed pages into a single ZIP that includes a watch-diff.json report. Removed pages are reported but not fetched for content export.
ConfX reads Confluence and Jira content through your active browser session cookies. A separate Confluence or Jira API token is not required.
Development builds currently request broad HTTP/HTTPS host access (
https://*/*,http://*/*). Install only trusted release artifacts and always verify checksums againstSHA256SUMSfrom the same GitHub Release.
Chrome Web Store publishing is intentionally out of scope for now. GitHub Releases are the distribution channel for the current release flow.
- Download
confx-chrome.zipandSHA256SUMSfrom the same release. - Verify the checksum:
sha256sum -c SHA256SUMS --ignore-missing. - Unzip
confx-chrome.zip. - Open
chrome://extensions. - Enable Developer Mode (toggle in the top-right corner).
- Click Load unpacked.
- Select the extracted folder that contains
manifest.jsonat its root.
- Download
confx-yandex.crxandSHA256SUMSfrom the same release. - Verify the checksum:
sha256sum -c SHA256SUMS --ignore-missing. - Open
browser://tune. - Drag
confx-yandex.crxinto the browser window.
- Open a Confluence page in your browser.
- Open the ConfX side panel (click the ConfX icon in the toolbar).
- Choose an extraction preset if needed.
- Click Export.
- Save the generated ZIP file.
- Open a Confluence page in your browser.
- Open the ConfX side panel and click Launch picker.
- Hover over the page to highlight the target block. Use
[/]to adjust the selection level. PressEscto cancel. - Click the block to select it.
- In the side panel, click Export block.
- Save the generated ZIP file.
- Open a Jira issue in your browser.
- Open the ConfX side panel (click the ConfX icon in the toolbar).
- Click Export.
- Save the generated ZIP file.
- Node.js 22 (matches the CI workflow).
- npm (bundled with Node.js).
- Chrome / Chromium -- for Chrome local builds and smoke checks.
- Yandex Browser -- for Yandex CRX smoke checks (optional).
- OpenSSL -- for local Yandex signing key generation (optional).
npm ci
npm run devChrome development build:
npm run build:chromeLoad dist/ from chrome://extensions with Developer Mode enabled.
Yandex development build requires a local signing key:
npm run gen:key:yandex
npm run release:yandexThe generated local key is only for development unless your team explicitly promotes it to the release key.
The release workflow builds both artifacts and publishes them as workflow artifacts. For v* tags it also attaches them to a GitHub Release.
Required secret and release variable:
| Name | Type | Purpose |
|---|---|---|
YANDEX_CRX_PRIVATE_KEY_B64 |
GitHub Actions secret | Base64-encoded private signing key for confx-yandex.crx. |
YANDEX_EXTENSION_ID |
Workflow env / secret override | Expected Yandex extension ID. |
The workflow writes the private key to a temporary file, uses it only for the Yandex build, validates the computed extension ID, and removes the file at the end of the job.
| Capability | Chrome / Chromium | Yandex Browser |
|---|---|---|
| Manifest V3 | Supported | Supported |
| Primary UI | Side panel | Popup fallback / compatible extension UI |
side_panel manifest entry |
Present | Present for compatibility |
action.default_popup |
Not included | Included in the Yandex target |
| Direct GitHub artifact | confx-chrome.zip |
confx-yandex.crx |
| Extension ID stability | Managed by install channel | Depends on the Yandex signing key |
npm ci
npm run typecheck
npm test
npm run build:chromenpm run release:allrelease:all requires YANDEX_KEY_PATH or a local keys/yandex.pem file.
Chrome ZIP root check:
python3 - <<'PY'
import zipfile
with zipfile.ZipFile('release/confx-chrome.zip') as archive:
assert 'manifest.json' in archive.namelist()
PYManual browser smoke checks before a public release:
- Load
dist/in Chrome and verify the side panel at 320-360px and 480px. - Install
release/confx-yandex.crxin Yandex Browser and verify the popup fallback opens. - Export one Confluence page and confirm the ZIP contains Markdown and manifest files.
| Problem | Check |
|---|---|
| Chrome ZIP does not install | Ensure the archive was extracted and manifest.json is in the selected folder root. |
| Yandex release fails | Check YANDEX_KEY_PATH or local keys/yandex.pem. |
| Yandex extension ID changed | Verify the signing key and YANDEX_EXTENSION_ID. A different key creates a different extension identity. |
| Side panel looks clipped | Use the latest release; narrow Chrome side panel layouts are explicitly supported. |
| Export fails on a page | Confirm you are logged in to Confluence/Jira in the same browser profile. |
| Images or attachments are missing | Confirm the browser session can open those files directly. Auth, CORS, file size limits, or expired sessions can prevent downloads. |
| Floating button appears on the wrong site | Open Settings and check current-tab diagnostics. Disable Confluence/Jira buttons if you do not want page-level controls. |
src/
manifest.ts # MV3 manifest generated by CRXJS
background/ # service worker and browser UI routing
content/ # picker and injected page controls
sidepanel/ # React side panel and popup UI
options/ # rule/settings editor
viewer/ # Markdown viewer page
lib/ # extraction pipeline
types/ # shared TypeScript models
scripts/
zip-chrome.mjs # Chrome ZIP artifact
pack-yandex.mjs # signed Yandex CRX artifact
checksums.mjs # SHA256SUMS generation
ConfX is active and maintained as a browser extension release flow. Chrome Web Store publishing is planned separately and is not part of the current automation.












