HTML Editor online

Code

Export

The print dialog opens with the page as it is in the preview (without scripts). Choose Save as PDF (or "Microsoft Print to PDF") as the printer. In Chrome and Edge, untick "Headers and footers" and tick "Background graphics" if the page has colors. The text in the PDF can be selected.

My documents

Click a document 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 write with you - ChatGPT, Claude, Gemini, Copilot.

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

The document 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 work is kept where you want it. 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://html.giit.ch):

{ "editor": "html", "event": "save", "id": "…", "name": "Home page",
  "content": "<!DOCTYPE html> …",
  "assets": { "logo.png": "data:image/png;base64,…", "style.css": "data:text/css;base64,…" },
  "updated": "2026-01-15T09:30:00.000Z" }
Embed the editor in your website
<iframe src="https://html.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://html.giit.ch' || e.source !== frame.contentWindow) return;
  if (e.data.type === 'htmleditor:ready')
    frame.contentWindow.postMessage({ type: 'htmleditor:load', name: 'Home page',
      content: '<!DOCTYPE html>…', assets: {} }, 'https://html.giit.ch');
  if (e.data.type === 'htmleditor:save') saveOnYourServer(e.data.content, e.data.assets);
});
</script>

Also possible: ?src=<URL of an .html file> opens a file, &webhook=<URL> saves this document 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 (htmleditor:ai, htmleditor:key-request) - see "Use the editor on your own website" below the editor. Details are in llms.txt.

Help

How it works

  1. Write HTML on the left - or start with New and one of the templates. The preview shows the page as you type.
  2. Click text in the preview to edit it right there: Enter or a click elsewhere writes the change into the code (one step for Undo), Escape cancels. A click on a picture or any other element jumps to its place in the code. The element at the code cursor gets a frame in the preview.
  3. Document on the right sets title, language and description of the page; Insert has ready-made pieces (headings, lists, tables, media, form fields, meta tags); Files holds the pictures, stylesheets and fonts of the page; Outline lists the headings.
  4. Problems in the code (an unclosed <div>, a picture without alt, a missing file) are listed above the code - click one to go there.
  5. My documents (the folder button at the top left) lists every document kept in this browser.
  6. Export makes an HTML file, one HTML file with the files inside, a ZIP, a PDF (via the print dialog) or plain text. Download .html saves the code.

The preview shows HTML and CSS as the browser does, but scripts and on… attributes never run and links do not navigate - so any page is safe to open.

Keyboard shortcuts

Ctrl + B / I / U
Bold / italic / underline the selected text
Ctrl + /
Comment lines in or out (<!-- -->)
Ctrl + Enter
Show the cursor's place in the preview
Tab / Shift + Tab
Indent / outdent
Ctrl + Z / Y
Undo / redo
Ctrl + S / E
Save (download .html, or to your server) / export
Ctrl + O
My documents
Ctrl + P
Print / save as PDF

Typing > at the end of a start tag adds its end tag, and Enter between the two indents the new line. Typing </ closes the element that is open.

HTML online schreiben, mit Live-Vorschau

Der HTML-Editor zeigt deinen Code und die Seite nebeneinander. Was du tippst, erscheint sofort in der Vorschau - Überschriften, Listen, Tabellen, Bilder und dein ganzes CSS - und ein Klick auf etwas in der Vorschau bringt dich an seine Stelle im Code. Du kannst den Text auch direkt in der Vorschau bearbeiten. So baust du Landingpages, Newsletter, Artikel und Formulare schnell, ohne etwas zu installieren.

Alles läuft in deinem Browser. Seiten werden nicht hochgeladen, es gibt keine Anmeldung und keine Werbung.

Was der Editor kann

Code mit Hervorhebung

Tags, Attribute, Entitäten, Kommentare sowie das CSS und JavaScript in der Seite in eigenen Farben, Zeilennummern, End-Tags, die sich selbst schliessen, und saubere Einrückung mit einem Klick.

Eine sichere Live-Vorschau

Die Seite, wie der Browser sie zeigt, in einem Frame, in dem Skripte und on…-Attribute nie laufen und Links nicht wegführen. Prüfe sie in voller Breite, Tablet- oder Handygrösse.

In der Vorschau bearbeiten

Klicke in der Vorschau auf eine Überschrift oder einen Absatz und tippe: Die Änderung kommt in den Code, mit &, < und > als Entitäten geschrieben.

Probleme auf einen Blick

Nicht geschlossene oder falsch verschachtelte Tags, unbekannte Elemente, Bilder ohne alt, fehlende Dateien und doppelt verwendete ids - jeweils mit ihrer Zeile.

Bilder, Stylesheets, Schriften

Zieh Dateien in den Editor und nutze sie über ihren Namen: <img src="../logo.png">, <link rel="stylesheet" href="../style.css">. Sie bleiben mit der Seite in deinem Browser.

Export

Die .html-Datei, eine HTML-Datei mit allen Dateien darin, ein ZIP mit den Dateien, ein PDF über den Druckdialog oder der reine Text.

