SVG Editor online

Code

Export

Width and height stay in proportion. JPG has no transparency, so it always gets a background.

My drawings

Click a drawing to open it. They are stored only in this browser - nothing is uploaded. Clearing the browser's site data removes them, so download the ones you want to keep.

AI Assistant

Any AI can draw with you - ChatGPT, Claude, Gemini, Copilot.

  1. Click Copy prompt.
  2. Paste it into your AI and say what it should draw.
The AI should

The drawing travels in the link after the “#”, which no server sees. What you paste into your AI is handled by its provider.

Save to your server

The editor can send each saved version to your own server (a webhook), so your drawings are kept where you want them. Nothing is sent until you enter an address here.

What your server receives

A POST request with JSON (your server must allow CORS from https://svg.giit.ch):

{ "editor": "svg", "event": "save", "id": "…", "name": "Logo",
  "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" …>…</svg>",
  "updated": "2026-01-15T09:30:00.000Z" }
Embed the editor in your website
<iframe src="https://svg.giit.ch/?embed=1" style="width:100%;height:80vh;border:0"></iframe>
<script>
const frame = document.querySelector('iframe');
addEventListener('message', e => {
  if (e.origin !== 'https://svg.giit.ch' || e.source !== frame.contentWindow) return;
  if (e.data.type === 'svgeditor:ready')
    frame.contentWindow.postMessage({ type: 'svgeditor:load', name: 'Logo',
      content: '<svg …>…</svg>' }, 'https://svg.giit.ch');
  if (e.data.type === 'svgeditor:save') saveOnYourServer(e.data.content);
});
</script>

Also possible: ?src=<URL of an .svg file> opens a file, &webhook=<URL> saves this drawing there. The editor can also open in a window of its own (?embed=window), and your page can hand it its own AI prompt and a session key so the AI sends its result to your server (svgeditor:ai, svgeditor:key-request) - see "Use the editor on your own website" below the editor. Details are in llms.txt.

Help

How it works

  1. Open an SVG file, drag it into the window or paste SVG code - or start with New.
  2. My drawings (the folder button at the top left) lists every drawing kept in this browser: open, rename, duplicate, download or delete them.
  3. Click a shape on the canvas. Drag it to move it, drag the small squares to resize it. Colors, size and position are under Properties on the right.
  4. Draw new shapes with the tools above the canvas.
  5. The code on the left always shows the current drawing and can be edited directly.
  6. Download SVG saves the file, Export offers pictures (PNG, JPG) and code for websites.

Made a mistake? Undo takes back every step. Your drawings are kept in this browser, even after closing the page.

Keyboard shortcuts

V
Select and move
R E L P T
Rectangle, ellipse, line, freehand, text
H / hold Space
Move the view
Mouse wheel, + -
Zoom
Drag with the mouse wheel pressed
Move the view
Double-click the mouse wheel
Fit to window
0 / 1
Fit to window / actual size
# / G
Grid on/off / snap on/off
Arrow keys
Move the selection by 1, with Shift by 10
Shift while dragging
Only horizontal/vertical, keep proportions
Alt + click
Select the surrounding group
Delete
Remove the selection
Ctrl + D
Duplicate
Ctrl + ↑ / ↓
Forward / backward (with Shift: to front / to back)
Ctrl + Z / Y
Undo / redo
Ctrl + S / E
Download SVG (or save to your server) / export
Ctrl + O
My drawings
Esc
Deselect

In the code: Tab indents, Shift+Tab outdents, clicking into a tag selects that shape on the canvas.

SVG online bekijken, bewerken en exporteren

De SVG-editor toont je tekening en haar code naast elkaar. Wat je in de code wijzigt, verschijnt meteen in het voorbeeld - en wat je op het canvas verplaatst, vergroot of verkleint of van kleur verandert, zie je terug in de code. Zo pas je snel iconen, logo's, grafieken en illustraties aan zonder een groot grafisch programma te openen.

Alles draait in je browser. Bestanden worden niet geüpload, er is geen registratie en geen reclame.

Wat de editor kan

Code met kleuring

Tags, attributen en waarden in eigen kleuren, regelnummers, inspringen met Tab, automatisch sluiten van tags en een duidelijke foutmelding met het regelnummer.

Vormen direct bewerken

Klikken, slepen, de grootte wijzigen met de grepen, draaien, spiegelen, dupliceren, naar voren of naar achteren brengen - rechthoeken, cirkels, paden, veelhoeken, tekst en groepen.

Kleuren en lijnen

Vulling en lijn met een kleurkiezer of als waarde, dekking, lijndikte, gestreepte lijnen, ronde of vierkante lijneinden.

Raster met uitlijnen

Elke rasterafstand, in de eigen coördinaten van de tekening. Vormen springen precies op de lijnen - of zet het vinkje bij "Uitlijnen" uit om ze vrij te verplaatsen.

Tekengereedschap

Rechthoek, ellips, cirkel, lijn, uit de hand en tekst - met kleuren naar keuze voor nieuwe vormen.

Exporteren

SVG (zoals geschreven, opgeschoond of verkleind), PNG met transparante achtergrond, JPG, WebP, data-URI, Base64, CSS en React-component.

Hoe het werkt

  1. Een SVG openen - kies een bestand, sleep het in het venster of plak de code.
  2. Bewerken - typ in de code, of klik op vormen op het canvas, sleep ze en stel rechts hun kleuren in.
  3. Exporteren - kies een formaat, stel de grootte in voor afbeeldingen, en download of kopieer.

De editor op je eigen website gebruiken

Elke https-pagina (en localhost) kan de editor insluiten met een <iframe> en ?embed=1 - geen registratie, geen sleutel. Ingesloten verbergt de editor deze tekst en toont hij een knop Opslaan. Er zijn twee manieren om de tekening erin en eruit te krijgen.

1. Een bestand openen via een link, opslaan op je server

src= opent een bestand (je server moet CORS toestaan), webhook= zorgt dat "Opslaan" (Ctrl+S) de tekening naar dat adres stuurt. Voeg &token=… toe voor een header Authorization: Bearer … en &auto om na elke wijziging op te slaan.

<iframe src="https://svg.giit.ch/?embed=1&src=https://your-site.com/docs/logo.svg&webhook=https://your-site.com/save.php"
        allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>

De webhook krijgt een POST met JSON { editor, event: "save", id, name, content, updated }. Een klein PHP-script dat het opslaat:

<?php
header('Access-Control-Allow-Origin: https://svg.giit.ch');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
header('Access-Control-Allow-Methods: POST, OPTIONS');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit;
if (($_SERVER['HTTP_AUTHORIZATION'] ?? '') !== 'Bearer SECRET') { http_response_code(403); exit; }
$d = json_decode(file_get_contents('php://input'), true);
$name = preg_replace('/[^\w\- ]/u', '_', $d['name']);
file_put_contents(__DIR__ . "/docs/$name.svg", $d['content']);
echo '{"ok":true}';

2. Je pagina beheert de tekening (postMessage)

De editor zegt svgeditor:ready, je pagina antwoordt met svgeditor:load, de editor meldt svgeditor:loaded, svgeditor:change bij echte bewerkingen en svgeditor:save wanneer de gebruiker opslaat. Je pagina mag svgeditor:get (de huidige toestand) of svgeditor:save (op Opslaan drukken) sturen. Opslaan loopt dan via je eigen login en sessie.

<iframe id="ed" src="https://svg.giit.ch/?embed=1" allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>
<script>
const ed = document.getElementById('ed');
const ORIGIN = 'https://svg.giit.ch';

addEventListener('message', async e => {
  if (e.source !== ed.contentWindow || e.origin !== ORIGIN) return;
  const m = e.data;
  if (m.type === 'svgeditor:ready') {             // de editor is klaar: geef hem de tekening
    ed.contentWindow.postMessage({
      type: 'svgeditor:load',
      name: 'Logo',
      content: await (await fetch('/docs/logo.svg')).text(),
    }, ORIGIN);
  }
  if (m.type === 'svgeditor:change') document.title = '● not saved';   // een echte bewerking
  if (m.type === 'svgeditor:save') {              // de gebruiker klikte op "Opslaan"
    await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: m.name, content: m.content }) });
    document.title = 'Saved';
  }
});

