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

@podosoft/podokit-module-analytics

v0.1.1

Published

Provider-neutral web analytics for PodoKit with GA4 collection, consent, and admin reporting.

Downloads

274

Readme

@podosoft/podokit-module-analytics

Optional provider-neutral web analytics for PodoKit applications. The first provider is Google Analytics 4. It collects anonymous page and application events, keeps service-account credentials encrypted in the application database, and reads aggregate reports through the Google Analytics Data API. It does not store raw visitor events in the application database.

Install

npm install --save-dev @podosoft/podokit-module-analytics
podo add analytics
npm install
npm run migration:run -w <app>-api

Open Settings → Analytics as an administrator and enter:

  1. the web stream measurement ID (G-...);
  2. the numeric GA4 property ID; and
  3. a service-account JSON credential whose service account has Viewer access to that property.

Enable the Google Analytics Data API for the credential's Google Cloud project. Use a dedicated, least-privilege service account and rotate its key. The JSON credential is encrypted with the key derived from BETTER_AUTH_SECRET; changing that application secret without re-entering the credential makes it unreadable. The settings page includes a scrollable credential guide with the current Google Analytics and Google Cloud console steps, security notes, and links to the official documentation.

Use Test connection before enabling collection. Reports appear at /admin/analytics.

Consent and privacy

The runtime uses Google Consent Mode v2 in advanced mode. Analytics, ad storage, ad user data, and ad personalization start denied. Accepting analytics grants only analytics storage; advertising consent remains denied. When analytics storage is denied, Google can still receive cookieless pings. Explain this in the application's privacy notice.

PodoKit does not send Better Auth user IDs, names, or email addresses. Public and signed-in product pages are measured by default, while admin, authentication, account, maintenance, and error routes are excluded. Query strings and fragments are never sent. Customize sensitive application paths in apps/web/src/lib/analytics.config.ts.

The runtime sends one manual page_view per SvelteKit navigation. In the GA4 web stream, disable Enhanced measurement → Page views → Page changes based on browser history events to prevent duplicate page views.

Application events

import { trackAnalyticsEvent } from "$lib/analytics";

trackAnalyticsEvent("generate_lead", { method: "contact_form" });

Use recommended GA4 event names where possible. Never include personal, sensitive, secret, or high-cardinality values in event parameters. Mark the events that represent product goals as key events in the GA4 property so they are included in the dashboard's key-event totals.

Update

npm update @podosoft/podokit-module-analytics
podo update
podo update --apply