Skip to main content

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. Command-line interface 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 ~2 MB

What is Stoat?

Stoat (formerly Revolt) is an open-source chat platform — like Discord, but community-owned. You can use the official hosted service or run it on your own server. Ferry moves your entire Discord server there.

New to Stoat? Create a free account or self-host your own instance.


How It Works

Step 1: Enter your credentials

Launch Ferry. You'll need four things:

  • Discord user token + server ID — a token is a secret key that lets Ferry access your account. Ferry shows you how to find both.
  • Stoat API URL — the web address Ferry uses to talk to Stoat. Use https://api.stoat.chat for the official service, or your own domain if you run your own Stoat instance.
  • Stoat user token — a secret key your browser saves when you log in to Stoat. No bot or app creation needed — you just copy it from your browser. The step-by-step guide shows exactly where to find it.

Step 2: Ferry exports your server automatically

Ferry downloads and runs DiscordChatExporter behind the scenes — no manual steps.

Step 3: Click Migrate

Messages, channels, roles, emoji, and attachments migrate to Stoat. Each message shows the original author's name and avatar. Pins are preserved.

Already have DiscordChatExporter (DCE) exports? Ferry also supports offline mode — just point it at your export folder.


How long does it take?

Ferry processes multiple channels in parallel (configurable, default 3 concurrent). Typical throughput: ~3-5x faster than sequential. Stoat limits how fast data can be sent to protect the service, which sets the overall pace. That means:

Messages Estimated time
1,000 ~6 minutes
10,000 ~1 hour
100,000 ~8-10 hours

Ferry can pause and resume — close it anytime, pick up where you left off.


What gets migrated?

Discord feature What happens
Text channels Recreated on Stoat with the same names and topics
Categories Recreated — channels grouped the same way
Roles Recreated with colours and Discord permissions translated to Stoat equivalents
Channel permissions Per-role and @everyone overrides migrated
NSFW channels NSFW flag preserved
Messages + authors Each message shows the original author's name and avatar
File attachments Uploaded to Stoat's file storage
Custom emoji Uploaded (up to 100)
Pinned messages Re-pinned in the correct channels
Replies Reply links preserved between messages
Reactions Shown as text summary by default, or applied via API
Embeds Flattened to Stoat format with thumbnails and images uploaded
Polls Rendered as formatted text
Threads Converted to text channels, merged into parent, or archived as markdown — your choice
Forum posts Grouped into dedicated categories with an index channel
Voice channels Created, but may not work yet (known Stoat bug)
Stickers Image uploaded, or text fallback for animated/missing
Server banner Uploaded from Discord API when a Discord token is provided
Original timestamps Shown at the start of each message (e.g. *[2024-01-15 12:00 UTC]*)

Reliability features

Ferry is built to handle large migrations safely:

  • Pause and resume — close Ferry anytime, pick up where you left off
  • Parallel channel sends — processes multiple channels concurrently (3x–5x faster)
  • Incremental migration — only migrate new messages since the last completed run
  • Pre-creation review — summary and confirmation before anything is created on Stoat
  • Migration report — human-readable migration_report.md with a fidelity score
  • Dead-letter queue — failed messages tracked and retryable without re-running
  • Message splitting — messages over 2000 characters are split, not truncated
  • Migration lock — prevents two Ferry instances from targeting the same server
  • Circuit breaker — automatic backoff on API failures, no indefinite blocking

Detailed Guides


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

discord_ferry-2.0.2.tar.gz (91.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

discord_ferry-2.0.2-py3-none-any.whl (108.5 kB view details)

Uploaded Python 3

File details

Details for the file discord_ferry-2.0.2.tar.gz.

File metadata

  • Download URL: discord_ferry-2.0.2.tar.gz
  • Upload date:
  • Size: 91.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for discord_ferry-2.0.2.tar.gz
Algorithm Hash digest
SHA256 c7858892658ce638bfe470b6c6d584fc1c0053c0be77fede5074bf58d1987e4f
MD5 987e2d648b4245e3d983a223486bf012
BLAKE2b-256 3be837f0e1c3f9337711fd6e81ee378ed1e8a5129c2c1635dab8175afdf7335a

See more details on using hashes here.

Provenance

The following attestation bundles were made for discord_ferry-2.0.2.tar.gz:

Publisher: release.yml on nordscope-fi/Discord-stoat-ferry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file discord_ferry-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: discord_ferry-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 108.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for discord_ferry-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b1a39f851ba6da22e73a36cad796b15ca7be2c9bcfb387eb23c37104b48c7fcc
MD5 c3e1373629f1aa546e37f91946a13863
BLAKE2b-256 2bdff243e079853ef6a53616afcfa8942f572d0bf8462540f4fca89f12fc45d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for discord_ferry-2.0.2-py3-none-any.whl:

Publisher: release.yml on nordscope-fi/Discord-stoat-ferry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page