sanitizeConfigForClient
sanitizeConfigForClient(
config):object
Defined in: packages/core/src/config/sanitizeConfig.ts:134
Strips all non-serializable values from a VexConfig for safe passage
across RSC / JSON serialization boundaries (e.g. server layout →
client component).
Uses stripNonSerializable to recursively walk the entire config
tree, replacing functions, React components, class instances, and symbols
with null. Adding a new non-serializable property anywhere in the config
is handled automatically — no manual additions needed here.
The access config is always omitted from the client version — it is
never needed client-side and contains permission functions that cannot
be serialized.
Parameters
Section titled “Parameters”config
Section titled “config”The fully resolved server-side VexCMS config.
Returns
Section titled “Returns”A deeply sanitized copy safe to pass to client components.
admin:
object
Resolved admin panel configuration — always fully populated after defaults are applied.
admin.sidebar
Section titled “admin.sidebar”sidebar:
object
Navigation sidebar configuration — always present after defaults are applied.
admin.sidebar.collapsible
Section titled “admin.sidebar.collapsible”collapsible:
"none"|"offcanvas"|"icon"
How the sidebar in the admin panel collapses
admin.sidebar.side
Section titled “admin.sidebar.side”side:
"left"|"right"
Which side of the viewport the admin sidebar is anchored to.
optionalauth?:object
Auth adapter registered with this config. Auth collections are merged with user-defined collections — protected collections and locked fields are preserved during merge.
- VexAuthAdapter for the adapter interface
- better-auth/src!betterAuthAdapter for the Better Auth implementation
auth.collections
Section titled “auth.collections”
readonlycollections:object[]
Auth collections to register alongside user-defined collections.
These are merged into VexConfig.collections automatically by
defineConfig(). Each collection uses standard Vex field builders
(text(), relationship(), etc.) and may carry admin.readOnly
defaults on system fields.
auth.name
Section titled “auth.name”
readonlyname:string
Provider identifier for debugging and telemetry.
auth.userCollection
Section titled “auth.userCollection”
readonlyuserCollection:string
The slug of the collection that stores user documents.
Used by the admin panel to resolve user references and by auth-aware components to look up the current user collection.
basePath
Section titled “basePath”basePath:
string
URL prefix for all admin panel routes — always set after defaults are applied.
collections
Section titled “collections”collections:
object[]
All registered content collections — always an array after defaults are applied.
globals
Section titled “globals”globals:
object[]
Resolved global configs. Always present; defaults to [].
mediaCollections
Section titled “mediaCollections”mediaCollections:
object[]
Media collections — processed by storage adapters and stored separately
from user-defined collections. These appear in the admin panel under a
dedicated “Media” section. Each collection is tagged with
meta.storageAdapterName indicating which adapter owns it.
schema
Section titled “schema”schema:
object
Resolved schema generation configuration — always fully populated after defaults are applied.
schema.outputPath
Section titled “schema.outputPath”outputPath:
string
Path where vex.schema.ts is written. Always set after defaults are applied.
storage?
Section titled “storage?”
optionalstorage?:object
Storage adapters registered with this config. Processed media collections
from all adapters are available via mediaCollections.
storage.adapters
Section titled “storage.adapters”adapters:
object[]
Storage adapters configured for the project.
types:
object
types.outputPath
Section titled “types.outputPath”outputPath:
string
Path where vex.types.ts is written. Always set after defaults are applied.
Example
Section titled “Example”// In a Next.js server component (e.g. AdminLayout):import vexConfig from "~/convex/vex.config";import { sanitizeConfigForClient } from "@vexcms/core";
const clientConfig = sanitizeConfigForClient(vexConfig);return <AdminShell config={clientConfig} />;- ClientVexConfig for the sanitized type
- stripNonSerializable for the recursive sanitizer