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

sveltick

v1.7.1

Published

⚡️ Sveltick: A lightweight, cool performance tracking library for Svelte apps!

Readme

⚡️ Sveltick

Welcome to Sveltick! This is a super lightweight 🦋 and fun performance&traffic-tracking library for your Svelte apps.

v5 Svelte support

📦 Latest Version 1.7.1

  • Adding tracking of Web traffic - 👁️ pageViews, 🧑‍🤝‍🧑 uniqueUsers, 🛣️ visitedRoutes and 🔗 trafficSources
  • Also possible to get each of them only
  • For the best experience we need to use onMount but also afterUpdate and use this code in our src/+layout.svelte for tracking traffic.
  • Fixing documentation

📥 Installation

Install Sveltick via npm:

npm install sveltick

Install Sveltick via yarn:

yarn add sveltick

🔥 Quick Start

Import Sveltick into your Svelte app and start tracking your app's performance!

📈 Track everything you need and configure what metrics you want to see

  import { onMount } from 'svelte';
  import { runPerformanceTracker } from 'sveltick';

  onMount(() => {
    // Run the performance tracker with custom options
    runPerformanceTracker({
      trackMetrics: true,     // Track all metrics
      showAlerts: true,       // Enable alerts
      enableGamification: true, // Enable gamification
      thresholds:  {
        fcp: 1800,  // Custom threshold for FCP
        lcp: 2300,  // Custom threshold for LCP
        tti: 2800,  // Custom threshold for TTI
        cls: 0.15,  // Custom threshold for CLS
        fid: 100, // Custom threshold for FID
        inp: 200, // Custom threshold for INP
        ttfb: 800, // Custom threshold for TTFB
        componentRenderTime: 400 // Custom threshold for component render time
      }
    });
  });

📌 Note: The thresholds object is optional, and each metric has a default value. If you don't provide a custom threshold for a particular metric, the following default values will be used:

  • First Contentful Paint (FCP): 2000ms
  • Largest Contentful Paint (LCP): 2500ms
  • Time to Interactive (TTI): 3000ms
  • Cumulative Layout Shift (CLS): 0.1
  • First Input Delay (FID): 100ms (User must interact with the page to track this metric)
  • Interaction to Next Paint (INP): 200ms (User must interact with the page to track this metric)
  • Time to First Byte (TTFB): 800ms
  • Component Render Time: 500ms

Tracking ⚡️ First Contentful Paint, 🕒Time to Interactive, 📏Largest Contentful Paint & 📊 Cumulative Layout Shift, 🖱️ First Input Delay, 🖌️ Interaction to Next Paint, 📡 Time to First Byte

<script>
  import { onMount } from 'svelte';
  import { trackFirstContentfulPaint, trackTimeToInteractive, trackLargestContentfulPaint, trackCumulativeLayoutShift, trackFirstInputDelay, trackInteractionToNextPaint, trackTimeToFirstByte } from 'sveltick';

  onMount(async () => {
    const ftp = await trackFirstContentfulPaint()
    const tti = await trackTimeToInteractive()
    const lcp = await trackLargestContentfulPaint();
    const cls = await trackCumulativeLayoutShift();
    const fid = await trackFirstInputDelay();
    const inp = await trackInteractionToNextPaint();
    const ttfb = await trackTimeToFirstByte();

    console.log(ftp, tti, lcp, cls, fid, inp, ttfb)
  });

</script>

🔧 Tracking Component Render Times

  import { onMount } from 'svelte';
  import { trackComponentRender } from 'sveltick';

	onMount(() => {
		const now = performance.now();  // Measure render time
		const { name, renderTime } = trackComponentRender('YourComponent', now);  // Get the name and render time
		console.log(name, renderTime);
	});

🛠 Performance Report

You can access all performance metrics (including components one) at any point using:

  import { onMount } from 'svelte';
  import { trackComponentRender, getPerformanceMetrics } from 'sveltick';

  onMount(async () => {
    const now = performance.now();  // Measure render time
    trackComponentRender('YourComponent', now);  // Get the name and render time
    const metrics = await getPerformanceMetrics();
    console.log(metrics)
  });

⚠️ Checking for all performance with custom threshold alerts

  import { onMount } from 'svelte';
  import { getPerformanceMetrics, checkPerformanceAlerts } from 'sveltick';

  onMount(async () => {
    const metrics = await getPerformanceMetrics();
    console.log('Updated Performance Metrics:', metrics);

    // Check for any performance alerts with custom thresholds
    checkPerformanceAlerts({
      fcp: 1800,  // Custom threshold for FCP
      lcp: 2300,  // Custom threshold for LCP
      tti: 2800,  // Custom threshold for TTI
      cls: 0.15,  // Custom threshold for CLS
      fid: 100, // Custom threshold for FID
      inp: 200, // Custom threshold for INP
      ttfb: 800, // Custom threshold for TTFB
      componentRenderTime: 400 // Custom threshold for component render time
    });
  });

🎯 Checking the score of your web based by the performance

  import { onMount } from 'svelte';
  import { runGamification } from 'sveltick';

  onMount(() => {
    // Run the gamification logic
    runGamification();
  });

Checking all traffic metrics

For the best experience we need to use onMount but also afterUpdate and use this code in our src/+layout.svelte.

  import { onMount, afterUpdate } from 'svelte';
  import { trackAllActivities } from 'sveltick';

	// Track all activities on component mount and update
	let trackedData = {};

	// This function will track and log activities when the component is mounted
	onMount(() => {
		trackedData = trackAllActivities();
		console.log('Tracked Data on Mount:', trackedData);
	});

	// This function will track and log activities every time the component is updated
	afterUpdate(() => {
		trackedData = trackAllActivities();
		console.log('Tracked Data after Update:', trackedData);
	});

Track Page Views

  import { onMount, afterUpdate } from 'svelte';
  import { trackAllActivities, getPageViews } from 'sveltick';

	let pageViews = 0;
  let trackedData = {};

	// This function will track and log activities when the component is mounted
	onMount(() => {
		trackedData = trackAllActivities();
		pageViews = getPageViews();
		console.log(pageViews)
	});

	// This function will track and log activities every time the component is updated
	afterUpdate(() => {
		trackedData = trackAllActivities();
		pageViews = getPageViews();
		console.log(pageViews)
	});

Track Unique Users

  import { onMount, afterUpdate } from 'svelte';
  import { trackAllActivities, getUniqueVisitors } from 'sveltick';

	let uniqueVisitors = 0;
  let trackedData = {};

	// This function will track and log activities when the component is mounted
	onMount(() => {
		trackedData = trackAllActivities();
		uniqueVisitors = getUniqueVisitors();
		console.log(uniqueVisitors)
	});

	// This function will track and log activities every time the component is updated
	afterUpdate(() => {
		trackedData = trackAllActivities();
		uniqueVisitors = getUniqueVisitors();
		console.log(uniqueVisitors)
	});

Track Route Visited

  import { onMount, afterUpdate } from 'svelte';
  import { trackAllActivities, getRouteViews } from 'sveltick';

  let routeViews = [];
  let trackedData = {};

	// This function will track and log activities when the component is mounted
	onMount(() => {
		trackedData = trackAllActivities();
		routeViews = getRouteViews();
		console.log(routeViews)
	});

	// This function will track and log activities every time the component is updated
	afterUpdate(() => {
		trackedData = trackAllActivities();
		routeViews = getRouteViews();
		console.log(routeViews)
	});

Track Traffic Sources

  • We have for now 4 sources from user comes and we differ it out - Direct, Facebook, Google and Others
  import { onMount, afterUpdate } from 'svelte';
  import { trackAllActivities, getTrafficSources} from 'sveltick';

  let trafficSources = {};
  let trackedData = {};

	// This function will track and log activities when the component is mounted
	onMount(() => {
		trackedData = trackAllActivities();
		trafficSources = getTrafficSources();
		console.log(trafficSources)
	});

	// This function will track and log activities every time the component is updated
	afterUpdate(() => {
		trackedData = trackAllActivities();
    trafficSources = getTrafficSources();
		console.log(trafficSources)
	});

📊 Metrics to check:

Performance

  • First Contentful Paint ⚡️
  • Time to Interactive 🕒
  • Component Render Time 🔧
  • Largest Contentful Paint 📏
  • Cumulative Layout Shift 📊
  • First Input Delay 🖱️ (Click-based)
  • Interaction to Next Paint 🖌️ (Click-based)
  • Time to First Byte 📡

🚦 Traffic

  • Page Views 👁️
  • Unique Users 🧑‍🤝‍🧑
  • Visited Routes 🛣️
  • Traffic Sources 🔗

🖱️ First Input Delay (FID) & 🖌️ Interaction to Next Paint (INP)

📌 Note:

  • FID and INP metrics are triggered by user interactions like clicks. These metrics depend on actual user interaction events.
  • If no interaction occurs within 5 seconds, the FID and INP values will be set to null and won't impact the performance alerts or gamification score.

⏳ Coming up in next releases:

  1. Any events in page as page views, clicks per view etc...
  2. Plugin system - users can integrate other performance functions from other providers like Web Vitals or Lighthouse
  3. Integration with analytics platforms, like Google Analytics, Sentry or DataDog - data can be send to these providers
  4. Dashboard perfomance-tracker (docs website + dashboard)
  5. Visual showcase of the metrics (graphs)(probably on the dashboard web dont know yet)

Output example screenshot:

Sveltick Example

For now it is just this simple console info about the project (of course you could implement it into something bigger!). But in the upcoming days I will create a dashboard performance-tracking webapp for this library, where you could use Sveltick from anywhere around the globe! So stay tuned guys!

📜 License

MIT ©️ Adam Stadnik