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

@studio-dev/vsdk-plugin-example

v0.0.2

Published

Example plugin — a starting point for building your own VSDK plugin.

Readme

@studio-dev/vsdk-plugin-example

A minimal, heavily-commented plugin scaffold. Use it as a starting point for building your own VSDK plugin.

What it demonstrates

  • Registering a sidebar panel that adds items to the timeline
  • Registering an inspector section for image items
  • Registering a toolbar action
  • Registering a context-menu action (right-click on a timeline item)
  • Registering a keyboard shortcut
  • Reading & mutating the store via useStudioStore and ctx.store
  • Lazy-loading panel code so it only ships when opened
  • Passing plugin options to lazy-loaded components via a module-level config store

File tour

| File | What to learn from it | | ---- | --------------------- | | src/plugin.ts | The PluginDefinition — registration of every extension point lives here. Read this first. | | src/panel.tsx | Reading state with useStudioStore, adding items to the timeline, finding/creating tracks, using SDK UI primitives and icons. | | src/inspector-section.tsx | Mutating a selected item via updateItemProperties (top-level fields and nested transform). | | src/config-store.ts | Pattern for passing plugin options to lazy-loaded components. | | src/index.ts | What to export publicly. |

Cloning this plugin

  1. Copy packages/plugin-example to packages/plugin-<your-name>
  2. Rename the package in package.json (name, description)
  3. Change the plugin id in src/plugin.ts to something unique (e.g. mycompany:foo)
  4. Edit examplePlugin<yourThing>Plugin and rename the export
  5. Replace the sticker list / inspector controls with your real features
  6. Add it to your consumer app:
import { yourThingPlugin } from '@studio-dev/vsdk-plugin-your-thing'

<VideoStudioProvider plugins={[yourThingPlugin()]}>
  <StudioEditor />
</VideoStudioProvider>

Useful SDK references

  • Store APIpackages/vsdk/docs/03-store-api.md
  • Plugin systempackages/vsdk/docs/04-plugin-system.md
  • Timeline & animationpackages/vsdk/docs/07-timeline-and-animation.md

Key store actions you'll reach for

| Action | What it does | | ------ | ------------ | | addItem(item) | Insert a new timeline item; returns its id | | removeItem(id) | Remove an item | | updateItemProperties(id, partial) | Patch fields on an item (transform, style, filters, flags, …) | | moveItem(id, trackId, startFrame) | Move an item to a track + frame | | splitItem(id, frame) | Split a clip at a frame | | duplicateItem(id) | Duplicate; returns the new id | | addTrack(track) | Create a new track; returns its id | | setCurrentFrame(frame) | Move the playhead | | selectItem(id) / deselectAll() | Selection management | | undo() / redo() | History — every action above is reversible |

All of these are available off useStudioStore in components, or off ctx.store.getState() in plugin lifecycle callbacks.