{"id":49727396,"url":"https://github.com/spraxium/spraxium","last_synced_at":"2026-06-12T00:00:33.816Z","repository":{"id":352727776,"uuid":"1185581887","full_name":"spraxium/spraxium","owner":"spraxium","description":"A TypeScript framework for building production-grade Discord bots.","archived":false,"fork":false,"pushed_at":"2026-05-26T20:15:48.000Z","size":1948,"stargazers_count":26,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-26T22:11:03.887Z","etag":null,"topics":["discord","discord-bot","discord-framework","discord-js","discordbot","discordjs","framework","spacelaxy","spraxium"],"latest_commit_sha":null,"homepage":"https://spraxium.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spraxium.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["henrythierrydev"],"open_collective":"spraxium"}},"created_at":"2026-03-18T18:26:10.000Z","updated_at":"2026-05-26T20:15:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/spraxium/spraxium","commit_stats":null,"previous_names":["spraxium/spraxium"],"tags_count":42,"template":false,"template_full_name":null,"purl":"pkg:github/spraxium/spraxium","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spraxium%2Fspraxium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spraxium%2Fspraxium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spraxium%2Fspraxium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spraxium%2Fspraxium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spraxium","download_url":"https://codeload.github.com/spraxium/spraxium/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spraxium%2Fspraxium/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34222709,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["discord","discord-bot","discord-framework","discord-js","discordbot","discordjs","framework","spacelaxy","spraxium"],"created_at":"2026-05-09T05:13:31.418Z","updated_at":"2026-06-12T00:00:33.796Z","avatar_url":"https://github.com/spraxium.png","language":"TypeScript","funding_links":["https://github.com/sponsors/henrythierrydev","https://opencollective.com/spraxium"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/assets/spraxium-logo.png\" alt=\"Spraxium\" height=\"100\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  A TypeScript framework for building production-grade Discord bots.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/typescript-5.7-3178c6?style=flat-square\" alt=\"TypeScript\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/discord.js-14-5865f2?style=flat-square\" alt=\"discord.js\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-Apache_2.0-green?style=flat-square\" alt=\"License\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/node-20+-339933?style=flat-square\" alt=\"Node.js\" /\u003e\n\u003c/p\u003e\n\n## What is Spraxium\n\nSpraxium is a modular TypeScript framework built on top of discord.js. It applies the same architectural patterns found in backend frameworks, such as dependency injection, decorator-based routing, and lifecycle hooks, to Discord bot development.\n\nMost bots become hard to maintain as they grow. Spraxium gives you a structured foundation from day one: modules group related functionality, services are injected where needed, and concerns like scheduling, internationalization, and HTTP APIs are handled by purpose-built packages that integrate into the application lifecycle without any manual wiring.\n\nThe framework is a monorepo of opt-in packages. You include only what your bot needs and configure everything through a single typed file. There is no hidden runtime magic; every behavior is explicit and traceable.\n\n## Architecture\n\nA Spraxium application is composed of modules. Each module declares its providers and the framework resolves the dependency graph at boot time, instantiating services in the correct order. Lifecycle hooks (`onBoot`, `onReady`, `onShutdown`) give each service a well-defined entry point tied to the Discord client connection state.\n\nPackages like `@spraxium/http` or `@spraxium/schedule` plug into the config layer via a `define*` function in `spraxium.config.ts`. This keeps configuration co-located and type-safe without requiring separate bootstrap code.\n\n## Example Apps\n\nThe repository includes runnable example apps in [apps/](./apps/). These are the same code examples we use locally to validate package behavior and integration flows. If the documentation is not enough for a specific scenario, start from one of these apps as a base and adapt it to your project.\n\n## Packages\n\n| Package | Description |\n|---|---|\n| `@spraxium/core` | Application factory, DI container, lifecycle hooks, and the slash and prefix command pipeline |\n| `@spraxium/common` | Shared decorators (`@Injectable`, `@Module`, `@Global`) and base interfaces used across all packages |\n| `@spraxium/components` | Decorator-based system for Discord UI components: buttons, select menus, modals, embeds, and V2 container layouts |\n| `@spraxium/http` | Decorator-based REST API layer over Hono that exposes bot state through a secured HTTP interface with guards, rate limiting, and CORS |\n| `@spraxium/i18n` | Internationalization with variable interpolation, plural resolution via `Intl.PluralRules`, and locale fallback |\n| `@spraxium/schedule` | Cron-based job scheduler with an optional Redis driver for distributed and sharded environments |\n| `@spraxium/signal` | Async unidirectional event signals dispatched through Discord webhooks with schema validation |\n| `@spraxium/signal-client` | Lightweight envelope builder for the signal protocol with zero external dependencies, usable outside a Spraxium application |\n| `@spraxium/env` | Typed environment variable validation with clear errors at startup |\n| `@spraxium/logger` | Centralized structured logging system with table-based output and configurable transports |\n| `@spraxium/webhook` | Decorator-based Discord webhook management with a rich send API for embeds and message components |\n| `@spraxium/cli` | Project scaffolding, module generation, and developer tooling via the `spraxium` CLI |\n\n## Sharding\n\nSpraxium has first-class support for Discord sharding. The `@spraxium/http` package integrates with `ShardingManager` directly. When sharding is enabled, the HTTP server boots on the manager process and communicates with individual shards through the bridge layer, giving API consumers a unified view of bot state regardless of shard topology.\n\n## Requirements\n\nNode.js 20 or higher, TypeScript 5.7 or higher, discord.js 14, and `experimentalDecorators` with `emitDecoratorMetadata` enabled in `tsconfig.json`.\n\n## License\n\nApache 2.0, see [LICENSE](./LICENSE).\n\n\u003cp align=\"center\"\u003e\n  Built by \u003ca href=\"https://github.com/spacelaxy\"\u003e\u003cimg src=\".github/assets/spacelaxy_logo.jpg\" alt=\"Spacelaxy\" height=\"20\" style=\"vertical-align:middle;\" /\u003e\u003c/a\u003e \u003cstrong\u003eSpacelaxy\u003c/strong\u003e\n\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspraxium%2Fspraxium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspraxium%2Fspraxium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspraxium%2Fspraxium/lists"}