{ "name": "mark-it-down", "displayName": "%extension.displayName%", "description": "%extension.description%", "version": "0.3.0", "l10n": "./l10n", "publisher": "fadymondy", "engines": { "vscode": "^1.85.0" }, "categories": [ "Visualization", "Notebooks", "Other" ], "keywords": [ "markdown", "viewer", "editor", "mermaid", "notes", "mcp", "preview", "publish", "slideshow", "github-pages" ], "license": "MIT", "repository": { "type": "git", "url": "https://github.com/fadymondy/mark-it-down.git" }, "bugs": { "url": "https://github.com/fadymondy/mark-it-down/issues" }, "homepage": "https://github.com/fadymondy/mark-it-down#readme", "author": { "name": "Fady Mondy", "email": "info@3x1.io", "url": "https://github.com/fadymondy" }, "icon": "media/icon.png", "galleryBanner": { "color": "#0d1117", "theme": "dark" }, "qna": "marketplace", "main": "./out/src/extension.js", "build": { "appId": "io.markitdown.app", "productName": "Mark It Down", "directories": { "buildResources": "media", "output": "dist/electron" }, "files": [ "out/electron/**/*", "out/mcp/**/*", "media/brand/**/*", "build/icons/**/*", "package.json", "node_modules/**/*" ], "asarUnpack": [ "out/mcp/**/*", "node_modules/better-sqlite3/**/*" ], "extraMetadata": { "main": "out/electron/main.js" }, "mac": { "category": "public.app-category.productivity", "icon": "media/brand/icon.icns", "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "build/entitlements.mac.plist", "entitlementsInherit": "build/entitlements.mac.plist", "target": [ { "target": "dmg", "arch": [ "universal" ] }, { "target": "zip", "arch": [ "universal" ] } ] }, "win": { "icon": "media/brand/icon.ico", "target": [ { "target": "nsis", "arch": [ "x64" ] } ] }, "linux": { "icon": "build/icons", "target": [ { "target": "AppImage", "arch": [ "x64" ] }, { "target": "deb", "arch": [ "x64" ] } ], "category": "Office" }, "publish": [ { "provider": "github", "owner": "fadymondy", "repo": "mark-it-down", "releaseType": "release" } ], "mas": { "category": "public.app-category.productivity", "icon": "media/brand/icon.icns", "hardenedRuntime": true, "gatekeeperAssess": false, "entitlements": "build/entitlements.mas.plist", "entitlementsInherit": "build/entitlements.mas.inherit.plist", "provisioningProfile": "build/embedded.provisionprofile", "type": "distribution", "target": [ { "target": "mas", "arch": [ "arm64", "x64" ] } ] } }, "activationEvents": [], "contributes": { "viewsContainers": { "activitybar": [ { "id": "markItDown", "title": "%viewsContainer.title%", "icon": "media/notes-sidebar.svg" } ] }, "views": { "markItDown": [ { "id": "markItDown.notes", "name": "%view.notes.name%", "icon": "media/notes-sidebar.svg", "contextualTitle": "%viewsContainer.title%" }, { "id": "markItDown.backlinks", "name": "%view.backlinks.name%", "icon": "media/notes-sidebar.svg", "contextualTitle": "%viewsContainer.title%" } ] }, "viewsWelcome": [ { "view": "markItDown.notes", "contents": "%view.welcome.notes%" } ], "customEditors": [ { "viewType": "markItDown.editor", "displayName": "Mark It Down", "selector": [ { "filenamePattern": "*.md" }, { "filenamePattern": "*.mdx" }, { "filenamePattern": "*.markdown" } ], "priority": "default" } ], "commands": [ { "command": "markItDown.toggleMode", "title": "%command.toggleMode%", "icon": "$(edit)" }, { "command": "markItDown.openWithDefaultEditor", "title": "%command.openWithDefaultEditor%" }, { "command": "markItDown.exportPdf", "title": "%command.exportPdf%", "icon": "$(file-pdf)" }, { "command": "markItDown.exportDocx", "title": "%command.exportDocx%" }, { "command": "markItDown.exportTxt", "title": "%command.exportTxt%" }, { "command": "markItDown.exportEpub", "title": "%command.exportEpub%", "icon": "$(book)" }, { "command": "markItDown.exportCategoryEpub", "title": "%command.exportCategoryEpub%", "icon": "$(book)" }, { "command": "markItDown.notes.create", "title": "%command.notes.create%", "category": "%viewsContainer.title%", "icon": "$(add)" }, { "command": "markItDown.notes.open", "title": "%command.notes.open%", "category": "%viewsContainer.title%" }, { "command": "markItDown.notes.rename", "title": "%command.notes.rename%", "category": "%viewsContainer.title%", "icon": "$(edit)" }, { "command": "markItDown.notes.move", "title": "%command.notes.move%", "category": "%viewsContainer.title%" }, { "command": "markItDown.notes.delete", "title": "%command.notes.delete%", "category": "%viewsContainer.title%", "icon": "$(trash)" }, { "command": "markItDown.notes.refresh", "title": "%command.notes.refresh%", "category": "%viewsContainer.title%", "icon": "$(refresh)" }, { "command": "markItDown.notes.search", "title": "%command.notes.search%", "category": "%viewsContainer.title%", "icon": "$(search)" }, { "command": "markItDown.notes.editTags", "title": "%command.notes.editTags%", "category": "%viewsContainer.title%", "icon": "$(tag)" }, { "command": "markItDown.notes.filterByTag", "title": "%command.notes.filterByTag%", "category": "%viewsContainer.title%", "icon": "$(filter)" }, { "command": "markItDown.notes.createWithTitle", "title": "%command.notes.createWithTitle%", "category": "%viewsContainer.title%" }, { "command": "markItDown.backlinks.refresh", "title": "%command.backlinks.refresh%", "category": "%viewsContainer.title%", "icon": "$(refresh)" }, { "command": "markItDown.notes.revealStorage", "title": "%command.notes.revealStorage%", "category": "%viewsContainer.title%", "icon": "$(folder-opened)" }, { "command": "markItDown.warehouse.syncNow", "title": "%command.warehouse.syncNow%", "category": "%viewsContainer.title%", "icon": "$(cloud)" }, { "command": "markItDown.warehouse.pull", "title": "%command.warehouse.pull%", "category": "%viewsContainer.title%", "icon": "$(cloud-download)" }, { "command": "markItDown.warehouse.openOnGitHub", "title": "%command.warehouse.openOnGitHub%", "category": "%viewsContainer.title%", "icon": "$(github)" }, { "command": "markItDown.warehouse.openLog", "title": "%command.warehouse.openLog%", "category": "%viewsContainer.title%", "icon": "$(output)" }, { "command": "markItDown.warehouse.openConflicts", "title": "%command.warehouse.openConflicts%", "category": "%viewsContainer.title%", "icon": "$(warning)" }, { "command": "markItDown.pickTheme", "title": "%command.pickTheme%", "category": "%viewsContainer.title%", "icon": "$(symbol-color)" }, { "command": "markItDown.mcp.install", "title": "%command.mcp.install%", "category": "%viewsContainer.title%", "icon": "$(plug)" }, { "command": "markItDown.mcp.revealServer", "title": "%command.mcp.revealServer%", "category": "%viewsContainer.title%" }, { "command": "markItDown.publish.deploy", "title": "%command.publish.deploy%", "category": "%viewsContainer.title%", "icon": "$(rocket)" }, { "command": "markItDown.publish.deployCurrent", "title": "%command.publish.deployCurrent%", "category": "%viewsContainer.title%" }, { "command": "markItDown.publish.copyUrl", "title": "%command.publish.copyUrl%", "category": "%viewsContainer.title%" }, { "command": "markItDown.publish.openSite", "title": "%command.publish.openSite%", "category": "%viewsContainer.title%", "icon": "$(globe)" }, { "command": "markItDown.slideshow.previewLocal", "title": "%command.slideshow.previewLocal%", "category": "%viewsContainer.title%", "icon": "$(play)" }, { "command": "markItDown.slideshow.publish", "title": "%command.slideshow.publish%", "category": "%viewsContainer.title%" }, { "command": "markItDown.slideshow.copyShareUrl", "title": "%command.slideshow.copyShareUrl%", "category": "%viewsContainer.title%" }, { "command": "markItDown.slideshow.exportPdf", "title": "%command.slideshow.exportPdf%", "category": "%viewsContainer.title%" }, { "command": "markItDown.updates.checkNow", "title": "%command.updates.checkNow%", "category": "%viewsContainer.title%", "icon": "$(cloud-download)" }, { "command": "markItDown.telemetry.sendTestEvent", "title": "%command.telemetry.sendTestEvent%", "category": "%viewsContainer.title%" } ], "menus": { "editor/title": [ { "command": "markItDown.toggleMode", "when": "activeCustomEditorId == markItDown.editor", "group": "navigation" } ], "explorer/context": [ { "command": "markItDown.exportPdf", "when": "resourceExtname == .md || resourceExtname == .markdown || resourceExtname == .mdx", "group": "markItDown@1" }, { "command": "markItDown.exportDocx", "when": "resourceExtname == .md || resourceExtname == .markdown || resourceExtname == .mdx", "group": "markItDown@2" }, { "command": "markItDown.exportTxt", "when": "resourceExtname == .md || resourceExtname == .markdown || resourceExtname == .mdx", "group": "markItDown@3" }, { "command": "markItDown.exportEpub", "when": "resourceExtname == .md || resourceExtname == .markdown || resourceExtname == .mdx", "group": "markItDown@4" } ], "view/title": [ { "command": "markItDown.notes.create", "when": "view == markItDown.notes", "group": "navigation@1" }, { "command": "markItDown.notes.search", "when": "view == markItDown.notes", "group": "navigation@2" }, { "command": "markItDown.notes.refresh", "when": "view == markItDown.notes", "group": "navigation@3" }, { "command": "markItDown.warehouse.syncNow", "when": "view == markItDown.notes", "group": "navigation@3" }, { "command": "markItDown.notes.revealStorage", "when": "view == markItDown.notes", "group": "overflow@1" }, { "command": "markItDown.warehouse.pull", "when": "view == markItDown.notes", "group": "overflow@2" }, { "command": "markItDown.warehouse.openOnGitHub", "when": "view == markItDown.notes", "group": "overflow@3" }, { "command": "markItDown.warehouse.openLog", "when": "view == markItDown.notes", "group": "overflow@4" }, { "command": "markItDown.backlinks.refresh", "when": "view == markItDown.backlinks", "group": "navigation@1" } ], "view/item/context": [ { "command": "markItDown.notes.create", "when": "view == markItDown.notes && viewItem =~ /^markItDown.notes.scope./", "group": "inline@1" }, { "command": "markItDown.notes.create", "when": "view == markItDown.notes && viewItem =~ /^markItDown.notes.category./", "group": "inline@1" }, { "command": "markItDown.notes.rename", "when": "view == markItDown.notes && viewItem =~ /^markItDown.notes.note./", "group": "inline@1" }, { "command": "markItDown.notes.delete", "when": "view == markItDown.notes && viewItem =~ /^markItDown.notes.note./", "group": "inline@2" }, { "command": "markItDown.notes.move", "when": "view == markItDown.notes && viewItem =~ /^markItDown.notes.note./", "group": "modify@1" }, { "command": "markItDown.notes.editTags", "when": "view == markItDown.notes && viewItem =~ /^markItDown.notes.note./", "group": "modify@2" } ], "commandPalette": [ { "command": "markItDown.notes.rename", "when": "false" }, { "command": "markItDown.notes.move", "when": "false" }, { "command": "markItDown.notes.delete", "when": "false" }, { "command": "markItDown.notes.createWithTitle", "when": "false" } ] }, "configuration": { "title": "%viewsContainer.title%", "properties": { "markItDown.theme": { "type": "string", "default": "auto", "enum": [ "auto", "github-light", "github-dark", "dracula", "one-dark", "one-light", "monokai", "solarized-light", "solarized-dark", "tokyo-night", "tokyo-night-light", "ayu-light", "ayu-mirage", "ayu-dark", "gruvbox-light", "gruvbox-dark", "nord", "nord-light", "palenight", "material-dark", "material-light", "night-owl", "cobalt2", "oceanic-next", "snazzy", "rose-pine" ], "description": "%config.theme.description%" }, "markItDown.startMode": { "type": "string", "default": "view", "enum": [ "view", "edit" ], "description": "%config.startMode.description%" }, "markItDown.mermaid.enabled": { "type": "boolean", "default": true, "description": "%config.mermaid.enabled.description%" }, "markItDown.notes.categories": { "type": "array", "default": [ "Daily", "Reference", "Snippet", "Drafts" ], "items": { "type": "string" }, "description": "%config.notes.categories.description%" }, "markItDown.notes.defaultCategory": { "type": "string", "default": "Drafts", "description": "%config.notes.defaultCategory.description%" }, "markItDown.notes.defaultScope": { "type": "string", "default": "workspace", "enum": [ "workspace", "global" ], "description": "%config.notes.defaultScope.description%" }, "markItDown.warehouse.repo": { "type": "string", "default": "", "markdownDescription": "%config.warehouse.repo.description%" }, "markItDown.warehouse.branch": { "type": "string", "default": "main", "description": "%config.warehouse.branch.description%" }, "markItDown.warehouse.subdir": { "type": "string", "default": "notes", "description": "%config.warehouse.subdir.description%" }, "markItDown.warehouse.transport": { "type": "string", "default": "gh", "enum": [ "gh", "git" ], "markdownEnumDescriptions": [ "Use the `gh` CLI's existing auth (runs `gh auth setup-git` to wire git credentials).", "Use plain `git` with whatever credential helper you have configured." ], "description": "%config.warehouse.transport.description%" }, "markItDown.warehouse.autoPush": { "type": "boolean", "default": true, "description": "%config.warehouse.autoPush.description%" }, "markItDown.warehouse.autoPushDebounceMs": { "type": "number", "default": 5000, "minimum": 1000, "maximum": 60000, "description": "%config.warehouse.autoPushDebounceMs.description%" }, "markItDown.warehouse.workspaceId": { "type": "string", "default": "", "markdownDescription": "%config.warehouse.workspaceId.description%" }, "markItDown.warehouse.routes": { "type": "array", "default": [], "items": { "type": "object", "required": [ "categoryPrefix", "repo" ], "properties": { "categoryPrefix": { "type": "string", "description": "Category path prefix this route claims (segment-aware, e.g. \"Personal\" matches \"Personal/Finance\" but not \"PersonalNotes\")." }, "repo": { "type": "string", "description": "GitHub repo for this route in `owner/repo` form." }, "branch": { "type": "string", "description": "Optional branch override (defaults to markItDown.warehouse.branch)." }, "subdir": { "type": "string", "description": "Optional subdir override (defaults to markItDown.warehouse.subdir)." } } }, "markdownDescription": "%config.warehouse.routes.description%" }, "markItDown.publish.enabled": { "type": "boolean", "default": false, "description": "%config.publish.enabled.description%" }, "markItDown.publish.branch": { "type": "string", "default": "gh-pages", "description": "%config.publish.branch.description%" }, "markItDown.publish.path": { "type": "string", "default": "", "description": "%config.publish.path.description%" }, "markItDown.publish.includeGlob": { "type": "string", "default": "**/*.md", "description": "%config.publish.includeGlob.description%" }, "markItDown.publish.theme": { "type": "string", "default": "github-light", "description": "%config.publish.theme.description%" }, "markItDown.slideshow.theme": { "type": "string", "default": "black", "enum": [ "black", "white", "league", "beige", "night", "serif", "simple", "solarized", "moon", "dracula", "sky", "blood" ], "description": "%config.slideshow.theme.description%" }, "markItDown.slideshow.transition": { "type": "string", "default": "slide", "enum": [ "none", "fade", "slide", "convex", "concave", "zoom" ], "description": "%config.slideshow.transition.description%" }, "markItDown.slideshow.includeSpeakerNotes": { "type": "boolean", "default": true, "description": "%config.slideshow.includeSpeakerNotes.description%" }, "markItDown.updates.checkOnLaunch": { "type": "boolean", "default": true, "markdownDescription": "%config.updates.checkOnLaunch.description%" }, "markItDown.updates.channel": { "type": "string", "default": "stable", "enum": [ "stable", "beta" ], "markdownDescription": "%config.updates.channel.description%" }, "markItDown.telemetry.enabled": { "type": "boolean", "default": false, "markdownDescription": "%config.telemetry.enabled.description%" }, "markItDown.epub.author": { "type": "string", "default": "", "markdownDescription": "%config.epub.author.description%" }, "markItDown.epub.publisher": { "type": "string", "default": "", "markdownDescription": "%config.epub.publisher.description%" }, "markItDown.epub.coverImage": { "type": "string", "default": "", "markdownDescription": "%config.epub.coverImage.description%" }, "markItDown.telemetry.dsn": { "type": "string", "default": "", "markdownDescription": "%config.telemetry.dsn.description%" } } } }, "scripts": { "vscode:prepublish": "npm run compile", "postinstall": "electron-rebuild -w better-sqlite3", "rebuild:native": "electron-rebuild -f -w better-sqlite3", "compile": "npm run compile:extension && npm run compile:webview && npm run compile:mcp", "compile:extension": "tsc -p ./", "compile:webview": "esbuild src/webview/main.ts --bundle --outfile=out/webview/main.js --format=iife --target=es2020 --platform=browser", "compile:mcp": "esbuild src/mcp/server.ts --bundle --outfile=out/mcp/server.js --format=cjs --platform=node --target=node18 --external:vscode", "compile:electron": "tsc -p apps/electron/tsconfig.json && esbuild apps/electron/renderer/renderer.ts --bundle --outfile=out/electron/renderer/renderer.js --format=iife --target=es2020 --platform=browser && node scripts/copy-electron-assets.mjs", "build:icons": "node scripts/build-icons.mjs", "build:claude-plugin": "npm run compile:mcp && node -e \"const fs=require('fs'),p=require('path');fs.mkdirSync('plugins/mark-it-down-claude/bin',{recursive:true});fs.copyFileSync('out/mcp/server.js','plugins/mark-it-down-claude/bin/server.js');console.log('mark-it-down-claude plugin: bin/server.js refreshed');\"", "watch": "tsc -watch -p ./", "package": "vsce package", "publish": "vsce publish", "dev:vscode": "echo 'Press F5 in VSCode to launch the Extension Development Host.'", "dev:electron": "npm run compile && npm run compile:electron && env -u ELECTRON_RUN_AS_NODE -u ELECTRON_NO_ATTACH_CONSOLE MID_DEV=1 electron out/electron/main.js", "dist:electron": "npm run compile && npm run compile:electron && electron-builder --mac --win --linux", "lint": "eslint src apps/electron", "check-i18n": "node scripts/check-i18n.mjs", "lint:fix": "eslint --fix src apps/electron", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage", "compile:integration": "tsc -p tests/integration/tsconfig.json", "test:integration": "npm run compile && npm run compile:integration && node out/integration/runTest.js" }, "dependencies": { "@codemirror/commands": "^6.10.3", "@codemirror/lang-markdown": "^6.5.0", "@codemirror/language": "^6.12.3", "@codemirror/state": "^6.6.0", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.41.1", "@modelcontextprotocol/sdk": "^1.29.0", "@sentry/node": "^10.50.0", "@types/pdfkit": "^0.17.6", "better-sqlite3": "^12.9.0", "boxicons": "^2.1.4", "codemirror": "^6.0.2", "docx": "^9.6.1", "dompurify": "^3.2.3", "electron-updater": "^6.8.3", "highlight.js": "^11.10.0", "html-to-image": "^1.11.13", "lunr": "^2.3.9", "marked": "^14.1.3", "marked-highlight": "^2.2.1", "mermaid": "^11.4.1", "pdfkit": "^0.18.0", "xlsx": "^0.18.5" }, "devDependencies": { "@electron/rebuild": "^4.0.4", "@eslint/js": "^10.0.1", "@resvg/resvg-js": "^2.6.2", "@types/better-sqlite3": "^7.6.13", "@types/dompurify": "^3.2.0", "@types/lunr": "^2.3.7", "@types/mocha": "^10.0.10", "@types/node": "^22.10.0", "@types/vscode": "^1.85.0", "@typescript-eslint/eslint-plugin": "^8.59.1", "@typescript-eslint/parser": "^8.59.1", "@vitest/coverage-v8": "^4.1.5", "@vscode/test-electron": "^2.5.2", "@vscode/vsce": "^3.2.0", "electron": "^41.3.0", "electron-builder": "^26.8.1", "esbuild": "^0.24.0", "eslint": "^10.2.1", "glob": "^13.0.6", "mocha": "^11.7.5", "typescript": "^5.7.0", "vitest": "^4.1.5" } }