🧊 Frostmark
An HTML + Markdown viewer for iced
Render rich text in your iced app at lightning-fast speeds using plain HTML or Markdown!

Usage
- Create a
MarkStateand store it in your application state.
MarkState::with_html_and_markdown(YOUR_TEXT)
// or if you just want HTML
MarkState::with_html(YOUR_TEXT)
- In your
viewfunction use aMarkWidget.
iced::widget::container( // just an example
MarkWidget::new(&self.mark_state)
)
.padding(10)
Example
You can find runnable examples here
use ;
use ;
const YOUR_TEXT: &str = "Hello from **markdown** and <b>HTML</b>!";
Note: Markdown support is optional and you can disable the markdown
feature to have more lightweight, HTML-only support.
How does this work
- Markdown (if present) is converted to HTML using
comrak. - HTML is parsed using
html5ever, from the Servo project. - The resulting DOM is rendered directly to
icedwidgets using a custom renderer.
No custom widget types - everything is built from standard iced components like:
column, row, rich_text, button, horizontal_bar, etc.
Rendering happens right inside impl Into<Element> for MarkWidget.
Roadmap
- Better widget styling options.
- Quick “render and cache” API
- Support for more elements (eg: superscript)
- Ensure stability, and publish on crates.io
Contributing
This library is experimental. Bug reports and pull requests are welcome; contributions are appreciated!
- License: Dual licensed under MIT and Apache 2.0.