Development guide for librsvg
Welcome to the developer’s guide for librsvg. This is for people who want to work on the development of librsvg itself, not for users of the library or the rsvg-convert program.
If you want to modify this document, please see its source code.
Introduction
Librsvg is a project with a long history; it started 2001 as a way to use the then-new Scalable Vector Graphics format (SVG) for GNOME’s icons and other graphical assets on the desktop. Since then, it has evolved into a few different tools.
Librsvg as a product - What comes out of this repository once it is compiled?
Supported SVG and CSS features - Supported elements, attributes, and properties.
Roadmap - Ever-changing list of priorities for the maintainers; check this often!
Detailed compilation instructions - Cross compilation, debug/release builds, special options.
Security - Reporting security bugs, releases with security fixes, security of dependencies.
Getting started
Understand the code
Test suite - move tests/readme here?
Design documents
Before embarking on big changes to librsvg, please write a little design document modeled on the following ones, and submit a merge request. We can then discuss it before coding. This way we will have a sort of big-picture development history apart from commit messages.
See https://rustc-dev-guide.rust-lang.org/walkthrough.html, section Overview, to formalize the RFC process for features vs. drive-by contributions.
Information for maintainers
Overview of the maintainer’s workflow.
Marge-bot.
Documentation on the CI.
Documentation on the OSS-Fuzz integration and its maintenance.
References
SVG2 specification. This is the current Candidate Recommendation and it should be your main reference…
… except for things which are later clarified in the SVG2 Editor’s Draft.
References listed in the SVG2 spec - if you need to consult the CSS specifications.
SVG1.1 specification. Use this mostly for historical reference.
SVG Working Group repository. The github issues are especially interesting. Use this to ask for clarifications of the spec.
Presentation at GUADEC 2017, Replacing C library code with Rust: What I learned with librsvg. It gives a little history of librsvg, and how/why it was being ported to Rust from C.
Presentation at GUADEC 2018, Patterns of refactoring C to Rust: the case of librsvg. It describes ways in which librsvg’s C code was refactored to allow porting it to Rust.
Federico Mena’s blog posts on librsvg - plenty of of history and stories from the development process.
Talks on librsvg.