A high-performance SVG renderer, powered by Rust based resvg and napi-rs.

Related tags

Graphics resvg-js
Overview

resvg-js

GitHub CI Status npm version

resvg-js is a high-performance SVG renderer, powered by Rust based resvg and napi-rs.

  • Fast, safe and zero dependencies!
  • No need for node-gyp and postinstall, the .node file has been compiled for you.
  • Cross-platform support, including Apple M1.
  • Support system fonts and custom fonts in SVG text.

Installation

npm i @resvg/resvg-js
cnpm i @resvg/resvg-js
pnpm i @resvg/resvg-js

Example

This example will load Source Han Serif, and then render the SVG to PNG.

node example/index.js

Loaded 1 font faces in 0ms.
Font './example/SourceHanSerifCN-Light-subset.ttf':0 found in 0.006ms.
✨ Done in 55.65491008758545 ms
SVG PNG
Anime girl SVG Anime girl png

Benchmark

Running "resize width" suite...
  resvg-js(Rust):
    12 ops/s, ±22.66%   | fastest 🚀

  sharp:
    9 ops/s, ±64.52%    | 25% slower

  skr-canvas(Rust):
    7 ops/s, ±3.72%    | 41.67% slower

  svg2img(canvg and node-canvas):
    6 ops/s, ±16.94%    | slowest, 50% slower

Support matrix

node12 node14 node16 npm
Windows x64 npm version
Windows x32 npm version
Windows arm64 npm version
macOS x64 npm version
macOS arm64(M1) npm version
Linux x64 gnu npm version
Linux x64 musl npm version
Linux arm gnu npm version
Linux arm64 gnu npm version
Linux arm64 musl npm version
Android arm64 npm version

Test in local

npm i
npm build
npm test

Roadmap & Contributing

