Is HTML to Markdown safe?
We analyzed HTML to Markdown version 0.2.3's actual code and gave it a 78/100 trust score. This appears purpose-aligned, but its all-sites page access and…
Bottom line
This appears purpose-aligned, but its all-sites page access and optional feedback data collection warrant caution.
What it can access
It can read visible content on every website for conversion, including sensitive text when requested, and stores converted page URLs and titles.[Q1][Q2][Q3][Q4]
Security weaknesses
No meaningful privileged-action weakness or remote command path was found, though the large minified bundle makes review harder.[Q10][Q16][Q21]
Signs of misuse
Optional feedback sends the user's message, rating, and coarse device details to the developer, but not page content or credentials.[Q6][Q13][Q14]
Code findings
What access does this extension ask for, and does that access make sense for what it claims to do?
It requests storage, sidePanel, activeTab, and <all_urls>, and injects a page access into every website. The all-sites access is broad but directly supports selecting and converting webpage content.
Declares <all_urls> host access and an all-sites content script plus storage, sidePanel, and activeTab permissions. — manifest.json:1
Which websites can it run on, and can it read or change what appears on those pages?
It reads the current document, extracts main or full-page HTML, or clones a selected element/range. Selection mode adds overlays and temporarily intercepts mouse, click, keyboard, selection, and drag events; it does not generally rewrite page content.
Handles getHTML and selection mode, extracts/clones DOM content, sanitizes it, and adds/removes visible selection UI and event handlers. — content-scripts/content.js:79-111
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
Because it can read the page on every site, a requested full-page or element conversion can include private messages, account details, documents, and other sensitive visible text. No dedicated password, payment, or live input-value collector was found.
Extracts page HTML or selected outerHTML/range contents from the current document. — content-scripts/content.js:79-111
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
It reads and stores the converted page's URL and title alongside Markdown. It does not request cookies, history, bookmarks, downloads, or tab-list permissions and does not build a general browsing log.
Stores document.title and window.location.href with converted Markdown. — content-scripts/content.js:79-111
Does not request cookies, history, bookmarks, downloads, or tabs permissions. — manifest.json:1
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
The editor can copy Markdown to the clipboard and download or print it after user action. It has no camera, microphone, geolocation, native-messaging, or direct filesystem capability.
User controls call navigator.clipboard.writeText and create a local Blob download/print view. — chunks/tabs-DeD42eRE.js:146-149
No device, location, native-messaging, or filesystem permissions are declared. — manifest.json:1
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
Submitting the visible feedback form sends the message and rating plus user agent, browser/version, OS, language, screen/window dimensions, pixel ratio, and extension version to the developer's Firebase Firestore project. Page and Markdown content are not included.
Kce writes the feedback fields and collected system information to the extension-feedback Firestore collection only from the form submit handler. — chunks/tabs-DeD42eRE.js:226
Does it download or run code, settings, or instructions supplied by a remote server?
Firestore server responses complete the user-started feedback write using fixed SDK logic. No remotely supplied code, conversion rules, feature instructions, or executable settings are consumed.
Bundled Firebase/Firestore client performs a fixed add-document operation and returns the created document ID. — chunks/tabs-DeD42eRE.js:214-226
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
The all-site page access loads automatically, but it extracts content only after extension UI messages or visible selection interaction. The background sets a developer feedback page as the uninstall URL; no hidden scheduled conversion or collection was found.
Extraction and selection are message/user driven. — content-scripts/content.js:79-111
Sets bestmarkdowneditor.com/feedback as the uninstall URL. — background.js:5
Can it change important browser settings, including your proxy, search engine, homepage, privacy settings, or other extensions?
No evidence of this behavior was found in the reviewed package.
No proxy, privacy, management, declarativeNetRequest, search, or browser-settings permission is present. — manifest.json:1
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
The editor is a 1.7 MB minified bundle with Firebase, React, CodeMirror, Markdown rendering, sanitization, and many syntax-language chunks, and no source maps are packaged. Important application paths remain traceable, but dependency volume reduces reviewability.
Records a large minified tabs bundle and many language chunks without source maps. — inventory.json:complete file
Does it use eval(), new Function(), or string-based timers to turn text into executable code?
No evidence of this behavior was found in the reviewed package.
Targeted searches found no eval/new Function application path; timers use function callbacks. — background.js, content-scripts/content.js, chunks/tabs-DeD42eRE.js:complete files
Does it track the websites, pages, searches, or links you visit?
No evidence of this behavior was found in the reviewed package.
Saved document records include sourceUrl. — background.js:5
Selection conversion stores window.location.href with Markdown. — content-scripts/content.js:111
Does it create a persistent ID or browser fingerprint to recognize you?
The optional feedback submission includes a coarse browser/device profile: user agent, browser version, OS, language, screen/window size, and pixel ratio. No advertising ID, explicit installation identifier, cross-site event stream, or Firebase Analytics initialization was found.
qce collects system information for Kce's feedback document; the configured measurementId is not used to initialize Analytics. — chunks/tabs-DeD42eRE.js:226
Does it send cookies, session details, authentication data, or page contents elsewhere?
No evidence of this behavior was found in the reviewed package.
No cookies or identity permission. — manifest.json:1
Feedback payload contains message/rating and system information, not credentials or Markdown. — chunks/tabs-DeD42eRE.js:226
Does it record typing, form entries, clipboard contents, or screenshots?
No evidence of this behavior was found in the reviewed package.
Selection handlers support visible element/range selection and cleanup; no keystroke recording or media capture exists. — content-scripts/content.js:79-111
Can a website or remote server send commands that make the extension take actions?
No evidence of this behavior was found in the reviewed package.
Handles fixed internal storeMarkdown/openMarkdownTab messages. — background.js:5
No externally_connectable declaration. — manifest.json:1
Does it alter links, referral codes, advertisements, shopping carts, or search results?
No evidence of this behavior was found in the reviewed package.
Injected UI consists of selection overlays, labels, and conversion controls. — content-scripts/content.js:79-111
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
No evidence of this behavior was found in the reviewed package.
No webRequest, declarativeNetRequest, proxy, or downloads permission. — manifest.json:1
Can it communicate with software on the computer or services running on localhost?
No evidence of this behavior was found in the reviewed package.
No nativeMessaging permission. — manifest.json:1
Firebase SDK contains generic transport/emulator support; the application config points to its hosted Firebase project. — chunks/tabs-DeD42eRE.js:214-226
Does it decode, decrypt, or unpack hidden data and then execute or inject it?
No evidence of this behavior was found in the reviewed package.
Sanitizes extracted HTML and converts it to Markdown locally. — content-scripts/content.js:79-111
Renders and edits stored Markdown with packaged libraries. — chunks/tabs-DeD42eRE.js:112-149
Can ordinary websites access privileged extension features through messaging or exposed files?
No evidence of this behavior was found in the reviewed package.
No externally_connectable or web-accessible privileged script is declared. — manifest.json:1
Messaging uses chrome.runtime and WXT lifecycle events rather than page-supplied commands. — content-scripts/content.js:111
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
No evidence of this behavior was found in the reviewed package.
Extraction scope and selection state determine page access. — content-scripts/content.js:79-111
Editor state, documents, settings, and feedback are user controlled. — chunks/tabs-DeD42eRE.js:112-226
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No evidence of this behavior was found in the reviewed package.
Processes potentially full-page HTML in the content script. — content-scripts/content.js:79-111
Appends converted documents to chrome.storage.local. — background.js:5
Does it change form fields or where a form sends its information?
No evidence of this behavior was found in the reviewed package.
Selection code adds overlays/listeners and clones selected DOM; no assignment to form action or third-party input values was found. — content-scripts/content.js:79-111