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'yi çevrimiçi düzenleyin - belirteç tasarrufu sağlayan veri biçimi

SHLS (Sebis Hierarchical List Structure) yapılandırılmış verileri tırnak, parantez, iki nokta veya yinelenen anahtarlar olmadan yazar: her bölüm anahtarlarını bir kez belirtir, altındaki kayıtlar yalnızca değerleri listeler. SHLS Editörü kodu ve yanında her bölümün anahtar bloğunu ve kayıtlarını gösterir. Değerleri, anahtarları ve kayıtları doğrudan orada değiştirin, sorunları satıra göre görün, JSON, YAML ve CSV'ye ve bunlardan dönüştürün ve SHLS'nin JSON'a karşı ne kadar belirteç tasarrufu sağladığını görün.

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

Bir dakikada SHLS

Bir bölüm adıyla başlar. Anahtar bloğu bir boşluk girintili anahtarları listeler; iç içe bir listenin anahtarları bir düzey daha derindedir. Tam olarak bir boş satırdan sonra kayıtlar gelir: anahtarların sırasıyla satır başına bir değer. İç içe bir listenin kendi satırı vardır (anahtarı veya yer tutucu olarak PH) ve kayıtları bir düzey daha derindedir. Tüm değerler metindir - onları sayılara veya tarihlere dönüştürmek, onları okuyan programa kalmıştır.

Product
 Name
 Price

 Smartphone A1
 599.99

 Laptop B2
 1299.99

Company
 Name
 Location
  Country
  City

 TechCorp
 PH
  USA
  San Francisco

Aynı veriler JSON olarak her kayıtta her anahtarı tekrarlar ve tırnaklar, parantezler ve iki noktalar gerektirir. SHLS, her belirtecin önemli olduğu yerel ve bulut yapay zekâ modelleri için yapıldı. SHLS by Sebastian Grünwald - biçim, kuralları ve referans SHLSDecoder ile SHLSEncoder (Python) GitHub'daki SHLS deposundadır.

Editörün yapabilecekleri

Kod ve kayıtlar

Solda vurgulanmış SHLS - bölümler, anahtarlar, değerler, iç içe düzeyler ve PH yer tutucuları. Ortada her bölümün anahtar bloğu ve kayıtları, anahtarlar etiket olarak. Bir tıklama koda atlar, kod imleci kaydını işaretler.

Yerinde düzenleyin

Değerleri, anahtarları ve bölüm adlarını değiştirin; kayıt ve anahtar ekleyin, çoğaltın, taşıyın ve kaldırın. Kayıtlar anahtar bloklarını izler: yeni bir anahtar her kayıtta "-" alır. Her biri Geri al için tek adım.

Referans gibi okur

Editör SHLS'yi tam olarak SHLSDecoder gibi okur ve göründüğünden farklı okuyacağı şeyleri listeler: bir değeri eksik veya fazla bir kayıt, girinti, anahtar bloğundan sonraki boş satırlar, iki kez geçen bir anahtar.

Belirteçler

Dönüştür sekmesi SHLS'nizin ve aynı verilerin JSON halinin yaklaşık belirteçlerini sayar; böylece tasarrufu bir bakışta görürsünüz.

Dönüştürme

Tam olarak SHLSDecoder ve SHLSEncoder gibi JSON'a ve JSON'dan, YAML, CSV (tablo olarak tek bölüm) ve JSON Lines. JSON, YAML, CSV ve JSON Lines dosyaları SHLS olarak açılır.

Çok sayıda belge

Tarayıcınızda kendi geri alma geçmişleriyle istediğiniz sayıda belge saklayın ve hepsini bir ZIP olarak indirin.

Nasıl çalışır

  1. Başlayın - "Yeni" altından bir şablon seçin, bir .shls dosyası açın veya SHLS olarak almak için bir JSON, YAML ya da CSV dosyası açın.
  2. Düzenleyin - kodda veya kayıtlarda; ikisi de her zaman aynı verileri gösterir.
  3. Kontrol edin ve dönüştürün - listelenen sorunları düzeltin, belirteçleri karşılaştırın ve SHLS, JSON, YAML, CSV veya metin indirin.

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. Belgeyi 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) belgeyi 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://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>

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

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

