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'yi çevrimiçi görüntüleyin, düzenleyin ve dışa aktarın

SVG Editörü çiziminizi ve kodunu yan yana gösterir. Kodda değiştirdiğiniz her şey hemen önizlemede görünür - tuvalde taşıdığınız, boyutlandırdığınız veya yeniden renklendirdiğiniz her şey de kodda görünür. Böylece büyük bir grafik programı açmadan simgeleri, logoları, grafikleri ve çizimleri hızla ayarlayabilirsiniz.

Her şey tarayıcınızda çalışır. Dosyalar yüklenmez; kayıt ve reklam yoktur.

Editörün yapabilecekleri

Vurgulamalı kod

Kendi renklerinde etiketler, öznitelikler ve değerler, satır numaraları, Tab ile girintileme, etiketlerin otomatik kapanması ve satır numarasıyla açık bir hata mesajı.

Şekilleri doğrudan düzenleyin

Tıklayın, sürükleyin, tutamaçlarla boyutlandırın, döndürün, çevirin, çoğaltın, öne getirin veya arkaya gönderin - dikdörtgenler, daireler, yollar, çokgenler, metin ve gruplar.

Renkler ve konturlar

Renk seçiciyle veya değer olarak dolgu ve kontur, opaklık, kontur kalınlığı, kesikli çizgiler, yuvarlak veya kare çizgi uçları.

Yaslamalı ızgara

Çizimin kendi koordinatlarında istediğiniz ızgara aralığı. Şekiller tam olarak çizgilere yaslanır - veya serbestçe taşımak için "Yasla"nın işaretini kaldırın.

Çizim araçları

Dikdörtgen, elips, daire, çizgi, serbest çizim ve metin - yeni şekiller için seçtiğiniz renklerle.

Dışa aktarma

SVG (yazıldığı gibi, düzenlenmiş veya küçültülmüş), şeffaf arka planlı PNG, JPG, WebP, data URI, Base64, CSS ve React bileşeni.

Nasıl çalışır

  1. Bir SVG açın - bir dosya seçin, pencereye sürükleyin veya kodu yapıştırın.
  2. Düzenleyin - koda yazın veya tuvaldeki şekillere tıklayın, sürükleyin ve renklerini sağda ayarlayın.
  3. Dışa aktarın - bir biçim seçin, görseller için boyutu ayarlayın, sonra indirin veya kopyalayın.

Editörü kendi web sitenizde kullanın

Her https sayfası (ve localhost) editörü bir <iframe> ve ?embed=1 ile yerleştirebilir - kayıt yok, anahtar yok. Yerleştirildiğinde editör bu metni gizler ve bir Kaydet düğmesi gösterir. Çizimi içeri almanın ve dışarı vermenin iki yolu vardır.

1. Bir bağlantıdan dosya açın, sunucunuza kaydedin

src= bir dosya açar (sunucunuz CORS'a izin vermelidir), webhook= ise "Kaydet"in (Ctrl+S) çizimi o adrese göndermesini sağlar. Authorization: Bearer … başlığı için &token=…, her değişiklikten sonra kaydetmek için &auto ekleyin.

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

Webhook, JSON içeren bir POST alır: { editor, event: "save", id, name, content, updated }. Bunu saklayan küçük bir PHP betiği:

<?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. Çizimi sayfanız tutar (postMessage)

Editör svgeditor:ready der, sayfanız svgeditor:load ile yanıt verir, editör svgeditor:loaded, gerçek düzenlemelerde svgeditor:change ve kullanıcı kaydettiğinde svgeditor:save bildirir. Sayfanız svgeditor:get (geçerli durum) veya svgeditor:save (Kaydet'e basma) gönderebilir. Kaydetme böylece kendi oturum açma ve oturum sisteminiz üzerinden yapılır.

<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') {             // editör hazır: çizimi ona verin
    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';   // gerçek bir düzenleme
  if (m.type === 'svgeditor:save') {              // kullanıcı "Kaydet"e tıkladı
    await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: m.name, content: m.content }) });
    document.title = 'Saved';
  }
});

