Vercel

Publishing your adapter

Package, version, and publish your community Chat SDK adapter to npm.

Package checklist

Before publishing, verify your package.json meets these requirements:

package.json
{
  "name": "chat-adapter-matrix",
  "version": "1.0.0",
  "type": "module",
  "main": "./dist/index.js",
  "module": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "import": "./dist/index.js"
    }
  },
  "files": ["dist"],
  "peerDependencies": {
    "chat": "^4.0.0"
  },
  "publishConfig": {
    "access": "public"
  },
  "keywords": ["chat-sdk", "chat-adapter", "matrix"],
  "license": "MIT"
}
FieldWhy it matters
"type": "module"ESM-only — matches the Chat SDK ecosystem
"files": ["dist"]Only publish compiled output, keeping the package lean
"exports"Explicit entry points for bundlers and Node.js
"peerDependencies"Consumers provide their own chat instance
"publishConfig"Required for scoped packages (@your-scope/chat-adapter-*)
"keywords"Include chat-sdk and chat-adapter for npm discoverability

Naming conventions

ConventionExampleWhen to use
Unscopedchat-adapter-matrixMost community adapters
Scoped@your-org/chat-adapter-matrixOptional — if you prefer publishing under your org's scope

The @chat-adapter/ npm scope is reserved for Vercel-maintained adapters. Do not publish under this scope.

Build and verify

Run a full build and verify everything compiles before publishing.

Terminal
# Build
npm run build

# Type-check
npm run typecheck

# Run tests
npm test

Inspect the package contents to make sure only dist/ is included:

Terminal
npm pack --dry-run

You should see output like:

dist/index.js
dist/index.d.ts
dist/index.js.map
package.json
README.md
LICENSE

If you see src/, node_modules/, or test files in the output, update your "files" field or add a .npmignore.

Versioning

Follow semver:

ChangeBumpExample
Bug fix, internal refactorpatch1.0.01.0.1
New feature, new export, new config optionminor1.0.01.1.0
Breaking change (removed export, changed signature)major1.0.02.0.0

When the Chat SDK releases a new major version, you'll need a major bump too if your adapter's peer dependency range changes.

Publish to npm

Terminal
npm publish

For scoped packages published for the first time:

Terminal
npm publish --access public

Peer dependency compatibility

Your adapter should declare chat as a peer dependency with a caret range:

{
  "peerDependencies": {
    "chat": "^4.0.0"
  }
}

This means your adapter works with any 4.x release. When the Chat SDK ships a new major version:

  1. Test your adapter against the new version
  2. Update the peer dependency range
  3. Publish a new major version of your adapter

Post-publish verification

After publishing, verify the package works for consumers:

Terminal
# Create a temp directory
mkdir /tmp/test-adapter && cd /tmp/test-adapter
npm init -y

# Install your adapter
npm install chat chat-adapter-matrix

# Verify the import works
node -e "import('chat-adapter-matrix').then(m => console.log(Object.keys(m)))"

You should see your exported symbols (createMatrixAdapter, MatrixAdapter, etc.).

Keeping your adapter up to date

  • Watch the Chat SDK changelog for new features and breaking changes
  • Run your test suite against new Chat SDK releases before they ship to catch compatibility issues early
  • When the Adapter interface adds new optional methods, consider implementing them to keep your adapter feature-complete