Editör shlseditor:ready der, sayfanız shlseditor:load ile yanıt verir, editör shlseditor:loaded, gerçek düzenlemelerde shlseditor:change ve kullanıcı kaydettiğinde shlseditor:save bildirir. Sayfanız shlseditor:get (geçerli durum) veya shlseditor: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://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') {              // editör hazır: belgeyi ona verin
    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';   // gerçek bir düzenleme
  if (m.type === 'shlseditor: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 shlseditor:save olarak gelir
function saveNow() { ed.contentWindow.postMessage({ type: 'shlseditor: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://shls.giit.ch/?embed=window", "shlseditor-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. shlseditor:load ayrıca context: { host, title, rules } taşıyabilir - yapay zekâ istemi bu durumda belgenin nereye ait olduğunu söyler ve kurallarınıza uyar - ve hook: { url, token }, yalnızca bu belge için olan ve asla saklanmayan bir webhook. Kaydedilmemiş değişikliklerle pencereyi kapatmak shlseditor: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 belgeyi değiştir veya yeni bir belge 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 belge 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 shlseditor: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: '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);
// shlseditor: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 === 'shlseditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'shlseditor: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: 'shlseditor:load', name: 'Products', content: draft, from: 'ai', target }, ORIGIN);

Anahtarları en az 128 rastgele bitle oluşturun, yalnızca özetlerini (hash) saklayın, her birini oturum açmış kullanıcıya, belgeye 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. JSON Editörü jsoneditor: önekiyle aynı şekilde çalışır - json.giit.ch.

Sıkça sorulan sorular

SHLS nedir?

SHLS (Sebis Hierarchical List Structure), Sebastian Grünwald'ın yapılandırılmış veriler için geliştirdiği bir metin biçimidir. Her bölüm anahtarlarını bir anahtar bloğunda bir kez belirtir; altındaki kayıtlar yalnızca değerleri satır başına bir tane olacak şekilde listeler ve girinti iç içeliği gösterir. Tırnak, parantez, iki nokta veya yinelenen anahtarlar olmadan aynı veriler JSON'dan çok daha az belirteç gerektirir - bu da onu yapay zekâ modelleri için iyi bir biçim yapar.

Verilerim yükleniyor mu?

Hayır. Editör tamamen tarayıcınızda çalışır. Kendi sunucunuza bir webhook kurmadığınız sürece belgeleriniz asla bir sunucuya gönderilmez.

Editör SHLS'yi tam olarak referans kod gibi mi okuyor?

Evet. Editör SHLS'yi tam olarak SHLS deposundaki SHLSDecoder ve SHLSEncoder gibi okur ve yazar - Dönüştür sekmesindeki JSON, Python sınıflarının verdiği verilerdir. Bir belgeyi göründüğünden farklı okudukları yerlerde (bir değeri eksik kayıt, boşluk içeren bir boş satır) editör bunu satırıyla birlikte bir sorun olarak listeler.

Kayıtları koda dokunmadan düzenleyebilir miyim?

Evet. Ortadaki bir değere, anahtara veya bölüm adına tıklayın, yazın ve Enter'a basın. Kayıtların üstündeki düğmeler kayıt ve anahtar ekler, çoğaltır, taşır ve kaldırır; bir anahtar eklediğinizde veya kaldırdığınızda bölümün her kaydı değerini alır veya kaybeder. Her değişiklik Geri al için tek adımdır.

SHLS ne kadar belirteç tasarrufu sağlıyor?

Dönüştür sekmesi belgenizin SHLS olarak ve aynı verilerin JSON olarak yaklaşık belirteçlerini sayar. Kayıt tablolarında SHLS çoğu zaman girintili JSON'un belirteçlerinin yarısından azına ihtiyaç duyar, çünkü anahtarlar yalnızca bir kez yazılır.

JSON, YAML veya CSV'yi SHLS'ye dönüştürebilir mi?

Evet. Bir .json, .yaml, .csv veya .jsonl dosyası açın; SHLSEncoder'ın yazdığı gibi yazılmış SHLS'ye dönüşür; editör SHLS'nin neyi tutamayacağını söyler (boş değerler, satır sonu içeren değerler). Dönüştür sekmesi ve Dışa aktar JSON, YAML, CSV, JSON Lines ve düz metin yazar.

Bir yapay zekâ SHLS Editöründe yazabilir 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: istem SHLS'yi açıklar, böylece her yapay zekâ geçerli SHLS yazar. Yapay zekâ bir bağlantıyla yanıt verir; ona tıklayın, belge editörünüzde görünür. "Geri al" her değişikliği geri alır.

SHLS Editörü ücretli mi?

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