5 min read

Graphite: Free Node-Based Vector and Raster Editor (GitHub, Scanned)

A free, open-source 2D graphics editor mixing layers with a procedural node graph, in your browser.

Graphite logo
✅
Scan: safe. Nothing to warn about. No secrets or suspicious code; the install hook only fetches fonts and website assets, and the advisories are mostly in build tooling. Scanned Oct 26, 2026; the full report is below.

Graphite is a 2D graphics editor that looks like a familiar layer-based design app on the surface and runs on a node graph underneath. Every shape, boolean operation, pattern and effect stays editable after the fact, so you can change a parameter at the start of a design and see everything downstream update. That nondestructive, procedural approach is what sets it apart from Inkscape or Illustrator, and it makes generative patterns, repeated elements and parametric layouts easy.

It started as a vector editor and is growing into an all-round 2D toolbox: raster editing, digital painting, motion graphics, desktop publishing and compositing are on the roadmap, built more like a game engine than a typical creative app. The engine is written in Rust and compiled to WebAssembly, so the full editor runs in a browser tab at editor.graphite.art with nothing to install.

It is still alpha: expect missing features and rough edges next to mature tools. It is community-built and funded, dual-licensed MIT or Apache-2.0, with about 27,700 stars and 187 contributors.

Who it is for

Designers and digital artists curious about procedural, node-based workflows, people who want a free vector editor that runs anywhere, and Rust developers looking for an approachable graphics project to contribute to.

Getting started

1. Clone the source (or skip all this and use the browser editor at editor.graphite.art)

git clone https://github.com/GraphiteEditor/Graphite.git

2. Build and run the dev server at http://localhost:8080 (needs Rust and Node.js)

cd Graphite && cargo run

cargo run checks for the system dependencies it needs and helps install any that are missing before starting the editor in your browser.

Safety scan

We cloned GraphiteEditor/Graphite at commit 3bb5bde on Oct 26, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • No secrets, no suspicious code patterns, no committed binaries and no bare-IP URLs across about 259,000 lines of Rust.
  • The one npm hook is the website's postinstall (website/.build-scripts/install.ts). It copies font files out of node_modules, downloads text-balancer.js from static.graphite.art and pulls favicons from the project's branding archive. It only runs when building the graphite.art website. Seven Cargo build scripts compile shaders, resources and the licence list.
  • 117 known advisories (2 critical, 51 high): 46 hits in the main Cargo.lock, one critical in the zip crate's extract function, 23 in the rawkit library's lockfile, and 67 across the npm lockfiles for the frontend and website build tooling. The browser editor runs in the browser's sandbox.
  • Ten workflows, none using pull_request_target, and all 24 third-party actions pinned to commits. The scanner reports no licence file because the project uses two, LICENSE-MIT and LICENSE-APACHE; no security policy, Dependabot or CodeQL.

What the scanner counted

CheckResult
SecretsNone found.
Suspicious codeNone found.
Install-time code1 npm lifecycle script. 7 Cargo build scripts
Committed binariesNone.
CI workflows10 workflows. None use pull_request_target. 0 of 24 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often github.com, www.adobe.com, graphite.art, files.keavon.com. No URLs to bare IP addresses.
Known vulnerabilities117 advisories across 1,307 pinned packages: 2 critical, 51 high, 32 moderate, 8 low, 24 unrated. Cargo.lock: 788 packages, 46 advisories; frontend/package-lock.json: 426 packages, 58 advisories; libraries/rawkit/Cargo.lock: 288 packages, 23 advisories; tools/web-editor-driver/playwright/package-lock.json: 1 packages, 0 advisories; website/package-lock.json: 32 packages, 9 advisories.
Project hygieneHas none of the usual files. Missing security policy, automated dependency updates, CodeQL, licence file, contributing guide.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

npm lifecycle scripts (1)
  • website/package.json postinstall: node .build-scripts/install.ts
