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

@karaoke-cms/module-blog

v0.18.1

Published

Blog module for karaoke-cms — posts, tags, RSS

Readme

@karaoke-cms/module-blog

Blog module for karaoke-cms — paginated post listing, individual post pages, tag filtering, pagination, and an RSS link in the footer nav.

Installation

npm install @karaoke-cms/module-blog

Usage

// karaoke.config.ts
import { defineConfig } from '@karaoke-cms/astro';
import { loadEnv } from '@karaoke-cms/astro/env';
import { blog } from '@karaoke-cms/module-blog';
import { themeDefault } from '@karaoke-cms/theme-default';

const env = loadEnv(new URL('.', import.meta.url));

export default defineConfig({
  vault: env.KARAOKE_VAULT,
  theme: themeDefault(),
  modules: [blog({ mount: '/blog' })],
});

Configuration

| Option | Type | Default | Description | |--------|------|---------|-------------| | mount | string | '/blog' | URL prefix for all blog routes | | enabled | boolean | true | Set false to disable the module entirely | | comments | boolean | true | Default comments state for all posts. Per-post frontmatter overrides this. |

Routes

All routes are relative to mount:

| Pattern | Description | |---------|-------------| | {mount} | Paginated post list | | {mount}/[slug] | Single post page | | {mount}/page/[page] | Overflow pagination pages |

Frontmatter

---
title: "My Post"                      # required
publish: true                         # required to appear on site
date: 2026-01-15                      # optional — YYYY-MM-DD
author: "Name"                        # optional — string or array
featured_image: "img/hero.jpg"        # optional — relative path, absolute path, URL,
                                      #   or Obsidian wiki link: "[[hero.jpg]]"
description: "..."                    # optional — OG tags, RSS, AI-enriched
tags: [writing, tutorial]             # optional — powers /tags pages
reading_time: 5                       # optional — AI-enriched, minutes
related: [slug-a, slug-b]             # optional — AI-enriched, slugs
comments: true                        # optional — per-post Giscus override
---

featured_image formats

All of the following work in featured_image:

featured_image: "./images/hero.jpg"          # relative to the note
featured_image: "/blog/hero.jpg"             # vault-absolute path
featured_image: "https://example.com/x.jpg"  # remote URL
featured_image: "[[hero.jpg]]"               # Obsidian wiki link — resolved via vault lookup

When using a wiki link, the image is served from /media/ during dev and copied to dist/media/ at build.

Components

The module ships reusable components you can import in your own pages:

import FeaturedPost      from '@karaoke-cms/module-blog/components/FeaturedPost';
import RecentPosts       from '@karaoke-cms/module-blog/components/RecentPosts';
import PaginatedPostList from '@karaoke-cms/module-blog/components/PaginatedPostList';

All three components call resolveWikiImage() internally, so wiki-linked featured images render correctly in list views without any extra work.

Scaffold

On first npm run dev, the module copies starter page files into your project's src/pages/{mountDir}/. You can edit these files to customise the layout without modifying the npm package.

What's new in 0.18.0

No user-facing changes in this release.

What's new in 0.17.0

  • comments optionblog({ comments: false }) disables Giscus comments by default on all posts. Defaults to true. Individual posts can override with comments: false or comments: true in frontmatter.
  • Two-column post list — the post list page uses a two-column grid layout with a PostListItem card component.
  • Featured post hero — the first pinned post (or most recent when none is pinned) renders as a full-width PostListFeatured hero card at the top of the list.

What's new in 0.13.1

No user-facing changes in this release.

What's new in 0.10.3

No user-facing changes in this release.

What's new in 0.10.0

  • [[wiki link]] in featured_imagefeatured_image: "[[hero.jpg]]" now works in post cards, the featured hero card, and the individual post page; images are resolved via vault path lookup and served from /media/
  • Blog list page/blog now has a dedicated list page separate from the post template, fixing a route conflict with the theme-default fallback

What's new in 0.9.5

  • Full page scaffold — on first dev run, list.astro, [slug].astro, and page/[page].astro are copied to your src/pages/blog/ so you can customise them
  • FeaturedPost, RecentPosts, PaginatedPostList components exported for use in custom pages
  • 30 demo posts included in new project vaults so the site looks populated on first visit
  • Default CSS (src/styles/blog.css) copied on first dev run and auto-imported into global.css
  • enabled flagblog({ mount: '/blog', enabled: false }) disables the module without removing it from config
  • Fixed zod importzod now correctly declared as a dependency (was missing from lockfile)