{ "manifest_version": 3, "name": "Previewer", "description": "Preview supported local files opened with file:// in Tabbit.", "version": "2.2026.1021.1300", "permissions": [ "storage", "contextMenus", "readingList", "tabReadingSpace", "tabThemeColor", "scripting", "webNavigation", "tabs", "favicon", "tabMessaging", "tabInstance", "tabAnalytics", "tabContentExtractor", "tabLocalFilePreview", "tabLocalWorkspace", "tabCDPBridge" ], "tab_local_file_preview": { "extensions": [ ".md", ".markdown", ".svg", ".png", ".jpg", ".jpeg", ".webp", ".gif", ".bmp", ".avif", ".ico", ".apng", ".doc", ".docx", ".ppt", ".pptx", ".xls", ".xlsx", ".txt", ".text", ".csv", ".tsv", ".rtf", ".tex", ".bib", ".srt", ".ass", ".ssa", ".vtt", ".sbv", ".sub", ".mpl", ".lrc", ".smi", ".ttml", ".dfxp", ".idx", ".mdx", ".js", ".cjs", ".mjs", ".ts", ".jsx", ".tsx", ".vue", ".py", ".rb", ".java", ".swift", ".go", ".rs", ".cpp", ".cc", ".cxx", ".c", ".h", ".hh", ".hpp", ".hxx", ".css", ".less", ".scss", ".json", ".jsonc", ".jsonl", ".ndjson", ".xml", ".yaml", ".yml", ".toml", ".ini", ".sh", ".sql", ".log", ".zip", ".skill" ], "fileTypeCatalog": [ { "id": "markdown", "labelKey": "settings.type.markdown", "extensions": [ ".md", ".markdown" ], "defaultOpenMode": "previewer", "chromeNativeRenderable": true, "osAssociation": "associate" }, { "id": "svg", "labelKey": "settings.type.svg", "extensions": [ ".svg" ], "defaultOpenMode": "previewer", "chromeNativeRenderable": true, "osAssociation": "associate" }, { "id": "pdf", "labelKey": "settings.type.pdf", "extensions": [ ".pdf" ], "defaultOpenMode": "native", "chromeNativeRenderable": true, "osAssociation": "associate" }, { "id": "office", "labelKey": "settings.type.office", "extensions": [ ".doc", ".docx", ".ppt", ".pptx", ".xls", ".xlsx" ], "defaultOpenMode": "previewer", "chromeNativeRenderable": false, "osAssociation": "none" }, { "id": "html", "labelKey": "settings.type.html", "extensions": [ ".html", ".htm", ".xhtml", ".xht", ".xhtm" ], "defaultOpenMode": "native", "chromeNativeRenderable": true, "osAssociation": "associate", "osAssociationOverrides": { ".xhtml": "none", ".xht": "none", ".xhtm": "none" } }, { "id": "subtitle", "labelKey": "settings.type.subtitle", "extensions": [ ".srt", ".vtt", ".ass", ".ssa", ".ttml", ".dfxp", ".smi", ".sbv", ".sub", ".mpl", ".lrc", ".idx" ], "defaultOpenMode": "previewer", "chromeNativeRenderable": true, "chromeNativeRenderableOverrides": { ".sub": false }, "osAssociation": "none" }, { "id": "code-text", "labelKey": "settings.type.codeText", "extensions": [ ".txt", ".text", ".csv", ".tsv", ".rtf", ".tex", ".bib", ".mdx", ".js", ".cjs", ".mjs", ".ts", ".jsx", ".tsx", ".vue", ".py", ".rb", ".java", ".swift", ".go", ".rs", ".cpp", ".cc", ".cxx", ".c", ".h", ".hh", ".hpp", ".hxx", ".css", ".less", ".scss", ".json", ".jsonc", ".jsonl", ".ndjson", ".xml", ".yaml", ".yml", ".toml", ".ini", ".sh", ".sql", ".log" ], "defaultOpenMode": "previewer", "chromeNativeRenderable": true, "osAssociation": "associate", "osAssociationOverrides": { ".text": "none", ".rtf": "none", ".mdx": "none", ".cjs": "none", ".mjs": "none", ".vue": "none", ".rb": "none", ".swift": "none", ".cc": "none", ".cxx": "none", ".hh": "none", ".hxx": "none", ".less": "none", ".scss": "none", ".jsonc": "none", ".jsonl": "none", ".ndjson": "none", ".toml": "none", ".ini": "none" } }, { "id": "zip", "labelKey": "settings.type.archive", "extensions": [ ".zip", ".jar", ".apk", ".crx", ".epub", ".skill", ".xpi", ".vsix", ".whl", ".nupkg", ".odt", ".ods", ".odp" ], "defaultOpenMode": "previewer", "chromeNativeRenderable": false, "osAssociation": "none" }, { "id": "image", "labelKey": "settings.type.image", "extensions": [ ".png", ".jpg", ".jpeg", ".webp", ".gif", ".bmp", ".avif", ".ico", ".apng" ], "defaultOpenMode": "previewer", "chromeNativeRenderable": true, "osAssociation": "associate", "osAssociationOverrides": { ".avif": "none", ".ico": "none", ".apng": "none" } }, { "id": "media", "labelKey": "settings.type.media", "extensions": [ ".webm", ".mp4", ".m4v", ".mkv", ".ogv", ".ogm", ".mp3", ".wav", ".flac", ".ogg", ".oga", ".opus", ".weba", ".m4a", ".mka" ], "defaultOpenMode": "native", "chromeNativeRenderable": true, "osAssociation": "none" } ] }, "content_security_policy": { "extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';" }, "host_permissions": [ "file:///*", "" ], "externally_connectable": { "matches": [ "http://localhost/*", "https://tabai-test.meituan.com/*", "https://tab-browser-test-sg.meituan.com/*", "https://web.tabbit.com/*", "https://staging.tabbit.com/*", "https://web.tabbit.ai/*", "https://staging.tabbit.ai/*" ] }, "action": { "default_title": "Previewer", "default_popup": "popup.html" }, "options_page": "settings.html", "background": { "service_worker": "background.js" }, "content_scripts": [ { "matches": [ "file:///*" ], "js": [ "vendor/jszip.min.js", "vendor/docx-preview.min.js", "vendor/chart.umd.min.js", "vendor/PptxViewJS.min.js", "vendor/pptxviewjs-fixes.js", "vendor/marked.umd.js", "vendor/speed-highlight.js", "vendor/markdown-mermaid.js", "vendor/markdown-markmap.js", "content.js" ], "run_at": "document_idle" } ], "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx+0nYNy1arepK9pGfTpx3L8GkQUmLWRHjWrfLVFIC1Z7zvGHBwfMCoVoWc2sl2lBzoJuuaSjmtWg4emb7s0ypCiaeyWzpIfyQG4uAySBP+qilrP5hhlu24v3MkHIhIJk8QeTYogApnAIVURGmbRUIZFqebYD5c69r0F+TPQ3J6hdW73dOqQSD/+rtbowTKmNHIHUJtnQoNIS1YDLSXFxC2NyqLKBegTYRxPDkkw2Is2jcuVvBqVNWTh6JZrivdnOt21xQPcwwNqHgFU9Jo20S6mc7XtyH3GjoyayNqjvZWYNkufOvcS+f6eB/YO39MxOKw0ZBXWaBG6p6aWzN/y42wIDAQAB", "web_accessible_resources": [ { "resources": [ "viewer.html", "styles.css" ], "matches": [ "file:///*", "" ], "extension_ids": [ "mhjfbmdgcfjbbpaeojofohoefgiehjai" ] }, { "resources": [ "vendor/pdfjs/*.mjs", "vendor/pdfjs/cmaps/*.bcmap", "vendor/pdfjs/standard_fonts/*", "vendor/pdfjs/wasm/*", "vendor/pdfjs/iccs/*" ], "matches": [ "file:///*", "" ] }, { "resources": [ "vendor/katex/katex.min.js", "vendor/katex/katex.min.css", "vendor/katex/fonts/*" ], "matches": [ "file:///*", "" ] }, { "resources": [ "icons/phosphor/*.svg", "icons/phosphor_light/*.svg", "icons/phosphor_dark/*.svg" ], "matches": [ "file:///*", "" ] } ], "icons": { "16": "icons/tab-local-files-16.png", "32": "icons/tab-local-files-32.png", "48": "icons/tab-local-files-48.png", "128": "icons/tab-local-files-128.png" } }