Migrate Discord servers to Stoat (formerly Revolt)
Project description
Discord Ferry
Migrate your Discord server to Stoat (formerly Revolt) — messages, channels, roles, emoji, attachments, and all.
One-click app for Windows and Mac. CLI for Linux. No coding required. Your data stays on your machine.
Download
| Platform | Download | Size |
|---|---|---|
| Windows | Ferry.exe | ~25 MB |
| macOS | Ferry.zip | ~25 MB |
| Linux / pip | pipx install discord-ferry |
— |
How It Works (3 Steps)
Step 1: Export your Discord server
Use DiscordChatExporter to save your server locally. Detailed guide
Step 2: Open Ferry and connect to your Stoat instance
Point Ferry at your export folder, enter your Stoat URL and token.
Step 3: Click Migrate
Your messages, channels, roles, emoji and attachments migrate to Stoat. Original authors show up via masquerade. Pins are preserved.
How long does it take?
About 1 message per second due to Stoat API rate limits. That means:
- 1,000 messages ~ 17 minutes
- 10,000 messages ~ 3 hours
- 100,000 messages ~ 28 hours (run overnight!)
Ferry can pause and resume — close it anytime, pick up where you left off.
What gets migrated?
| Feature | Status |
|---|---|
| Text channels | Supported |
| Categories | Supported |
| Roles (with colours) | Supported |
| Messages + author names | Supported (via masquerade) |
| File attachments | Supported |
| Custom emoji | Supported (up to 100) |
| Pinned messages | Supported |
| Replies | Supported |
| Reactions | Supported (without per-user attribution) |
| Embeds (with media) | Supported (thumbnails and images uploaded) |
| Polls | Supported (rendered as formatted text) |
| Threads | Supported (converted to text channels) |
| Forum posts | Supported (grouped into dedicated categories) |
| Voice channels | Partial (created but may not function — Stoat bug) |
| Stickers | Image upload with text fallback for Lottie/missing |
| Original timestamps | Shown in message text, not metadata |
Detailed Guides
- Exporting from Discord (step-by-step)
- Setting up your Stoat instance
- Your first migration (full walkthrough)
- GUI guide (every screen explained)
- CLI reference
- Migrating large servers (100k+ messages)
- Self-hosted tips
- Troubleshooting
Contributing
We welcome contributions! See CONTRIBUTING.md.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file discord_ferry-1.2.1.tar.gz.
File metadata
- Download URL: discord_ferry-1.2.1.tar.gz
- Upload date:
- Size: 91.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a94c92446a67a161c5372ba4ce28f77d6f1c36b8f87a533384e3d9c773c3c37
|
|
| MD5 |
731c0da7e18a4ccb02cd81049d7f8c61
|
|
| BLAKE2b-256 |
91845321dcbf2078bae017a0679537ef1851c8bd0ef01ff8a4c89d1fe00d7ce7
|
Provenance
The following attestation bundles were made for discord_ferry-1.2.1.tar.gz:
Publisher:
release.yml on psthubhorizon/Discord-stoat-ferry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
discord_ferry-1.2.1.tar.gz -
Subject digest:
7a94c92446a67a161c5372ba4ce28f77d6f1c36b8f87a533384e3d9c773c3c37 - Sigstore transparency entry: 1006583876
- Sigstore integration time:
-
Permalink:
psthubhorizon/Discord-stoat-ferry@4d8673b69e30c9554a5ad9462df1033a20d32a97 -
Branch / Tag:
refs/tags/v1.2.1 - Owner: https://github.com/psthubhorizon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4d8673b69e30c9554a5ad9462df1033a20d32a97 -
Trigger Event:
push
-
Statement type:
File details
Details for the file discord_ferry-1.2.1-py3-none-any.whl.
File metadata
- Download URL: discord_ferry-1.2.1-py3-none-any.whl
- Upload date:
- Size: 64.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
956b71c440abcae947b2c1525c5e4edd5f4ae5d43684b4c35936d57066c5c9be
|
|
| MD5 |
1ba87c83ebe894a9b0eb1fefceaef4e7
|
|
| BLAKE2b-256 |
1dc529bb7091c11d3ce2efde59800e5f72d80c9d455f2650c2000bc6ee05bc77
|
Provenance
The following attestation bundles were made for discord_ferry-1.2.1-py3-none-any.whl:
Publisher:
release.yml on psthubhorizon/Discord-stoat-ferry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
discord_ferry-1.2.1-py3-none-any.whl -
Subject digest:
956b71c440abcae947b2c1525c5e4edd5f4ae5d43684b4c35936d57066c5c9be - Sigstore transparency entry: 1006583880
- Sigstore integration time:
-
Permalink:
psthubhorizon/Discord-stoat-ferry@4d8673b69e30c9554a5ad9462df1033a20d32a97 -
Branch / Tag:
refs/tags/v1.2.1 - Owner: https://github.com/psthubhorizon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4d8673b69e30c9554a5ad9462df1033a20d32a97 -
Trigger Event:
push
-
Statement type: