fuelen
HTML2Text - extract readable plain text from HTML using Rust NIF
HTML2Text provides a simple and efficient way to extract readable plain text from HTML content. It leverages the power of Rust’s html2text crate to deliver fast HTML parsing and text extraction while maintaining the logical structure and readability of the content.
- Hex: html2text | Hex
- Docs: README — HTML2Text v0.3.0
- GitHub:
Most Liked
fuelen
v0.3.0 is out with two major additions: annotated rich text output and an inspectable HTML container.
Rich text (convert_rich/2)
Returns structured {text, [annotation]} tuples instead of formatted strings, so you can build your own renderer (Slack, Discord, email, etc.):
HTML2Text.convert_rich("<p>Hello <strong>world</strong></p>")
#=> {:ok, [[{"Hello ", []}, {"world", [:strong]}]]}
HTML2Text.convert_rich(~s(<a href="https://example.com"><em>click</em></a>))
#=> {:ok, [[{"click", [{:link, "https://example.com"}, :emphasis]}]]}
Annotations: :strong, :emphasis, :strikeout, :code, {:link, url}, {:image, src}, {:preformat, bool}, {:colour, {r, g, b}}, {:bg_colour, {r, g, b}}.
CSS colour extraction is supported via use_doc_css: true (parses <style> tags and inline styles).
HTML container (HTML2Text.HTML)
A struct that renders HTML as formatted text when inspected in IEx — bold, italic, clickable links (OSC 8), CSS true color, and more:
%{subject: "Alert", body: HTML2Text.HTML.new(email_html)}
# In IEx you see formatted text instead of raw tags:
# %{subject: "Alert", body: #HTML2Text.HTML<
# Dear customer,
# Your order has been shipped.
# >}
Short content stays inline: #HTML2Text.HTML<bold>. to_string/1 returns the original HTML.
Other changes
empty_img_modeoption::ignore(default),{:replace, text}, or:filename- Updated
html2textRust crate from 0.15.1 to 0.16.7 (rowspan support, bug fixes) HTML2Text.Errorcustom exception for bang functions
fuelen
html2text v0.2.0 released — breaking changes and a cleaner API!
This version introduces a new, more consistent API with proper error handling and an optional keyword list for configuration.
What changed
Before (v0.1.x):
HTML2Text.convert(html, width)
# => returns plain string
- The second argument was required and only accepted a width (
integeror:infinity) - Errors (like width too narrow) would raise directly
Now (v0.2.0):
HTML2Text.convert(html, opts)
# => {:ok, result} | {:error, reason}
HTML2Text.convert!(html, opts)
# => result (raises on error)
convert/2now returns{:ok, text}or{:error, reason}convert!/2is a new function that raises on error (for convenience)- The second parameter is now an optional keyword list of options
Popular in Announcing
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #javascript
- #code-sync
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








