# seedcord > A TypeScript framework for Discord bots, typed end to end, with generated slash-option types, typed customIds, reusable checks, 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://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://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 - Option types generated from your discord.js builders - Typed slash commands, subcommands, context menus, autocomplete - A typed customId codec for buttons, selects, and modals - Gates that refuse before the handler runs - One `throw` that replies, logs, and reports - Middlewares that run around your handler - A typed pub/sub bus, on both transports - The same handlers on both gateway and http - Vite HMR that holds the Discord connection - A dev terminal that shows startup phases and reply timings - Startup and shutdown that run in ordered phases - Pagination that survives a restart - Typed plugins with `init`, `ready`, and `dispose` - and a lot more... ## Links - Site: https://seedcord.org - Guide index: https://seedcord.org/guide/llms.txt - Docs index: https://seedcord.org/docs/llms.txt - Source: https://github.com/seedcord/seedcord - License: Apache-2.0