SHLS Editor online

Code

Export

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 work with you - ChatGPT, Claude, Gemini, Copilot. The prompt explains SHLS, so the AI writes valid SHLS.

  1. Click Copy prompt.
  2. Paste it into your AI and say what it should change.
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://shls.giit.ch); content is the document as a string:

{ "editor": "shls", "event": "save", "id": "…", "name": "Products",
  "content": "Product\n Name\n Price\n\n Lamp\n 19.90\n",
  "updated": "2026-01-15T09:30:00.000Z" }
Embed the editor in your website
<iframe src="https://shls.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://shls.giit.ch' || e.source !== frame.contentWindow) return;
  if (e.data.type === 'shlseditor:ready')
    frame.contentWindow.postMessage({ type: 'shlseditor:load', name: 'Products',
      content: shlsText }, 'https://shls.giit.ch');
  if (e.data.type === 'shlseditor:save') saveOnYourServer(e.data.content);
});
</script>

Also possible: ?src=<URL of a .shls 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 (shlseditor:ai, shlseditor:key-request) - see "Use the editor on your own website" below the editor. Details are in llms.txt.

Help

How it works

  1. Write SHLS on the left - or start with New and one of the templates. A section is its name, then its keys (indented by one space, the keys of a nested list one level deeper), exactly one blank line, then the records: one value per line in the order of the keys.
  2. The middle shows each section with its key block and its records, the keys as labels; nested lists fold. It reads the code exactly as the reference SHLSDecoder does.
  3. Click a value, a key or a section name to change it right there. Enter or a click elsewhere writes the change into the code (one step for Undo), Escape cancels. The buttons above add, duplicate, move and remove records and keys - a key added or removed is added to or removed from every record.
  4. A click in the middle puts the code's cursor on that line; the cursor in the code marks its record, key or value. Problems (a record with a value too few, indentation that is not a whole level, a missing blank line) are listed above the code with their line - click one to go there.
  5. Record on the right shows the selected record as a form; Insert adds records, keys and sections; Convert counts the tokens against JSON and converts to JSON, YAML, CSV and JSON Lines; Outline lists the sections.
  6. My documents (the folder button at the top left) lists every document kept in this browser. Export saves it as SHLS, JSON, YAML, CSV or text.

Keyboard shortcuts

↑ ↓ ← →
In the records: go up and down, fold and unfold
Enter
In the records: change the value, key or section name
Delete
In the records: remove the record or key
Alt + ↑ / ↓
In the records: move the record or key up / down
Ctrl + F
Search keys and values
Tab / Shift + Tab
Indent / outdent in the code by one level
Ctrl + Z / Y
Undo / redo
Ctrl + S / E
Save (download, or to your server) / export
Ctrl + O
My documents

Enter keeps the indentation of the line; after a section name it starts the key block.

SHLS online bearbeiten - das Datenformat, das Tokens spart

SHLS (Sebis Hierarchical List Structure) schreibt strukturierte Daten ohne Anführungszeichen, Klammern, Doppelpunkte oder wiederholte Schlüssel: Jeder Abschnitt nennt seine Schlüssel einmal, und die Datensätze darunter listen nur die Werte auf. Der SHLS-Editor zeigt den Code und daneben den Schlüsselblock und die Datensätze jedes Abschnitts. Ändere Werte, Schlüssel und Datensätze direkt dort, sieh Probleme mit ihrer Zeile, wandle von und nach JSON, YAML und CSV um und sieh, wie viele Tokens SHLS gegenüber JSON spart.

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

SHLS in einer Minute

Ein Abschnitt beginnt mit seinem Namen. Sein Schlüsselblock listet die Schlüssel auf, um ein Leerzeichen eingerückt; die Schlüssel einer verschachtelten Liste eine Ebene tiefer. Nach genau einer Leerzeile folgen die Datensätze: ein Wert pro Zeile, in der Reihenfolge der Schlüssel. Eine verschachtelte Liste hat eine eigene Zeile (ihren Schlüssel oder PH als Platzhalter), ihre Datensätze eine Ebene tiefer. Alle Werte sind Text - sie in Zahlen oder Daten umzuwandeln, ist Sache des Programms, das sie liest.