So funktioniert es

  1. Starten - wähle unter «Neu» eine Vorlage, öffne eine .html-Datei oder ein ZIP, oder füge HTML-Code ein.
  2. Schreiben - tippe im Code; die Vorschau folgt. Mit «Einfügen» kommen Listen, Tabellen, Medien und Formularfelder dazu.
  3. Exportieren - speichere die .html-Datei, ein ZIP mit ihren Dateien oder ein PDF.

Den Editor auf deiner eigenen Website nutzen

Jede https-Seite (und localhost) kann den Editor mit einem <iframe> und ?embed=1 einbetten - ohne Anmeldung, ohne Schlüssel. Eingebettet blendet der Editor diesen Text aus und zeigt einen Speichern-Knopf. Das Dokument kommt auf zwei Arten hinein und wieder heraus.

1. Eine Datei über einen Link öffnen, auf deinem Server speichern

src= öffnet eine Datei (dein Server muss CORS erlauben), webhook= lässt «Speichern» (Ctrl+S) das Dokument an diese Adresse senden. Füge &token=… für einen Authorization: Bearer …-Header hinzu und &auto, um nach jeder Änderung zu speichern.

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

Der Webhook erhält einen POST mit JSON { editor, event: "save", id, name, content, assets, updated }. Ein kleines PHP-Skript, das ihn speichert:

<?php
header('Access-Control-Allow-Origin: https://html.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__ . "/pages/$name.html", $d['content']);
echo '{"ok":true}';

2. Deine Seite hält das Dokument (postMessage)

Der Editor meldet htmleditor:ready, deine Seite antwortet mit htmleditor:load, der Editor meldet htmleditor:loaded, htmleditor:change bei echten Änderungen und htmleditor:save, wenn gespeichert wird. Deine Seite kann htmleditor:get (den aktuellen Stand) oder htmleditor:save (Speichern drücken) senden. Gespeichert wird dann über dein eigenes Login und deine eigene Sitzung.

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

addEventListener('message', async e => {
  if (e.source !== ed.contentWindow || e.origin !== ORIGIN) return;
  const m = e.data;
  if (m.type === 'htmleditor:ready') {              // der Editor ist bereit: ihm das Dokument geben
    ed.contentWindow.postMessage({
      type: 'htmleditor:load',
      name: 'Offer',
      content: await (await fetch('/pages/offer.html')).text(),
      assets: { 'logo.png': 'data:image/png;base64,…' }   // Dateien, optional
    }, ORIGIN);
  }
  if (m.type === 'htmleditor:change') document.title = '● not saved';   // eine echte Änderung
  if (m.type === 'htmleditor:save') {               // es wurde auf "Speichern" geklickt
    await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ name: m.name, content: m.content, assets: m.assets }) });
    document.title = 'Saved';
  }
});

// Ein Speichern-Knopf auf deiner eigenen Seite: die Antwort kommt als htmleditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'htmleditor:get' }, ORIGIN); }
</script>

KI-Assistent in deiner Seite: Er funktioniert auch im Frame. Mit allow="clipboard-write" am iframe nutzt «Prompt kopieren» direkt die Zwischenablage (sonst greift der Editor auf den alten Kopierbefehl zurück oder zeigt den Prompt zum Kopieren von Hand). Ein Link der KI erreicht keinen Editor in einer anderen Website, darum sagt der Editor der KI und dir, die ganze Antwort der KI stattdessen in den Editor einzufügen - oder den Editor in einem eigenen Fenster zu öffnen.

3. In einem eigenen Fenster

window.open("https://html.giit.ch/?embed=window", "htmleditor-17") öffnet den vollen Editor in einem eigenen Fenster, das dieselben Meldungen mit window.opener austauscht. Links einer KI erreichen ihn dort. htmleditor:load kann auch context: { host, title, rules } mitgeben - der KI-Prompt sagt dann, wohin das Dokument gehört, und befolgt deine Regeln - sowie hook: { url, token, assets: false }, einen Webhook nur für dieses Dokument, der nie gespeichert wird. Wird das Fenster mit ungespeicherten Änderungen geschlossen, kommt htmleditor:closing.

4. KI über deinen eigenen Server

Gib dem Editor deinen eigenen Prompt, eine Adresse auf deiner Website und einen Schlüssel für diese Editor-Sitzung. Der KI-Dialog zeigt dann «Verbunden mit» deiner Website, was du der KI sagst, und die Wahl das aktuelle Dokument ändern oder ein neues erstellen; Prompt kopieren setzt alles zusammen. Die KI sendet ihr Ergebnis mit dem Schlüssel an deinen Server, und deine Seite öffnet es im Editor - ein neues Dokument öffnet sich separat und bleibt im Browser der Person, die schreibt. Ein Schlüssel pro Editor-Sitzung: Er bleibt gültig, solange der Editor offen ist, und nur solange er keinen hat, fragt der Editor mit htmleditor:key-request danach. Der Editor sendet den Schlüssel selbst nie und speichert ihn nie; die Adresse muss https auf deinem eigenen Host oder einer Subdomain davon sein.

const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // ein Schlüssel pro Editor-Sitzung
const k = await key();
ed.contentWindow.postMessage({ type: 'htmleditor:load', name: 'Offer', 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);
// die id aus htmleditor:loaded merken und change/save/closing mit anderer id ignorieren
// nur solange der Editor keinen Schlüssel hat:
if (m.type === 'htmleditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'htmleditor:ai', key: k.key }, ORIGIN); }
// solange der Editor offen ist, jede Minute deinem Server melden; Schliessen des Editors oder der Seite macht den Schlüssel ungültig
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// dein Server hat ein Ergebnis (Polling, SSE …): target ist "current" oder "new"
ed.contentWindow.postMessage({ type: 'htmleditor:load', name: 'Offer', content: draft, from: 'ai', target }, ORIGIN);
<?php // api/ai-key.php - der Schlüssel dieser Editor-Sitzung der angemeldeten Person (deine Seite ruft es auf)
session_start();                                     // prüfen, ob die Person dieses Dokument bearbeiten darf
$key = bin2hex(random_bytes(24));
$_SESSION['ai'][hash('sha256', $key)] = ['doc' => (int)$_GET['doc'], 'seen' => time()];  // oder in deiner Datenbank; ?alive= setzt seen neu
echo json_encode(['key' => $key]);

<?php // api/ai-result.php - die KI sendet hierher (keine CORS-Header: KIs rufen es von einem Server auf)
$key = preg_replace('/^Bearer\s+/', '', $_SERVER['HTTP_AUTHORIZATION'] ?? '');
$row = find_key(hash('sha256', $key));               // deine Datenbank: nicht ungültig, in den letzten 3 Minuten gesehen
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');   // deine Seite zeigt es mit htmleditor:load
echo '{"ok":true}';

Erzeuge Schlüssel mit mindestens 128 Zufallsbits, speichere nur ihren Hash, binde jeden an die angemeldete Person, das Dokument und diese Editor-Sitzung, erzeuge einen pro Sitzung, lass ihn nur gültig, solange deine Seite die Sitzung als offen meldet, und mach ihn ungültig, wenn der Editor oder die Seite schliesst.

Das ganze Protokoll steht in llms.txt - gib es einer KI, und sie baut die Anbindung für dein System. Der LaTeX-Editor und der SVG-Editor funktionieren gleich, mit den Präfixen latexeditor: und svgeditor: - latex.giit.ch, svg.giit.ch.

Häufige Fragen

Wird meine Seite hochgeladen?

Nein. Der Editor läuft ganz in deinem Browser. Deine Seiten und ihre Dateien werden nie an einen Server gesendet, ausser du richtest selbst einen Webhook zu deinem eigenen Server ein.

Läuft JavaScript in der Vorschau?

Nein. Die Vorschau zeigt das HTML und CSS der Seite, aber Skripte und on…-Attribute laufen nie, und Links führen nicht weg. So bleibt der Editor mit jeder Seite sicher, die du öffnest. Der Code behält seine Skripte, die exportierte Seite funktioniert also wie zuvor.

Wie füge ich Bilder und Stylesheets hinzu?

Zieh sie in den Editor oder füge sie ein, oder füge sie rechts im Tab Dateien hinzu. Sie werden mit der Seite in deinem Browser gespeichert und über ihren Namen verwendet, zum Beispiel <img src="../logo.png"> oder <link rel="stylesheet" href="../style.css">.

Wie bekomme ich ein PDF?

Klicke auf «Exportieren», wähle PDF und klicke auf «Drucken / als PDF speichern». Wähle im Druckdialog «Als PDF speichern» als Drucker.

Wo werden meine Dokumente gespeichert?

Nur in deinem Browser. Klicke oben links auf den Ordner-Knopf (Meine Dokumente), um sie zu öffnen, umzubenennen, zu duplizieren, herunterzuladen oder zu löschen. Löschst du die Website-Daten deines Browsers, sind sie weg - lade also herunter, was du behalten willst, oder lass den Editor sie an deinen eigenen Server senden («Auf Server speichern»).

Kann eine KI im HTML-Editor schreiben?

Ja, jede KI - ChatGPT, Claude, Gemini, Copilot oder die KI in deinem Programmier-Tool. Klicke auf «KI-Assistent», dann auf «Prompt kopieren», füge ihn in deine KI ein und sag, was sie schreiben soll. Die KI antwortet mit einem Link; klickst du ihn an, erscheint die Seite in deinem Editor. «Rückgängig» nimmt jede Änderung zurück.

Kann ich den Editor auf meiner eigenen Website nutzen?

Ja. Bette ihn mit einem iframe ein und tausche Dokumente per postMessage aus, oder lass ihn jede gespeicherte Fassung per Webhook an deinen Server senden. Beispiele findest du unter Den Editor auf deiner eigenen Website nutzen.

Kostet der HTML-Editor etwas?

Nein. Der Editor ist kostenlos, ohne Werbung und ohne Anmeldung.