Worst known vulnerabilities (24 of 117)
AdvisorySeverityPackageSummary
GHSA-4684-h2q9-2vcpcriticalzip@8.6.0ZipStreamReader::extract() and ZipArchive::extract() apply Unix permissions through symlinks without confining the targe…
GHSA-23hp-3jrh-7fpwcriticaltar@7.5.13node-tar: Decompression/parse DoS via unlimited input
GHSA-394x-vwmw-crm3highaws-lc-sys@0.37.1AWS-LC X.509 Name Constraints Bypass via Wildcard/Unicode CN
GHSA-65p9-r9h6-22vjhighaws-lc-sys@0.37.1AWS-LC has Timing Side-Channel in AES-CCM Tag Verification
GHSA-9f94-5g5w-gf6rhighaws-lc-sys@0.37.1CRL Distribution Point Scope Check Logic Error in AWS-LC
GHSA-hfpc-8r3f-gw53highaws-lc-sys@0.37.1AWS-LC has PKCS7_verify Signature Validation Bypass
GHSA-vw5v-4f2q-w9xfhighaws-lc-sys@0.37.1AWS-LC has PKCS7_verify Certificate Chain Validation Bypass
GHSA-cfwj-9wp5-wqvphighaws-lc-sys@0.37.1PKCS7_verify Certificate Chain Validation Bypass in AWS-LC
RUSTSEC-2026-0194highquick-xml@0.38.3Quadratic run time when checking a start tag for duplicate attribute names
RUSTSEC-2026-0195highquick-xml@0.38.3Unbounded namespace-declaration allocation in `NsReader` enables memory-exhaustion denial of service
GHSA-4w2j-m93h-cj5jhighquinn-proto@0.11.13Quinn: Remote memory exhaustion in quinn-proto from unbounded out-of-order stream reassembly
GHSA-6xvm-j4wr-6v98highquinn-proto@0.11.13Quinn affected by unauthenticated remote DoS via panic in QUIC transport parameter parsing
GHSA-3g6h-r5qx-f6hqhighquinn-proto@0.11.13Peer minimum ACK delay can panic quinn-proto when ACK_FREQUENCY transmission is enabled
GHSA-82j2-j2ch-gfr8highrustls-webpki@0.103.4rustls-webpki: Denial of service via panic on malformed CRL BIT STRING
GHSA-vv5m-jxxh-4627highzip@8.6.0Insecure Preservation of SUID/SGID Bits during ZIP Extraction Leading to Potential Privilege Escalation
GHSA-3jxr-9vmj-r5cphighbrace-expansion@5.0.5brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups
GHSA-6j4f-fj2g-mc7phighbrace-expansion@5.0.5brace-expansion: DoS via uncontrolled recursion in parseCommaParts causing stack exhaustion
GHSA-mh99-v99m-4gvghighbrace-expansion@5.0.5brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash
GHSA-qhr7-859c-m2p7highbrace-expansion@5.0.5brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion
GHSA-rgw5-rvv9-x895highbrace-expansion@5.0.5brace-expansion: DoS via unbounded intermediate arrays, bypassing the CVE-2026-14257 mitigation
GHSA-3jxr-9vmj-r5cphighbrace-expansion@1.1.13brace-expansion: DoS via exponential-time expansion of consecutive non-expanding {} groups
GHSA-6j4f-fj2g-mc7phighbrace-expansion@1.1.13brace-expansion: DoS via uncontrolled recursion in parseCommaParts causing stack exhaustion
GHSA-mh99-v99m-4gvghighbrace-expansion@1.1.13brace-expansion: DoS via unbounded expansion length causing an out-of-memory process crash
GHSA-qhr7-859c-m2p7highbrace-expansion@1.1.13brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion

By the numbers

Stars27.7K
Forks1,299
Contributors187
Commits3,274
Open issues402
Open pull requests51
Releases1
Latest releasenone tagged
LicenceApache-2.0
Main languageRust
Project age6 years
Last pushOct 26, 2026
Tracked files1,177
Lines of code304.5K
Checkout size18 MB

Lines by language: Rust 258.9K, Svelte 19.6K, Markdown 6,900, TypeScript 6,844, SCSS 3,446, TOML 3,177.

Questions

Is Graphite free?

Yes. Graphite is free and open source, dual-licensed under MIT or Apache-2.0 at your choice, with no paid tier. The project is funded by community donations.

Can Graphite replace Illustrator or Inkscape?

Not yet for most professional work. Graphite is in alpha, so some tools and file format support are still missing. Where it already shines is procedural and generative design, where its node graph keeps every step editable in a way traditional editors cannot.

Do I need to install Graphite?

No. The full editor runs in a modern browser at editor.graphite.art, with your work processed locally in WebAssembly. Building from source is only needed if you want to develop it.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.