Product
 Name
 Price

 Smartphone A1
 599.99

 Laptop B2
 1299.99

Company
 Name
 Location
  Country
  City

 TechCorp
 PH
  USA
  San Francisco

Dieselben Daten als JSON wiederholen jeden Schlüssel in jedem Datensatz und brauchen Anführungszeichen, Klammern und Doppelpunkte. SHLS wurde für lokale und Cloud-KI-Modelle gemacht, bei denen jedes Token zählt. SHLS by Sebastian Grünwald - das Format, seine Regeln und die Referenzklassen SHLSDecoder und SHLSEncoder (Python) stehen im SHLS-Repository auf GitHub.

Was der Editor kann

Code und Datensätze

Links hervorgehobenes SHLS - Abschnitte, Schlüssel, Werte, Verschachtelungsebenen und PH-Platzhalter. In der Mitte der Schlüsselblock jedes Abschnitts und seine Datensätze, die Schlüssel als Beschriftung. Ein Klick springt zum Code, der Cursor im Code markiert seinen Datensatz.

Direkt bearbeiten

Werte, Schlüssel und Abschnittsnamen ändern; Datensätze und Schlüssel hinzufügen, duplizieren, verschieben und entfernen. Die Datensätze folgen ihrem Schlüsselblock: Ein neuer Schlüssel erhält in jedem Datensatz ein «-». Je ein Schritt für Rückgängig.

Lesen wie die Referenz

Der Editor liest SHLS genau so wie SHLSDecoder und listet auf, was dieser anders lesen würde, als es aussieht: einen Datensatz mit einem Wert zu wenig oder zu viel, Einrückung, Leerzeilen nach dem Schlüsselblock, einen Schlüssel doppelt.

Tokens

Der Tab «Umwandeln» zählt die ungefähren Tokens deines SHLS und derselben Daten als JSON, damit du die Ersparnis auf einen Blick siehst.

Umwandeln

Von und nach JSON genau wie SHLSDecoder und SHLSEncoder, YAML, CSV (ein Abschnitt als Tabelle) und JSON Lines. JSON-, YAML-, CSV- und JSON-Lines-Dateien öffnen sich als SHLS.

Viele Dokumente

Behalte beliebig viele Dokumente in deinem Browser, jedes mit eigenem Rückgängig-Verlauf, und lade alle als ZIP herunter.

So funktioniert es

  1. Beginnen - wähle unter «Neu» eine Vorlage, öffne eine .shls-Datei oder öffne eine JSON-, YAML- oder CSV-Datei, um sie als SHLS zu erhalten.
  2. Bearbeiten - im Code oder in den Datensätzen; beide zeigen immer dieselben Daten.
  3. Prüfen und umwandeln - behebe die aufgelisteten Probleme, vergleiche die Tokens und lade SHLS, JSON, YAML, CSV oder Text herunter.

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://shls.giit.ch/?embed=1&src=https://your-site.com/data/products.shls&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: "shls", event: "save", id, name, content, updated }; content ist das Dokument als String. Ein kleines PHP-Skript, das ihn speichert:

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

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

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

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

addEventListener('message', async e => {
  if (e.source !== ed.contentWindow || e.origin !== ORIGIN) return;
  const m = e.data;
  if (m.type === 'shlseditor:ready') {              // der Editor ist bereit: ihm das Dokument geben
    ed.contentWindow.postMessage({
      type: 'shlseditor:load',
      name: 'Products',
      content: await (await fetch('/data/products.shls')).text()
    }, ORIGIN);
  }
  if (m.type === 'shlseditor:change') document.title = '● not saved';   // eine echte Änderung
  if (m.type === 'shlseditor: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 }) });
    document.title = 'Saved';
  }
});

// Ein Speichern-Knopf auf deiner eigenen Seite: die Antwort kommt als shlseditor:save
function saveNow() { ed.contentWindow.postMessage({ type: 'shlseditor: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://shls.giit.ch/?embed=window", "shlseditor-17") öffnet den vollen Editor in einem eigenen Fenster, das dieselben Meldungen mit window.opener austauscht. Links einer KI erreichen ihn dort. shlseditor: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 }, einen Webhook nur für dieses Dokument, der nie gespeichert wird. Wird das Fenster mit ungespeicherten Änderungen geschlossen, kommt shlseditor: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 shlseditor: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: 'shlseditor:load', name: 'Products', content, ai: {
  label: 'My Site', prompt: 'Keep every key. Only add records.',
  endpoint: 'https://your-site.com/api/ai-result.php', key: k.key } }, ORIGIN);
// die id aus shlseditor:loaded merken und change/save/closing mit anderer id ignorieren
// nur solange der Editor keinen Schlüssel hat:
if (m.type === 'shlseditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'shlseditor: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: 'shlseditor:load', name: 'Products', content: draft, from: 'ai', target }, ORIGIN);

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 JSON-Editor funktioniert gleich, mit dem Präfix jsoneditor: - json.giit.ch.

Häufige Fragen

Was ist SHLS?

SHLS (Sebis Hierarchical List Structure) ist ein Textformat für strukturierte Daten von Sebastian Grünwald. Jeder Abschnitt nennt seine Schlüssel einmal in einem Schlüsselblock; die Datensätze darunter listen nur die Werte auf, einen pro Zeile, und die Einrückung zeigt die Verschachtelung. Ohne Anführungszeichen, Klammern, Doppelpunkte oder wiederholte Schlüssel brauchen dieselben Daten weit weniger Tokens als JSON - das macht es zu einem guten Format für KI-Modelle.

Werden meine Daten hochgeladen?

Nein. Der Editor läuft vollständig in deinem Browser. Deine Dokumente werden nie an einen Server gesendet, ausser du richtest selbst einen Webhook zu deinem eigenen Server ein.

Liest der Editor SHLS genau wie der Referenzcode?

Ja. Der Editor liest und schreibt SHLS genau so wie SHLSDecoder und SHLSEncoder aus dem SHLS-Repository - das JSON im Tab «Umwandeln» sind die Daten, welche die Python-Klassen liefern. Wo sie ein Dokument anders lesen, als es aussieht (ein Datensatz mit einem Wert zu wenig, eine Leerzeile mit Leerzeichen), listet der Editor es als Problem mit seiner Zeile auf.

Kann ich die Datensätze bearbeiten, ohne den Code anzufassen?

Ja. Klicke in der Mitte auf einen Wert, einen Schlüssel oder einen Abschnittsnamen, tippe und drücke Enter. Die Knöpfe über den Datensätzen fügen Datensätze und Schlüssel hinzu, duplizieren, verschieben und entfernen sie; fügst du einen Schlüssel hinzu oder entfernst ihn, erhält oder verliert jeder Datensatz des Abschnitts seinen Wert. Jede Änderung ist ein Schritt für Rückgängig.

Wie viele Tokens spart SHLS?

Der Tab Umwandeln zählt die ungefähren Tokens deines Dokuments als SHLS und derselben Daten als JSON. Bei Tabellen von Datensätzen braucht SHLS oft weniger als die Hälfte der Tokens von eingerücktem JSON, weil die Schlüssel nur einmal geschrieben werden.

Kann er JSON, YAML oder CSV in SHLS umwandeln?

Ja. Öffne eine .json-, .yaml-, .csv- oder .jsonl-Datei, und sie wird zu SHLS, so geschrieben, wie SHLSEncoder schreibt; der Editor sagt, was SHLS nicht behalten kann (leere Werte, Werte mit Zeilenumbrüchen). Der Tab «Umwandeln» und «Exportieren» schreiben JSON, YAML, CSV, JSON Lines und reinen Text.

Kann eine KI im SHLS-Editor schreiben?

Ja, jede KI - ChatGPT, Claude, Gemini, Copilot oder die KI in deinem Programmierwerkzeug. Klicke auf «KI-Assistent», dann auf «Prompt kopieren»: Der Prompt erklärt SHLS, damit jede KI gültiges SHLS schreibt. Die KI antwortet mit einem Link; klicke darauf, und das Dokument erscheint in deinem Editor. «Rückgängig» nimmt jede Änderung zurück.

Kostet der SHLS-Editor etwas?

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