I will consider implementing the following features, if you happen to be interested, please feel free to discuss with me or submit a PR.

  • Support for getting SVG Bounding box
  • Output usvg-simplified SVG string
  • Support for generating more lossless bitmap formats, e.g. avif, webp, JPEG XL
  • Support async API (dependent on napi-rs PR #760)
  • Support WebAssembly(.wasm)

Release package

We use GitHub actions to automatically publish npm packages.

# 1.0.0 => 1.0.1
npm version patch

# or 1.0.0 => 1.1.0
npm version minor

git push --follow-tags

License

MPLv2.0

Comments
  • Support WebAssembly (wasm)

    Support WebAssembly (wasm)

    This looks like a really great project, thanks!

    I saw wasm on the roadmap in the readme so I thought I would create an issue to show support for this feature request 🙂

    I'm interested in running resvg with a browser, with Node.js, and with other edge-compute tools.

    opened by styfle 10
  • Electron MacOS Universal Build not working

    Electron MacOS Universal Build not working

    Hi @yisibl, first of all, thanks for this excellent library, it is working really well. I just have the following problem:

    I have an Electron app which uses resvg-js. For MacOS it is packaged using electron-builder. The configuration creates a universal build, which means, that the application is packaged for x86 and for arm64 (M1) and then bundled into a single .dmg file. This is done using a GitHub Action running macos-latest.

    The problem now is, that when I try to start the App on a M1 Mac, I get the following error: grafik As you can see, the binary for darwin arm64 is missing. It also does not help to add that package to the dependencies manually, because it is not being installed on the build system (the arch in the package.json does not match).

    Can I somehow "force" this package to be installed / included?

    opened by hrueger 9
  • sharp is faster for me when mass converting SVGs to HQ PNGs

    sharp is faster for me when mass converting SVGs to HQ PNGs

    I was interested in using resvg-js in-place of sharp for its advertised performance benefits, but I'm finding that it's actually much slower. In addition, resvg-js crashes for me when processing more than ~400 SVGs at once, and the produced DPI is not accurate.

    Please let me know if there's anything I can improve/fix in the configuration.

    Reproduction

    https://github.com/privatenumber/sharp-vs-resvgjs

    Comparison evaluation

    sharp is much faster

    When converting 400 SVG icons from simple-icons to 2500 DPI 800px width PNGs, sharp is 3x faster than resvg-js.

    resvg: { duration: '5472ms', icons: 400 }
    sharp: { duration: '1569ms', icons: 400 }
    sharp is faster by 3.49x
    

    resvg-js crashes on too many icons

    The number of icons is limited to 400 because when processing too many icons at once, resvg-js crashes the whole Node.js process:

    $ pnpm benchmark
    
    > node scripts/benchmark
    
    thread '<unnamed>' panicked at 'the previous segment must be M/L/C', /Users/runner/.cargo/git/checkouts/resvg-4b7e4ee32ad6d954/cab0b15/usvg/src/pathdata.rs:160:17
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    fatal runtime error: failed to initiate panic, error 5
    

    rsvg-js doesn't yield expected DPI

    After benchmarking, the resulting PNGs are saved to pngs/. When comparing icons between sharp and rsvg, the DPI on sharp is 2400 (as expected), but the DPI on resvg-js is 72.

    Zoom in to compare difference

    | resvg-js - 11.1 KB - 72 DPI | sharp - 16.6 KB - 2400 DPI | | - | - | | 500px svg | 500px svg |

    opened by privatenumber 8
  • foreignObject can't work

    foreignObject can't work

    hi, this is a great library~

    When I want to solve the text wrapping problem in svg, I try to use , but it can't work in nodejs. So are there any plans to support this?

    Thanks~

    opened by tyutjohn 7
  • paint-order on svg doesn't work

    paint-order on svg doesn't work

    I want to set margin for font, like the textStroke property of css, but it doesn't work when I use paint-order:stroke。This is an example on MDN <svg xmlns="http://www.w3.org/2000/svg" width="400" height="200"> <linearGradient id="g" x1="0" y1="0" x2="0" y2="1"> <stop stop-color="#888"/> <stop stop-color="#ccc" offset="1"/> </linearGradient> <rect width="400" height="200" fill="url(#g)"/> <g fill="crimson" stroke="white" stroke-width="6" stroke-linejoin="round" text-anchor="middle" font-family="sans-serif" font-size="50px" font-weight="bold"> <text x="200" y="75">stroke over</text> <text x="200" y="150" paint-order="stroke" id="stroke-under">stroke under</text> </g> </svg> I got two fonts with fill first and stroke after So how can I set this in resvg ? This looks strange

    opened by tyutjohn 6
  • Using clip-path on <image> doesn't take affect

    Using clip-path on doesn't take affect

    <svg 
      xmlns="http://www.w3.org/2000/svg"
      xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1200 240" width="1200" height="240"
    >
    <style>
    text {
      font-weight: 300;
      font-size: 12px;
      fill: #777777;
      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
    }
    image {
      border-radius: 50%;
    }
    .contributor-link {
      cursor: pointer;
    }
    .contributors-title {
      font-weight: 500;
      font-size: 20px;
    }
    </style>
    <text class="contributors-title" x="600" y="40" text-anchor="middle">Contributors</text>
    <a class="contributor-link" xlink:href="https://github.com/Jinjiang" target="_blank" id="Jinjiang">
      <image x="55" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/206848?v=4" clip-path="inset(0% round 100%)" />
    <text x="80" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">Jinjiang</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/ShenQingchuan" target="_blank" id="ShenQingchuan">
      <image x="135" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/46062972?v=4" clip-path="inset(0% round 100%)" />
    <text x="160" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">ShenQingchuan</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/jCodeLife" target="_blank" id="jCodeLife">
      <image x="215" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/50767049?v=4" clip-path="inset(0% round 100%)" />
    <text x="240" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">jCodeLife</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/pakchoily" target="_blank" id="pakchoily">
      <image x="295" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/59410698?v=4" clip-path="inset(0% round 100%)" />
    <text x="320" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">pakchoily</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/wxsms" target="_blank" id="wxsms">
      <image x="375" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/5960988?v=4" clip-path="inset(0% round 100%)" />
    <text x="400" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">wxsms</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/Yorksh1re" target="_blank" id="Yorksh1re">
      <image x="455" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/70258597?v=4" clip-path="inset(0% round 100%)" />
    <text x="480" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">Yorksh1re</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/KiritaniAyaka" target="_blank" id="KiritaniAyaka">
      <image x="535" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/26200808?v=4" clip-path="inset(0% round 100%)" />
    <text x="560" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">KiritaniAyaka</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/Matrix53" target="_blank" id="Matrix53">
      <image x="615" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/55696968?v=4" clip-path="inset(0% round 100%)" />
    <text x="640" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">Matrix53</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/KimYangOfCat" target="_blank" id="KimYangOfCat">
      <image x="695" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/32960305?v=4" clip-path="inset(0% round 100%)" />
    <text x="720" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">KimYangOfCat</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/earthaYan" target="_blank" id="earthaYan">
      <image x="775" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/25888900?v=4" clip-path="inset(0% round 100%)" />
    <text x="800" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">earthaYan</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/SkyeYoung" target="_blank" id="SkyeYoung">
      <image x="855" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/48400568?v=4" clip-path="inset(0% round 100%)" />
    <text x="880" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">SkyeYoung</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/byog" target="_blank" id="byog">
      <image x="935" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/7764115?v=4" clip-path="inset(0% round 100%)" />
    <text x="960" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">byog</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/wangyan666" target="_blank" id="wangyan666">
      <image x="1015" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/90406579?v=4" clip-path="inset(0% round 100%)" />
    <text x="1040" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">wangyan666</text>
    </a>
    <a class="contributor-link" xlink:href="https://github.com/xfq" target="_blank" id="xfq">
      <image x="1095" y="78" width="50" height="50" xlink:href="https://avatars.githubusercontent.com/u/2863444?v=4" clip-path="inset(0% round 100%)" />
    <text x="1120" y="146" text-anchor="middle" class="contributor-name" fill="currentColor">xfq</text>
    </a>
    
    </svg>
    

    Render result on the Vercel site

    image

    clip-path doesn't make the avatar become circle

    opened by ShenQingchuan 5
  • Update types definition

    Update types definition

    The type definition was not updated. This PR tries to fix it.

    I tried to infer the type from the rust types, but I had some doubts. Especially with the fitTo prop.

    opened by axelhzf 5
  • Error: `No loader is configured for

    Error: `No loader is configured for ".node" files: node_modules/@resvg/resvg-js-linux-x64-musl/resvgjs.linux-x64-musl.node` with Vite 4 and Netlify

    Hi, apologies if this is the wrong repo for this error but I am following https://geoffrich.net/posts/svelte-social-image/ and it works locally, but fails when I try to deploy to Netlify:

    image

    Full error message

    10:10:26 PM: ✘ [ERROR] No loader is configured for ".node" files: node_modules/@resvg/resvg-js-linux-x64-musl/resvgjs.linux-x64-musl.node
    10:10:26 PM:     node_modules/@resvg/resvg-js/js-binding.js:1:2980:
    10:10:26 PM:       1 │ ...Binding=require("@resvg/resvg-js-linux-x64-musl")}catch(e){loadE...
    10:10:26 PM:         ╵                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    10:10:26 PM: ✘ [ERROR] No loader is configured for ".node" files: node_modules/@resvg/resvg-js-linux-x64-gnu/resvgjs.linux-x64-gnu.node
    10:10:26 PM:     node_modules/@resvg/resvg-js/js-binding.js:1:3212:
    10:10:26 PM:       1 │ ...eBinding=require("@resvg/resvg-js-linux-x64-gnu")}catch(e){loadE...
    10:10:26 PM:         ╵                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    

    I'm not sure where this message comes from but you can see the error in this branch https://github.com/sw-yx/swyxkit/tree/addOgimage when deployed to Netlify: https://app.netlify.com/sites/swyxkit/deploys/63954a072248cf0008f384ae

    blocking https://github.com/sw-yx/swyxkit/pull/145 right now with this error message

    opened by sw-yx 4
  • [Node] concurrent usage wrong speed

    [Node] concurrent usage wrong speed

    resvg-js performance in concurrency capabilities does not meet expectations. It looks like a linear growth. Some places are not well ? I am comparing the following code with sharp lib If there are any mistakes in writing, welcome point out ~

    How To Test: time tsx test.cts Test Code:

    // test.cts
    /* eslint-disable no-console */
    import { renderAsync } from '@resvg/resvg-js'
    import sharp from 'sharp'
    
    const svg = '<svg width="1200" height="628" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 628" fill="#000"><path d="M37.59.25l36.95 64H.64l36.95-64z"></path></svg>'
    
    export async function genPNG(svg: string) {
      const render = await renderAsync(svg, {
        fitTo: {
          mode: 'width',
          value: 1200,
        },
      })
      return render.asPng()
      // return await sharp(Buffer.from(svg))
      //   .resize(1200, 630)
      //   .png()
      //   .toBuffer()
    }
    
    (async function () {
      const mock = new Array(1000).fill(null)
      console.log('`@resvg/resvg-js` Current Test Concurrent Length: ', mock.length)
      Promise.all(mock.map(_ => genPNG(svg)))
    }()).catch((err) => {
      console.error(err)
      process.exit(1)
    })
    
    

    Test Screenshot: image

    image
    opened by Zhengqbbb 4
  • feat: strip text features and reduce the size of the generated wasm file

    feat: strip text features and reduce the size of the generated wasm file

    The current version of WASM does not yet implement loading fonts to render text, so this PR will disable text features in WASM, thus reducing WASM file size.

    • before: ≈ 1.8MB
    • after: ≈ 1.3MB
    opened by yisibl 4
  • Cannot render <image> node. Both external and embedded image.

    Cannot render node. Both external and embedded image.

    Thank you! This is a great project. But after a quick evaluation, it seems that resvg-js does not support <image> in <svg>. Both external and embedded image does not work. This is a know issue or a bug, or I use it wrong?

    Example:

        <svg width="200" height="200"
            xmlns="http://www.w3.org/2000/svg">
            <image 
                href=
    "https://media.geeksforgeeks.org/wp-content/cdn-uploads/20190710102234/download3.png" 
                height="200" width="200"/>
        </svg>
    
    2.1 
    opened by suyuan-chang 4
  • chore(deps): bump json5 from 1.0.1 to 1.0.2

    chore(deps): bump json5 from 1.0.1 to 1.0.2

    Bumps json5 from 1.0.1 to 1.0.2.

    Release notes

    Sourced from json5's releases.

    v1.0.2

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295). This has been backported to v1. (#298)
    Changelog

    Sourced from json5's changelog.

    Unreleased [code, diff]

    v2.2.3 [code, diff]

    v2.2.2 [code, diff]

    • Fix: Properties with the name __proto__ are added to objects and arrays. (#199) This also fixes a prototype pollution vulnerability reported by Jonathan Gregson! (#295).

    v2.2.1 [code, diff]

    • Fix: Removed dependence on minimist to patch CVE-2021-44906. (#266)

    v2.2.0 [code, diff]

    • New: Accurate and documented TypeScript declarations are now included. There is no need to install @types/json5. (#236, #244)

    v2.1.3 [code, diff]

    • Fix: An out of memory bug when parsing numbers has been fixed. (#228, #229)

    v2.1.2 [code, diff]

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • chore(deps): update dependency dts-bundle-generator to v7

    chore(deps): update dependency dts-bundle-generator to v7

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | dts-bundle-generator | ^6.12.0 -> ^7.0.0 | age | adoption | passing | confidence |


    Release Notes

    timocov/dts-bundle-generator

    v7.1.0

    Compare Source

    Fixed
    New Contributors

    Full Changelog: https://github.com/timocov/dts-bundle-generator/compare/v7.0.0...v7.1.0

    v7.0.0: 7.0.0

    Compare Source

    Breaking changes
    • Minimal typescript version changed from 3.0 to 4.5
    • yargs dependency was upgraded from 17.2 to 17.6
    • Minimal NodeJS version changed from 12 to 14
    • Compilation target changed from es5 to es2020 (modules are still commonjs though)

    See #​224

    Fixed
    • Improve support of non-relative imports in projects with a baseUrl (see #​224)

    Many thanks to @​josh- for their contribution!

    v6.13.0: 6.13.0

    Compare Source

    Fixed
    New Contributors

    Full Changelog: https://github.com/timocov/dts-bundle-generator/compare/v6.12.0...v6.13.0


    Configuration

    📅 Schedule: Branch creation - "after 10pm on tuesday" in timezone Asia/Shanghai, Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • fix(deps): update rust crate resvg to 0.28.0

    fix(deps): update rust crate resvg to 0.28.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | resvg | dependencies | minor | 0.25.0 -> 0.28.0 |


    Release Notes

    RazrFalcon/resvg

    v0.28.0

    Compare Source

    Added
    • usvg::Text and usvg::NodeKind::Text.
    Changed
    • usvg isn't converting text to paths by default now. A caller must call usvg::Tree::convert_text or usvg::Text::convert from usvg-text-layout crate on demand.
    • usvg text layout implementation moved into usvg-text-layout crate.
    • During SVG size recovery, when no width, height and viewBox attributes have been set, text nodes are no longer taken into an account. This is because a text node has no bbox before conversion into path(s), which we no longer doing during parsing.
    • usvg is purely an SVG parser now. It doesn't convert text to paths and doesn't write SVG anymore.
    • usvg::filter::ConvolveMatrixData methods are fields now.
    Removed
    • usvg CLI binary. No alternatives for now.
    • All usvg build features.
      • filter. Filter elements are always parsed by usvg now.
      • text. Text elements are always parsed by usvg now.
      • export. usvg cannot write an SVG anymore.
    • usvg::Tree::to_string. usvg cannot write an SVG anymore.
    • usvg::TransformFromBBox trait. This is just a regular usvg::Transform method now.
    • usvg::OptionsRef. usvg::Options is enough from now.
    • usvg::Options::fontdb. Used only by usvg-text-layout now.
    • --dump-svg from resvg.

    v0.27.0

    Compare Source

    Added
    • lengthAdjust and textLength attributes support.
    • Support automatic image size detection. width and height attributes can be omitted or set to auto on image now. SVG2
    Fixed
    • --query-all flag in resvg CLI.
    • Percentage values resolving.

    v0.26.1

    Compare Source

    Fixed
    • Allow dominant-baseline and alignment-baseline to be set via CSS.

    v0.26.0

    Compare Source

    Added
    • Minimal dominant-baseline and alignment-baseline support.
    • mix-blend-mode and isolation support. SVG2
    • Allow writing resvg output to stdout.
    • Allow disabling text kerning using kerning="0" and style="font-kerning:none". SVG2
    • Allow <percentage> values for opacity, fill-opacity, stroke-opacity, flood-opacity and stop-opacity attributes.
      You can write opacity="50%" now. SVG2
    Changed
    • Disable focal point correction on radial gradients to conform with SVG 2. SVG2
    • Update feMorphology radius value resolving.
    Fixed
    • Do not clip nested svg when only the viewBox attribute is present.

    Configuration

    📅 Schedule: Branch creation - "after 10pm on tuesday" in timezone Asia/Shanghai, Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • fix(deps): update rust crate fontdb to v0.11.1

    fix(deps): update rust crate fontdb to v0.11.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | fontdb | dependencies | minor | =0.9.3 -> =0.11.1 |


    Release Notes

    RazrFalcon/fontdb

    v0.11.1

    Compare Source

    Fixed
    • Always prefer Typographic Family to Family Name when available. @​CryZe
    • Prevent duplicated family names.

    v0.11.0

    Compare Source

    Added
    • Support localized family names.
    • Improve fontconfig support. @​declantsien
    Changed
    • FaceInfo::family was replaced with FaceInfo::families and contains a list of family names now.
    Fixed
    • Improve family name detection in variable fonts.

    v0.10.0

    Compare Source

    Added

    Configuration

    📅 Schedule: Branch creation - "after 10pm on tuesday" in timezone Asia/Shanghai, Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • Compatible with Electron 21+ / V8's Memory Cage?

    Compatible with Electron 21+ / V8's Memory Cage?

    Hi, I couldn't find any info on whether this is compatible with the Memory Cage of Electron 21+. Is it? I just don't want to risk that it works on my machine and users of my application are doing something differently and it crashes for them.

    opened by hrueger 3
Releases(v2.2.0)
Owner
一丝
前端小学生,resvg-js、iconfont.cn、PostCSS 官方开发者
一丝
svgcleaner could help you to clean up your SVG files from the unnecessary data.

svgcleaner svgcleaner helps you clean up your SVG files, keeping them free from unnecessary data. Table of Contents Purpose Goals Alternatives Charts

Evgeniy Reizner 1.5k Jan 9, 2023
A vector graphics renderer using OpenGL with a Rust & C API.

bufro A vector graphics renderer using OpenGL with a Rust & C API. A Rust example can be found in examples/quickstart.rs (using glutin). A C example c

Aspect 9 Dec 15, 2022
ASCII 3D-renderer using Ray Marching technique written in Rust with NCurses

pistol ASCII renderer using Ray Marching technique written in Rust ?? with NCurses. This project is a giga-chad compared to my previous attempt to wri

Eugene Sokolov 5 Dec 10, 2022
CPU-Accelerated 3D renderer fully written in Rust

Bogo-Renderer CPU-Accelerated 3D renderer fully written in Rust. This is 100% hobby project. Don't expect anything from it. Showcases Features Soft Sh

null 2 Jan 19, 2022
A graphics engine that I made in rust for my high school graphics course.

A graphics engine that I made in rust for my high school graphics course.

Mohammad Khan 1 May 29, 2022
Native WebGPU implementation based on gfx-hal

This is an active GitHub mirror of the WebGPU implementation in Rust, which now lives in "gfx/wgpu" of Mozilla-central. Issues and pull requests are a

Rust Graphics Mages 6.5k Jan 9, 2023
visualizations/charts for media collections, based on mediainfo

Media Collection Viewer Early WIP! Demo is live Description Upload a mediainfo.json

Ashley 14 Sep 14, 2022
GLFW3 bindings and idiomatic wrapper for Rust.

glfw-rs GLFW bindings and wrapper for The Rust Programming Language. Example extern crate glfw; use glfw::{Action, Context, Key}; fn main() { le

PistonDevelopers 546 Jan 3, 2023
Safe and rich Rust wrapper around the Vulkan API

Vulkano See also vulkano.rs. Vulkano is a Rust wrapper around the Vulkan graphics API. It follows the Rust philosophy, which is that as long as you do

null 3.6k Jan 3, 2023
A cool, fast maze generator and solver written in Rust

MazeCruncher Welcome to maze cruncher! Download Standalone Here Usage To get started, just run the standalone .exe in target/release or compile and ru

null 69 Sep 20, 2022
CLI for image processing with histograms, binary treshold and other functions

Image-Processing-CLI-in-Rust CLI for processing images in Rust. Some implementation is custom and for some functionality it uses 3rd party libraries.

Miki Graf 25 Jul 24, 2022
Sub-pixel precision light spot rendering library for astronomy and video tracking applications.

Planetarium Sub-pixel precision light spot rendering library for astronomy and video tracking applications. Example usage use planetarium::{Canvas, Sp

Sergey Kvachonok 5 Mar 27, 2022
A simple and elegant, pipewire graph editor

pw-viz A simple and elegant, pipewire graph editor This is still a WIP, node layouting is kinda jank at the moment. Installation A compiled binary is

null 180 Dec 27, 2022
A cargo subcommand for creating GraphViz DOT files and dependency graphs

cargo-graph Linux: A cargo subcommand for building GraphViz DOT files of dependency graphs. This subcommand was originally based off and inspired by t

Kevin K. 213 Nov 24, 2022
Szalinski: A Tool for Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations

Szalinski: A Tool for Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations

UW PLSE 24 Aug 15, 2022
Real-time 3D orientation visualization of a BNO055 IMU using Bissel and Bevy

orientation This is a demonstration of real-time visualization of the attitude of a BNO055 IMU across a wireless network to a Bevy app using the Bisse

chris m 4 Dec 10, 2022
Small, lightweight and fast library for rendering text with wgpu.

wgpu-text wgpu-text is a wrapper over glyph-brush for fast and easy text rendering in wgpu. This project was inspired by and is similar to wgpu_glyph,

Leon 20 Nov 30, 2022
A toy ray tracer in Rust

tray_rust - A Toy Ray Tracer in Rust tray_rust is a toy physically based ray tracer built off of the techniques discussed in Physically Based Renderin

Will Usher 492 Dec 19, 2022
A low-overhead Vulkan-like GPU API for Rust.

Getting Started | Documentation | Blog gfx-rs gfx-rs is a low-level, cross-platform graphics and compute abstraction library in Rust. It consists of t

Rust Graphics Mages 5.2k Jan 8, 2023