Git Product home page Git Product logo

librsvg's Introduction

Librsvg

This is librsvg - A small library to render Scalable Vector Graphics (SVG), associated with the GNOME Project. It renders SVG files to Cairo surfaces. Cairo is the 2D, antialiased drawing library that GNOME uses to draw things to the screen or to generate output for printing.

Do you want to render non-animated SVGs to a Cairo surface with a minimal API? Librsvg may be adequate for you.

Supported SVG/CSS features: Please see the chapter for supported features in the development guide.

PLEASE DO NOT SEND PULL REQUESTS TO GITHUB. We use gitlab.gnome.org instead. Please see Contributing to librsvg for details.

Table of contents:

[[TOC]]

Supported branches

Generally two branches are supported at any one time:

  • The latest stable branch. See the branches page and look for the one called librsvg-x.yy where the x.yy numbers are highest. You can use this branch safely for production work.

  • The main branch. All development happens here.

Stable branches become unsupported when a new one appears. For example, librsvg-2.55 will become unsupported when librsvg-2.56 appears.

Using librsvg

Compiling: Librsvg uses a mostly normal autotools setup. You may run into some peculiarities due to the Rust internals library if you are cross-compiling or if you are in a build system with no network access, or if you are building binary packages from a librsvg tarball. In those cases, please refer to the Detailed compilation instructions in the development guide.

Documentation: You can read the documentation for librsvg's C API or the Rust API. Please file an issue if you don't find something there that you need.

Bug tracking: If you have found a bug, take a look at our bug tracker. Please see the "reporting bugs" page in the development guide to see how to provide a good bug report.

Asking questions: Feel free to ask questions about using librsvg in the "Platform" category of GNOME's Discourse. You can also ask via chat in the Matrix room for GNOME Rust.

Programming languages: Librsvg exports its API through GObject Introspection. This way, it is available in many programming languages other than C. Please see your language binding's documentation for information on how to load the Rsvg namespace.

Security: For a list of releases with security issues, instructions on reporting security-related bugs, and the security considerations for librsvg's dependencies, see the Security chapter in the development guide.

Contributing to librsvg's development

There is a code of conduct for contributors to librsvg; please see the GNOME Code of Conduct, which is duplicated in the file code-of-conduct.md.

Please see the Development Guide for librsvg on how to contribute to librsvg, how to report bugs, how set up your development environment, and for a description of librsvg's architecture.

Goals of librsvg

Librsvg aims to be a low-footprint library for rendering SVG1.1 and SVG2 images. It is used primarily in the GNOME project to render SVG icons and vector images that appear on the desktop. It is also used in Wikimedia to render the SVG images that appear in Wikipedia, so that even old web browsers can display them. Many projects which casually need to render static SVG images use librsvg.

We aim to be a "render this SVG for me, quickly, and with a minimal API" kind of library.

Feature additions will be considered on a case-by-case basis.

You can read about librsvg's supported SVG and CSS features in the development guide.

Non-goals of librsvg

We don't aim to:

  • Implement every single SVG feature that is in the spec.

  • Implement scripting or external access to the SVG's DOM.

  • Implement support for CSS-based animations (but if you can think of a nice API to do this, we would be glad to know!)

  • Replace the industrial-strength SVG rendering machinery in modern web browsers.

Of course, contributions are welcome. In particular, if you find nice ways of doing the above while still maintaining the existing API of librsvg, we would love to know about it!

Who uses librsvg?

Librsvg is part of the GNOME platform. Inside GNOME, librsvg takes multiple roles:

  • Loads SVGs from the generic gdk-pixbuf loader infrastructure, so any application which uses gdk-pixbuf can load SVGs as if they were raster images.

  • Loads SVG icons for the desktop.

  • Creates SVG thumbnails for the file manager.

  • Loads SVGs within GNOME's default image viewer, Eye of Gnome.

Outside of GNOME's core:

  • GNOME games (chess, five-or-more, etc. to draw game pieces)

  • GIMP

  • GCompris

  • Claws-mail

  • Darktable

  • Mate-panel

  • Evas/Enlightenment

  • Emacs

  • ImageMagick

  • Wikipedia, to render SVGs as raster images for old browsers. Special thanks to Wikimedia for providing excellent bug reports.

Presentations on librsvg

"Replacing C library code with Rust: What I learned with librsvg" was presented at GUADEC 2017. It gives a little history of librsvg, and how/why it is being ported to Rust from C.

"Patterns of refactoring C to Rust: the case of librsvg" was presented at GUADEC 2018. It describes ways in which librsvg's C code was refactored to allow porting it to Rust.

Maintainers

The maintainer of librsvg is Federico Mena Quintero. Feel free to contact me for any questions you may have about librsvg, both its usage and its development. You can contact me in the following ways:

  • Mail me at [email protected].

  • Matrix: I am @federico on the GNOME Hackers and Rust ❤️ GNOME channels on gnome.org's Matrix. I'm there most weekdays (Mon-Fri) starting at about UTC 14:00 (that's 08:00 my time; I am in the UTC-6 timezone). If this is not a convenient time for you, feel free to mail me and we can arrange a time.

  • I frequently blog about librsvg. You may be interested in the articles about porting librsvg from C to Rust, which happened between 2016 and 2020.

librsvg's People

Contributors

aklapper avatar alatiera avatar alexlarsson avatar aryacollection avatar bilelmoussaoui avatar cworth-gh avatar danielpetri1 avatar dlalic avatar domlachowicz avatar eijebong avatar emmanuelp avatar fanc999-1 avatar federicomenaquintero avatar holyshitman avatar ismaell avatar jsparber avatar kalev avatar kleisauke avatar kornelski avatar ledbettj avatar nemequ avatar notriddle avatar pbor avatar pwithnall avatar sophie-h avatar svenfoo avatar takenspc avatar vi-technocat avatar vuntz avatar yalter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.