Extending

VSN.js is designed to be extensible without a huge plugin system.

Custom globals

engine.registerGlobal("api", apiClient);

Custom flags

engine.registerFlag("trace", {
  onApply({ element }) {
    console.log("trace", element);
  }
});

Custom attributes

engine.registerAttributeHandler({
  id: "vsn-demo",
  match: (name) => name === "vsn-demo",
  handle: (element, _name, value, scope) => {
    scope.set("demo", value);
  }
});