# Document Extractor Registration Register a custom document extractor plugin in WASM that implements the required interface. ```typescript title="WASM" import init, { registerDocumentExtractor, unregisterDocumentExtractor, listDocumentExtractors, extractBytes, } from "kreuzberg-wasm"; await init(); // Define a custom extractor as a plain JS object with required methods const customExtractor = { // Required: extract document bytes // Takes: (bytes: Uint8Array, mimeType: string, config: object) -> Promise<{text: string, ...}> extractBytes: async (bytes, mimeType, config) => { if (mimeType !== "application/x-custom") { throw new Error("Unsupported MIME type"); } // Custom extraction logic const text = new TextDecoder().decode(bytes); return JSON.stringify({ text: `Extracted: ${text.slice(0, 100)}`, page_count: 1, language: "en", }); }, // Required: list supported MIME types as JSON array supportedMimeTypes: () => { return JSON.stringify(["application/x-custom"]); }, // Optional: plugin name (returned by Plugin trait) version: () => "1.0.0", }; // Register the custom extractor try { registerDocumentExtractor(customExtractor); console.log("Extractor registered successfully"); } catch (error) { console.error("Failed to register extractor:", error); } // List all extractors (includes your custom one) const extractors = listDocumentExtractors(); console.log("Available extractors:", extractors); // Use the custom extractor via normal extraction const customBytes = new Uint8Array([0x00, 0x01, 0x02]); const result = await extractBytes(customBytes, "application/x-custom", {}); console.log("Extraction result:", result); // Unregister when done try { unregisterDocumentExtractor("wasm_bridge"); console.log("Extractor unregistered"); } catch (error) { console.error("Failed to unregister:", error); } ``` The extractor object must implement `extractBytes` and `supportedMimeTypes` methods. Optional methods: `initialize()`, `shutdown()`, and `version()` for lifecycle management.