v3.4.1
html-to-markdown 3.4.1 — high-performance HTML to Markdown converter with a Rust core and polyglot bindings (Python, Node/TypeScript, Ruby, PHP, Go, Java, C#, Elixir, R, WebAssembly, C FFI).
Changed
- core:
ConversionOptionsis nowSend + Sync.VisitorHandleswitched fromRc<RefCell<dyn HtmlVisitor>>toArc<Mutex<dyn HtmlVisitor + Send>>, allowingConversionOptionsto be stashed in axum/tokio/rmcpSend-bound contexts. Bindings update bridge constructors to useArc::new(Mutex::new(...))and addunsafe impl Send + Syncwhere required (NAPI, WASM, Magnus, FFI visitor structs).
Fixed
- R:
convert(html, options)no longer rejectsConversionOptions$default()andConversionOptions$builder()$build(). The extendr wrappers return anExternalPtr<ConversionOptions>, not an R named list, sodecode_optionsraised"options must be a named list"for every call that used the convenience constructors.decode_optionsnow extracts the wrapper directly before falling back to list decoding. - C#:
[DllImport("html_to_markdown_ffi")]resolves underProjectReferenceconsumption. P/Invoke only searches the assembly directory and standardDYLD/LD_LIBRARYpaths, not NuGet'sruntimes/<RID>/native/layout, so e2e and any other ProjectReference-based test project failed withDllNotFoundException. The host-RID native library now ships flat alongside the assembly. - C#: CS0579 "Duplicate
AssemblyTitleAttribute" eliminated. All three csproj files now set<GenerateAssemblyInfo>false</GenerateAssemblyInfo>and ship explicitProperties/AssemblyInfo.cs. - PHP: visitor
Customoutputs preserve case for custom element callbacks. - PHP: PIE binary discovery on macOS/Linux.
- Docs:
extract_metadatadescription clarified to note it only gates the metadata pass — table extraction intoresult.tablesstill runs unconditionally.
Full notes: CHANGELOG.md