Skip to content

v3.4.1

Choose a tag to compare

@Goldziher Goldziher released this 14 May 14:19
· 279 commits to main since this release
v3.4.1
8f29aa1

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: ConversionOptions is now Send + Sync. VisitorHandle switched from Rc<RefCell<dyn HtmlVisitor>> to Arc<Mutex<dyn HtmlVisitor + Send>>, allowing ConversionOptions to be stashed in axum/tokio/rmcp Send-bound contexts. Bindings update bridge constructors to use Arc::new(Mutex::new(...)) and add unsafe impl Send + Sync where required (NAPI, WASM, Magnus, FFI visitor structs).

Fixed

  • R: convert(html, options) no longer rejects ConversionOptions$default() and ConversionOptions$builder()$build(). The extendr wrappers return an ExternalPtr<ConversionOptions>, not an R named list, so decode_options raised "options must be a named list" for every call that used the convenience constructors. decode_options now extracts the wrapper directly before falling back to list decoding.
  • C#: [DllImport("html_to_markdown_ffi")] resolves under ProjectReference consumption. P/Invoke only searches the assembly directory and standard DYLD/LD_LIBRARY paths, not NuGet's runtimes/<RID>/native/ layout, so e2e and any other ProjectReference-based test project failed with DllNotFoundException. 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 explicit Properties/AssemblyInfo.cs.
  • PHP: visitor Custom outputs preserve case for custom element callbacks.
  • PHP: PIE binary discovery on macOS/Linux.
  • Docs: extract_metadata description clarified to note it only gates the metadata pass — table extraction into result.tables still runs unconditionally.

Full notes: CHANGELOG.md