slack-archive
v1.6.1
Published
Create static HTML archives for your Slack workspaces
Downloads
24
Readme
Export your Slack workspace as static HTML
Alright, so you want to export all your messages on Slack. You want them in a format that you can still enjoy in 20 years. This tool will help you do that.
- Completely static: The generated files are pure HTML and will still work in 50 years.
- Everything you care about: This tool downloads messages, files, and avatars.
- Nothing you do not care about: Choose exactly which channels and DMs to download.
- All types of conversations: We'll fetch public channels, private channels, DMs, and multi-person DMs.
- Incremental backups: If you already have local data, we'll extend it - no need to download existing stuff again.
- JSON included: All data is also stored as JSON, so you can consume it with other tools later.
- No cloud, free: Do all of this for free, without giving anyone your information.
- Basic search: Offers basic search functionality.
Using it
- Do you already have a user token for your workspace? If not, read on below on how to get a token.
- Make sure you have
node
andnpm
installed, ideally something newer than Node v14. - Run
slack-archive
, which will interactively guide you through the options.
npx slack-archive
Parameters
--automatic: Don't prompt and automatically fetch all messages from all channels.
--channel-types Comma-separated list of channel types to fetch messages from.
(public_channel, private_channel, mpim, im)
--no-backup: Don't create backups. Not recommended.
--no-search: Don't create a search file, saving disk space.
--no-file-download: Don't download files.
--no-slack-connect: Don't connect to Slack, just generate HTML from local data.
--force-html-generation: Force regeneration of HTML files. Useful after slack-archive upgrades.
Getting a token
In order to download messages from private channels and direct messages, we will need a "user token". Slack uses the token to identify what permissions it'll give this app. We used to be able to just copy a token out of your Slack app, but now, we'll need to create a custom app and jump through a few hoops.
This will be mostly painless, I promise.
1) Make a custom app
Head over to https://api.slack.com/apps and Create New App
. Select From scratch
.
Give it a name and choose the workspace you'd like to export.
Then, from the Features
menu on the left, select OAuth & Permission
.
As a redirect URL, enter something random that doesn't actually exist, or a domain you control. For instace:
https://notarealurl.com/
(Note that redirects will take a very long time if using a domain that doesn't actually exist)
Then, add the following User Token Scopes
:
- channels:history
- channels:read
- files:read
- groups:history
- groups:read
- im:history
- im:read
- mpim:history
- mpim:read
- remote_files:read
- users:read
Finally, head back to Basic Information
and make a note of your app's client
id
and client secret
. We'll need both later.
2) Authorize
Make sure you have your Slack workspace URL
(aka team name) and your app's client id
.
Then, in a browser, open this URL - replacing {your-team-name}
and {your-client-id}
with your values.
https://{your-team-name}.slack.com/oauth/authorize?client_id={your-client-id}&scope=client
Confirm everything until Slack sends you to the mentioned non-existent URL. Look at your browser's address bar - it should contain an URL that looks like this:
https://notarealurl.com/?code={code}&state=
Copy everything between ?code=
and &state
. This is your code
. We'll need it in the
next step.
Next, we'll exchange your code for a token. To do so, we'll also need your client secret
from the first step when we created your app. In a browser, open this URL - replacing
{your-team-name}
, {your-client-id}
, {your-code}
and {your-client-secret}
with
your values.
https://{your-team-name}.slack.com/api/oauth.access?client_id={your-client-id}&client_secret={your-client-secret}&code={your-code}"
Your browser should now be returning some JSON including a token. Make a note of it - that's what we'll use.