// Een opslaanknop op je eigen pagina: het antwoord komt als svgeditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'svgeditor:get' }, ORIGIN); }
</script>

AI-assistent binnen je pagina: die werkt ook in het frame. Met allow="clipboard-write" op het iframe gebruikt "Prompt kopiëren" direct het klembord (anders valt de editor terug op het oude kopieercommando, of toont hij de prompt om met de hand te kopiëren). Een link die de AI stuurt, kan een editor binnen een andere website niet bereiken, dus vraagt de editor de AI en de gebruiker om in plaats daarvan het hele antwoord van de AI in de editor te plakken - of de editor in een eigen venster te openen.

3. In een eigen venster

window.open("https://svg.giit.ch/?embed=window", "svgeditor-17") opent de volledige editor in een eigen venster en spreekt dezelfde berichten met window.opener. Links van een AI bereiken hem daar. svgeditor:load kan ook context: { host, title, rules } meegeven - de AI-prompt zegt dan waar de tekening thuishoort en volgt je regels - en hook: { url, token }, een webhook alleen voor deze tekening die nooit wordt opgeslagen. Als het venster met niet-opgeslagen wijzigingen wordt gesloten, stuurt het svgeditor:closing.

4. AI via je eigen server

Geef de editor je eigen prompt, een adres op je site en een sleutel voor deze editorsessie. Het AI-venster toont dan "Verbonden met" je site, wat je de AI vertelt, en de keuze de huidige tekening wijzigen of een nieuwe maken; Prompt kopiëren zet alles bij elkaar. De AI post het resultaat met de sleutel naar je server, en je pagina opent het in de editor - een nieuwe tekening opent apart en blijft in de browser van de gebruiker. Eén sleutel per editorsessie: hij blijft geldig zolang de editor open is, en alleen zolang de editor er geen heeft, vraagt hij erom met svgeditor:key-request. De editor verstuurt de sleutel nooit zelf en slaat hem nooit op; het adres moet https zijn op je eigen host of een subdomein ervan.

