npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@thebcms/medusa-plugin

v0.1.2

Published

BCMS (https://thebcms.com) integration for Medusa v2 - link CMS entries to products and serve them through Medusa's admin and storefront APIs.

Readme

@thebcms/medusa-plugin

Medusa v2 plugin for BCMS.

Link BCMS entries to products by slot (e.g. rich_description, recommended_blogs), with per-slot template allowlists in admin, and serve resolved content through store API routes.

Requirements

  • Medusa ^2.19
  • Node >=20.19.0
  • BCMS API key

Install

npm install @thebcms/medusa-plugin

Register in medusa-config.ts:

import { defineConfig, loadEnv } from "@medusajs/framework/utils"

loadEnv(process.env.NODE_ENV || "development", process.cwd())

module.exports = defineConfig({
  plugins: [
    {
      resolve: "@thebcms/medusa-plugin",
      options: {
        apiKey: process.env.BCMS_API_KEY,
      },
    },
  ],
})

Run migrations:

npx medusa db:migrate

Options

| Option | Type | Default | Description | | ------------- | --------- | ------------ | ------------------------------------------------ | | apiKey | string | — | BCMS API key (required for BCMS calls). | | cmsOrigin | string | BCMS default | Your BCMS instance URL. | | useMemCache | boolean | true | Client cache. Set false for live preview. | | debug | boolean | false | Verbose BCMS client logs. |

Admin

  • Settings → BCMS — define slots and which templates each slot may use. No slots exist until you add them. An empty template list on a slot means all templates are allowed.
  • Products → BCMS content — link one or more BCMS entries per slot.

Store API

Auth: Medusa publishable API key (via JS SDK).

| Method | Path | Description | | ------ | -------------------------------------- | ----------------------------------- | | GET | /store/bcms/products/:id | Product + resolved entries in bcms.slots. | | GET | /store/bcms/entries/:id?template= | Single entry by id. | | GET | /store/bcms/pages/:slug?template= | Single entry by slug. |

Standalone entry/page routes only allow templates configured on at least one slot (or all templates if any slot has an empty allowlist). Linked entries on the product route are always returned.

import Medusa from "@medusajs/js-sdk"

const sdk = new Medusa({
  baseUrl: process.env.NEXT_PUBLIC_MEDUSA_BACKEND_URL!,
  publishableKey: process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY!,
})

const { product, bcms } = await sdk.client.fetch(
  `/store/bcms/products/${productId}`
)

const richText = bcms.slots["rich_description"]?.[0]?.entry
const blogs = bcms.slots["recommended_blogs"] ?? []

Query linked entries in custom routes:

const { data } = await query.graph({
  entity: "product",
  fields: ["id", "title", "bcms_links.*"],
  filters: { id: productId },
})

Types:

import type {
  BcmsModuleOptions,
  BcmsLinkPayload,
  BcmsSettingPayload,
} from "@thebcms/medusa-plugin/modules/bcms"

Development

npm install
npx medusa plugin:publish    # local yalc registry
npx medusa plugin:develop    # watch + rebuild

In a Medusa app:

npx medusa plugin:add @thebcms/medusa-plugin
npx medusa db:migrate

License

MIT