{"id":18015,"library":"xjs-framework","title":"XSplit JS Framework (XJS)","description":"The XSplit JS Framework, distributed as `xjs-framework`, was designed to empower developers to create plugins for XSplit Broadcaster, facilitating rapid integration and interaction with the XSplit environment. Its primary utility revolved around providing an API and structure for building interactive components within the broadcasting software. The package's current stable version on npm is 2.10.2, which was last published approximately five years ago. Despite the listing of more recent 'releases' up to 2.9.0 in some contexts, the public npm package and the primary GitHub repository indicate a lack of active maintenance and new releases since early 2019. This framework differentiates itself by being purpose-built for the XSplit ecosystem, offering tools tailored to that specific plugin development environment, rather than being a general-purpose web framework.","status":"abandoned","version":"2.10.2","language":"javascript","source_language":"en","source_url":"https://github.com/xjsframework/xjs","tags":["javascript","xsplit","plugin","framework","typescript"],"install":[{"cmd":"npm install xjs-framework","lang":"bash","label":"npm"},{"cmd":"yarn add xjs-framework","lang":"bash","label":"yarn"},{"cmd":"pnpm add xjs-framework","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"While CommonJS `require` was historically used (e.g., in older Node.js contexts or XSplit's runtime), modern TypeScript projects should prefer ESM `import * as XJS`.","wrong":"const XJS = require('xjs-framework');","symbol":"XJS","correct":"import * as XJS from 'xjs-framework';"},{"note":"A common pattern in frameworks is named exports for specific modules or interfaces, such as a host object for plugin communication. Exact exports may vary and require consulting the (likely archived) documentation.","symbol":"PluginHost","correct":"import { PluginHost } from 'xjs-framework';"},{"note":"For type-checking without incurring runtime overhead, TypeScript users should utilize `import type` for interfaces, classes, or other types provided by the framework.","symbol":"XJSPlugin","correct":"import type { XJSPlugin } from 'xjs-framework';"}],"quickstart":{"code":"import { PluginHost } from 'xjs-framework';\n\ninterface MyPluginSettings {\n  message: string;\n  count: number;\n}\n\nasync function initializePlugin() {\n  console.log('XJS Plugin initializing...');\n  \n  // Simulate connection to XSplit Plugin Host\n  const host = new PluginHost(); // Hypothetical initialization\n  \n  host.onReady(() => {\n    console.log('PluginHost is ready!');\n    \n    // Example: Registering a simple command\n    host.registerCommand('sayHello', (args: { name: string }) => {\n      const greeting = `Hello, ${args.name || 'XSplit User'} from XJS Plugin!`;\n      console.log(greeting);\n      host.sendMessageToUI('logMessage', greeting);\n    });\n\n    // Example: Getting and setting settings (hypothetical)\n    host.getSettings<MyPluginSettings>().then(settings => {\n      console.log('Current settings:', settings);\n      if (!settings.message) {\n        host.setSettings({ message: 'Default XJS message', count: 0 });\n      }\n    });\n    \n    host.log('XJS Plugin loaded successfully!');\n    host.sendMessageToUI('pluginLoaded', { success: true });\n  });\n\n  host.onError((error: Error) => {\n    console.error('XJS Plugin Host error:', error);\n    host.sendMessageToUI('pluginError', { message: error.message });\n  });\n  \n  host.connect(); // Start the connection (hypothetical)\n}\n\ninitializePlugin().catch(console.error);","lang":"typescript","description":"Demonstrates the basic structure of an XSplit Broadcaster plugin using hypothetical XJS Framework APIs for initialization, command registration, and communication with the host environment."},"warnings":[{"fix":"Consider auditing your project for long-term viability. Migration to a currently maintained XSplit plugin development approach (if available) or an alternative framework might be necessary for future compatibility and security updates.","message":"The `xjs-framework` package has not seen a new public npm release in approximately five years (since version 2.10.2 in early 2019). This indicates the project is no longer actively maintained for new features or bug fixes, making it potentially incompatible with newer Node.js versions, XSplit Broadcaster releases, or modern web standards.","severity":"breaking","affected_versions":">=2.10.3 (hypothetical), all current usage"},{"fix":"Always verify the actual publish date and version on npm for `xjs-framework` (`npmjs.com/package/xjs-framework`) and cross-reference with the provided GitHub repository's commit history to ascertain activity.","message":"Despite 'recent releases' mentioned in older documentation or internal wikis, the official npm package `xjs-framework` remains at version 2.10.2, published 5 years ago. This discrepancy can lead to confusion about the project's maintenance status and available features.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Ensure your build process correctly transpiles ESM to CJS if the XSplit runtime requires it, or specifically configure your TypeScript `tsconfig.json` with `\"module\": \"CommonJS\"` and `\"esModuleInterop\": true` if you encounter import issues.","message":"Given its age, `xjs-framework` may primarily rely on or expect CommonJS (CJS) module patterns, especially within the XSplit plugin runtime environment. Attempting to use pure ES Modules (ESM) features without proper transpilation or configuration might lead to module resolution errors.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-23T00:00:00.000Z","next_check":"2026-07-22T00:00:00.000Z","problems":[{"fix":"If in an ES module, change `const XJS = require('xjs-framework');` to `import * as XJS from 'xjs-framework';`. If in a browser context, ensure proper bundling and module loading or check if `xjs-framework` was meant for a Node.js-like runtime provided by XSplit.","cause":"Attempting to use `require()` in an ES module context or a browser environment where it's not supported, while `xjs-framework` might have historically been imported via CJS.","error":"ReferenceError: require is not defined"},{"fix":"Verify that your plugin's environment within XSplit Broadcaster is correctly set up. Check the XSplit Broadcaster documentation for the expected lifecycle and initialization of plugins. Ensure your plugin manifest correctly loads the framework.","cause":"The `PluginHost` object or similar core API component of `xjs-framework` was not correctly initialized or is unavailable in the current execution environment, often due to an outdated XSplit version or incorrect plugin manifest.","error":"TypeError: Cannot read properties of undefined (reading 'onReady')"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}