We are writing Dolt, the world's first and only version-controlled SQL
database. It's free and open source software, and we've been using Discord
to connect with our users for a little over 3 years. This blog is about why we picked Discord and
how we get the most out of it to support our customers and find new ones.
Why Discord for an open source project?
We aren't the open only source project using Discord. As a matter of fact, it's practically a
standard at this point. For a while Discord was keeping an active list of all the open-source
projects that have Discord servers, but eventually they stopped
updating their list, presumably because
there were so many projects using Discord they didn't really need to advertise how many there were
So Discord is a popular choice for connecting open-source projects with their user base. But why?
Why is it better than other methods of communication, like GitHub issues?
In our experience, this comes down to a few big factors:
- Immediacy. Talking to a person on a project in real time is just more satisfying than filing
an issue and waiting for a response. For open-ended conversations with a lot of back and forth,
it's also dramatically more effective.
- Community. People don't like to just talk to the maintainers of the project, they also want
to meet other users and swap stories about it. There are only 15 project maintainers on our
server, but hundreds of active users.
- Convenience. Because Discord is so popular as a general chat client, there's an excellent
chance that prospective users of your open-source project already have it installed. The fact
that it's heavily used in the video gaming world makes this an even better chance. They're
already running the client on their machine, so a single click on your website connects them to
- Free. Your users don't need to pay a monthly fee to chat with you. They click a link and it
just works. This is not true for other chat services cough Slack cough
All this adds up to a great solution for connecting with our users.
We still get plenty of GitHub issues directly, but a
majority of them originate on Discord now: our users show up there first, report an issue or ask a
question, and then we ask them to please also file a GitHub issue so we can track the problem more
Talking to our customers in the same place we talk to each other also has the added benefit of
increasing our customer focus. We mostly hang out in the back of the shop making our widgets, but
our customers are in the store with us, and we come up to the front when they ring the bell. They
feel real to us because we interact with them in real time, constantly. Their concerns aren't just
abstract requests sitting in a work queue or issue list, they're real problems experienced by real
people who we talk to and have a relationship with. This is a crucial difference which helps keep us
motivated and on target, and our customers appreciate it too.
Why Discord instead of Slack?
As for why we picked Discord over another live chat solution, like Slack, we
wrote a whole blog about that when we made the
choice. Just compare how the two solutions brand themselves.
If you think Discord would be a more fun experience based on these images, that was the impression
we got as well. Every UX decision makes Slack feel sterile, all business, while Discord emphasizes a
fun, laid back vibe at every turn. That matched how we think of our culture at DoltHub.
And there's also the install base to consider: plenty of people use Slack for work, but millions of
gamers use Discord for fun, and since there's a huge overlap between gamers and software engineers,
most of our potential customers already have it installed.
Managing your open source project's server
Getting started with Discord is really easy. I set ours up in under an hour, which is why I'm the
one with a crown next to my name. If you haven't set up a server yet, do it now so you're the one to
get this coveted flair.
After basic server setup, like getting a logo in place, you'll want to turn your attention to some
other practical matters.
Most Discord servers feature a bunch of different channels, which are basically separate threads of
conversation. There are lots of strategies for how to organize your server's channels, but here's
the approach we took.
- You definitely want an introductions channel, since that will be the landing channel for anybody
who receives a server invite (you can change this in server settings). People will often write a
paragraph of introduction about themselves. For a while we pinned these introductions, but
eventually there were too many to manage so now we treat it as transient.
- General is just what is sounds like, for conversations that don't have a particular topic in
- Product-specific channels for our various product offerings. That's what dolt, hosted-dolt,
data-bounties, etc. are. Each is a place for people to talk and get support for a particular
- Off-topic is a good release valve for the overly sociable -- it gives them a place to just hang
out and chat with people they meet on the server without feeling like they're annoying people
there to get something done.
In addition to these text channels, we also have a public voice channel where people can talk or
video chat in real time. It's rarely used, and your project would need to be really massive to
warrant having more than one public voice channel.
We use Discord both to talk to our customers and to talk to each other. Here's a peek behind the
curtain at what we talk about on our internal-only channels:
You can see that we follow the same basic philosophy with private channels that we do with public
ones. We divide things up by product area to keep discussions focused, which means people who don't
care about a topic can mute it most of the time. We also learned fairly early on that it's a bad
idea to have a public and private channel with the same name -- too easy to address the wrong
audience by mistake. That's why we have dolt-internal and other -internal channels, to make it
obvious who we're talking to.
We also have a private voice channel, but it's also used very infrequently. We use Discord voice
calls for private talks between team members as necessary, but whenever we have a big meeting we
tend to use Google Meet instead.
Customer support channels
Discord is our first line of customer support, and all paying customers get a private support
channel. We also give private channels to pretty much anybody who wants to talk about non-public
details of their use of the software. Here's some of them (customer names hidden to protect the
We use a naming scheme with the customer's name and our name, again to prevent any confusion about
who we're talking to.
As with non-paying users, these channels are usually the first place our customers come to ask
questions or report bugs. Any confirmed bugs or feature requests we can't get to right away we
usually have them convert to a GitHub issue so we can track it in one place.
The main thing you should care about when setting up your permissions on Discord to host an open
source server is two groups: project maintainers and everyone else. Discord makes this pretty easy
with roles and channel categories. Just create a role with all your project maintainers that has the
permissions you want (editing messages, deleting messages, etc.) and add your whole team to it. Ours
is called dolt-team.
Then give that role access to your private channel category, and any new private channels you create
in that category will automatically be visible to your team and nobody else. Discord has a catch-all
role called everyone that you can use to set what permissions new people joining the server should
have. Make sure that your public channel category has appropriate permissions for the everyone
role, and you should be all set for permission management.
When you're playing with roles and permissions, it's a good idea to use the handy view server as
role feature, which lets you view your server as if you're a member of that role. It's the best way
to make sure you didn't grant the wrong visibility or permissions to any channel. We made some dumb
mistakes when we were first learning how roles and permissions work, so better safe than sorry.
For our customer support channels, the number of outside users who should have access is usually
very limited (just a handful of people), so we don't bother creating roles for these channels. We
just add individual members to them as customers ask us to.
Discord servers also have a special admin role that has every permission, including being able to
create and delete channels, ban users, etc. We keep this role locked down to just a couple people on
the team, just to make mistakes less likely to occur from a stray click.
Useful plugins / bots
Discord has a very active plugin scene and a truly staggering number of bots you can install on your
server. A little Googling can turn up lists of popular bots, but it can be confusing to know where
to start. Most of these bots provide game-like or just-for-fun functionality and most of them you
won't want to let anywhere near your server. We haven't done much in the way of bots, but there are
a couple that we have found very helpful.
Dyno is a very powerful bot that has a ton of commands at its disposal for
managing roles, permissions, and other aspects of your server. We mostly use it to monitor our
introductions channel, where it notifies us when new people join the server so we can welcome
them. This happens many times a day, and it's a great way to let people know they're welcome and
where to ask questions. It's always better to be proactive and reach out to new members who might
have otherwise remained silent.
We treat Discord as ephemeral storage, and we want our users to treat it that way too. Anything that
needs to be preserved should find its way into GitHub issues or our documentation. But there's no
built-in Discord functionality to make messages expire after a certain amount of time, so many
people have written bots to do this. The one we use is called
DeleteBot, and it used to work well enough. The only trick
is that you have to give it permission on your channels, and put the words "DeleteBot" in your
Unfortunately, as of this writing DeleteBot seems to have been inoperable for the last several
months, and I can't find an equivalent bot that works. Given the legal risk associated with
indefinite message retention, we consider this a serious problem. Hopefully DeleteBot comes back
online or Discord themselves build support for explicit retention policies, like other tools in this
Customization and vanity options
You can customize the background graphics on your server's landing
page for 2
server boosts, which costs about $10 a month. We had this option enabled for a while, but our
impression is it doesn't really move the needle on server membership. People see the landing page
once, before they join the server, then never again.
If you are willing to spend more money, Discord will give you a custom invite
link, rather than
the normal 10 random letters and numbers. We are too cheap, I mean frugal, to pay for this perk, but
if your server is popular enough your members can pay for server boosts to unlock it for
you. Discord will give this to you for free if they decide your server is important enough, but it
seems like the threshold for "importance" as an open source project is pretty high in their eyes.
Discord has a feature called Community
that gets your server some extra features, including more metrics. We had this on for a while, but
to enable it you need to turn on media scanning (for adult content), which kept getting falsely
triggered when our members wanted to share screenshots or other innocuous content. In our opinion
the metrics aren't worth the extra friction, at least not at our current scale.
We've been lucky, and there are only two instances in 3 years of operation that we've had to kick or
ban abusive users. Maybe that's typical for open source project servers. But in any case, it's
important for the sake of inclusivity to be able to get rid of server members who are making others
miserable. Discord has built in commands to kick or ban such users, and Dyno
has even more expressive capabilities, like being able to mute people for a fixed duration to give
them a time-out. We've never found that necessary, since our server isn't so busy that a simple ban
isn't good enough.
Results and discussion
In a little over three years of running our server, we've had 1,894 people join the server, about
half of whom were active in the last 30 days.
Is this good for an open source project? We don't really know, but compared to the number of people
who have starred our GitHib project, currently about 15.5k, it
seems like a pretty good conversion rate.
We advertise our server on our main site, on our GitHub
README, and at the bottom of every blog we write (3x a week). Of
our currently paying customers, a majority first made contact on Discord. We don't have a
counterfactual experiment where we weren't running a Discord server the last three years, but it's
our strong impression that Discord is a very rich generator for sales leads. Customers who get deep
enough into the product to buy our paid offerings tend to want to talk to us, and Discord makes it
very easy and low-pressure for them to do so.
Discord is a vital part of our operational platform at DoltHub, both for internal comms and
communicating with customers. The ability for new users of our software to find us and talk to us in
real time is great for them and very gratifying for us. There's nothing better than meeting a new
customer and shipping them a bug fix in the same day, which in our experience happens at least five
times as often as them going to the trouble to file a GitHub issue. And since we need an internal
chat server anyway, hosting customer chat channels there as well is a really easy choice.
Have questions about Discord server management or Dolt? Join us on our
server to talk to our engineering team and meet Dolt users. See you