Drop-in discord.js Support
Pass a channel, get HTML back. Handles message fetching, role resolution, and member colors automatically.
Fully Self-Contained
Output is a single HTML file with all CSS and JS baked in. No external fonts, scripts, or stylesheets. Just Discord CDN for media.
Everything Discord Has
Embeds, polls, voice messages, threads, slash commands, reactions, stickers, components (V1 + V2), and 24+ syntax-highlighted languages.
Dark & Light Themes
Pixel-perfect Discord themes with full CSS variable support. Inject your own styles or swap out the font.
Interactive Features
Message search, date navigation, user stats, image lightbox, collapsible embeds, copy buttons, and pagination.
Standalone Mode
Don't use discord.js? Pass your own data to generateTranscriptHtml and get the same output. Works with any data source.
A few lines of code is all you need
import { createTranscript } from "@getoeteter/discord-transcripts";
const result = await createTranscript(channel, {
theme: "dark",
enableSearch: true,
});
await interaction.editReply({
files: [{ attachment: result.buffer, name: result.filename }],
});