Tiny SKia is a [[BSD-3]] licensed 2D graphics library written in [[Rust]].
- Website
- [Source](https://github.com/RazrFalcon/tiny-skia)
- Documentation
- AlternativeTo
> A tiny Skia subset ported to Rust
# Notability
[[GUI - Skia]] but Rust.
It's benchmark page is useful for comparing various graphics libraries.
# Philosophy
> `tiny-skia` should be viewed as a Rust 2D rendering library that uses Skia algorithms internally. We have a completely different public API. The internals are also extremely simplified. But all the core logic and math is borrowed from Skia. Hence the name.
> The goal is to provide an absolute minimal, CPU only, 2D rendering library for the Rust ecosystem, with a focus on a rendering quality, speed and binary size.
> Currently, `tiny-skia` is 20-100% slower than Skia on x86-64 and about 100-300% slower on ARM. Which is still faster than [cairo](https://www.cairographics.org/) and [raqote](https://github.com/jrmuizel/raqote) in many cases. See benchmark results [here](https://razrfalcon.github.io/tiny-skia/x86_64.html).
> Skia is a huge library and we support only a tiny part of. And more importantly, we do not plan to support many feature at all.
> As for the porting process itself, Skia uses goto, inheritance, virtual methods, linked lists, const generics and templates specialization a lot, and all of this features are unavailable in Rust. There are also a lot of pointers magic, implicit mutations and caches. Therefore we have to compromise or even rewrite some parts from scratch.
# OS Support
> Also note, that neither Skia or `tiny-skia` are supporting dynamic CPU detection, so by enabling newer instructions you're making the resulting binary non-portable.
- [[AMD64]]
- [[ARM]] (Apple [[M1]])
# Features
## Missing Features
- Doesn't support text rendering. I assume it needs to be composited with an external text renderer then?
- Doesn't support "Advanced Bézier path operations" or "Path effects (except dashing)".
- Only supports 8-bit RGBA channels.
- No bilinear + mipmap down-scaling support.
- Unlike Skia, only `Pattern` is allowed to have opacity. In all other cases you should adjust colors opacity manually.
# Tips
# References
- https://razrfalcon.github.io/tiny-skia/x86_64.html