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

@vikukumar/propvault-pdk

v0.1.8

Published

Plugin Development Kit (PDK) for the PropVault CMS Platform

Readme

PropVault CMS — Plugin Development Kit (PDK)


Extend the functionality of the PropVault Real Estate CMS and Page Builder platform with dynamic plugins. Custom plugins can register Action hooks to trigger custom logic on events (e.g. sending CRM leads) and Filter hooks to intercept and mutate variables/configs before operations complete.


Getting Started

1. Requirements

Ensure you have Node.js >= 18 and TypeScript installed locally.

2. Scaffold a New Plugin

Run the PDK CLI initializer inside the directory where you want to scaffold your plugin.

# Initialize a new plugin template
npx @vikukumar/propvault-pdk create my-custom-plugin

This scaffolds the following plugin directory structure:

my-custom-plugin/
├── src/
│   └── index.ts          # Core plugin logic & hooks registration
├── dist/                 # Compiled distribution (created on build)
├── package.json          # Node config & build scripts
├── tsconfig.json         # TypeScript compiler configurations
└── plugin.json           # Plugin manifest metadata block

3. Install Scaffolding Dependencies

cd my-custom-plugin
npm install

Writing Plugin Logic

Plugins register hook handlers inside src/index.ts using addAction and addFilter from the @vikukumar/propvault-pdk package.

1. Action Hooks

Action hooks trigger custom operations when specific system events occur (e.g., lead submission, newsletter registration, theme swap).

import { addAction } from "@vikukumar/propvault-pdk";

// Send WhatsApp telemetry notifications on new lead submissions
addAction("after_lead_submit", async (lead: any) => {
  console.log("New Lead submitted in CMS:", lead.email);
  
  // Call webhook endpoint
  await fetch("https://api.mycrm.com/v1/leads", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(lead),
  });
}, 10);

2. Filter Hooks

Filter hooks intercept, modify, and return modified values/variables before the CMS processes them.

import { addFilter } from "@vikukumar/propvault-pdk";

// Force a premium badge suffix on project titles before they are stored in the database
addFilter("before_project_save", async (project: any) => {
  if (project.title && !project.title.includes("[Verified]")) {
    project.title = `${project.title} [Verified]`;
  }
  return project;
});

Core Hooks Registry API

Action Hooks

| Hook Slug | Arguments | Description | |---|---|---| | after_lead_submit | (lead: Lead) | Fires after a contact form submission is registered. | | after_newsletter_subscribe | (subscription: Subscription) | Fires after a newsletter email subscription is verified. |

Filter Hooks

| Hook Slug | Arguments | Description | |---|---|---| | before_project_save | (project: Project) | Filters project attributes before SQLite/PostgreSQL insertion. | | before_lead_save | (lead: Lead) | Filters lead fields before database submission. |


Build & Packaging

Once development is complete, compile and compress your plugin files into a distribution-ready bundle:

# 1. Compile TypeScript to JavaScript dist/index.js
npm run build

# 2. Package manifest and built script into plugin.zip
npm run package

The CLI outputs a plugin.zip package.


Publishing and Installation Options

PropVault CMS supports three installation pathways:

Option A: Direct Zip Upload (Recommended)

  1. Go to PropVault Admin Panel -> Plugins.
  2. Locate the Upload Zip Archive card.
  3. Select your built plugin.zip file.
  4. Click Upload and toggle Activate.

Option B: Package Manager (NPM Release)

Publish your compiled folder structure containing plugin.json to npm:

npm publish

CMS administrators can install it in their workspace by entering the package name (e.g. my-propvault-plugin) in the NPM Package Registry dashboard card.

Option C: Git Releases

Host your plugin repository on GitHub/GitLab. Make sure it contains plugin.json in the root (or pre-compiled outputs). Administrators can install it dynamically by entering the Git clone URL inside the Clone Git Repository card.