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

coralite-plugin-aggregation

v0.7.0

Published

A Coralite plugin for dynamically collecting, filtering, sorting, and displaying content across multiple sources. Build database-free Coralite websites with automated content aggregation.

Readme

Coralite Aggregation Plugin

A Coralite plugin for aggregating pages (like blog posts) with built-in support for filtering, sorting, and pagination.

Installation

pnpm add coralite-plugin-aggregation
# or
npm install coralite-plugin-aggregation

Usage

First, register the plugin in your Coralite configuration (e.g., coralite.config.js or wherever you initialize Coralite).

import { Coralite } from 'coralite'
import { aggregation } from 'coralite-plugin-aggregation'

const coralite = new Coralite({
  // ... other config
  plugins: [aggregation]
})

Then, you can use the aggregation function within your component templates.

Example: Blog List

Create a template for individual items (e.g., templates/coralite-post.html):

<template id="coralite-post">
  <article class="post">
    <h2><a href="{{ $urlPathname }}">{{ meta_title }}</a></h2>
    <p>{{ meta_description }}</p>
  </article>
</template>

Create a component to list them (e.g., templates/blog-list.html):

<template id="blog-list">
  <div class="posts">
    {{ posts }}
  </div>
</template>

<script type="module">
  import { defineComponent } from 'coralite'
  import { aggregation } from 'coralite/plugins'

  export default defineComponent({
    tokens: {
      posts: async () => {
        return await aggregation({
          // Path to aggregate pages from (relative to pages directory)
          path: ['blog'],
          // Template ID to render for each item
          template: 'coralite-post',
          // Sort by date descending (assuming meta_date exists)
          sort: (a, b) => new Date(b.meta_date) - new Date(a.meta_date),
          // Limit items per page
          limit: 10,
          // Enable pagination
          pagination: {
            segment: 'page', // URL segment: /blog/page/1
            maxVisible: 5,   // Max pagination links to show
            ariaLabel: 'Blog Pagination',
            ellipsis: '...'
          }
        })
      }
    }
  })
</script>

Configuration

The aggregation function accepts an options object with the following properties:

| Property | Type | Description | |----------|------|-------------| | path | string[] | Array of paths to aggregate pages from, relative to the pages directory. | | template | string | The ID of the template component to use for rendering each aggregated item. | | limit | number | Maximum number of items to display per page. | | offset | number | Starting index for the results (default: 0). | | recursive | boolean | Whether to recursively search subdirectories (default: false). | | filter | function | Callback to filter pages. Receives page values, returns true/false. | | sort | function | Callback to sort pages. Receives (a, b) values. | | tokens | Object | Map of token names to transform functions or value keys. | | pagination | Object | Pagination configuration object. |

Pagination Options

| Property | Type | Default | Description | |----------|------|---------|-------------| | segment | string | 'page' | The URL segment used for pagination (e.g., /page/2). | | maxVisible | number | 5 | Maximum number of visible page links in the pagination control. | | ariaLabel | string | 'Pagination' | Aria label for the navigation element. | | ellipsis | string | '...' | Text to display for truncated page links. | | template | string | 'coralite-pagination' | Custom template ID for the pagination control. |

How Pagination Works

When pagination is enabled and limit is set:

  1. Automatic Page Generation: If placed on a root page (e.g., /blog/index.html), the plugin automatically generates virtual pages for subsequent pages (e.g., /blog/page/2.html, /blog/page/3.html).
  2. Context Aware: It detects the current page from the URL to determine the correct offset and active page state.
  3. Default Template: A default Bootstrap-compatible pagination template (coralite-pagination) is provided out of the box.

License

AGPL-3.0-or-later