slack-export-archive
v0.1.3
Published
Convert Slack export ZIPs into a searchable offline HTML archive.
Maintainers
Readme
What this does
Turns a Slack export ZIP into an offline, tamper-evident HTML archive that legal, compliance, and security teams can review without relying on Slack's UI.
What you get from Slack is:
- thousands of JSON files
- no search
- no context
- no guarantee you didn't miss something
What people actually need is:
- offline
- searchable
- deterministic
- audit-grade
This tool converts a Slack export ZIP into a self-contained HTML archive that you can open in any browser — with full-text search and zero runtime dependencies.
No servers. No JavaScript. No cloud.
What you get
- Offline HTML archive
Openindex.htmllocally. Works on air-gapped machines. - Full-text search (SQLite FTS5)
Search messages by keyword across all channels. - Deterministic output
Same input ZIP → same database → same HTML output.
Results are ordered predictably and reproducibly. - Stable message links
Every message has a permanent anchor. Search results deep-link directly to the exact message. - SQLite-first
The database is the source of truth. HTML is a render artifact. - Zero JavaScript required
Browsing and search results are static HTML. No client-side logic. No hidden behavior.
Who this is for
This tool is built for people who cannot rely on Slack's UI:
- Legal & compliance teams
- Security and incident response
- Internal audits and investigations
- Enterprise IT / eDiscovery
- Founders exporting Slack before shutdown
- Anyone who needs an offline, reviewable record
If you need a pretty chat app, this is not it.
If you need something you can defend in an audit, this is.
Quick start
# 1. Build the archive
npx slack-export-archive build <slack-export.zip> --out ./archive
# 2. Generate search results
npx slack-export-archive search ./archive/archive.sqlite --q "invoice feb" --out ./search-results/Open:
archive/index.html— browse conversationssearch-results/<query>.html— view search results
Everything works offline.
Guarantees (intentional constraints)
This tool intentionally does NOT:
- run a web server
- phone home
- execute client-side JavaScript
- mutate or "interpret" your data
- reorder results unpredictably
- depend on Slack APIs
These constraints are what make it safe to use in regulated environments.
Release smoke checks
Before tagging a release, run these manual checks:
- Validate —
npx slack-export-archive validate <real-export.zip>— exits 0, prints conversation counts. - Build —
npx slack-export-archive build <real-export.zip> --out ./out— producesout/archive.sqlite,out/index.html,out/conversations/*.html,out/report.json. - Search —
npx slack-export-archive search ./out/archive.sqlite --q "foo" --out ./search-results— producessearch-results/foo.htmlandsearch-results/search_report.json. - Anchor links — Open a search result HTML, click a result link — browser jumps to the correct message in the conversation page.
- Missing input —
npx slack-export-archive build missing.zip --out ./x— exits non-zero with clear "Failed to open ZIP" or "not found" message. - Empty query —
npx slack-export-archive search ./out/archive.sqlite --q "" --out ./x— exits non-zero with "Search query is required".
Packaging binaries (Windows/macOS/Linux)
Packaging requires Node 18.x because pkg targets node18-*. If you build under Node 22+, better-sqlite3 will be compiled for the wrong ABI and the packaged binary will fail at runtime.
Steps:
- Switch to Node 18 (e.g.
nvm use 18orvolta pin node@18). - Delete
node_modulesandpackage-lock.json. - Run
npm install. - Run
npm run pkg:build.
Binaries are written to dist/pkg/.
Status
v0.1.3 — current release
Phase 3A complete:
- SHA-256 tamper-evident manifest
- SQLite FTS5 full-text search
- Deterministic output
- Investigation Summary Report
- Offline HTML archive
The surface area is intentionally small.
License / Commercial use
This tool is available for purchase at slackexportarchive.com.
Commercial use requires a license. See LICENSE for terms.
If you need:
- a packaged binary
- enterprise support
- guaranteed long-term maintenance
- custom export handling
Contact: [email protected]
