blackvideo-extensions

April 13, 2026 · View on GitHub

VISITORS

blackvideo-extensions

Official extension registry for BlackVideo (Zephyra) — a Tauri v2 desktop video player built by BlackBlazent.

This repository serves two purposes: it is the distribution point for first-party extensions authored by BlackBlazent, and it is the submission target for third-party extensions published to the BlackVideo marketplace.


Repository structure

blackvideo-extensions/
├── extensions/
│   ├── <extension-id>/
│   │   ├── manifest.json
│   │   ├── package.json
│   │   ├── icon.png
│   │   ├── index.ts
│   │   ├── config/
│   │   │   ├── extension.install.handler.ts
│   │   │   ├── extension.active.handler.ts
│   │   │   ├── extension.deactivate.handler.ts
│   │   │   └── extension.uninstall.handler.ts
│   │   └── src/
│   │       └── components/
│   │           ├── extension.container.card.tsx
│   │           └── ui/
│   │               ├── navigation.tsx
│   │               └── bottomSpace.tsx
│   └── index.json
├── marketplace.json
├── CONTRIBUTING.md
└── README.md

extensions/

Each subdirectory is a single extension, named by its canonical id (kebab-case, npm-compatible). The directory name must exactly match the id field in manifest.json.

extensions/index.json

Auto-generated registry index. Lists every extension id present in this repository. Updated automatically on each merged pull request. Do not edit by hand.

marketplace.json

Curated marketplace listing consumed by the BlackVideo Centric Website marketplace page and the in-app marketplace. Contains display metadata, download URLs, and version information for all published extensions. Updated by the release pipeline when a new GitHub release is tagged.


Extension format

Extensions are distributed as .bvx files — standard zip archives containing at minimum a manifest.json. The blackvideo-extension-engine CLI handles scaffolding, validation, building, and publishing.

npm install -g blackvideo-extension-engine
bvx init <extension-id>

manifest.json schema

{
  "id": "video-map-space",
  "name": "video-map-space",
  "displayName": "Video Map Space",
  "description": "Geographic video analysis using interactive map overlays.",
  "version": "1.0.0",
  "author": "Jednaz Lonestamp",
  "authorClass": "jednaz-lonestamp",
  "type": "extension",
  "license": "free",
  "icon": "icon.png",
  "entry": "index.ts",
  "uiEntry": "src/components/extension.container.card",
  "permissions": [
    {
      "scope": "playback.read",
      "reason": "Reads current video timestamp to synchronise map position."
    }
  ],
  "playbackHooks": true,
  "uiSupport": true,
  "cliSupport": false
}

Fields

FieldTypeRequiredDescription
idstringyesUnique identifier. Kebab-case, npm-compatible. Must match directory name.
namestringyesSame as id. Used by the package registry.
displayNamestringyesHuman-readable name shown in the marketplace.
descriptionstringyesShort description, minimum 10 characters.
versionstringyesSemver string. Must be bumped on every published update.
authorstringyesAuthor display name.
authorClassstringyesAuthor identifier used as a CSS class. Kebab-case.
typestringyesOne of: extension, plugin, theme, addon, dev-tool, subtitle.
licensestringyesOne of: free, trial, subscription, enterprise, internal.
iconstringyesPath to icon file, relative to extension root. Recommended: 256x256 PNG.
entrystringyesEntry point file, relative to extension root.
uiEntrystringnoUI component entry, relative to extension root. Required when uiSupport is true.
permissionsarrayyesAt least one permission object with scope and reason.
playbackHooksbooleanyesWhether the extension integrates with VideoTheaterStage.
uiSupportbooleanyesWhether the extension provides a UI container card.
cliSupportbooleanyesWhether the extension exposes a CLI runner.

Allowed permission scopes

playback.read
playback.write
filesystem.read
network.fetch
store.write
ipc.emit

Blocked combinations: filesystem.read + network.fetch, ipc.emit + store.write.


Distribution model

First-party extensions (BlackBlazent)

Extensions authored by BlackBlazent are committed directly to the extensions/ directory and bundled into the BlackVideo app via AppRegistry/extensions/ at build time. They are available immediately on first install without any marketplace interaction.

Third-party extensions

Third-party extensions are not bundled with the app. They are published to this repository as GitHub releases. The release asset is a .bvx file. Metadata is registered in Convex and surfaced in the marketplace.

Distribution flow:

bvx init                         scaffold extension
bvx build                        compile to .bvx
bvx publish                      upload .bvx to GitHub release, register in Convex
                                      |
             +------------------------+------------------------+
             |                                                 |
   Centric Website                                     BlackVideo App
   Marketplace page                                    Extensions page
   (fetch from Convex)                                 (fetch from Convex)
             |                                                 |
         Install click                                    Install click
             |                                                 |
   mirror slug to localStorage                   download .bvx from GitHub
                                                 extract manifest.json
                                                 register in extensionRegistry
                                                 icon appears in toolbar

Installation in BlackVideo

Extensions installed from the marketplace are stored in the Tauri application store (bv_ext_registry_v1) and survive restarts. Extensions placed manually in AppRegistry/extensions/ are scanned at startup via the scan_extension_dirs Rust command and registered automatically.

Extension install paths:

SourceStoragePersistence
AppRegistry (built-in)Bundled in app packagePermanent (part of app)
Marketplace installTauri storePermanent until uninstalled
Package.json uploadTauri storePermanent until uninstalled

Versioning

This repository follows the extension's own semver. Each extension is versioned independently. A new GitHub release must be tagged with the format <extension-id>@<version>, for example video-map-space@1.2.0. The bvx publish command handles this automatically.


Security

The BlackVideo extension verifier validates every manifest before install against the schema above. Extensions that declare blocked permission combinations are rejected at install time. The bvx validate command runs the same checks locally before publish.

Extensions have no filesystem write access outside their own store namespace and cannot make arbitrary network requests unless network.fetch is declared and approved during review.


CLI reference

The blackvideo-extension-engine package provides the following commands.

bvx init <id>          Scaffold a new extension with interactive prompts
bvx validate           Validate manifest.json against the schema
bvx build              Bundle extension into .bvx archive
bvx dev                Watch mode with live re-validation
bvx publish            Build, create GitHub release, register in marketplace
bvx upgrade            Check for CLI updates
bvx info               Print environment diagnostics

Aliases: blackvideo-ext, bv-ext, bvx.

Install:

npm install -g blackvideo-extension-engine

License

First-party extensions in this repository are licensed under the terms specified in each extension's manifest.json. The repository structure, tooling, and documentation are Copyright (c) 2026 BlackBlazent. All rights reserved.

Third-party extensions retain their own licenses as declared in their respective manifest.json and package.json files. BlackBlazent does not claim ownership of third-party submissions.