# Unregister Plugins

Remove registered plugins from the WASM runtime using individual unregister or bulk clear operations.

```typescript title="WASM"
import init, {
  registerDocumentExtractor,
  unregisterDocumentExtractor,
  listDocumentExtractors,
  clearDocumentExtractors,
  registerOcrBackend,
  unregisterOcrBackend,
  listOcrBackends,
  clearOcrBackends,
  registerPostProcessor,
  unregisterPostProcessor,
  listPostProcessors,
  clearPostProcessors,
  registerRenderer,
  unregisterRenderer,
  listRenderers,
  clearRenderers,
  registerValidator,
  unregisterValidator,
  listValidators,
  clearValidators,
} from "kreuzberg-wasm";

await init();

// Example: register a custom document extractor
const extractor = {
  extractBytes: async (bytes, mimeType, config) => {
    return JSON.stringify({ text: "test", page_count: 1 });
  },
  supportedMimeTypes: () => JSON.stringify(["application/x-test"]),
};

registerDocumentExtractor(extractor);
console.log("Registered extractors:", listDocumentExtractors());

// Individual unregistration by plugin name
try {
  unregisterDocumentExtractor("wasm_bridge");
  console.log("Extractor unregistered");
} catch (error) {
  console.error("Unregister failed:", error);
}

// Clear all plugins of a type
clearPostProcessors();
console.log("After clearPostProcessors:", listPostProcessors());

clearOcrBackends();
console.log("After clearOcrBackends:", listOcrBackends());

clearRenderers();
console.log("After clearRenderers:", listRenderers());

clearValidators();
console.log("After clearValidators:", listValidators());

// Selective re-registration: clear and register only desired plugins
clearPostProcessors();
const myProcessor = {
  processingStage: () => "post-extraction",
  process: (result) => result, // Pass-through
};
registerPostProcessor(myProcessor);
console.log("After selective re-register:", listPostProcessors());

// Unregister specific plugin by name
unregisterPostProcessor("wasm_bridge");
console.log("After selective unregister:", listPostProcessors());
```

Use `unregister*` to remove individual plugins by name, or `clear*` for bulk removal of all plugins of a type. All custom plugins are registered with the default name `"wasm_bridge"` managed by the bridge.
