Tiny, minimal dependency and embeddable library implementing Discord media server protocols, built on Netty, aiming for high performance and reduced GC usage.
Koe follows semantic versioning. API/ABI stability is defined as follows:
- 🟢 Public API (all packages except
.experimentaland.internal) is guaranteed to be stable and is only extended when needed. Minor and patch releases preserve binary compatibility for the public API. - 🚧 Experimental API (
moe.kyokobot.koe.experimental) - APIs in this package are subject to change or removal in any minor release (e.g. 3.1, 3.2). Use only if you can tolerate breaking changes between minor versions. - 🔒 Internal API (
moe.kyokobot.koe.internal) - For internal use only. Not part of the public API; may change or break in any release, including patch releases.
Example:
repositories {
maven { url 'https://maven.lavalink.dev/releases' }
// maven { url 'https://maven.lavalink.dev/snapshots' }
}
// ...
dependencies {
implementation 'moe.kyokobot.koe:core:VERSION'
}VERSION can be either a tag or a git commit hash (first 9 characters).
- Netty
- slf4j
- Java 11+
- Supports voice gateway v4, v5 and v8.
- Easily extendable for stuff such as support for codecs other than Opus or video sending, if Discord ever decides to support it on bots.
- Experimental video support.
- Basic RTCP support for measuring packet loss and other stuff.
- Encoding - Koe only implements voice server communication, not voice handling itself, so it only accepts Opus frames and you have set up an encoder yourself, use lavaplayer, libav/ffmpeg or anything else.
- Voice receiving support - it's not supported by Discord anyway, although someone could implement it by registering hooks.
Lavalink team for being the main consumer of Koe and providing most feedback and improvements. @TheAkio for name idea.
Koe includes modified/stripped-down parts based on following open-source projects:
- tweetnacl-java (Poly1305, SecretBox)
- nanojson (modified for bytebuf support, changed the API a bit and etc.)