finds.dev← search

// the find

Kraigie/nostrum

★ 727 · Elixir · MIT · updated Apr 2026

Elixir Discord Library

An Elixir library for building Discord bots on top of OTP, handling the REST API, gateway/websocket connections, voice, and local caching of Discord objects. It's for developers already comfortable with Elixir supervision trees who want a native BEAM implementation rather than shelling out to a JS or Python bot framework.

Cache backends are pluggable per subsystem (ETS, Mnesia, or noop) and the Mnesia option gives you multi-node distribution with live migration of a running bot between nodes — something most Discord libraries in any language don't attempt. Voice isn't a thin wrapper either: lib/nostrum/voice/crypto has separate AES, ChaCha, and Salsa implementations for Discord's various voice encryption modes. Documentation goes past generated API docs into real guides — manual sharding, gateway compression, multi-node setup, pluggable caching — which matters for a library whose main selling point is that distributed/OTP-native behavior.

The message cache only ships Mnesia and noop backends (lib/nostrum/cache/message_cache/), while every other cache — guild, member, user, presence — also gets an ETS option; if you want fast local caching without Mnesia's distributed-table overhead, messages are the one place you can't have it. Benchmarks only cover guild_cache and member_cache, so there's no published performance data for message or presence caching, which are typically the higher-throughput paths for an active bot. It's Elixir-only and effectively driven by a single maintainer judging by the tooling (a custom mix task just to keep API functions in sync with Discord's spec), so bus factor and the size of the surrounding ecosystem are real considerations versus discord.js or discord.py.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →