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.

Afficher, modifier et exporter du SVG en ligne

L’éditeur SVG affiche votre dessin et son code côte à côte. Tout ce que vous changez dans le code apparaît aussitôt dans l’aperçu - et tout ce que vous déplacez, redimensionnez ou recolorez sur le canevas se retrouve dans le code. Ajuster des icônes, des logos, des graphiques et des illustrations devient ainsi rapide, sans ouvrir un gros logiciel de graphisme.

Tout fonctionne dans votre navigateur. Les fichiers ne sont pas envoyés, il n’y a ni inscription ni publicité.

Ce que l’éditeur sait faire

Code avec coloration

Balises, attributs et valeurs dans leurs propres couleurs, numéros de ligne, indentation avec Tab, fermeture automatique des balises et un message d’erreur clair avec le numéro de ligne.

Modifier les formes directement

Cliquer, faire glisser, redimensionner avec les poignées, tourner, retourner, dupliquer, avancer ou reculer - rectangles, cercles, tracés, polygones, textes et groupes.

Couleurs et contours

Remplissage et contour avec un sélecteur de couleur ou en valeur, opacité, épaisseur du contour, lignes en tirets, extrémités rondes ou carrées.

Grille magnétique

N’importe quel espacement de grille, dans les coordonnées propres au dessin. Les formes s’aimantent exactement sur les lignes - ou décochez « Aimanter » pour les déplacer librement.

Outils de dessin

Rectangle, ellipse, cercle, ligne, main levée et texte - avec les couleurs de votre choix pour les nouvelles formes.

Export

SVG (tel qu’écrit, mis en ordre ou réduit), PNG avec fond transparent, JPG, WebP, data URI, Base64, CSS et composant React.

Comment ça marche

  1. Ouvrir un SVG - choisissez un fichier, glissez-le dans la fenêtre ou collez le code.
  2. Modifier - tapez dans le code, ou cliquez sur les formes du canevas, faites-les glisser et réglez leurs couleurs à droite.
  3. Exporter - choisissez un format, réglez la taille pour les images, puis téléchargez ou copiez.

Utiliser l’éditeur sur votre propre site web

Toute page https (et localhost) peut intégrer l’éditeur avec une <iframe> et ?embed=1 - sans inscription, sans clé. Intégré, l’éditeur masque ce texte et affiche un bouton Enregistrer. Il y a deux façons de faire entrer et sortir le dessin.

1. Ouvrir un fichier depuis un lien, enregistrer sur votre serveur

src= ouvre un fichier (votre serveur doit autoriser CORS), webhook= fait envoyer le dessin à cette adresse par « Enregistrer » (Ctrl+S). Ajoutez &token=… pour un en-tête Authorization: Bearer … et &auto pour enregistrer après chaque modification.

<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>

Le webhook reçoit un POST avec du JSON { editor, event: "save", id, name, content, updated }. Un petit script PHP qui l’enregistre :

<?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. Votre page détient le dessin (postMessage)

L’éditeur annonce svgeditor:ready, votre page répond par svgeditor:load, l’éditeur signale svgeditor:loaded, svgeditor:change lors de vraies modifications et svgeditor:save quand l’utilisateur enregistre. Votre page peut envoyer svgeditor:get (l’état actuel) ou svgeditor:save (appuyer sur Enregistrer). L’enregistrement passe alors par votre propre connexion et votre propre session.

<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') {             // l’éditeur est prêt : on lui transmet le dessin
    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';   // une vraie modification
  if (m.type === 'svgeditor:save') {              // l’utilisateur a cliqué sur "Save"
    await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: m.name, content: m.content }) });
    document.title = 'Saved';
  }
});

// Un bouton d’enregistrement sur votre propre page : la réponse arrive sous forme de svgeditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'svgeditor:get' }, ORIGIN); }
</script>

L’assistant IA dans votre page : il fonctionne aussi dans le cadre. Avec allow="clipboard-write" sur l’iframe, « Copier le prompt » utilise directement le presse-papiers (sinon l’éditeur se rabat sur l’ancienne commande de copie, ou affiche le prompt à copier à la main). Un lien envoyé par l’IA ne peut pas atteindre un éditeur intégré dans un autre site web : l’éditeur demande donc à l’IA et à l’utilisateur de coller toute la réponse de l’IA dans l’éditeur - ou d’ouvrir l’éditeur dans sa propre fenêtre.

3. Dans sa propre fenêtre

window.open("https://svg.giit.ch/?embed=window", "svgeditor-17") ouvre l’éditeur complet dans sa propre fenêtre et échange les mêmes messages avec window.opener. Les liens d’une IA l’y atteignent. svgeditor:load peut aussi transporter context: { host, title, rules } - le prompt de l’IA indique alors où se trouve le dessin et suit vos règles - et hook: { url, token }, un webhook pour ce seul dessin, jamais stocké. Fermer la fenêtre avec des modifications non enregistrées envoie svgeditor:closing.

4. L’IA via votre propre serveur

