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

m14i-blogging

v3.0.4

Published

Drag & drop blog builder with customizable layouts and content blocks for React and Next.js

Readme

m14i-blogging

Modular blog system for React/Next.js - Split into focused packages for easy SaaS integration.

npm Storybook


📦 Packages

| Package | Size | Peer Deps | Use Case | |---------|------|-----------|----------| | @m14i/blogging-core | ~50KB | 3 | Public blog frontend | | @m14i/blogging-admin | ~200KB | 11 | CMS with WYSIWYG editor | | @m14i/blogging-server | ~110KB | 1 | API routes, AI, SEO |


🚀 Quick Start

Read-only blog:

npm install @m14i/blogging-core react react-dom lucide-react

Full CMS:

npm install @m14i/blogging-admin \
  react react-dom lucide-react \
  @hello-pangea/dnd \
  @tiptap/react @tiptap/starter-kit \
  @tiptap/extension-{image,link,placeholder} \
  react-markdown remark-gfm rehype-stringify remark-parse remark-rehype unified

Server/API:

npm install @m14i/blogging-server @supabase/supabase-js

See INSTALL.md for complete integration guide.


🎯 Features

@m14i/blogging-core

  • ✅ Public blog UI with multiple layouts
  • ✅ SEO optimization built-in
  • ✅ Search, filtering, pagination
  • ✅ Supabase data layer
  • ✅ Zero heavy dependencies

@m14i/blogging-admin

  • ✅ Drag & drop layout builder
  • ✅ WYSIWYG editor (TipTap)
  • ✅ Rich content blocks (code, charts, PDFs, carousels)
  • ✅ Media library (upload, gallery, stock photos)
  • ✅ AI content generation

@m14i/blogging-server

  • ✅ Next.js API route handlers
  • ✅ AI content generation (Claude)
  • ✅ SEO utilities (sitemap, RSS, robots.txt)
  • ✅ Media upload with validation
  • ✅ Rate limiting middleware

📖 Documentation


🏗️ Architecture

@m14i/blogging-core          (Base package)
     ↑          ↑
     |          |
@m14i/blogging-admin    @m14i/blogging-server

Core = Types + public UI + client
Admin = Editor + builder (depends on core)
Server = API routes + AI (depends on core)


💻 Example

Public blog:

import { Blog } from '@m14i/blogging-core';
import '@m14i/blogging-core/styles';

export default function BlogPage() {
  return <Blog basePath="/blog" />;
}

Admin CMS:

import { BlogAdmin } from '@m14i/blogging-admin';
import '@m14i/blogging-admin/styles';

export default function AdminPage() {
  return <BlogAdmin basePath="/admin/blog" apiBasePath="/api/blog" />;
}

API route (server-side):

import { createPostsRoutes } from '@m14i/blogging-server';
import { createBlogClient } from '@m14i/blogging-core/client';

const blogClient = createBlogClient(supabase);
export const { GET, POST } = createPostsRoutes({ blogClient });

🔧 Development

# Install
pnpm install

# Build all
pnpm -r build

# Dev mode
pnpm -r dev

# Run example
cd example/app && pnpm dev

📊 Bundle Comparison

| Use Case | Before (monolith) | After (modular) | |----------|-------------------|-----------------| | Read-only blog | 15 peer deps | 3 peer deps | | node_modules | 672MB | ~50MB | | Integration | Complex | Simple |


🤝 Contributing

See CONTRIBUTING.md


📝 License

MIT


🔗 Links