A standalone tool for archiving Slack messages into a static site.
GitHub Actions can run the archive update daily and commit new output.
SLACK_TOKEN and CHANNELS_ALLOWLIST env varsupdate-archive.yml to a folder named .github/workflows/deploy-pages.yml to a folder named .github/workflows/CHANNELS_ALLOWLIST env var in update-archive.ymlSITE_BASE_URL env var in update-archive.yml (example: https://<org>.github.io/<repo>)SLACK_TOKENGitHub Actions./gradlew test
./gradlew --quiet updateChatArchive
Configuration (environment variables):
SLACK_TOKEN (required; Slack Bot token) ⚠️ warning: keep this secret!CHANNELS_ALLOWLIST (required; comma-separated channel names, e.g. #general,#random)OUTPUT_DIR (optional; relative path for site output, default docs)STATE_DIR (optional; relative path for cursor state, default state)LOOKBACK_DAYS (optional; how many days to re-fetch, default 1)SITE_BASE_URL (optional; base URL for sitemap/robots generation)Output:
docs/daily/<channel>/<YYYY>/<MM>/<DD>/index.htmldocs/daily/<channel>/index.htmldocs/index.htmlOUTPUT_DIR/assets/chat-archive.css (static file in the publishing/output repository, not generated by Java)/daily/fineract/2026/02/06/).@media (prefers-color-scheme: dark).Slack app setup:
xoxb-) into SLACK_TOKEN.CHANNELS_ALLOWLIST.Required Slack scopes:
channels:read (list public channels)channels:history (read public channel history)users:read (resolve user display names)Permalinks are resolved via chat.getPermalink. If Slack returns missing_scope, add the scope Slack reports and re-install the app.
GitHub Pages:
docs/ directory is intended for publishing via GitHub Pages.deploy-pages.yml deploys the docs/ directory.docs/robots.txt is always generated.docs/sitemap.xml is generated when SITE_BASE_URL is set.If you run this bot and archive data relevant to Fineract, please list your instance here. These also serve as working examples if you're looking for extra help installing the archiver.
See CONTRIBUTING.md for branch/PR workflow and validation checklist.
The original intent of this code was to archive every public Fineract chat message into a public, index-able, simple/static HTML website.
See LICENSE and NOTICE.