Docs

Build and Publish

A Sliprail extension is distributed as a manifest plus the JavaScript, icons, and other assets referenced by that manifest.

Build Recommendations

Plain JavaScript or .mjs can be loaded directly. TypeScript and projects with third-party dependencies need a build step.

  • Keep the manifest main path pointed at the generated JavaScript file
  • Use import type for @sliprail/sdk so SDK types do not become a runtime dependency
  • Bundle third-party runtime packages into the output
  • Confirm the final output runs without a separate npm install
  • Include every local icon, HTML file, image, and stylesheet referenced by the manifest or extension code

Avoid Blocking the Main Process

Extension handlers run in Sliprail's Electron main process.

  • Avoid synchronous file and network operations
  • Avoid long-running loops and heavy CPU work in handlers
  • Use asynchronous APIs and split large tasks into smaller units
  • Use worker threads only when the worker code and its dependencies are included in the distributed output

Blocking an extension handler can make Sliprail slow or unresponsive.

Publish a Public Extension

  1. Register the extension as public in the Developer Portal
  2. Attach a public GitHub repository URL
  3. Put a valid manifest.json and all runtime files in the repository
  4. Ensure the manifest ID matches the registered extension ID
  5. Push the completed build output to GitHub
  6. Publish the extension from the Developer Portal

Published extensions can appear in the Sliprail Store and SearchExtensions results.

Sliprail checks eligible GitHub extensions for new commits once per day unless automatic updates are disabled for that extension. Users can also select Update in the extension manager to check manually.

Publish a Private Extension

Private extensions still need a registered ID, but they do not need a public GitHub repository. Enable Developer Mode and load the unpacked directory or a ZIP file on each device where the extension is used.

Local unpacked extensions are not automatically synchronized or updated.