This release rolls up dozens of small patches and bug fixes. For typical inputs and use cases, we expect outputs and behavior to remain largely unchanged from version 0.1.7.
The markitdown-ocr plugin has also been refactored to simplify future maintenance.
What's Changed
- Mitigate UnicodeDecodeError due to wrong ASCII charset guess for long files by @fcatalan92 in #2360
- fix: support extended content-disposition filenames by @cat0825 in #2045
- fix: fall back to plain text when RSS item content triggers RecursionError by @shoemoney in #2333
- fix(cli): allow Content Understanding conversion from stdin by @uczltw6 in #2318
- fix: correct \underleftarrow macro and map math italic h in equation conversion by @gdols in #2293
- feat(cli): support MARKITDOWN_CU_ENDPOINT / MARKITDOWN_DOCINTEL_ENDPOINT by @seenws in #2358
- fix(csv): strip the UTF-8 BOM and skip blank rows before building the table by @uuzzrm in #2303
- Preserve strikethrough from <strike> and CSS line-through by @gyanu2507 in #2342
- Fix percent-encoded Windows drive paths in file URIs by @tandede in #2315
- fix: escape pipes and newlines in CSV values by @asjad3 in #2266
- fix(epub): safely extract metadata text without crashing on None nodeValue or nested elements by @hsusul in #2247
- fix: handle math run with no text child in OMML->LaTeX conversion by @S1MS4 in #2189
- fix: IpynbConverter.accepts() catches UnicodeDecodeError on non-decodable content (fixes #1894) by @hanhan761 in #1929
- fix(docx): ignore malformed styles missing type by @gingerninja85 in #2190
- Preserve percent-encoded octets in href paths by @Sonai124 in #2173
- fix: remove extra closing brace from caron and ring-above accent templates by @AndrewAvery7 in #2279
- fix: preserve strikethrough semantics for <strike>, line-through CSS, and w:dstrike by @wasim-builds in #2356
- fix: buffer CLI stdin before format detection on Windows by @mohui666 in #2351
- fix(rss): preserve Atom XHTML content by @weivwang in #2297
- fix: initialize md_text in _parse_rss_type to prevent UnboundLocalError by @smedavarapu1 in #2164
- fix: ZipConverter renders '(unknown)' instead of literal 'None' when stream has no source info by @JSap0914 in #2134
- fix: truncate uppercase data image URIs by @pony-maggie in #2122
- fix(doc-intel): default api_version to None in DocumentIntelligenceConverter by @MeiSiristhebest in #2267
- fix(outlook): read .msg string properties saved in the non-Unicode format by @gdols in #2295
- fix: handle URI schemes case-insensitively by @pony-maggie in #2121
- fix: normalize data URI parameter case by @pony-maggie in #2120
- fix(xlsx): tolerate legacy showZeroes sheet views by @he-yufeng in #2064
- docs: use canonical markdown result property by @CooperSheroy in #2259
- fix(youtube): handle missing title metadata without raising AssertionError by @hsusul in #2238
- fix(ipynb): preserve leading # in notebook heading titles by @Alphaxiaoteng in #2371
- fix(docx): preserve underlined text by @he-yufeng in #2017
- fix(pptx): ignore empty llm captions by @Lubrsy706 in #1886
- fix: PptxConverter tolerates None shape.text and notes text by @alvinttang in #2059
- fix(pptx): prevent crash in PptxConverter when chart title lacks a text frame by @aoright in #2194
- fix: catch OSError when exiftool binary is missing (#1960) by @doitgo in #2082
- Fix exiftool JSON decoding to use UTF-8 by @Vedant43hh in #2067
- fix: WikipediaConverter renders hash None heading when page has no title by @hanhan761 in #1990
- fix: guard against missing oMath element in DOCX math converter (#1979) by @hanhan761 in #1995
- fix: handle DOCX files with inconsistent ZIP filename casing (#1812) by @lyydsheep in #2016
- Support short YouTube URLs by @MukundaKatta in #1882
- fix: suppress pydub RuntimeWarning when ffmpeg is missing (fixes #1685) by @hanhan761 in #1985
- chore: remove unused mammoth import from PlainTextConverter (#1951) by @hanhan761 in #1953
- fix(rss): treat Atom text content and summary as plain text by @lazerg in #2374
- fix: ImageConverter gracefully handles LLM API failures (fixes #1942) by @hanhan761 in #1948
- fix(docx): handle unknown math functions in OMML converter without crashing by @MeiSiristhebest in #2268
- Update README to help scope PRs. by @afourney in #2376
- Be sure to run the proper Python version. by @afourney in #2379
- fix(pptx): chart_title.text_frame is never None — use has_text_frame instead by @kapil971390 in #2385
- Preserve all CSV columns by matching the widest row by @afourney in #2430
- Fix CSV parsing for CR-only line endings by @tkv00 in #2412
- fix(rss): support namespace-prefixed Atom feeds by @Elysium-Seeker in #2429
- fix(rss): drop layout whitespace from feed and entry titles by @kevin9327 in #2428
- fix(pptx): do not emit a Notes heading for a slide with no notes by @kevin9327 in #2427
- fix(ipynb): strip the UTF-8 BOM so a notebook is not emitted as raw JSON by @kevin9327 in #2425
- fix(rss): preserve complete feed content and resolve relative link by @afourney in #2432
- fix(epub): forward conversion options to the HTML converter by @kevin9327 in #2426
- Update Docker images to Debian trixie (Python 3.13-slim-trixie) by @erwinkersten in #2421
- Fix Zip converter forwarding kwargs to nested conversions by @As9xm in #2409
- Do not convert an undecodable file to the word "None" by @kevin9327 in #2418
- Fix PPTX shape sorting treating top-zero as missing by @As9xm in #2408
- fix(epub): resolve percent-encoded manifest hrefs to ZIP entries by @sushantlokhande14 in #2413
- Fix --list-plugins help text to reference correct --use-plugins flag by @freetg71527152-ui in #2381
- fix: prefer data-src over placeholder data URI in img src by @macjayz in #2417
- fix(zip): preserve content of entries with duplicate filenames by @lyydsheep in #2434
- fix(pptx): do not emit a heading for a slide with an empty title by @kevin9327 in #2442
- fix(mcp): migrate to MCP SDK 2.x so 2026-07-28 clients can connect by @cagdasyurekli in #2363
- Reject UNC and Windows device paths (similar to how netlocks are alre… by @afourney in #2452
- Expand test matrix to include windows-latest by @afourney in #2453
- Added file paths tests. by @afourney in #2454
- Add arm to matrix. Simplify matrix. by @afourney in #2459
- Workaround for ARM CI tests. by @afourney in #2460
- Fix ANSI Outlook MSG decoding for Japanese code pages and padded strings by @afourney in #2462
- Trim CSV blank runs without repeatedly shifting the row list by @ROTl24 in #2450
- Improve efficiency of escaping pipes in CSVs by @afourney in #2464
- fix: avoid splitting UTF-8 characters during charset detection by @afourney in #2466
- fix(docx): preserve namespaces when repairing stylesheets by @afourney in #2467
- fix(youtube): fall back to HTML when no video content is extracted by @afourney in #2469
- Throw an error when llm client fails with image converter. by @afourney in #2476
- Preserve whitespace underlines by @afourney in #2477
- Refactor Office OCR converters to reuse core conversion pipelines by @afourney in #2506
- fix: bump youtube-transcript-api to >=1.2.3 for Python 3.14 support by @nithin434 in #2407
New Contributors
- @danfiedler-msft made their first contribution in #2316
- @fcatalan92 made their first contribution in #2360
- @cat0825 made their first contribution in #2045
- @shoemoney made their first contribution in #2333
- @uczltw6 made their first contribution in #2318
- @gdols made their first contribution in #2293
- @seenws made their first contribution in #2358
- @uuzzrm made their first contribution in #2303
- @gyanu2507 made their first contribution in #2342
- @tandede made their first contribution in #2315
- @asjad3 made their first contribution in #2266
- @hsusul made their first contribution in #2247
- @S1MS4 made their first contribution in #2189
- @hanhan761 made their first contribution in #1929
- @gingerninja85 made their first contribution in #2190
- @Sonai124 made their first contribution in #2173
- @AndrewAvery7 made their first contribution in #2279
- @wasim-builds made their first contribution in #2356
- @mohui666 made their first contribution in #2351
- @weivwang made their first contribution in #2297
- @smedavarapu1 made their first contribution in #2164
- @JSap0914 made their first contribution in #2134
- @pony-maggie made their first contribution in #2122
- @MeiSiristhebest made their first contribution in #2267
- @he-yufeng made their first contribution in #2064
- @CooperSheroy made their first contribution in #2259
- @Alphaxiaoteng made their first contribution in #2371
- @Lubrsy706 made their first contribution in #1886
- @alvinttang made their first contribution in #2059
- @aoright made their first contribution in #2194
- @doitgo made their first contribution in #2082
- @Vedant43hh made their first contribution in #2067
- @lyydsheep made their first contribution in #2016
- @MukundaKatta made their first contribution in #1882
- @lazerg made their first contribution in #2374
- @kapil971390 made their first contribution in #2385
- @tkv00 made their first contribution in #2412
- @Elysium-Seeker made their first contribution in #2429
- @kevin9327 made their first contribution in #2428
- @erwinkersten made their first contribution in #2421
- @As9xm made their first contribution in #2409
- @sushantlokhande14 made their first contribution in #2413
- @freetg71527152-ui made their first contribution in #2381
- @macjayz made their first contribution in #2417
- @cagdasyurekli made their first contribution in #2363
- @ROTl24 made their first contribution in #2450
- @nithin434 made their first contribution in #2407
Full Changelog: v0.1.7...v0.1.8