Twilight is, at heart, an ecosystem. These components of the ecosystem don't depend on each other in unnecessary ways, allowing you to pick and choose and combine the crates that you need for your use case. The crates for Twilight are categorised into three groups: the core crates, first-party crates, and third-party crates.
Twilight includes a few crates which are the "building blocks" to most peoples' use cases. You might not need them all, but generally speaking you'll need most of them. Most of them wrap Discord's various APIs.
- model: All of the structs, enums, and bitflags used by the Discord APIs.
- http: HTTP client supporting all of the documented features of Discord's HTTP API, with support for ratelimiting, proxying, and more.
- gateway: Clients supporting Discord's gateway API.
- cache: Definitions for implementating a cache. An in-process memory implementation is included.
- command-parser: Basic command parser for parsing commands and arguments out of messages.
- standby: Utility for asynchronously waiting for certain events, like a new message in a channel or a new reaction to a message.
There are some first-party crates maintained by the Twilight organization, but
not included in the core experience. These might be for more advanced or
specific use cases or clients for third-party services. An example of a
first-party crate is
twilight-lavalink, a Client for interacting with
Third-party crates are crates that aren't officially supported by the
Twilight organization, but are recognised by it. An example is
rarity-rs/permission-calculator, which has interfaces for things like
calculating the permissions for a member in a channel.