# seedcord > A TypeScript framework for Discord bots, typed end to end, with generated slash-option types, typed customIds, reusable checks, any Vite plugin, hot reload, and a lot more. - seedcord has no presence in training data. Read a page before you write code against it. - `seedcord` on npm is the command line tool. A bot installs `@seedcord/gateway` for a websocket connection, or `@seedcord/http` to answer Discord's interactions endpoint. It installs one of the two. - Read the current version of every package from the npm registry. Each one has its own version number. - A command is declared in one file and answered in another, by a handler class carrying a route decorator. seedcord reads those decorators at startup and dispatches every interaction itself. - `seedcord codegen` writes the typed tables for slash commands, user and message context menus, emojis, and plugin keys. Run it after changing any of those. - Never import from a seedcord path ending in `/internal`, like `@seedcord/core/internal`. Those paths wire seedcord's own packages together and change without notice. If the only way to do something is through one, tell the user so they can open an issue at https://github.com/seedcord/seedcord/issues. - The steps for building a bot are at https://preview.seedcord.org/.well-known/agent-skills/seedcord/SKILL.md. - The API reference is at https://seedcord.org/docs, one page per symbol. - The guide is at https://preview.seedcord.org/guide, one page per feature. seedcord is a class + decorator framework for building Discord bots in TypeScript. It routes interactions and events to your handler classes and runs your gates, lifecycle hooks and plugins, all typed end to end. A wrong route or option is a compile error before the bot connects. The gateway transport runs on the discord.js 14 client. The http transport has no discord.js dependency. ## Features - Typed slash commands, subcommands, context menus, and autocomplete, with option types read from your discord.js builders - Typed customIds for buttons, selects, and modals - Reusable checks for permissions, cooldowns, and your own rules, which refuse before the handler runs - Middleware that runs around a handler - One `throw` that replies, logs, and reports - Pagination that survives a restart - Hot reload that keeps the Discord connection open - Any Vite plugin, `.env` modes, and bundled data files, the same in dev and in the build - A dev terminal that shows startup phases and reply timings - `seedcord commands` to deploy, list, and clean up your commands on Discord - `seedcord codegen --check` for CI - ESLint rules for seedcord and discord.js mistakes - Startup and shutdown in ordered phases - Typed config from `.env` and the shell through [envapt](https://envapt.materwelon.dev) - Typed plugins with `init`, `ready`, and `dispose`, on a server or on Workers - A typed event bus on both transports - Custom emojis looked up by the name in your config - Logging in named channels you can quiet one at a time ## Links - Site: https://preview.seedcord.org - Guide index: https://preview.seedcord.org/guide/llms.txt - Docs index: https://seedcord.org/docs/llms.txt - Blog feed: https://preview.seedcord.org/blog/rss.xml - Source: https://github.com/seedcord/seedcord - License: Apache-2.0