Transmettez à l’éditeur votre propre prompt, une adresse sur votre site et une clé pour cette session de l’éditeur. La boîte de dialogue de l’IA affiche alors « Connecté à » votre site, ce que vous indiquez à l’IA, et le choix modifier le dessin actuel ou en créer un nouveau ; Copier le prompt assemble le tout. L’IA envoie son résultat avec la clé à votre serveur, et votre page l’ouvre dans l’éditeur - un nouveau dessin s’ouvre séparément et reste dans le navigateur de l’utilisateur. Une clé par session de l’éditeur : elle reste valable tant que l’éditeur est ouvert, et l’éditeur ne la demande avec svgeditor:key-request que tant qu’il n’en a pas. L’éditeur n’envoie jamais la clé lui-même et ne la stocke jamais ; l’adresse doit être en https sur votre propre hôte ou sur un de ses sous-domaines.

const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // une clé par session de l’éditeur
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);
// retenez l’id de svgeditor:loaded et ignorez change/save/closing portant un autre id
// seulement tant que l’éditeur n’a pas de clé :
if (m.type === 'svgeditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'svgeditor:ai', key: k.key }, ORIGIN); }
// tant que l’éditeur est ouvert, prévenez votre serveur chaque minute ; fermer l’éditeur ou la page annule la clé
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// votre serveur a un résultat (polling, SSE …) : target vaut "current" ou "new"
ed.contentWindow.postMessage({ type: 'svgeditor:load', name: 'Flyer', content: draft, from: 'ai', target }, ORIGIN);
<?php // api/ai-key.php - la clé de cette session de l’éditeur pour l’utilisateur connecté (appelée par votre page)
session_start();                                     // vérifiez que l’utilisateur a le droit de modifier ce dessin
$key = bin2hex(random_bytes(24));
$_SESSION['ai'][hash('sha256', $key)] = ['doc' => (int)$_GET['doc'], 'seen' => time()];  // ou dans votre base de données ; ?alive= remet seen à jour
echo json_encode(['key' => $key]);

<?php // api/ai-result.php - l’IA envoie ici (sans en-têtes CORS : les IA l’appellent depuis un serveur)
$key = preg_replace('/^Bearer\s+/', '', $_SERVER['HTTP_AUTHORIZATION'] ?? '');
$row = find_key(hash('sha256', $key));               // votre base de données : non annulée, vue dans les 3 dernières minutes
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');   // votre page l’affiche avec svgeditor:load
echo '{"ok":true}';

Créez des clés d’au moins 128 bits aléatoires, ne stockez que leur hash, liez chacune à l’utilisateur connecté, au dessin et à cette session de l’éditeur, créez-en une par session, ne la gardez valable que tant que votre page signale la session comme ouverte, et annulez-la quand l’éditeur ou la page se ferme.

Le protocole complet se trouve dans llms.txt - donnez-le à une IA et elle construit la connexion pour votre système. L’éditeur LaTeX fonctionne de la même façon avec le préfixe latexeditor: - latex.giit.ch.

Questions fréquentes

Mon fichier SVG est-il envoyé sur un serveur ?

Non. L’éditeur fonctionne entièrement dans votre navigateur. Les fichiers que vous ouvrez et votre code ne sont jamais envoyés à un serveur ; un brouillon est seulement conservé dans le stockage local de votre navigateur.

Où mes dessins sont-ils enregistrés ?

Uniquement dans votre navigateur. L’éditeur y conserve autant de dessins que vous voulez - cliquez sur le bouton dossier en haut à gauche (Mes dessins) pour les ouvrir, renommer, dupliquer, télécharger ou supprimer. Rien n’est envoyé ; effacer les données de site de votre navigateur les supprime : téléchargez ceux que vous voulez garder.

Comment convertir un SVG en PNG ?

Ouvrez ou collez votre SVG, cliquez sur « Exporter », choisissez PNG, une taille (1×, 2×, 4× ou la vôtre) et cliquez sur « Télécharger ». Le fond reste transparent, sauf si vous choisissez une couleur.

Puis-je modifier les formes à la souris ?

Oui. Cliquez sur une forme pour la sélectionner. Vous pouvez la faire glisser, la redimensionner avec les petits carrés, la tourner, la retourner et changer sa couleur. Le code à gauche change en même temps.

À quoi sert la grille ?

La grille affiche des lignes de repère dans les coordonnées propres au dessin. Quand elle est activée, les formes que vous déplacez ou dessinez s’aimantent exactement sur les lignes de la grille. Décochez « Aimanter » pour garder la grille visible tout en déplaçant les formes librement.

Puis-je utiliser un SVG comme composant React ?

Oui. Choisissez « Composant React (JSX) » dans l’export. Les attributs comme stroke-width deviennent strokeWidth, class devient className, et le composant accepte d’autres props.

Une IA peut-elle dessiner dans l’éditeur SVG ?

Oui, n’importe quelle IA - ChatGPT, Claude, Gemini, Copilot ou l’IA de votre outil de développement. Cliquez sur « Assistant IA », puis sur « Copier le prompt », collez-le dans votre IA et dites-lui ce qu’elle doit dessiner. L’IA répond par un lien ; cliquez dessus et le dessin apparaît dans votre éditeur. Elle peut modifier le dessin ouvert ou en créer de nouveaux à côté des autres. Rien à installer, et « Annuler » revient sur chaque modification.

Puis-je utiliser l’éditeur sur mon propre site web ?

Oui. Intégrez-le avec une iframe et échangez les dessins par postMessage, ou laissez-le envoyer chaque version enregistrée à votre serveur avec un webhook. Voir Utiliser l’éditeur sur votre propre site web pour des exemples.

L’éditeur SVG est-il payant ?

Non. L’éditeur est gratuit, sans publicité et sans inscription.