// Kendi sayfanızda bir kaydet düğmesi: yanıt svgeditor:save olarak gelir
function saveNow() { ed.contentWindow.postMessage({ type: 'svgeditor:get' }, ORIGIN); }
</script>

Sayfanızın içinde Yapay Zekâ Asistanı: çerçeve içinde de çalışır. iframe üzerinde allow="clipboard-write" ile "İstemi kopyala" panoyu doğrudan kullanır (aksi halde editör eski kopyalama komutuna geri döner veya istemi elle kopyalamanız için gösterir). Yapay zekânın gönderdiği bir bağlantı başka bir web sitesinin içindeki editöre ulaşamaz; bu yüzden editör, yapay zekâya ve kullanıcıya bunun yerine yapay zekânın yanıtının tamamını editöre yapıştırmasını söyler - veya editörü kendi penceresinde açın.

3. Kendi penceresinde

window.open("https://svg.giit.ch/?embed=window", "svgeditor-17") tam editörü kendi penceresinde açar ve aynı mesajları window.opener ile konuşur. Yapay zekâdan gelen bağlantılar ona orada ulaşır. svgeditor:load ayrıca context: { host, title, rules } taşıyabilir - yapay zekâ istemi bu durumda çizimin nereye ait olduğunu söyler ve kurallarınıza uyar - ve hook: { url, token }, yalnızca bu çizim için olan ve asla saklanmayan bir webhook. Kaydedilmemiş değişikliklerle pencereyi kapatmak svgeditor:closing gönderir.

4. Kendi sunucunuz üzerinden yapay zekâ

Editöre kendi isteminizi, sitenizde bir adresi ve bu editör oturumu için bir anahtarı verin. Yapay zekâ iletişim kutusu bu durumda sitenize "Bağlı" olduğunu, yapay zekâya ne söylediğinizi ve geçerli çizimi değiştir veya yeni bir çizim oluştur seçimini gösterir; İstemi kopyala hepsini bir araya getirir. Yapay zekâ sonucunu anahtarla sunucunuza gönderir ve sayfanız onu editörde açar - yeni bir çizim ayrı açılır ve kullanıcının tarayıcısında kalır. Editör oturumu başına bir anahtar: editör açık olduğu sürece geçerli kalır ve editör yalnızca anahtarı yokken svgeditor:key-request ile ister. Editör anahtarı asla kendisi göndermez ve asla saklamaz; adres kendi alan adınızda veya onun bir alt alan adında https olmalıdır.

const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // editör oturumu başına bir anahtar
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);
// svgeditor:loaded içindeki id'yi hatırlayın ve başka id'li change/save/closing mesajlarını yok sayın
// yalnızca editörün anahtarı yokken:
if (m.type === 'svgeditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'svgeditor:ai', key: k.key }, ORIGIN); }
// editör açıkken sunucunuza her dakika bildirin; editörü veya sayfayı kapatmak anahtarı geçersiz kılar
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// sunucunuzda bir sonuç var (polling, SSE …): target "current" veya "new" olur
ed.contentWindow.postMessage({ type: 'svgeditor:load', name: 'Flyer', content: draft, from: 'ai', target }, ORIGIN);
<?php // api/ai-key.php - oturum açmış kullanıcının bu editör oturumuna ait anahtar (sayfanız çağırır)
session_start();                                     // kullanıcının bu çizimi düzenleyebileceğini kontrol edin
$key = bin2hex(random_bytes(24));
$_SESSION['ai'][hash('sha256', $key)] = ['doc' => (int)$_GET['doc'], 'seen' => time()];  // veya veritabanınızda; ?alive= seen değerini yeniden ayarlar
echo json_encode(['key' => $key]);

<?php // api/ai-result.php - yapay zekâ buraya gönderir (CORS başlıkları yok: yapay zekâlar bunu bir sunucudan çağırır)
$key = preg_replace('/^Bearer\s+/', '', $_SERVER['HTTP_AUTHORIZATION'] ?? '');
$row = find_key(hash('sha256', $key));               // veritabanınız: geçersiz kılınmamış, son 3 dakikada görülmüş
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');   // sayfanız bunu svgeditor:load ile gösterir
echo '{"ok":true}';

Anahtarları en az 128 rastgele bitle oluşturun, yalnızca özetlerini (hash) saklayın, her birini oturum açmış kullanıcıya, çizime ve bu editör oturumuna bağlayın, oturum başına bir tane oluşturun, yalnızca sayfanız oturumu açık bildirdiği sürece geçerli tutun ve editör veya sayfa kapandığında geçersiz kılın.

Protokolün tamamı llms.txt dosyasındadır - bir yapay zekâya verin, sisteminiz için bağlantıyı o kursun. LaTeX Editörü latexeditor: önekiyle aynı şekilde çalışır - latex.giit.ch.

Sıkça sorulan sorular

SVG dosyam yükleniyor mu?

Hayır. Editör tamamen tarayıcınızda çalışır. Açtığınız dosyalar ve kodunuz asla bir sunucuya gönderilmez; bir taslak yalnızca tarayıcınızın yerel depolamasında tutulur.

Çizimlerim nereye kaydediliyor?

Yalnızca tarayıcınıza. Editör orada istediğiniz sayıda çizim tutar - açmak, yeniden adlandırmak, çoğaltmak, indirmek veya silmek için sol üstteki klasör düğmesine (Çizimlerim) tıklayın. Hiçbir şey yüklenmez; tarayıcınızın site verilerini temizlemek onları siler, bu yüzden saklamak istediklerinizi indirin.

SVG'yi PNG'ye nasıl dönüştürürüm?

SVG'nizi açın veya yapıştırın, "Dışa aktar"a tıklayın, PNG'yi seçin, bir boyut seçin (1×, 2×, 4× veya kendi boyutunuz) ve "İndir"e tıklayın. Bir renk seçmediğiniz sürece arka plan şeffaf kalır.

Şekilleri fareyle düzenleyebilir miyim?

Evet. Seçmek için bir şekle tıklayın. Onu sürükleyebilir, küçük karelerle boyutlandırabilir, döndürebilir, çevirebilir ve yeniden renklendirebilirsiniz. Soldaki kod da onunla birlikte değişir.

Izgara ne işe yarar?

Izgara, çizimin kendi koordinatlarında kılavuz çizgileri gösterir. Açıkken, taşıdığınız veya çizdiğiniz şekiller tam olarak ızgara çizgilerine yaslanır. Izgarayı görünür tutup şekilleri serbestçe taşımak için "Yasla"nın işaretini kaldırın.

Bir SVG'yi React bileşeni olarak kullanabilir miyim?

Evet. Dışa aktarmada "React bileşeni (JSX)" seçin. stroke-width gibi öznitelikler strokeWidth, class ise className olur ve bileşen başka props da kabul eder.

Bir yapay zekâ SVG Editöründe çizebilir mi?

Evet, her yapay zekâ - ChatGPT, Claude, Gemini, Copilot veya kodlama aracınızdaki yapay zekâ. "Yapay Zekâ Asistanı"na, ardından "İstemi kopyala"ya tıklayın, istemi yapay zekânıza yapıştırın ve ne çizmesi gerektiğini söyleyin. Yapay zekâ bir bağlantıyla yanıt verir; ona tıklayın, çizim editörünüzde görünür. Açık çizimi değiştirebilir veya diğerlerinizin yanına yenilerini oluşturabilir. Kurulacak bir şey yok ve "Geri al" her değişikliği geri alır.

Editörü kendi web sitemde kullanabilir miyim?

Evet. Bir iframe ile yerleştirin ve çizimleri postMessage ile alıp verin ya da kaydedilen her sürümü bir webhook ile sunucunuza göndermesine izin verin. Örnekler için Editörü kendi web sitenizde kullanın bölümüne bakın.

SVG Editörü ücretli mi?

Hayır. Editör ücretsizdir; reklam ve kayıt yoktur.