fix(deps): pin kysely to 0.28.17 to unbreak rolldown SSR build
@better-auth/kysely-adapter@1.6.13 imports
DEFAULT_MIGRATION_LOCK_TABLEandDEFAULT_MIGRATION_TABLEfrom the rootkyselypackage, but kysely@0.29 moved those exports tokysely/migration(the root only re-exports type-level error stubs). The adapter’s prebuiltbun/node/d1-sqlite-dialectbundles still reach for the root path, so rolldown’s strict missing-export check fails the SSR build (apps/core) and the Docker image build.Pin kysely to 0.28.17 — the latest 0.28 line, still within the adapter’s
^0.28.17 || ^0.29.0peer range — via the pnpm-workspace override. Drizzle and better-auth accept any kysely, so this is a non-breaking change for the rest of the tree.
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
MX Space Core
AI-powered CMS Core for personal blogs, creator homepages & content websites.
Overview
MX Space Core is a headless CMS server built with NestJS, PostgreSQL, and Redis. Beyond standard blog features (posts, pages, notes, comments, categories, feeds, search), it ships with a full AI content workflow — summary generation, multi-language translation, comment moderation, and writing assistance — powered by pluggable LLM providers.
Key Features
x-api-keyheader)Tech Stack
apps/admin)Monorepo Structure
Core Architecture (
apps/core/src/)Quick Start
Prerequisites
Local Development
The API is available at
http://localhost:2333. In development mode, routes have no/api/v2prefix.Docker Deployment
The fastest way to get a production instance running:
Or use the prebuilt image directly:
The image supports
linux/amd64andlinux/arm64.Available Commands
Run from the repository root:
pnpm devpnpm buildpnpm bundlepnpm testpnpm lintpnpm typecheckpnpm formatRunning Tests
Environment Variables
JWT_SECRETALLOWED_ORIGINSPG_URLPG_HOST127.0.0.1PG_PORT5432PG_USERmxPG_PASSWORDmxPG_DATABASEmx_corePG_MAX_POOL_SIZE20PG_SSLfalseREDIS_HOSTlocalhostREDIS_PORT6379REDIS_PASSWORDSNOWFLAKE_WORKER_IDENCRYPT_ENABLEfalseENCRYPT_KEYTHROTTLE_TTL10THROTTLE_LIMIT100PORT2333TZAsia/ShanghaiDISABLE_CACHEfalseConfiguration can also be provided via CLI arguments or YAML files. See
apps/core/src/app.config.tsfor the full config schema.API Response Format
Every successful JSON response has the shape
{ data, meta? }; every error has the shape{ error: { code, message, details? } }.T→{ data: T }(via globalResponseInterceptor).withMeta(value, meta)(see~/common/response/envelope.types) →{ data, meta }. Detection is by an internalSymbol, so returning a literal{ data, ... }is double-wrapped — CI enforces this viascripts/check-controller-response-envelope.ts.undefined→204 No Content.@HTTPDecorators.RawResponse— opt out of the envelope/casing pipeline for non-JSON (streams, HTML, RSS, redirects).Case conversion — code is camelCase end-to-end (DTOs, services, Drizzle column TS props). Incoming requests are normalized to camelCase by
RequestCaseNormalizationPipe; outgoingdata/metaare converted back to snake_case at the wire boundary. The wire format stays snake_case (e.g.,createdAt→created_at). Use@BypassCaseTransform([paths])to keep free-form JSON subtrees untouched.Errors — throw
AppExceptionsubclasses (BizException,CannotFindException, etc.) with a stableSCREAMING_SNAKEcode;AppExceptionFiltermaps them to the unified error envelope.Upgrading
v11 → v12
v12 migrates the database from MongoDB to PostgreSQL. This is a hard cutover: all data must be migrated through the provided CLI before starting the new version. See Upgrading to v12.
v10 → v11
v11 refactors the Aggregate API:
categoriesandpageMetaare removed fromGET /aggregate; a newGET /aggregate/siteendpoint is added for lightweight site metadata. See Upgrading to v11.v9 → v10
v10 includes a breaking auth system refactor. See Upgrading to v10.
Related Projects
apps/admin@mx-admin/admin— React 19 admin dashboard (in-repo, built into the server release)mxsCLI for posts/notes/pages/config (OIDC device auth)License
apps/— AGPLv3 with Additional TermsSee LICENSE for full details.