const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // één sleutel per editorsessie
const k = await key();
ed.contentWindow.postMessage({ type: 'svgeditor:load', name: 'Flyer', content, ai: {
  label: 'My Site', prompt: 'Keep the [[placeholders]]. Write in German.',
  endpoint: 'https://your-site.com/api/ai-result.php', key: k.key } }, ORIGIN);
// onthoud de id uit svgeditor:loaded en negeer change/save/closing met een andere id
// alleen zolang de editor geen sleutel heeft:
if (m.type === 'svgeditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'svgeditor:ai', key: k.key }, ORIGIN); }
// zolang de editor open is, meld het elke minuut aan je server; het sluiten van de editor of de pagina maakt de sleutel ongeldig
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// je server heeft een resultaat (polling, SSE …): target is "current" of "new"
ed.contentWindow.postMessage({ type: 'svgeditor:load', name: 'Flyer', content: draft, from: 'ai', target }, ORIGIN);
<?php // api/ai-key.php - de sleutel van deze editorsessie van de ingelogde gebruiker (je pagina roept het aan)
session_start();                                     // controleer of de gebruiker deze tekening mag bewerken
$key = bin2hex(random_bytes(24));
$_SESSION['ai'][hash('sha256', $key)] = ['doc' => (int)$_GET['doc'], 'seen' => time()];  // of in je database; ?alive= zet seen opnieuw
echo json_encode(['key' => $key]);

<?php // api/ai-result.php - de AI post hierheen (geen CORS-headers: AI's roepen het aan vanaf een server)
$key = preg_replace('/^Bearer\s+/', '', $_SERVER['HTTP_AUTHORIZATION'] ?? '');
$row = find_key(hash('sha256', $key));               // je database: niet ongeldig gemaakt, gezien in de laatste 3 minuten
if (!$row) { http_response_code(401); exit('{"ok":false,"error":"key not valid"}'); }
$d = json_decode(file_get_contents('php://input', false, null, 0, 2000000), true);
save_draft($row['doc'], $d['content'], $d['target'] === 'new' ? 'new' : 'current');   // je pagina toont het met svgeditor:load
echo '{"ok":true}';

Maak sleutels met minstens 128 willekeurige bits, sla alleen hun hash op, koppel elke sleutel aan de ingelogde gebruiker, de tekening en deze editorsessie, maak er één per sessie, houd hem alleen geldig zolang je pagina de sessie als open meldt, en maak hem ongeldig wanneer de editor of de pagina sluit.

Het hele protocol staat in llms.txt - geef het aan een AI en die bouwt de koppeling voor je systeem. De LaTeX-editor werkt op dezelfde manier met het voorvoegsel latexeditor: - latex.giit.ch.

Veelgestelde vragen

Wordt mijn SVG-bestand geüpload?

Nee. De editor draait volledig in je browser. Bestanden die je opent en je code worden nooit naar een server gestuurd; een concept wordt alleen in de lokale opslag van je browser bewaard.

Waar worden mijn tekeningen opgeslagen?

Alleen in je browser. De editor bewaart daar zoveel tekeningen als je wilt - klik op de mapknop linksboven (Mijn tekeningen) om ze te openen, te hernoemen, te dupliceren, te downloaden of te verwijderen. Er wordt niets geüpload; als je de sitegegevens van je browser wist, verdwijnen ze, dus download de tekeningen die je wilt bewaren.

Hoe zet ik een SVG om naar PNG?

Open of plak je SVG, klik op "Exporteren", kies PNG, kies een grootte (1×, 2×, 4× of je eigen) en klik op "Downloaden". De achtergrond blijft transparant, tenzij je een kleur kiest.

Kan ik vormen met de muis bewerken?

Ja. Klik op een vorm om hem te selecteren. Je kunt hem slepen, de grootte wijzigen met de kleine vierkantjes, hem draaien, spiegelen en een andere kleur geven. De code links verandert mee.

Wat doet het raster?

Het raster toont hulplijnen in de eigen coördinaten van de tekening. Als het aan staat, springen vormen die je verplaatst of tekent precies op de rasterlijnen. Zet het vinkje bij "Uitlijnen" uit om het raster zichtbaar te houden maar vormen vrij te verplaatsen.

Kan ik een SVG als React-component gebruiken?

Ja. Kies "React-component (JSX)" bij het exporteren. Attributen zoals stroke-width worden strokeWidth, class wordt className, en de component accepteert verdere props.

Kan een AI in de SVG-editor tekenen?

Ja, elke AI - ChatGPT, Claude, Gemini, Copilot of de AI in je programmeertool. Klik op "AI-assistent", dan op "Prompt kopiëren", plak hem in je AI en zeg wat die moet tekenen. De AI antwoordt met een link; klik erop en de tekening verschijnt in je editor. De AI kan de geopende tekening wijzigen of nieuwe maken naast je andere. Niets te installeren, en "Ongedaan maken" draait elke wijziging terug.

Kan ik de editor op mijn eigen website gebruiken?

Ja. Sluit hem in met een iframe en wissel tekeningen uit met postMessage, of laat hem elke opgeslagen versie met een webhook naar je server sturen. Zie De editor op je eigen website gebruiken voor voorbeelden.

Kost de SVG-editor iets?

Nee. De editor is gratis, zonder reclame en zonder registratie.