\9 \9 \9 \9 \9 \9 \9 \9 ");width:.75em;height:.75em;margin-bottom:-.1em;margin-left:.25em;display:inline-block}@media screen and (width<=1200px){body>.page header nav .row .left,body>.page header nav .row .right{--height:50px;--button-padding:16px;--nav-font-size:24px;gap:30px}}@media screen and (width<=1000px){body>.page header nav .row .left,body>.page header nav .row .right{--button-padding:14px;--nav-font-size:20px;gap:30px}}@media print,screen and (width<=900px){body>.page header nav .row .left,body>.page header nav .row .right{--height:40px;--button-padding:13px;--nav-font-size:18px;gap:20px}}@media print,screen and (width<=780px){body>.page header nav .row .left,body>.page header nav .row .right{--button-padding:12px;--nav-font-size:16px;gap:20px}}@media screen and (width<=680px){body>.page header nav .row .left,body>.page header nav .row .right{--height:30px;--button-padding:8px;--nav-font-size:14px;gap:16px}}@media screen and (width<=580px){body>.page header nav .row .left,body>.page header nav .row .right{--height:24px;--nav-font-size:13px;gap:12px}}@media screen and (width<=520px){body>.page header nav .row .left,body>.page header nav .row .right{--height:22px;--button-padding:6px;--nav-font-size:12px;gap:10px}}@media screen and (width<=460px){body>.page header nav .row .left,body>.page header nav .row .right{--height:20px;--button-padding:4px;--nav-font-size:11px;gap:8px}}@media screen and (width<=420px){body>.page header nav .row .left,body>.page header nav .row .right{--nav-font-size:10px;gap:6px}}@media screen and (width<=380px){body>.page header nav .row .left,body>.page header nav .row .right{--nav-font-size:9px;gap:6px}}@media screen and (width<=350px){body>.page header nav .row .left,body>.page header nav .row .right{--nav-font-size:8px;gap:6px}}body>.page header .ripple{fill:#fff;stroke:currentColor;--ripple-height:16px;height:var(--ripple-height);margin-top:calc(-1*var(--ripple-height) + var(--border-thickness));margin-bottom:calc(-1*var(--border-thickness));stroke-width:var(--border-thickness);background:0 0;display:block}body>.page header .ripple:before,body>.page header .ripple:after{content:none}body>.page header hr{background:0 0}@media screen and (width<=1400px){body>.page header .ripple{width:calc(100% + var(--page-edge-padding)*2);margin-left:calc(-1*var(--page-edge-padding));margin-right:calc(-1*var(--page-edge-padding))}body>.page header hr{display:none}}body>.page main{padding:calc(120*var(--variable-px))var(--page-edge-padding)}body>.page main>section{max-width:var(--max-width);z-index:1;margin-left:auto;margin-right:auto;position:relative}body>.page main>section~section{margin-top:calc(120*var(--variable-px))}body>.page main>section p img{max-width:100%}body>.page main>section pre{box-sizing:border-box;overflow:auto}body>.page main>section details{width:100%}body>.page main>section details summary{padding-left:18px;font-weight:800;display:inline-block;position:relative}body>.page main>section details summary:before{content:"";background:url("data:image/svg+xml;utf8,\9 \9 \9 \9 \9 \9 \9 \9 \9 \9 \9 \9 \9 \9 ");width:10px;height:10px;margin:auto;position:absolute;top:0;bottom:0;left:0}body>.page main>section details summary+*{margin-top:20px}body>.page main>section details[open] summary:before{transform:rotate(90deg)}body>.page footer{color:var(--color-walnut);flex-direction:column;align-items:center;padding:0 40px 40px;display:flex}@media screen and (width<=1400px){body>.page footer hr{width:100%}body>.page footer hr:before,body>.page footer hr:after{width:calc(var(--page-edge-padding) + 40px);height:var(--border-thickness);background:currentColor;border:none}}body>.page footer nav{flex-wrap:wrap;justify-content:center;gap:8px 40px;margin-top:40px;display:flex}body>.page footer nav a{color:var(--color-walnut)}@media screen and (width<=900px){body>.page footer nav{max-width:500px}}@media screen and (width<=780px){body>.page footer nav{max-width:440px}}@media screen and (width<=400px){body>.page footer nav{gap:6px 20px}}body>.page footer span{text-align:center;margin-top:40px}:is(h1,h2,h3,h4,article>:first-child,details>summary)~:is(p,ul,ol,ol li p,img,a:has(>img:only-child)),:is(h1,h2,h3,h4,article>:first-child)~:is(ul,ol) li p+img,:is(h1,h2,h3,h4,p)~.feature-icons,p~:is(h1,h2,h3,h4,details summary,blockquote,.image-comparison,.video-background,.youtube-embed),.youtube-embed+:is(p,.link,.button),p+p>.button,p+:is(.link,section,details),table td p~p,img+.link,article{margin-top:20px}*{min-width:0;min-height:0}h1{font-feature-settings:"lnum";margin:0;font-family:Bona Nova,Palatino,serif;font-size:2.66667rem;font-weight:700;line-height:1.25;display:inline-block}h1~h2{margin-top:40px}h1~hr{margin-top:40px;margin-bottom:20px}h2,h3,h4,h5,h6{margin:0;font-family:Inter,sans-serif;font-weight:800;line-height:1.5;display:inline-block}h2{font-size:1.77778rem;font-weight:700}h3{font-size:1.33333rem}h4,h5,h6{font-size:1rem}p{text-align:justify;text-justify:inter-character;-webkit-hyphens:auto;hyphens:auto;margin:0}p code{text-justify:auto}h1~img,h1~iframe,h1~a>img:only-child,h2~img,h2~iframe,h2~a>img:only-child,h3~img,h3~iframe,h3~a>img:only-child,h4~img,h4~iframe,h4~a>img:only-child,h5~img,h5~iframe,h5~a>img:only-child,h6~img,h6~iframe,h6~a>img:only-child,p~img,p~iframe,p~a>img:only-child{width:100%;height:auto}a{color:var(--color-crimson)}img{vertical-align:top}table{width:calc(100% + 40px);margin:20px -20px}table th,table td{vertical-align:top;border:20px solid #0000;margin:0;padding:0}table th:not(:first-child) img,table td:not(:first-child) img{max-width:100%}table th:empty{border:none}:is(h1,h2,h3,h4,h5,h6)+table{margin-top:0}ul,ol{margin:0}ul+p,ol+p{margin-top:0}ul li,ol li{margin-top:.5em}hr{color:unset}code{color:#000;background:var(--color-fog);overflow-wrap:anywhere;-webkit-hyphens:none;hyphens:none;padding:0 4px}a code{color:var(--color-crimson)}kbd{outline:calc(var(--border-thickness)/2)solid var(--color-navy);color:inherit;margin:0 4px;padding:0 8px;font-family:inherit}summary{cursor:pointer}hr{overflow:visible}hr,.ripple{height:var(--border-thickness);background:currentColor;border:none;width:calc(100% - 64px);margin:0 32px;position:relative}hr:before,.ripple:before{border-width:0 0 var(--border-thickness)40px;left:-40px}hr:after,.ripple:after{border-width:0 40px var(--border-thickness)0;right:-40px}hr:before,hr:after,.ripple:before,.ripple:after{content:"";border-style:solid;border-color:#0000 #0000 currentColor;width:0;height:0;display:block;position:absolute}.block{flex-direction:column;align-items:flex-start;width:100%;display:flex}.block.centered{align-items:center}:not(.diptych,.triptych)>.block+.block{margin-top:calc(120*var(--variable-px))}.link{font-size:var(--font-size-link);color:var(--color-crimson);white-space:nowrap;font-weight:800;text-decoration:none;display:inline-block}.link:not(.not-uppercase){text-transform:uppercase}.button{border:var(--border-thickness)solid currentColor;min-height:calc(var(--font-size-link)*2);font-size:var(--font-size-link);padding:0 var(--font-size-link);box-sizing:border-box;text-align:left;color:var(--color-crimson);font-weight:800;text-decoration:none;display:inline-block}.button:before{content:"";line-height:calc(var(--font-size-link)*2 - 2*var(--border-thickness))}.button img{height:calc(var(--font-size-link)*1.5);margin-right:calc(var(--font-size-link)/2)}.button img,.button span{vertical-align:middle}.arrow:after{content:" »";font-family:Inter,sans-serif}.video-background{font-size:0;position:relative}.video-background video{max-width:min(100%,1280px)}.video-background:after{content:"";pointer-events:none;border:2px solid #fff;position:absolute;inset:0}
Your procedural toolbox for 2D content creation
Graphite is a free, open source vector and raster graphics editor, available now in alpha. Get creative with a fully nondestructive editing workflow that combines layer-based compositing with node-based generative design.
Painted Dreams — Made using nondestructive boolean operations and procedural polka dot patterns
Design for a magazine spread, a preview of the upcoming focus on desktop publishing
Isometric Fountain — All layer stacks are represented, under the hood, by a nondestructive node graph
Mandelbrot fractal filled with a noise pattern, procedurally generated and infinitely scalable
Coming soon: this user interface mockup shows the raster image editing features planned for 2025
Software overview
Starting life as a vector editor, Graphite is evolving into a generalized, all-in-one graphics toolbox that's built more like a game engine than a conventional creative app. The editor's tools wrap its node graph core, providing user-friendly workflows for vector, raster, and beyond.
One app to rule them all
Stop jumping between programs. Upcoming tools will make Graphite a first-class content creation suite for many workflows, including:
Graphic Design
Motion Graphics
Image Editing
Digital Painting
Page Layout & Print
VFX Compositing
Current features
Vector editing tools
Procedural workflow for graphic design
Node-based layers
Forever free and open source
Presently, Graphite is a lightweight offline web app with features primarily oriented around procedural vector graphics editing.
Where's the download? The web app is currently live and desktop apps for Windows, Mac, and Linux should be available in 2025.
Graphite is designed principally as a professional desktop application that is also accessible in a browser for quick, casual usage. It's built for speed with (nearly) no JavaScript. And regardless of platform, your work runs locally and privately on your own hardware. There is no server.
Engineering the tech for a native app distributed across three new platforms takes extra time. That's why supporting the web platform, which keeps up-to-date and reaches all devices, has been the initial target. For now, you can install the app as a PWA for a desktop-like experience.
Once it's ready to shine, Graphite's code architecture is structured to deliver native performance for your graphically intensive workloads on desktop platforms and very low overhead on the web thanks to WebAssembly and WebGPU, new high-performance browser technologies.
The power of proceduralism
Graphite is the first and only graphic design package built for procedural editing — where everything you make is nondestructive.
Explore parametric possibilities
Save hours on tedious alterations and make better creative choices. Graphite lets you iterate rapidly by adjusting node parameters instead of individual elements.
Scatter circles with just a couple nodes... Want them denser? Bigger? Those are sliders. Want a different placement area? Just tweak the path.
Nondestructive editing means every decision is tied to a parameter you can adjust later on. Use Graphite to interpolate between any states just by dragging value sliders.
Blend across color schemes. Morph shapes before they're scattered around the canvas. The options are endless.
Graphite's representation of artwork as a node graph lets you customize, compose, reuse, share, and automate your content workflows:
Infinitely pan and zoom, export any resolution with no pixelation
Modular node-based pipelines for generative AI (future)
Asset pipelines for studio production environments (future)
Support the mission
Free software doesn't grow on trees! Chip in your share of the (very real) development costs so you're not leaving others to pick up the tab. Becoming a member (or giving a one-time donation) lets you help maintain Graphite's sustainability and independence.
Do you love Rust and focus on computer graphics, compiler development, or algorithm research? Students (and non-students who are new to open source contribution) interested in a paid summer internship are invited to apply this week to Graphite's Google Summer of Code 2025 program. The deadline is April 8 at 18:00 UTC.
Graphite, a new open source 2D procedural graphics editor, has wrapped up 2024 with a fourth quarter (October-December) focused on introducing quality of life features for both Graphite's interactive tools-driven and procedural editing workflows.