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

pennsieve-viz-monorepo

v0.0.0

Published

A monorepo containing Vue 3 visualization components for the Pennsieve platform.

Readme

Pennsieve Visualization

A monorepo containing Vue 3 visualization components for the Pennsieve platform.

Packages

| Package | Description | |---------|-------------| | @pennsieve-viz/core | Shared utilities, stores, and base components | | @pennsieve-viz/duckdb | DuckDB integration for data processing | | @pennsieve-viz/data-explorer | Data exploration component | | @pennsieve-viz/umap | UMAP visualization component | | @pennsieve-viz/proportion-plot | Proportion plot visualization | | @pennsieve-viz/markdown | Markdown rendering component | | @pennsieve-viz/text-viewer | Text file viewer component | | @pennsieve-viz/ai-plotly | AI-powered Plotly charts | | @pennsieve-viz/tsviewer | Timeseries data viewer component | | @pennsieve-viz/pennsieve-viz | Demo app / development playground |

Requirements

  • Node.js >= 18
  • pnpm >= 8

Project Setup

pnpm install

Development

Run the development server:

pnpm dev

Build

Build all packages:

pnpm build

Build a specific package:

pnpm build:core
pnpm build:duckdb

Other Commands

pnpm clean       # Remove all dist folders
pnpm lint        # Lint all packages
pnpm type-check  # Type check all packages

Usage in Your Application

Install the packages you need:

pnpm add @pennsieve-viz/umap @pennsieve-viz/data-explorer

Import styles in your main entry file:

import '@pennsieve-viz/core/style.css'

Import and use components:

<script setup>
import { UMAP } from '@pennsieve-viz/umap'
import { DataExplorer } from '@pennsieve-viz/data-explorer'
</script>

<template>
  <UMAP :apiUrl="config.apiUrl" />
  <DataExplorer :apiUrl="config.apiUrl" />
</template>

Props

Components accept an apiUrl prop that should match your environment's API domain:

<UMAP :apiUrl="config.apiUrl" />
<DataExplorer :apiUrl="config.apiUrl" />

TSViewer

The @pennsieve-viz/tsviewer package provides a timeseries data visualization component for viewing and annotating time-based signal data.

Installation

pnpm add @pennsieve-viz/tsviewer

Peer Dependencies

The tsviewer requires the following peer dependencies:

pnpm add vue@^3.2.0 pinia@^2.0.0 element-plus@^2.3.0

Optional peer dependency for authentication:

pnpm add @aws-amplify/auth@^6.0.0

Importing

Import styles in your main entry file:

import '@pennsieve-viz/tsviewer/style.css'

Import the component and store:

import { TSViewer, useViewerStore } from '@pennsieve-viz/tsviewer'

Or register as a Vue plugin for global component access:

import { createApp } from 'vue'
import TSViewerPlugin from '@pennsieve-viz/tsviewer'

const app = createApp(App)
app.use(TSViewerPlugin)

Usage

<script setup>
import { TSViewer, useViewerStore } from '@pennsieve-viz/tsviewer'

const viewerStore = useViewerStore()

// Configure the API endpoint
viewerStore.setViewerConfig({
  timeseriesDiscoverApi: 'https://api.pennsieve.io/timeseries'
})

// Load timeseries data for a package
viewerStore.fetchAndSetActiveViewer({ packageId: 'your-package-id' })
</script>

<template>
  <TSViewer
    :pkg="packageData"
    :is-preview="false"
    :side-panel-open="false"
  />
</template>

Props

| Prop | Type | Default | Description | |------|------|---------|-------------| | pkg | Object | {} | Package metadata object | | isPreview | Boolean | false | When true, renders in preview mode (no toolbar) | | sidePanelOpen | Boolean | false | Indicates if side panel is open (affects layout) |

Store API

The useViewerStore() provides methods for managing viewer state:

const viewerStore = useViewerStore()

// Configuration
viewerStore.setViewerConfig({ timeseriesDiscoverApi: '...' })

// Load data
viewerStore.fetchAndSetActiveViewer({ packageId: '...' })

// Access channels
viewerStore.viewerChannels
viewerStore.viewerSelectedChannels

// Annotations
viewerStore.viewerAnnotations
viewerStore.createAnnotation(annotation)
viewerStore.updateAnnotation(annotation)
viewerStore.deleteAnnotation(annotation)

// Reset state
viewerStore.resetViewer()