Änderungsprotokoll
Änderungen der API innerhalb von /v1 sind additiv: neue Endpunkte, neue optionale Felder, neue Antwortfelder, neue Fehlercodes und neue Ereignistypen. Alles, was einen Client brechen könnte, erscheint in einer neuen Version und wird zuerst hier angekündigt.
25. Oktober 2026: Pakete 0.3.20
- n8n-Node: Eine abgelehnte Anfrage nennt ihr Feld und ihre Regel, im Fehler des Nodes und an seinem Fehlerausgang (siehe 24. Oktober).
- Plugin für Coding-Agenten: formfeed-dev/skills enthält auch die Dateien, die Codex, GitHub Copilot, die Gemini CLI und Antigravity lesen, jede mit dem gehosteten MCP-Server in den Worten des jeweiligen Agenten.
- Die übrigen Pakete gehen ohne eigene Änderungen auf 0.3.20.
24. Oktober 2026: der n8n-Node sagt, warum eine Anfrage abgelehnt wurde
- n8n-Node:
n8n-nodes-formfeed0.3.20 zeigt bei einer abgelehnten Anfrage den Satz der API, der das Feld und die verletzte Regel nennt, statt des Satzes von n8n zum Statuscode („Your request is invalid or could not be processed by the service“). Mit Continue (using error output) trägt das Item am Fehlerausgang diesen Satz alserrorund die ganze Antwort der API alsdetails, sodass eine abgelehnte E-Rechnung jeden Befund mitpathundruleauflistet (siehe n8n). Bisher nannte der Fehlerausgang nur den Satz von n8n.
22. Oktober 2026: der n8n-Node ist verifiziert
- n8n: n8n hat
n8n-nodes-formfeedverifiziert, deshalb bietet ihn neben selbst gehostetem n8n auch n8n Cloud an: Öffnen Sie das Nodes-Panel, suchen Sie nach Formfeed und klicken Sie auf Install node (Owner und Admins; siehe n8n). Die Installation über den Paketnamen funktioniert in einem selbst gehosteten n8n weiterhin. Ein aktuelles n8n bietet den Node seinem AI Agent ohne die EinstellungN8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGEals Tool an, die ältere selbst gehostete Versionen brauchten.
21. Oktober 2026: Pakete 0.3.19
- SDKs: Die Typen von
@formfeed/sdkund dem Python-Paketformfeedkennenperiod_start,period_endundhard_cap_unitsder Nutzung, die die API schon immer sendet (siehe 20. Oktober). In TypeScript sinddata_setsundpartialseiner Version nicht mehrnull, was die API nie sendet, und beide SDKs nennen den Bereich vonrotationeines Wasserzeichens und sagen, dass ein Bild ohne sie aufrecht steht. - Vorlagen-Engine:
renderVersionvon@formfeed/enginerendertpdf.metadata.author,subjectundkeywordsmit den Daten, wie es Renderings seit dem 19. Oktober tun, und gibt sie alsmetadatazurück; ein Feld, das leer gerendert wird, entfällt. - Plugin für Coding-Agenten: Das Plugin in formfeed-dev/skills bringt neben dem gehosteten MCP-Server zwei Skills:
formfeed-templatesschreibt und prüft Vorlagen in einem Projekt mit der Kommandozeile,formfeed-apischreibt den Code, der über die API rendert. Beide sagen es, bevor ein Rendering mit einem Live-Schlüssel Einheiten kostet, und ändern den Workspace nur auf Wunsch. Claude Code installiert es als Plugin; jeder Agent, der Agent Skills liest, übernimmt die Skills mitnpx skills add formfeed-dev/skills. Siehe Coding-Agenten.
21. Oktober 2026: der Power-Automate-Connector ist verfügbar
- Power Automate: Der Formfeed-Connector, den Microsoft am 5. Oktober zertifiziert hat, ist in den Umgebungen angekommen: Fügen Sie in Power Automate, Power Apps oder Copilot Studio eine Aktion oder Verbindung hinzu und suchen Sie nach Formfeed, Herausgeber Formfeed, markiert als Preview. Wo er nicht angeboten wird, stellt die HTTP-Aktion denselben Aufruf. Siehe Power Automate.
21. Oktober 2026: Schlüssel, Endpunkte und Mitglieder im Suchfeld
- App: Das Suchfeld auf
Strg+Kfindet API-Schlüssel nach Name und Präfix, Webhook-Endpunkte nach Adresse und die Mitglieder der Organisation nach Name und E-Mail, für Inhaber und Admins auch ihre offenen Einladungen. Ein eingefügter API-Schlüssel findet den Schlüssel, zu dem er gehört, an seinen ersten Zeichen, nur im Browser.→auf einer Vorlage zeigt ihre Aktionen (sie öffnen, ihr API-Tab, ihre Renderings, Slug oder ID kopieren),←führt zurück. Inhaber und Admins finden dort auch API-Schlüssel anlegen, Webhook-Endpunkt hinzufügen und Mitglieder einladen. Siehe den Editor-Rundgang. - Geändert: Vorlagen-ID kopieren in der Vorlagenliste kopiert die ID, die die API zeigt (
tpl_…), statt der bloßen UUID. Die API nimmt beide, und das Suchfeld öffnet eine eingefügte IDtpl_…als Vorlage.
21. Oktober 2026: Ein Batch behält die Reihenfolge seiner Einträge
- Behoben:
GET /jobs/{id}, das Ereignisjob.completedund das Zip eines Batches listen dessen Einträge in der Reihenfolge der Anfrage, wie dokumentiert. Bisher listeten sie sie in der Reihenfolge, in der die Renderings fertig wurden, und die weicht ab, sobald Einträge außer der Reihe fertig werden (Renderings laufen nebeneinander, Dokumente sind unterschiedlich lang, ein wiederholter Eintrag wird zuletzt fertig):items[2]konnte das Dokument einer anderen Zeile sein und0003-document.pdfdie Datei eines anderen Eintrags. Die Dateien eines Zips sind jetzt nach der Position ihres Eintrags in der Anfrage nummeriert, und ein fehlgeschlagener Eintrag lässt seine Nummer aus. Batches, die vor dieser Korrektur gesendet wurden, behalten ihre bisherige Reihenfolge. Siehe Asynchron und Batch.
21. Oktober 2026: ein fehlgeschlagenes Rendering im apitemplate.io-Shim und die Berechtigungen eines Passworts
- Behoben: Ein Fehler des apitemplate.io-Shims zu einem Rendering, das vor seinem Scheitern aufgezeichnet wurde, trägt die ID des Renderings als
transaction_ref, wie es der Fehler eines noch laufenden Renderings schon tat. Fehler in der Vorlage und Seitenlimits kamen ohne sie zurück, sodass sich das fehlgeschlagene Rendering nicht nachschlagen ließ. - Behoben: Ein Rendering mit
post.passwordohnepermissionswird mit den vier Berechtigungen aufgezeichnet, die sein PDF erlaubt (print,copy,modify,annotate). Bisher wurde es mit keiner aufgezeichnet, was[]bedeutet, sodass die Optionen des Renderings in der App sagten, Leser dürften nichts. Die PDFs selbst waren richtig.
21. Oktober 2026: vier Antworten, die weniger sagten, als sie sollten
- Geändert:
POST /webhooks/{id}/testfür einen deaktivierten Endpunkt antwortet mit409 conflict. Bisher antwortete er mit202, und es kam nichts an, weil ein deaktivierter Endpunkt keine Zustellungen empfängt. Siehe Webhooks. - Behoben: Eine wiederholte Anfrage mit demselben
Idempotency-Keyträgt wiederLocation,Retry-After,X-Units-*undX-Render-*der ersten Antwort, nicht nur ihren Body, sodass ein Client, der derLocationeines202folgt, auch einer wiederholten folgen kann. Siehe Idempotenz. - Behoben: Ein PDF-Tool, das nach seiner Aufzeichnung fehlschlägt, nennt sein Rendering als
render_idim Problem, wie ein fehlgeschlagenes Rendering; das Render-Protokoll undGET /renders/{id}zeigen es. - Behoben:
POST /pdf/watermarkmit einem Bild prüft Scope und Plan des Schlüssels, bevor es das Bild in der Bibliothek sucht, sodass ein Schlüssel, der das Tool nicht nutzen darf,403 forbiddenhört und nie, ob die Bibliothek eine Datei dieses Namens hat.
21. Oktober 2026: Das Render-Protokoll behält 13 Monate
- Geändert: Einträge im Render-Protokoll werden 13 Monate aufbewahrt. Einmal im Monat werden ältere Einträge mit ihren Batch-Jobs gelöscht, jeder, sobald seine Dateien gelöscht sind: Ein Eintrag, dessen Datei noch gespeichert ist, bleibt so lange wie die Datei.
GET /renders/{id}undGET /jobs/{id}antworten für Gelöschtes mit404, undGET /usagebehält die Summen jedes Abrechnungszeitraums, nennt die Tage und Vorlagen eines Zeitraums aber nur, solange seine Einträge existieren. Bisher blieben Einträge, bis der Workspace gelöscht wurde; die ältesten werden im Oktober 2027 13 Monate alt. Siehe Datenresidenz.
20. Oktober 2026: Slugs aus zwei Zeichen
- Behoben: Ein Slug aus zwei Zeichen, etwa
deoderq4, wird für Vorlagen, Organisationen und Workspaces angenommen. Die Regel nahm ein Zeichen oder drei und mehr, aber nie zwei, in der API, in der App und in der Datenbank gleichermaßen. Slugs sind bei Vorlagen 1 bis 64 Zeichen lang und bei Organisationen und Workspaces 1 bis 40, Kleinbuchstaben, Ziffern und Bindestriche, beginnend und endend mit einem Buchstaben oder einer Ziffer. Siehe Vorlagen.
20. Oktober 2026: Der API-Vertrag sagt, was die API tut
- Geändert: Die API-Referenz und
/v1/openapi.jsonbeschreiben jetzt jedes Feld, jeden Header und jeden Statuscode, den die API sendet. Dererroreines Renderings hat ein eigenes Schema (code,messageund was mehr sagt), nicht mehr das eines Problems; ein Rendering, ein Job, ein Account und die Nutzung nennen jeden Schlüssel, den sie immer tragen; die Probleme nennen ihre Felder mit den Codes, mit denen sie kommen; die binäre Antwort vonoutput=binarynennt alle sechs Dateitypen und ihre Header; und die Antworten des apitemplate.io-Shims, sein302und seine Fehler in der Form von apitemplate.io sind beschrieben, wie sie sind. Die Antworten selbst ändern sich nur, wo ein Punkt unten es sagt. - Behoben:
POST /templatesbehältdata_sets, die benannten Beispieldatensätze, in der ersten Version. Bisher fielen sie weg, undformfeed templates pushverlor sie bei einer neuen Vorlage. - Behoben: Das Veröffentlichen einer Version einer Word- oder PowerPoint-Vorlage (
POST /templates/{id}/versions/{number}/publish) antwortete mit dem internen Speicherschlüssel der Datei, den keine andere Antwort zeigt. Er ist aus der Antwort verschwunden. - Behoben: Ein
cursor, den keine Seite der Liste ausgegeben hat, ergibt beiGET /renders,/templatesund/files400 invalid_requeststatt500; ebensoGET /usage?period=mit einem Monat, den es nicht gibt, und Werte vonoutput_image_type, die der apitemplate.io-Shim nicht kennt. Der Shim nimmt jetzt auchjpegOnlyundpngOnlyvon apitemplate.io und antwortet mit JSON, wenn seine URLoutput=binaryträgt, statt nach dem Rendering mit500. - Behoben: Eine 36 Zeichen lange ID, die keine UUID ist, ergibt bei den Webhook-Routen
404statt500; die ID einerformfeed listen-Sitzung istDELETE /webhooks/{id}undPOST /webhooks/{id}/testunbekannt, wie schon der Liste undPUT(eine Sitzung endet mitDELETE /webhooks/listen/{id}); undPOST /webhooksantwortet immer mitenvironments. - Geändert: Das
202vonPOST /renders/batchnennt den Job inLocationals absolute URL, wie das202eines Renderings, mitRetry-After: 5. Einrate_limited-Problem der Minute eines Testschlüssels im Free-Plan sagtwindow_seconds: 60statt 1.
19. Oktober 2026: Metadaten aus den Daten, ein Zeitlimit fürs Drucken, Bilder, die sich öffnen
- Geändert: In einem Rendering einer Vorlage werden
pdf.metadata.author,subjectundkeywordswie der Titel mit den Daten gerendert; eines, das leer gerendert wird, entfällt. Bisher kamen sie so ins PDF, wie sie geschrieben waren, mit Vorlagensyntax und allem. Siehe die Einstellungen. - Geändert: Das Drucken eines PDF hat ein Zeitlimit, 120 Sekunden; ein Druck, der länger dauert, scheitert mit
504 render_timeout. Bisher hatte das Drucken keines. Ein Dokument von mehreren hundert Seiten druckt in einigen zehn Sekunden. - Geändert: Ein gerendertes Bild (PNG, JPG, WebP) öffnet sich unter seinem Dateinamen im Browser, wenn sein Link geöffnet wird, statt heruntergeladen zu werden; das gilt auch für früher gerenderte Bilder. PDFs und Office-Dateien werden weiter heruntergeladen, und
download=1am Link macht auch ein Bild zum Download. Siehe Dateiname.
19. Oktober 2026: Pakete 0.3.18
- MCP-Server:
@formfeed/mcp0.3.18 liefert das Bild eines Bild-Renderings neben seinem Link und startet ohneFORMFEED_API_KEYmit den Offline-Prüfungen (siehe unten), und jedes Tool sagt, was es zurückgibt (outputSchema), sodass ein Client das strukturierte Ergebnis prüfen kann. Der Eintrag in der MCP-Registry verlangt den Schlüssel nicht mehr. - Vorlagen-Engine und Kommandozeile:
@formfeed/engineundformfeedbringen den neuen StandardwaitFor.networkIdle: "auto"und markieren die Skripte der Engine mitdata-formfeed(siehe 18. Oktober), sodass sich ein Snapshot vonformfeed testeiner Vorlage mit angepasstem Text um dieses Attribut ändert: Bestätigen Sie ihn mitformfeed test -uneu.formfeed devbricht Tabellen in seiner Seitenvorschau um wie das PDF (siehe 18. Oktober),formfeed ci previewnennt den Schlüssel, mit dem gerendert wurde, und die Hilfe von--base-url,--workspace,--ciund--verbosesagt, was jede Option wirklich tut. Die Beispiele des HelpersepcQrsetzen die Rechnungsnummer intext, den Verwendungszweck. - n8n-Node:
n8n-nodes-formfeed0.3.18 sagt, dass nur der Free-Plan Test-Renderings markiert, und erwähnt kein selbst gehostetes Gateway mehr.
19. Oktober 2026: Agenten sehen die Bilder, die sie rendern
- MCP-Server:
renderundget_renderliefern das Bild eines Bild-Renderings (PNG, JPG oder WebP, bis 2 MB) neben seinem Link, damit ein Agent ansehen kann, was er erzeugt hat, bevor er es weitergibt. Ein PDF kommt weiter als Link. Der gehostete Server untermcp.formfeed.devhat das jetzt,@formfeed/mcpmit dem nächsten Release der Pakete. Siehe MCP-Server. - MCP-Server: Der lokale Server startet auch ohne
FORMFEED_API_KEY. Dann funktionierenvalidate_templatemithtmlundcheck_invoiceoffline, und jedes andere Tool antwortet, wie man einen Schlüssel bekommt, sodass ein Agent die Prüfungen ausprobieren kann, bevor sich jemand registriert. Mit dem nächsten Release der Pakete. - Kommandozeile: Die Zusammenfassung von
formfeed ci previewnennt den Schlüssel, mit dem gerendert wurde: Bisher stand dort „Test-Schlüssel“ auch unter Renderings eines Live-Schlüssels, die Einheiten gezählt hatten. Mit dem nächsten Release der Pakete. - Behoben: Die Hilfe des MCP-Servers, die n8n-Zugangsdaten und die Zapier-Verbindung sagten, ein Test-Schlüssel setze immer ein Wasserzeichen; nur der Free-Plan markiert Test-Renderings. Die n8n- und Make-Verbindungen erwähnen kein selbst gehostetes Gateway mehr, das es nicht gibt.
18. Oktober 2026: Die Seitenvorschau bricht Tabellen um wie das PDF
- Editor: Eine Tabelle, die über mehrere Seiten läuft, bekommt in der Vorschau Seiten ihren Tabellenkopf oben auf jeder Seite wieder und ihren
tfootunten auf jeder Seite, auf der sie weitergeht, mit dem Platz dafür, so wie Chromium sie druckt. Bisher ließ die Vorschau beides weg: Seite 2 einer Rechnung hatte keinen Tabellenkopf, ihre Zeilen verschoben sich gegenüber dem PDF um eine pro Seite, und bei 120 Positionen zeigte die Vorschau fünf Seiten, wo das PDF sechs hat. Ein Tabellenkopf ohne Zeile darunter am Fuß einer Seite wandert jetzt mit seiner Tabelle weiter, eine Zeile, die höher ist als der Rest der Seite, bricht unter dem wiederholten Kopf um, statt weiterzuwandern, und ein Element mitposition: fixedsteht, wo Chromium es druckt, innerhalb der Seitenränder. Die 21 Tabellen aus Seitenumbrüche in Tabellen kommen Seite für Seite heraus wie ihre PDFs, und ein Test hält sie dort. - Kommandozeile:
formfeed devzeigt dasselbe mit der nächsten Version der Pakete.
18. Oktober 2026: Renderings ohne die halbe Sekunde Wartezeit
- Geändert: Ein Dokument wird gedruckt, sobald es geladen ist, keine seiner Anfragen mehr läuft und seine Schriften bereit sind. Bisher wartete jedes Rendering außerdem, bis das Netzwerk eine halbe Sekunde geruht hatte, was bei einem einfachen Dokument den größten Teil seiner Renderzeit ausmachte. Ein
url-Rendering und eine Vorlage mit einem eigenen Skript, einem Event-Handler-Attribut oder einem Frame warten weiter diese halbe Sekunde, weil ihr Code später noch eine Anfrage starten kann; die Skripte, die Formfeed für Diagramme und angepassten Text einfügt, zählen nicht. Das ist der neue Standard vonwaitFor.networkIdle,"auto";truebehält die alte Wartezeit für eine Vorlage, die sie braucht,falsebleibt, wie es war. - Vorlagen-Engine: Die Skripte, die
@formfeed/enginein ein Dokument schreibt, tragendata-formfeed, wie ihre Styles. Ein Snapshot vonformfeed testeiner Vorlage mit angepasstem Text (data-ff-fit) ändert sich um dieses Attribut; bestätigen Sie ihn mitformfeed test -uneu.
18. Oktober 2026: Datei-IDs als Quellen, Zips, die ablaufen, die Webhook-Endpunkte eines Plans
- Behoben: Die ID einer Datei der Bibliothek (
fil_…) funktioniert jetzt als Quelle eines Merges (post.merge_after,/pdf/merge) und alsimageeines Wasserzeichens, wie es die Typen der SDKs schon immer sagten. Bisher ging nur der Name der Datei, und eine ID ergab422 source_not_found. Siehe PDF-Tools. - Geändert: Das Zip eines Batches wird gelöscht, wenn die erste Datei darin abläuft, sodass kein Dokument in einem Zip länger bleibt als seine eigene Aufbewahrungsfrist. Bisher blieb ein Zip, bis sein Workspace gelöscht wurde. Früher erstellte Zips folgen derselben Regel, und eines, dessen erste Datei schon abgelaufen ist, wird jetzt gelöscht. Siehe Aufbewahrung und Löschung.
- Geändert: Die Anzahl der Webhook-Endpunkte, die ein Plan enthält, wird durchgesetzt: einer im Free-Plan, fünf im Starter-Plan, beliebig viele ab Pro, gezählt pro Organisation. Ein weiterer ergibt
403 forbiddenmitfeature: "webhooks"und demlimit; Endpunkte, die über die Anzahl hinaus schon bestehen, bleiben. Ein eingeschalteter Trigger eines No-Code-Tools ist ebenfalls ein Endpunkt, eine Sitzung vonformfeed listennicht. - Geändert: Die größte Ausgabe im Enterprise-Plan ist 250 MB, die Größe, an die jedes Rendering gebunden ist; der Plan nannte 1.000 MB, die kein Rendering erreichen konnte.
15. Oktober 2026: ein Suchfeld auf Strg+K
- App:
Strg+K(⌘Kauf dem Mac) findet Ihre Vorlagen, die Beispiele, geteilte Partials, Dateien, die Seiten der App und die Abschnitte von Einstellungen, Abrechnung und Marke sowie die wichtigsten Seiten der Dokumentation, neben den Befehlen der Seite, auf der Sie sind. Der passende Teil jedes Treffers ist hervorgehoben, die Wörter dürfen in beliebiger Reihenfolge stehen, Umlaute müssen nicht getippt werden.#,>,/und?grenzen die Suche auf Vorlagen, Befehle, Seiten oder die Hilfe ein; eine eingefügte IDrnd_…odertpl_…öffnet dieses Rendering oder diese Vorlage. Siehe den Editor-Rundgang.
12. Oktober 2026: Pakete 0.3.17
- n8n-Node:
n8n-nodes-formfeed0.3.17 bringt Render → Create E-Invoice (siehe 9. Oktober). Seine README führt Schritt für Schritt durch einen Workflow: eine Rechnung, gerendert aus dem Beispiel der Galerie und per E-Mail verschickt, und was der Trigger einem Workflow übergibt, wenn ein Render fertig ist. - MCP-Server:
@formfeed/mcp0.3.17 bringtcheck_invoiceund die Optioneinvoicevonrender. Mit--httpbeantwortet er auch die Server-Card unter/mcp/server-card, wie es der gehostete Endpunkt tut. - Vorlagen-Engine und Kommandozeile:
@formfeed/engineundformfeedprüfen eine Rechnung zwischen zwei französischen Unternehmen nach Frankreichs Regeln (siehe 9. Oktober), und die Engine exportiert die Liste der Geschäftsbegriffe alsEN16931_TERMS. - SDKs: Die Typen von
@formfeed/sdkund dem Python-Paketformfeedkennen die neuen Felder des Berichts,id,versions,xml_sha256undpdf_sha256(siehe 9. Oktober).
11. Oktober 2026: eine GitHub Action für Vorlagen
- GitHub Action: Formfeed templates im GitHub Marketplace führt die Kommandozeile in einem Workflow aus:
validateundtestbei jedem Lauf, die Vorlagen, die ein Pull Request ändert, zur Prüfung gerendert, mit der Zusammenfassung als einem Kommentar, den jeder Lauf aktualisiert, und das Veröffentlichen vom Standard-Branch. Einzubinden alsformfeed-dev/formfeed-action@v1. Siehe GitHub Actions.
11. Oktober 2026: E-Rechnungen aus WooCommerce
- Dokumentation: WooCommerce macht jede fertiggestellte Bestellung zur ZUGFeRD- / Factur-X-E-Rechnung: eine Funktion, die die Bestellung der REST-API von WooCommerce dem
_invoice-Block zuordnet, mit Produkten, Versand und Gebühren als Positionen, Gutscheinen als Nachlässen und der Umsatzsteuer je Satz, wie die Bestellung sie nennt; die Konfiguration, die sie braucht (wer Sie sind, wo Ihr USt-IdNr.-Plugin die des Käufers speichert, die Kategorie eines Satzes von 0 % und eines Kunden, den WooCommerce von der Umsatzsteuer befreit, wann eine offene Rechnung fällig ist); ein Webhook-Handler, der die Signatur von WooCommerce prüft und jede Bestellung nur einmal verarbeitet; und dasselbe in n8n. Wie beim Stripe-Rezept läuft der Code der Seite gegen Bestellungen, wie die API von WooCommerce sie liefert, und durch die Prüfung, die die API vor dem Rendern einer E-Rechnung ausführt.
11. Oktober 2026: E-Rechnungen aus Stripe
- Dokumentation: Stripe macht jede Rechnung, die Stripe finalisiert, zur ZUGFeRD- / Factur-X-E-Rechnung: eine Funktion, die Stripes Rechnung dem
_invoice-Block zuordnet, die Konfiguration, die sie braucht (wer Sie sind und welche Umsatzsteuerkategorie Stripes Steuergründe und Steuersätze haben), ein Webhook-Handler fürinvoice.finalizedund dasselbe in n8n. Die Funktion übernimmt Stripes Beträge, zeigt Rabatte als Nachlässe und Gutschriften als negative Mengen und lehnt ab, was sie nicht abbilden kann, etwa Versandkosten oder einen Grund ohne Kategorie, statt zu raten. Der Code der Seite läuft gegen Rechnungen, wie Stripes API sie liefert, und durch die Prüfung, die die API vor dem Rendern einer E-Rechnung ausführt.
10. Oktober 2026: Test-E-Rechnungen tragen in jedem Plan die Testmarkierung
- Geändert: Ein Test-Rendering, das eine E-Rechnung erzeugt, trägt in jedem Plan die Testmarkierung, und die bezahlten Pläne zählen sie pro Organisation und Tag wie der Free-Plan: bis zu 100 pro Tag im Starter-Plan, 500 im Pro-Plan und 2.000 im Business-Plan, ein Dreißigstel der monatlichen Einheiten des Plans; Enterprise nach Vertrag. Bisher waren die Test-E-Rechnungen eines bezahlten Plans weder markiert noch gezählt, gültige Rechnungen, die keine Einheit kosteten. Sobald der Tag aufgebraucht ist, beantwortet die API eine Test-E-Rechnung mit
403 forbiddenundlimit,usedundresets_at. Das echte Rendering einer Rechnungsvorlage im Editor und Testanfrage senden in seinem API-Tab sind ebenfalls Test-Renderings. Test-Renderings anderer Dokumente bleiben in den bezahlten Plänen ohne Markierung, und Live-Renderings werden weder gezählt noch markiert. Siehe Limits und Verbrauch.
10. Oktober 2026: E-Rechnungen aus Zapier
- Zapier: Die neue Aktion Create E-Invoice erzeugt eine ZUGFeRD- / Factur-X-E-Rechnung aus Feldern für die Rechnung selbst, gruppiert nach Rechnung, Verkäufer, Käufer, Positionen und Umsatzsteuer, Summen und Zahlung. Positionen und Aufschlüsselung der Umsatzsteuer sind Line Items, die Line Items eines Triggers werden also Zeile für Zeile zugeordnet. Eine abgelehnte Rechnung nennt im Fehler des Zaps jedes Feld und jede Regel, und die Ausgabe trägt den Bericht des Validators. Sie kommt mit Version 0.2.0 der Zapier-App. Siehe Zapier.
9. Oktober 2026: E-Rechnungen aus n8n und von KI-Agenten
- n8n-Node: Render → Create E-Invoice erzeugt eine ZUGFeRD- / Factur-X-E-Rechnung aus den Feldern der Rechnung (Verkäufer, Käufer, Positionen, Aufschlüsselung der Umsatzsteuer, Summen, Zahlung), die der Node als
_invoice-Block an eine Vorlage sendet, die ihn druckt, etwa das Beispiel „E-Rechnung“ der Galerie. Was die Felder nicht anbieten, gehört in ein JSON-Feld, und die Ausgabe des Nodes trägt den Bericht des Validators. Siehe n8n. - MCP-Server: Das neue Tool
check_invoiceprüft einen_invoice-Block offline, wie die API es vor dem Rendern tut, undrendernimmteinvoice, um aus dem PDF eine E-Rechnung zu machen. Eine abgelehnte Rechnung kommt als Werkzeugfehler zurück, der jedes Feld und jede Regel nennt, sodass der Agent den Block korrigieren kann. Siehe MCP-Server. - Der gehostete Endpunkt
mcp.formfeed.devhat beides jetzt;@formfeed/mcpundn8n-nodes-formfeedbringen es mit der nächsten Paketversion.
9. Oktober 2026: Der Bericht der E-Rechnung nennt, was welche Datei geprüft hat
- API: Der Bericht einer E-Rechnung,
einvoice.validation, trägt jetzt auch die Kennung des Validators für den Bericht (id), die Versionen seiner Teile (versions: Mustang, veraPDF, PDFBox) und SHA-256 des geprüften XML und PDF,xml_sha256undpdf_sha256. Bei einem erfolgreichen Rendering istpdf_sha256die ausgelieferte Datei und gleichoutput_sha256des Renderings. Berichte früherer Renderings bleiben, wie sie waren. Siehe Was zurückkommt. - Dokumentation: Abdeckung der E-Rechnung nennt die 129 der 164 Geschäftsbegriffe der EN 16931, die der
_invoice-Block trägt, mit dem Feld, aus dem jeder stammt, und die Versionen des Validators und seiner Regeln, erzeugt aus dem Code, der läuft. E-Rechnungen nach Ländern sagt, welches Land was verlangt, mit einer Quelle je Land, und wo der Teil von Formfeed endet. - SDKs: Die Typen von
@formfeed/sdkund des Python-Paketsformfeedkennen die neuen Felder ab der nächsten Paketversion, und@formfeed/engineexportiert die Liste der Geschäftsbegriffe alsEN16931_TERMS.
9. Oktober 2026: Rechnungen zwischen französischen Unternehmen folgen Frankreichs Regeln
- Behoben: Eine E-Rechnung zwischen zwei französischen Unternehmen im Profil
basicwird mit422 einvoice_data_invalidabgelehnt. Frankreichs Reform nimmt nur die Profile EN 16931 und EXTENDED-CTC-FR an (AFNOR XP Z12-012); eine solche Datei war nach den europäischen Regeln gültig, aber keine, die eine französische Plattform annimmt.en16931, der Standard, bleibt unverändert. - Behoben:
operation_codenimmt jeden Abrechnungsrahmen an, den die französischen Regeln aufführen.S3(öffentliche Auftraggeber) und die Rahmen für Rechnungen mehrerer Verkäufer,B8,S8undM8, werden nicht mehr abgelehnt. - Geändert: Eine solche Rechnung braucht außerdem die drei gesetzlichen Hinweise (
PMT,PMD,AAB) und die elektronischen Adressen von Verkäufer und Käufer, die Frankreichs Regeln zur Pflicht machen (BR-FR-05,BR-FR-12,BR-FR-13). Bisher warnte der Validator nur, wenn eines davon fehlte, und die Datei wurde ausgeliefert; jetzt wird die Anfrage vor dem Rendering mit422 einvoice_data_invalidabgelehnt. formfeed validate,formfeed einvoiceund@formfeed/engineprüfen dasselbe ab der nächsten Paketversion.
9. Oktober 2026: Pakete 0.3.16
- Alle Pakete wechseln ohne eigene Änderungen zu 0.3.16. Die Version legt eine Kopie der Credential-Datei des n8n-Knotens ins Hauptverzeichnis des öffentlichen Repositorys, wo die Prüfung von Community-Nodes durch n8n sie sucht.
9. Oktober 2026: Pakete 0.3.15
- Vorlagen-Engine:
@formfeed/engine0.3.15 nimmt als Quelle einer Vorlage nur Text an (Body, Header, Footer, PDF-Titel und Partials) und verlangt Handlebars 4.7.10. Handlebars kompiliert ein Objekt als bereits geparsten Syntaxbaum, und bis 4.7.9 konnten Werte eines solchen Baums als Code laufen (GHSA-8r5x-fm3f-whwj). - n8n-Knoten:
n8n-nodes-formfeed0.3.15 folgt den Regeln von n8n für verifizierte Community-Nodes: Auswahllisten in alphabetischer Reihenfolge, Get Many liefert ohne gesetztes Limit 50 Ergebnisse (bisher 25), der Standard-Kanal heißt Published, und Knoten und Zugangsdaten tragen Icons für helles und dunkles Design. formfeed(CLI und Python),@formfeed/sdk,@formfeed/devkit,@formfeed/testing,@formfeed/mcpund das Activepieces-Piece wechseln zu 0.3.15; CLI und MCP-Server bündeln die Engine und bringen ihre Änderung mit.
8. Oktober 2026: Die Aufbewahrung des Plans ist die Grenze, und Tailwind für einfaches HTML
- Behoben: Eine Ausgabe wird nicht mehr länger aufbewahrt als die Aufbewahrungsfrist des Plans.
expires_inund die eigene Frist eines Workspace sollten sie verkürzen, ein längerer Wert setzte sich aber einfach durch; eine Anfrage konnte so in einem Plan mit 30 Tagen ein Jahr verlangen. Ein längeresexpires_inwird jetzt auf die Aufbewahrungsfrist gekürzt, und eine längere Frist in den Einstellungen des Workspace gilt als die des Plans. Ausgaben, die vor dieser Änderung gerendert wurden, behalten ihr Ablaufdatum, und Pläne ohne Grenze (Business und höher) sind nicht betroffen. - Behoben:
"tailwind": truein den Einstellungen kompiliert die Tailwind-Klassen auch von Ad-hoc-htmlohneengine. Bisher bekam nur HTML mit einer Engine das Stylesheet, einfaches HTML wurde ungestaltet gedruckt. Ein vollständiges Dokument bekommt das Stylesheet an den Anfang seines Head, vor seine eigenen Styles.
7. Oktober 2026: Pakete 0.3.14
- SDK:
@formfeed/sdk0.3.14 ruftfetchso auf, wie Browser und Cloudflare Workers es verlangen. Bisher scheiterte ein Client auf diesen Laufzeiten mitIllegal invocationan jeder Anfrage, sofern keinfetchübergeben wurde; Node war nie betroffen. - MCP-Server:
@formfeed/mcp0.3.14 bringt das Toolget_workspace, und der gehostete Endpunkthttps://mcp.formfeed.dev/mcpnimmt neben dem API-Schlüssel eine Anmeldung entgegen, der Workspace wird bei der Zustimmung gewählt. Der selbst betriebene--http-Server nimmt die Anmeldung auf/mcpebenfalls an, sobald--auth-servergesetzt ist. formfeed(CLI und Python),@formfeed/engine,@formfeed/devkit,@formfeed/testing, der n8n-Knoten und das Activepieces-Piece wechseln ohne eigene Änderungen zu 0.3.14.
7. Oktober 2026: der gehostete MCP-Server beantwortet Tool-Aufrufe
- Behoben: Jeder Tool-Aufruf auf
mcp.formfeed.devscheiterte mitnetwork_error: Illegal invocation, mit API-Schlüssel wie mit Anmeldung, seit der gehostete Endpunkt am 17. September live ging. Das TypeScript-SDK, auf dem der Endpunkt aufbaut, rief das globalefetchals Methode seines Clients auf, was Node akzeptiert und Browser wie Cloudflare Workers ablehnen. Der Endpunkt antwortet seit dem Deploy dieses Tages. - SDK: Derselbe Fehler betraf
@formfeed/sdkim Browser oder in einem Cloudflare Worker, wann immer keinfetchübergeben wurde. In den Quellen behoben; die nächste Paketversion bringt es mit. Bis dahin auf diesen Laufzeitenfetch: (input, init) => fetch(input, init)übergeben.
7. Oktober 2026: eine MCP-Adresse, der Workspace wird bei der Zustimmung gewählt
- MCP-Server:
https://mcp.formfeed.dev/mcpnimmt neben dem API-Schlüssel auch eine Anmeldung entgegen. Ein Chat-Client öffnet die Formfeed-Anmeldung selbst, und die Zustimmungsseite fragt, in welchem Workspace der Agent arbeitet; die Wahl reist im Token des Agenten, und die API prüft die Mitgliedschaft wie bisher bei jedem Aufruf.https://mcp.formfeed.dev/mcp/<workspace id>funktioniert weiter und legt für eine zweite Verbindung einen anderen Workspace fest. - MCP-Server: Das neue Tool
get_workspaceantwortet mit Workspace, Organisation, Tarif, Umgebung und den Einheiten des Zeitraums, wieGET /account, damit ein Agent sagen kann, wo ein Dokument landet und wie viele Renderings noch bleiben. Das Token eines Agenten darf jetzt das Konto lesen (account:read) und sonst nichts mehr als bisher. - App: Konto → Verbundene Agenten listet jeden erlaubten Agenten mit seinem Workspace, der sich dort ändern lässt, und einem Widerruf, der den Agenten abmeldet. Ein vor dieser Änderung erlaubter Client wird beim nächsten Verbinden nach seinem Workspace gefragt.
- Geändert:
POST /templates/{id}/validateund die anderen/v1-Routen antworten einem Agenten, für den noch kein Workspace gewählt ist, mit403und dem Grund, wo sie bisher wegen des fehlenden HeadersX-Formfeed-Workspacemit400antworteten.
5. Oktober 2026: Pakete 0.3.13
- CLI:
formfeed0.3.13 arbeitet mit barrierefreien PDFs. Für eine Vorlage, derensettings.jsonpdf.uafestlegt, meldetformfeed validate, was die Quelle über die Datei schon sagt, etwa einen fehlenden Titel oder ein ohnealtgeschriebenes Bild: als Fehler, wo die Prüfung streng ist, als Warnungen, wo sie nur berichtet.formfeed rendergibt das Urteil des Validators aus, und ein strenges Rendering, dessen Datei nicht besteht, ist ein Befund mit Exit-Code 1.formfeed devprüft die Seite, die es in der Vorschau zeigt. - Engine:
@formfeed/engine0.3.13 exportiert die statische Vorlagenprüfung, dieformfeed validateund die Validierung der API ausführen:staticAuditüber die Quellen einer Vorlage, die Befunde mit den Regeln, die jeder verletzt (AUDIT_CODES,AUDIT_RULES), undresolveUafür die Einstellung.chartnimmt in seinen Optionen einaltan, das ein Diagramm für PDF/UA-1 braucht. Die Prüfung der fertigen Datei gegen die Norm geschieht in der API, nicht im Paket. - Dev Kit:
@formfeed/devkit0.3.13 exportiertdiagnoseAccessibility, worauf die CLI aufbaut. - SDKs:
@formfeed/sdkund das Python-Paketformfeed0.3.13 kennen den Berichtaccessibilityam Rendering:Accessibility,AccessibilityFailureundAccessibilityWarningin beiden, dazuPdfUaOptionsfür die Einstellung in TypeScript. - MCP-Server:
@formfeed/mcp0.3.13 reicht den Bericht mit einem Rendering weiter und nennt einem Agenten, welche Regeln ein strenges Rendering verletzt hat und in welchen Elementen. @formfeed/testing, der n8n-Node und das Activepieces-Piece ziehen ohne eigene Änderungen auf 0.3.13 mit.
5. Oktober 2026: der Power-Automate-Connector ist zertifiziert
- Power Automate: Microsoft hat den Formfeed-Connector zertifiziert und am 5. Oktober freigegeben. Er funktioniert in Power Automate, Power Apps, Logic Apps und Copilot Studio, als Premium-Connector und zunächst als Preview wie jeder neu zertifizierte. Microsoft verteilt ihn jetzt Region für Region, was etwa zwei Wochen dauert; bis er in Ihrer Umgebung erscheint, stellt die HTTP-Aktion denselben Aufruf. Siehe Power Automate.
5. Oktober 2026: E-Rechnungen, die zugleich PDF/UA-1-Dateien sind
- API:
settings.pdf.uaund eine E-Rechnung gehen jetzt zusammen. Das Rendering liefert eine Datei, die die ZUGFeRD- bzw. Factur-X-Rechnung, also ein PDF/A-3b, und zugleich ein PDF/UA-1-Dokument ist. Beides wird an der Datei geprüft, die ausgeliefert wird, und das Rendering trägteinvoiceundaccessibility. Bisher antwortete das Paar mit400 invalid_request. - API: Ein strenges Rendering, dessen E-Rechnung gültig ist und dessen Datei PDF/UA-1 nicht besteht, antwortet
422 pdfua_validation_failedmit beiden Berichten und liefert nichts aus. Mit{ "check": "report" }wird die gültige E-Rechnung ohne die PDF/UA-Kennung ausgeliefert.einvoice_display_mismatchträgt ebenfallsaccessibility, wenn das Renderingpdf.uagesetzt hat. - Geändert:
post.watermark.textist bei einer E-Rechnung erlaubt. Es antwortete mit400 invalid_request, solange die Schrift des Wasserzeichens nicht eingebettet war. - Geändert: Die Kennzeichnung einer Test-E-Rechnung ist Text in der eingebetteten Schrift, wie bei jedem anderen Test-Rendering. Einige Tage lang war sie ein Bild.
- Editor: Barrierefreies PDF (PDF/UA-1) und E-Rechnung sperren einander in der Seiteneinrichtung nicht mehr, und eine Vorlage, die beides festlegt, wird nicht mehr als Problem gemeldet.
- CLI:
formfeed validateundPOST /templates/{id}/validatemelden für eine Vorlage, die beides festlegt, keinaccessibility-einvoicemehr. In der CLI ab 0.3.13, der ersten Version mit der Prüfung.
5. Oktober 2026: barrierefreie PDFs (PDF/UA-1)
- API:
settings.pdf.uamacht ein Rendering zu einem getaggten PDF im Format PDF/UA-1. Formfeed repariert, was die getaggte Ausgabe des Browsers falsch macht, prüft jede Datei gegen die maschinell prüfbaren Regeln der Norm und meldet das Urteil im neuen Feldaccessibilitydes Renderings: ob die Datei bestanden hat, und zu jeder verletzten Regel, was an der Vorlage zu ändern ist und in welchen Elementen.trueist die strenge Prüfung, bei der ein Rendering, dessen Datei nicht besteht, mit dem neuen Problempdfua_validation_failedfehlschlägt;{ "check": "report" }liefert die Datei aus und berichtet. Es gehört zu jedem Plan und kostet keine zusätzliche Einheit. Eine bestandene Prüfung macht ein Dokument noch nicht barrierefrei: Barrierefreie PDFs sagt, was sie belegt und was bei der Vorlage bleibt. - Editor: Die Seiteneinrichtung hat einen Abschnitt Dokument mit Titel, Autor, Thema und Stichwörtern des PDF, seinen Lesezeichen und Tags und Barrierefreies PDF (PDF/UA-1). Ist das eingeschaltet, prüfen die Vorschauen die Seite, und die Liste Probleme nennt jeden Befund an seiner Zeile; ein Echtes Rendering und das Render-Protokoll zeigen das Urteil des Validators.
- API:
POST /templates/{id}/validatemeldet für eine Version, diepdf.uafestlegt, einen fehlenden Titel und ein ohnealtgeschriebenes Bild. - CLI:
formfeed validatemeldet dasselbe für einen Vorlagenordner,formfeed rendergibt das Urteil aus, undformfeed devprüft die Seite, die es in der Vorschau zeigt. Die SDKs kennen das neue Feld, und der MCP-Server reicht es weiter. All das kommt mit den Paketen 0.3.13. - Geändert: Ein getaggtes PDF (
pdf.tagged,pdf.outline) erhält dieselben Reparaturen, ob es PDF/UA verlangt oder nicht: Kopf- und Fußzeilen und Schmuck werden als Artefakte markiert, und Links tragen eine Beschreibung. - Geändert: Ein Text-Wasserzeichen und die Kennzeichnung von Test-Renderings werden in Noto Sans gesetzt, eingebettet in die Datei, statt wie bisher in Helvetica. Ein Text-Wasserzeichen nimmt jetzt auch griechische und kyrillische Buchstaben an.
5. Oktober 2026: Test-E-Rechnungen im Free-Plan
- API: Im Free-Plan erzeugen Test-Renderings jetzt E-Rechnungen: bis zu 20 pro Tag und Organisation, gezählt ab Mitternacht UTC, jede eine gültige ZUGFeRD-/Factur-X-Datei mit der Testmarkierung auf ihren Seiten. Bisher wurde ein Free-Workspace auch mit einem Test-Schlüssel abgelehnt. Ein Live-Rendering, das eine erzeugt, wird weiterhin mit
403 forbiddenund"feature": "einvoice"abgelehnt. - Fehler: Ein Test-Rendering über die 20 des Tages hinaus beantwortet die API mit demselben
403 forbiddenund"feature": "einvoice", jetzt mitlimit,usedundresets_at, dem Beginn des nächsten UTC-Tages. In einem Batch zählt jedes Element, das eine E-Rechnung erzeugt, und nichts wird eingereiht, wenn nicht alle hineinpassen. - Editor: Im Free-Plan funktioniert der Abschnitt E-Rechnung der Seiteneinrichtung wie in einem bezahlten Plan und sagt, was ein Test-Rendering ist. Das echte Rendering einer Rechnungsvorlage ist eine der 20 des Tages, ebenso Testanfrage senden im API-Tab.
5. Oktober 2026: Pakete 0.3.12
- CLI:
formfeed0.3.12 arbeitet offline mit E-Rechnungen.formfeed validatemisst den_invoice-Block jedes Datensatzes an den Regeln, für jede Vorlage, derensettings.jsoneine E-Rechnung festlegt, und nennt Datei, Zeile, Feld und Regel. Das neueformfeed einvoice <slug>schreibt das XML, das ein Rendering einbetten würde, ohne API-Schlüssel.formfeed rendersendet, was die Vorlage festlegt, und gibt den Bericht des Renderings aus. - Engine:
@formfeed/engine0.3.12 exportiert den E-Rechnungs-Code, den die API vor einem Rendering ausführt: das Schema des_invoice-Blocks (invoiceSchema), die Prüfung, die zu jedem Befund die verletzte Regel nennt (checkInvoice), den Schreiber des XML (invoiceToCii,einvoiceXml) und die Prüfung, ob eine Seite zeigt, was das XML nennt (displayCheck). Die Umwandlung in PDF/A-3 und die Validierung der fertigen Datei geschehen in der API, nicht im Paket. Das Paket bekommtzodals Abhängigkeit. - Dev Kit:
@formfeed/devkit0.3.12 exportiert, worauf die CLI aufbaut:declaredEinvoice,diagnoseEinvoiceundlocalEinvoiceXml. - SDKs:
@formfeed/sdkund das Python-Paketformfeed0.3.12 kennenpost.einvoicean einem Rendering und einem Batch und den Berichteinvoiceam Rendering:EinvoiceOptions,EinvoiceundEinvoiceMessagein TypeScript,Einvoice,EinvoiceValidation,EinvoiceDisplayundEinvoiceMessagein Python. @formfeed/testing, der MCP-Server, der n8n-Node und das Activepieces-Piece ziehen ohne eigene Änderungen auf 0.3.12 mit.
4. Oktober 2026: E-Rechnungen
- API: Ein PDF-Rendering kann eine E-Rechnung im Format ZUGFeRD / Factur-X sein: ein PDF/A-3b, das die Rechnung als
factur-x.xmlträgt, in den Profilen EN 16931 und Basic, aus einer HTML- oder Word-Vorlage oder aus HTML, das mit der Anfrage kommt. Angefordert wird sie mitpost.einvoicean einem Rendering oder einem Batch, oder einmal festgelegt insettings.einvoiceder Vorlage. Die Rechnung ist der_invoice-Block indata, und die Vorlage druckt aus demselben Block. - Validierung: Der Block wird an den Regeln gemessen, bevor etwas gerendert wird, und die fertige Datei wird validiert, bevor sie ausgeliefert wird. Ein gelungenes Rendering trägt den Bericht im neuen Feld
einvoicedes Renderings, das auch die Webhook-Events enthalten. Mitxml: "both"liegt das XML zusätzlich neben dem PDF und ist alseinvoice.xml_urlverlinkt. Eine Datei, die nicht besteht, wird nicht ausgeliefert, und an ihrer Stelle auch kein gewöhnliches PDF. - Fehler: fünf neue Codes:
einvoice_data_invalid,einvoice_profile_unsupported,einvoice_display_mismatch,pdfa_conversion_failedundconformance_unavailable. - Pläne: E-Rechnungen setzen den Starter-Plan oder höher voraus und kosten 1 Einheit zusätzlich zum Rendering. Test-Schlüssel, Vorschauen und fehlgeschlagene Renderings kosten nichts. Im Free-Plan antwortet die API mit
403 forbiddenund"feature": "einvoice". Siehe Pläne und Einheiten. - Editor: Die Seiteneinrichtung einer PDF-Vorlage hat einen Abschnitt E-Rechnung mit dem Schalter, dem Format und dem Profil und einer Karte, die sagt, was dem
_invoice-Block des Datensatzes fehlt, jeder Befund mit seiner Regel. Die Vorschau zählt die Werte des XML, die sie zeigt, und ein echtes Rendering und das Render-Protokoll zeigen den Bericht des Validators, der sich als JSON herunterladen lässt.
2. Oktober 2026: Bilder zur Auswahl auf der Arbeitsfläche
- Editor: Auf der Arbeitsfläche nannte eine Bild-Ebene, die ihr Bild aus der Dateibibliothek nimmt, die Datei in einem Textfeld; man musste also wissen, wie sie heißt. Datei im Inspektor öffnet jetzt die Bilder der Dateibibliothek des Workspace, die neuesten zuerst, mit einer Suche nach dem Namen. Das verwendete Bild ist markiert, und Bild hochladen in derselben Liste fügt eine Datei hinzu und zeigt sie sofort auf der Ebene. Ein langer Dateiname wird im Feld gekürzt und erscheint vollständig, wenn Sie mit der Maus darauf zeigen.
- Behoben: Eine Bild-Ebene nahm ein PDF an, über ihren Upload oder wenn eines auf die Arbeitsfläche gezogen wurde, weil die Bibliothek auch PDFs enthält. Es wurde hochgeladen und stand dann als defektes Bild auf der Arbeitsfläche. Eine Bild-Ebene nimmt jetzt nur Bilder an und sagt, welche Datei keines ist.
- Behoben: Die Suche der Seite Dateien las
_und%in der Eingabe als Platzhalter;hero_2xfand deshalb auchhero-2x.png. Beide Zeichen stehen jetzt für sich selbst.
2. Oktober 2026: ältere Versionen, und Seiten, die auf ihren Workspace warten
- Editor: Das Panel Versionen zeigte die neuesten fünfzig Versionen einer Vorlage und keinen Weg zu den früheren; eine häufiger gespeicherte Vorlage ließ sich in der App nicht mit ihren frühen Versionen vergleichen und nicht auf sie zurücksetzen. Ältere Versionen anzeigen unter der Liste holt sie, jeweils fünfzig, und die Zeile darüber sagt
50+ gespeichert, solange es weitere gibt. - Behoben: Bei einer langsamen Verbindung sagten Seiten etwas über einen Workspace, den sie noch nicht kannten: Das Render-Protokoll zeigte „Noch keine Renderings“, die Seiten für API-Schlüssel und Webhooks verwiesen an einen Inhaber, und die Abrechnung zeigte den Free-Plan als aktuellen Plan, bis die Organisation geladen war. Jetzt erscheint keine Seite eines Workspace, bevor der Workspace bekannt ist, und das Render-Protokoll zeigt nicht mehr „Keine Renderings passen zu den Filtern“, während seine erste Antwort unterwegs ist.
- Behoben: Eine Adresse, deren Workspace es nicht gibt (ein gelöschter Workspace, ein vertippter Link), zeigte eine leere App. Sie führt zum ersten Workspace der Organisation oder zur Liste der Organisationen.
- Behoben: Mit eingeschaltetem Text bearbeiten ging ein Klick auf einen Text in dem Moment verloren, in dem die Vorschau ihr nächstes Dokument übernahm, oder der Text öffnete sich nur, um sich wieder zu schließen. Der Text öffnet sich jetzt im neuen Dokument, ohne zweiten Klick.
2. Oktober 2026: Korrekturen im Editor und auf der Vorlagenseite
- Behoben: Mit eingeschaltetem Text bearbeiten verlor ein Text, der gleich nach der Änderung davor angeklickt wurde (Enter, dann der nächste Text), seinen Cursor, sobald die Vorschau die erste Änderung zeigte, und das dort Getippte war weg. Die Vorschau wartet mit diesem Rendering jetzt, bis der Text fertig ist.
- Behoben: Auf der Arbeitsfläche verlor ein Klick in das Textfeld des Inspektors den Fokus an die Arbeitsfläche, wenn er in dem Moment kam, in dem sich ein Text zum Tippen öffnete, und das für das Feld Getippte landete im Text auf der Arbeitsfläche. Der Fokus bleibt jetzt dort, wo Sie ihn hingesetzt haben.
- Behoben: Echtes Rendering schlug mit „all render slots are busy“ fehl, solange der Renderer ausgelastet war. Es wartet jetzt bis zu 20 Sekunden auf einen freien Platz.
- Behoben: Bei einer langsamen Verbindung zeigte die Vorlagenseite „Noch keine Vorlagen“, bis die Liste eines Workspace angekommen war, und Vorlage anlegen im Dialog Neue Vorlage tat nichts, wenn es gedrückt wurde, bevor der Workspace geladen war. Die Seite zeigt die Liste jetzt als ladend, und die Schaltfläche ist verfügbar, sobald der Workspace da ist.
2. Oktober 2026: das API-Panel einer Vorlage
- Editor: Jede Vorlage hat ein Panel API: die Anfrage, die sie rendert, in curl, TypeScript, Python, PHP, Go, C#, Java und Ruby, mit dem Slug der Vorlage und ihrem Datensatz als
data.json. Die erste Zeile sagt, welche Version ein Aufruf rendert, und ein Schalter nimmt den neuesten Entwurf in die Anfrage auf, wenn einer vor der veröffentlichten Version liegt. Siehe die Editor-Tour. - Editor: Inhaber und Admins legen im Panel einen Test-Schlüssel an, einmal angezeigt als die
export-Zeile, die eine Shell braucht. Testanfrage senden schickt die Anfrage als Test-Rendering durch die API und zeigt die Antwort: die Datei, das Rendering im Render-Protokoll und das JSON, oder das Problem mit der Seite zu seinem Code. In jedem Plan kostenlos. - App:
?panel=apian der Adresse einer Vorlage öffnet das Panel, ebenso API-Anfrage im Menü einer Zeile der Vorlagenliste und der letzte Schritt der Checkliste Erste Schritte. Nach Diese Vorlage verwenden führt der Hinweis im Editor dorthin statt auf die Seite des Beispiels, denn das Panel nennt den Slug der Kopie. - API: Das Problem, mit dem
POST /v1/rendersantwortet, wenn ein Rendering fehlschlägt, trägt jetzt dierender_iddes Renderings, wie es das Problem seines Ergebnisses bereits tat. Siehe Fehler.
2. Oktober 2026: Rendern mit der ID der Vorlage
- Behoben:
POST /v1/rendersundPOST /v1/renders/batchantworteten mit404 template_not_found, wenntemplatedietpl_…-ID war, die die Templates-API zurückgibt. Sie kannten nur den Slug und die reine UUID. Slug undtpl_…-ID funktionieren jetzt beide, wie es die Referenz immer gesagt hat. - Behoben: Ein Rendering nannte seine Vorlage in
template.idmit der UUID der Datenbank, in API-Antworten und in Webhook-Events, während die Templates-APItpl_…ausgibt und diese Seiten immertpl_…gezeigt haben. Renderings und Events tragen jetzt dietpl_…-ID, eine Vorlage hat also eine ID. Eine gespeicherte UUID funktioniert weiterhin überall, wo eine Vorlage genannt wird: Eine Render-Anfrage, der FiltertemplatevonGET /v1/rendersund die Templates-API nehmen den Slug, dietpl_…-ID oder die UUID.
2. Oktober 2026: Pakete 0.3.11
- n8n-Node:
n8n-nodes-formfeed0.3.11 lässt sich mit dem Eingang Tools des AI-Agent-Nodes von n8n verbinden; der Agent wählt dann die Operation und füllt ihre Felder aus. Ein selbst gehostetes n8n bietet Community-Nodes nur dann als Tools an, wenn die InstanzN8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=truesetzt. Siehe n8n. - CLI:
formfeed0.3.11 behält ein Design des visuellen Editors bei seiner Vorlage:templates pullschreibt es indesign.json,pushsendet es zurück, undvalidatewarnt mitdesign-stale, wenntemplate.htmloderstyle.cssdanach bearbeitet wurden, und mitdesign-invalid, wenn die Datei kein Design ist, das die App öffnen kann. Siehe die Projektstruktur. - Engine:
@formfeed/engine0.3.11 rendert lokal, was die API seit Ende September rendert. Text mitdata-ff-fit="shrink"wird an seine Box angepasst;barcodesetzt die Ziffern eines EAN-13, EAN-8 oder UPC-A neben die langen Randstriche statt durch sie hindurch; undqrcode,qrundbarcodebeantworten einen leeren Wert mit einer Meldung, die den Helper nennt („nothing to encode, the value is empty or missing from the data“), statt mit der der Code-Bibliothek. Das Paket exportiert außerdem das Design-Format (parseDesign,emitDesign). - Snapshots: Weil
formfeed testund@formfeed/testingdas Dokument vergleichen, das die Engine zusammensetzt, ändert sich ein Snapshot mit einem dieser drei Barcodes oder einem angepassten Text einmal mit 0.3.11. Sehen Sie sich den Unterschied an und bestätigen Sie ihn mitformfeed test -u. - Die SDKs, der MCP-Server und das Activepieces-Piece ziehen ohne eigene Änderungen auf 0.3.11 mit.
2. Oktober 2026: die Arbeitsfläche nach ihren ersten Testern
- Editor: Ein Text, der auf der Arbeitsfläche hinzugefügt wird, öffnet sich sofort zum Tippen, sein Platzhalter ist markiert; ein gewählter Text nimmt auf, was Sie tippen, und ein Klick auf ihn setzt den Cursor. Ein runder Griff unter der Auswahl verschiebt die Ebene, auch während in ihren Text getippt wird.
- Editor: Fett, kursiv, unterstrichen und das neue Durchgestrichen sind Umschalter mit den üblichen Tasten (Strg+B, Strg+I, Strg+U), die Schriftstärken stehen mit Namen in der Liste, und ein neuer Text beginnt normal. Jede Ebene hat im Inspektor einen Schatten: hinter den Buchstaben eines Texts, hinter der Box jeder anderen Ebene.
- Editor: Ein Bild in der Zwischenablage lässt sich mit Strg+V auf die Arbeitsfläche einfügen (es wird zuerst in die Dateibibliothek hochgeladen), und Eigene Schriften hochladen unter der Liste der Schriften fügt der Organisation Schriftdateien hinzu, ohne den Editor zu verlassen.
- Behoben: Die Bild-Schaltfläche der Leiste schloss die Arbeitsfläche mit „Das Design lässt sich nicht öffnen“. Eine neue Bild-Ebene wartet jetzt auf ihr Bild: Die Arbeitsfläche und die Liste Probleme sagen das, und bis eines gewählt ist, wird sie als leere Box gerendert.
- API: In
settings.designdarf derstyleeiner Text-Ebenestrike: truetragen, und diesourceeiner Bild-Ebene darf ein leeresasset,urloderpathenthalten, solange noch kein Bild gewählt ist.
2. Oktober 2026: mit einem Beispiel beginnen, und das Limit der Vorlagen
- App: Die Vorlagen von formfeed.dev/de/examples stehen in der App bereit. Vorlagen → Beispiele listet sie mit einer Suche und Filtern für Gruppe, Art und Engine, und Diese Vorlage verwenden legt eine Kopie im Workspace an: Einstellungen, Übersetzungen und Beispieldaten des Beispiels, veröffentlicht als Version 1, sodass ein Rendering mit dem Slug der Kopie sofort funktioniert. Jede Beispielseite der Website hat denselben Button; er führt über die Anmeldung zu diesem Beispiel. Siehe den Schnellstart.
- API: Die Zahl der Vorlagen, die ein Plan umfasst, wird jetzt durchgesetzt: fünf im Free-Plan, keine Begrenzung ab Starter.
POST /v1/templatesdarüber hinaus antwortet mit403 forbidden,feature: "templates"und demlimit. Archivierte Vorlagen zählen nicht, und eine archivierte lässt sich nicht wiederherstellen, solange der Plan voll ist. Vorlagen, die eine Organisation bereits hat, bleiben unverändert, und Renderings sind nicht betroffen.
30. September 2026: Text in der Vorschau bearbeiten und eine Arbeitsfläche für Bildvorlagen
- Editor: Ist Text bearbeiten eingeschaltet, bearbeitet ein Klick auf eine Überschrift, einen Absatz oder eine übersetzte Beschriftung in der Fluss- oder Seitenvorschau den Text an Ort und Stelle. Werte aus den Daten bleiben Chips, die Änderung geht als eine Bearbeitung, die Strg+Z rückgängig macht, in die Vorlage (oder in das Wörterbuch der Sprache, die die Vorschau zeigt), und Text, den die Vorschau nicht sicher bearbeiten kann, etwa Kontrollfluss, wird stattdessen im Code gezeigt. Siehe die Editor-Tour.
- Editor: Bildvorlagen lassen sich auf einer Arbeitsfläche gestalten, in der Beta: Text, Bilder, Formen, QR-Codes und Barcodes als Ebenen, Text aus Feldern der Daten, Markenfarben und -schriften, Text, der sich seiner Box anpasst, Lineale und Hilfslinien zum Einrasten und eine Prüfung jedes Datensatzes auf Text, der nicht passt. Der Editor schreibt HTML und CSS der Vorlage aus dem Design; Renderings, die API und die SDKs sehen also eine gewöhnliche Vorlage. Siehe den visuellen Editor.
- Vorlagen:
data-ff-fit="shrink"gibt dem Text einer Box fester Größe die größte Schriftgröße, mit der er passt, in jeder Vorlage: siehe Text an seine Box anpassen. - API:
settings.designeiner Version enthält die Ebenen der Arbeitsfläche (Einstellungen); es darf höchstens 256 kB groß sein, und Renderings beachten es nicht. - CLI: Ab dem nächsten Release schreibt
formfeed templates pullein Design indesign.json,pushsendet es zurück, undformfeed validatewarnt, wenntemplate.htmloderstyle.cssnicht mehr dazu passen.
29. September 2026: Deduplizierung, die Locales und Übersetzungen kennt
- Behoben: Zwei Live-Renderings desselben Templates mit denselben Daten und verschiedenen Locales (
"locale": "de", danach"locale": "en") innerhalb des Zeitfensters der Deduplizierung beantworteten das zweite mit dem Dokument des ersten, in dessen Sprache. Die Locale gehört jetzt zu dem, was zwei Renderings identisch macht; Renderings ohnelocalewerden wie bisher dedupliziert. - Behoben: Eine Template-Version, die nur ihre Übersetzungen änderte, hatte dieselbe Prüfsumme wie die Version davor. Live-Renderings mit denselben Daten konnten deshalb bis zu 24 Stunden nach dem Veröffentlichen noch den alten Wortlaut aus dem Cache der Deduplizierung bekommen, und
template_checksumunterschied die beiden Versionen nicht. Ab jetzt gespeicherte Versionen nehmen ihre Übersetzungen in die Prüfsumme auf; die Prüfsummen bestehender Versionen ändern sich nicht.
28. September 2026: das Ergebnis eines Renderings
- API: Das neue
GET /v1/renders/{id}/resultantwortet mit202undRetry-After, solange ein Rendering wartet oder läuft. Ist das Rendering fertig, antwortet es wie die synchrone Anfrage: mit dem Rendering, mit der Datei bei?output=binaryoder mit dem Fehler des Renderings als Problem samtrender_id. DasLocationjedes202vonPOST /v1/rendersnennt jetzt diese URL, absolut und mitoutput=binary, wenn die Anfrage die Datei verlangt hat, und das202trägtRetry-After: 5.GET /v1/renders/{id}bleibt unverändert; Code, der es abfragt, etwawaitForder SDKs, muss nicht angepasst werden. Siehe den automatischen Wechsel. - Power Automate: Weil Power Automate diesem
Locationvon selbst folgt, wartet eine Aktion, deren Rendering die einminütige Frist einer synchronen Anfrage überschreitet, jetzt auf das Dokument, statt ein unfertiges Rendering zurückzugeben.
25. September 2026: Pakete 0.3.10
- MCP-Server: Die sechs Tools von
@formfeed/mcp0.3.10 beschreiben, wann welches Tool statt eines anderen passt, was ein Aufruf kostet und zurückgibt und was schiefgehen kann, und jeder Parameter sagt, wofür er da ist.rendersagt, dass es die veröffentlichte Version einer Vorlage rendert, eine nie veröffentlichte Vorlage also mittemplate_not_foundscheitert, und dass Test-Schlüssel das Wasserzeichen nur im Free-Plan tragen. Der gehostete Server untermcp.formfeed.devhat die neuen Beschreibungen bereits. Die SDKs, die CLI,@formfeed/engine,@formfeed/testing, der n8n-Node und das Activepieces-Piece ziehen unverändert auf 0.3.10 mit.
23. September 2026: Pakete 0.3.9
- SDKs:
@formfeed/sdkund das Python-SDKformfeed0.3.9 bringen diestorage-Ergänzungen, die unter eigener Speicher stehen. - CLI:
formfeed init --from-workspaceholt auch die geteilten Partials der Organisation, die seine Vorlagen einbinden, sodass das ersteformfeed validatenicht mehr an einem fehlenden Partial scheitert; für ältere Projekte nennt die Fehlermeldung jetztformfeed partials pull.formfeed templates diffvergleicht Einstellungen und Beispieldaten unabhängig von der Reihenfolge der Schlüssel, ein frischer Pull zeigt also keine Änderungen. Die Ausgabe nennt Dateien relativ zu dem Ordner, in dem der Befehl lief;--jsonbehält absolute Pfade. - MCP-Server:
@formfeed/mcp0.3.9 gibt bei jedem ToolreadOnlyHint,destructiveHintundopenWorldHintan, sodass Clients die vier Tools, die nur lesen, vonrenderundconvert_to_pdfunterscheiden können, die ein Rendering anlegen. Der gehostete Server untermcp.formfeed.devhat sie bereits. - Activepieces: Der Verbindungstext von
@formfeed/activepieces-piece0.3.9 sagt, dass die Standard-Scopes eines Schlüssels bleiben sollen, weil die Verbindungsprüfungaccount:readbraucht, und dassfile:writeundwebhook:managedazukommen.@formfeed/engine,@formfeed/testingund der n8n-Node ziehen unverändert auf 0.3.9 mit.
23. September 2026: eigener Speicher
- Eigener Speicher (ab dem Pro-Plan): Inhaber und Admins verbinden auf der neuen Karte Eigener Speicher unter Einstellungen einen Bucket bei Amazon S3, Cloudflare R2 oder einem S3-kompatiblen Dienst (Hetzner, IONOS, Scaleway, Wasabi, Backblaze B2, MinIO, Google Cloud Storage). Formfeed schreibt ein Testobjekt, bevor es die Verbindung speichert, und kopiert danach jedes Dokument des Workspace im Hintergrund in den Bucket: Renderings, Einträge und Zips von Batches, Ergebnisse der PDF-Tools und Office-Renderings. Es schreibt nur (
PutObject), liest, listet und löscht nie und behält die eigene Kopie für die Aufbewahrungsfrist des Workspace,download_urlfunktioniert also wie bisher. Die Kopie geht dorthin, wo Ihr Bucket liegt; siehe Datenresidenz. Siehe Eigener Speicher. - API: Renderings, Einträge von Batches und die PDF-Tools,
/pdf/converteingeschlossen, nehmenstorage:{ "key": "invoices/2026/RE-1001.pdf" }benennt das Objekt unterhalb des Präfixes der Verbindung,falselässt das Dokument aus. Ein Rendering mit eigenem Schlüssel wird nie dedupliziert. Renderings und Jobs haben das neue Feldstorage(status,bucket,key,url,reason,error); ein synchrones Rendering meldetpending. Die Routen unter/v1/workspaces/{id}/storagedienen der App und nehmen die Sitzung eines Inhabers oder Admins; noch kann kein API-Schlüssel eine Verbindung verwalten. - Webhooks: die Ereignisse
storage.deliveredundstorage.failed, als Opt-in: Kein Endpunkt erhält sie, bevor seine Ereignisliste sie nennt. Dauerhafte Fehler wieAccessDeniedschlagen sofort fehl, andere Fehler werden nach dem Zeitplan der Webhooks wiederholt, und fünf dauerhafte Fehlschläge in Folge pausieren die Verbindung und benachrichtigen Inhaber und Admins per E-Mail. Die erneute Zustellung sendet fehlgeschlagene Kopien erneut, ohne neu zu rendern. - Neue Fehlercodes:
storage_not_configured(409) undstorage_test_failed(422). - SDKs:
storagebei Renderings und PDF-Tools,Render.storageund die TypenStorageOption,StorageDelivery,StorageDeliveryEventundWebhookEventTypein@formfeed/sdk; das Schlüsselwortargumentstorage=,render.storageund die ModelleStorageDelivery,StorageDeliveryEventundStorageErrorim Python-SDK. Mit ihrem nächsten Release.
23. September 2026: Zap-Vorlagen
- Zapier: Fertige Zaps für Google Forms, Typeform, Google Sheets, Google Drive, Stripe und Slack stehen in Zapiers Verzeichnis. Wer mit einer davon beginnt, hat den Trigger und den Formfeed-Schritt schon beisammen und wählt nur noch die beiden Konten und die eigene Vorlage; unter Integrationen in der App stehen sie ebenfalls. Siehe Zapier.
22. September 2026: Pakete 0.3.8
- Activepieces: Das Formfeed-Piece erscheint mit den übrigen Paketen, als
@formfeed/activepieces-piece0.3.8 mit Provenance; installiert wird es über diesen Namen unter Platform Admin → Setup → Pieces. Siehe Activepieces. - MCP-Server:
@formfeed/mcp0.3.8 steht in der offiziellen MCP-Registry alsio.github.formfeed-dev/formfeed. Die übrigen Pakete ziehen unverändert auf 0.3.8 mit.
22. September 2026: Formfeed in Zapiers App-Verzeichnis
- Zapier: Die Formfeed-App ist in Zapiers App-Verzeichnis gelistet; ein Einladungslink ist nicht mehr nötig. Ihre Version 0.1.0 bringt Convert Document to PDF, DOCX und PPTX als Ausgabe von Create Document und das Feld Version für Release Channels zu Zapier. Bestehende Zaps bleiben auf 0.0.0, bis sie umgezogen werden. Siehe Zapier.
22. September 2026: ein Vorlagenschema für Power Automate
- API:
GET /templates/{id}/schemanimmtformat=swaggerund antwortet{ "schema": … }im Dialekt von OpenAPI 2.0, den Power Automate für dynamische Felder liest: ein Typ je Eigenschaft, keinnullableund keinoneOf, eine Beschriftung inx-ms-summary. Wie beiformat=makebeschreibt es eine Vorlage ohne gespeichertes Schema über ihre Beispieldaten und eine ohne beides mit einem Objekt ohne Eigenschaften statt mit einem 404. - API:
POST /webhooksantwortet201mit einemLocation-Header, der absoluten URL des neuen Endpunkts. - API: Die Formularfelder
landscapeundsingle_page_sheetseines Uploads anPOST /pdf/convertnehmentrueundfalsein beliebiger Schreibweise an, sodassTrueaus einem .NET-Client funktioniert.
21. September 2026: Diagramme in der Größe der Seite, auf die sie gedruckt werden
- Rendering: Ein PDF wird in einem Fenster angelegt, das so breit und so hoch ist wie sein Papier (A4: 794 × 1123 CSS-Pixel; Querformat und eigene Größen entsprechend), statt in festen 1240 × 1754. Der Druck hat die Seite schon immer in Papierbreite angelegt, aber Skripte laufen vorher und haben das breitere Fenster vermessen: Eine Diagrammbibliothek, die sich nach ihrem Container bemisst, zeichnete Diagramme zu groß für die Seite, und ein importierter apitemplate.io-Bericht wurde eine Seite länger als dort. Vorlagen ohne Skripte, die das Fenster vermessen, drucken wie bisher; eine Vorlage, deren Skript
window.innerWidthliest, liest jetzt die Breite des Papiers.
21. September 2026: ein Editor, der sagt, wann das PDF schrumpft
- Editor: Ist ein Element breiter als die Seite, sagt „Probleme" es — um wie viele Millimeter, und auf welche Größe Chromium jede Seite des PDFs verkleinert, damit es passt — und springt zum Tag des Elements. Chromium verkleinert für ein einziges solches Element das ganze PDF, was keine Vorschau bei 100 % zeigen kann. Die fortlaufende und die paginierte Vorschau messen nach jedem Umbruch.
- Editor auf Deutsch: Die Probleme einer Vorlage (ein Name, den die Beispieldaten nicht haben, ein unbekannter Helper, ein Block, der nie geschlossen wird) erscheinen in der deutschen App auf Deutsch; Syntaxfehler der Template-Parser bleiben englisch.
21. September 2026: Snapshot-Tests sehen Kopf- und Fußzeile
- CLI: Der Snapshot, den
formfeed testfür eine HTML-Vorlage vergleicht, enthält jetzt neben dem Dokument auch die gerenderte Kopf- und Fußzeile, unter den Zeilen<!-- formfeed:header -->und<!-- formfeed:footer -->; bisher ging eine Änderung anheader.htmloderfooter.htmlunbemerkt durch, weil Chromium sie außerhalb des Dokuments druckt.formfeed renders pull --snapshotschreibt dieselbe Form. Haben Ihre Vorlagen eine Kopf- oder Fußzeile, scheitert das ersteformfeed testnach dem Update einmal:formfeed test -uausführen und die Snapshots committen. Informfeed0.3.7; die übrigen Pakete ziehen mit auf 0.3.7,@formfeed/enginemit denargsseiner Diagnosen und der Breitenmessung der Vorschauen.
21. September 2026: kein NaN auf einem Dokument, und eine MCP-Prüfung, die das Schema kennt
- Template-Engine:
money,numberundnumToWordsbrechen das Rendern mit einemtemplate_runtime_errorab, wenn eine Rechnung ihnenNaNoder Unendlich übergibt — Arithmetik mit einem Wert, der Text ist ("19 %") oder fehlt —, stattNaNauf das Dokument zu drucken. Eine Vorlage, die bisherNaNgedruckt hat, scheitert jetzt an dieser Stelle. Text, der keine Zahl ist ("auf Anfrage"), und fehlende Werte erscheinen wie bisher.POST /templates/{id}/validatemeldet denselben Fehler, ohne zu rendern. - MCP-Server:
validate_templatemit einem Template-Slug fragtPOST /templates/{id}/validatefür die Version, die ein Render verwenden würde; die Daten werden also gegen das gespeicherte Schema der Vorlage geprüft und einmal mit der Vorlage ausgeführt. Ad-hoc-htmlwird weiterhin offline geprüft. In@formfeed/mcp0.3.6; die übrigen Pakete ziehen mit auf 0.3.6.
18. September 2026: Zwei-Faktor-Authentifizierung
- App: Schützen Sie Ihr Konto mit einem Code aus einer Authenticator-App (TOTP): Zwei-Faktor-Authentifizierung im Menü unter Ihrem Namen. Freiwillig, pro Person und in jedem Plan; es lassen sich mehrere Authenticatoren hinzufügen, damit ein zweiter für ein verlorenes Handy einspringen kann. Jeder Weg der Anmeldung fragt nach dem Code, auch das Zurücksetzen des Passworts. Siehe Zwei-Faktor-Authentifizierung.
- API: unverändert für API-Schlüssel, die nie nach einem Code fragen. Ein Sitzungs-Token eines Kontos mit Zwei-Faktor-Authentifizierung wird erst akzeptiert, wenn seine Sitzung den Code bestanden hat, und das OAuth-Token eines Agenten am gehosteten MCP-Endpunkt erst, nachdem das Konto diesen Agenten aus einer solchen Sitzung erlaubt hat; sonst antwortet die API mit
403 forbiddenund sagt, welcher der beiden Fälle vorliegt. Das Einschalten der Zwei-Faktor-Authentifizierung meldet verbundene Agenten ab, sie müssen also neu verbunden werden.
18. September 2026: Pushes mit Konflikt, und eine CLI, die ihren Fortschritt zeigt
- Behoben: Das Anlegen einer Template-Version mit einem
base_checksum, der nicht mehr zur neuesten Version gehört (formfeed templates push, nachdem das Template in der App oder von einem anderen Rechner geändert wurde), bekam nie eine Antwort; die Anfrage hing, bis der Client aufgab. Sie antwortet jetzt sofort mit409 conflict, wie dokumentiert. Erst pullen und zusammenführen, oder mit--forcepushen. - CLI 0.3.5:
templates pushundpull,partials push,files pushundpull,ci previewundrendergeben jedes Ergebnis aus, sobald es fertig ist, statt alles am Ende, mit einer Schlusszeile, die zusammenzählt. Im Terminal nennt eine laufende Zeile das Template, das gerade dran ist, was damit geschieht und wie lange schon, und sagt es, wenn die API ungewöhnlich lange braucht. Farbe gibt es nur im Terminal (NO_COLORundFORCE_COLORwerden beachtet);--json, Pipes und CI-Logs bleiben unverändert. Die übrigen Pakete ziehen mit auf 0.3.5.
17. September 2026: gehosteter MCP-Endpunkt mit Anmeldung
- MCP:
mcp.formfeed.devist live.https://mcp.formfeed.dev/mcp/<workspace id>meldet sich mit Ihrem Formfeed-Konto an (OAuth 2.1; der Client öffnet den Browser, und Sie erlauben es auf der neuen Zustimmungsseite),https://mcp.formfeed.dev/mcpnimmt einen API-Schlüssel. Ein angemeldeter Agent liest Vorlagen und rendert, sonst nichts, unabhängig von Ihrer Rolle. Siehe MCP-Server. - Pakete 0.3.4:
@formfeed/mcp --httpnimmt--auth-serverund--public-originfür dieselbe Anmeldung gegen Ihr eigenes Supabase Auth, und@formfeed/sdknimmtheaders, die mit jeder Anfrage gesendet werden; die übrigen Pakete ziehen mit auf 0.3.4.
17. September 2026: Release Channels überall, wo eine Version genannt wird
- API:
POST /templates/{id}/validatenimmt einen Channel-Namen alsversion, undGET /templates/{id}/schemaliest das Schema der Version, die?version=nennt (published,latest, eine Nummer oder ein Channel). Mit?format=makekommt zusätzlich ein Auswahlfeldversionzurück, wenn die Vorlage nebenpublishedweitere Channels hat. - SDKs:
templates.schema(id, { version })in@formfeed/sdkundtemplates.schema(id, version=...)in Python;validatenimmt einen Channel-Namen. Mit ihrem nächsten Release. - n8n, Zapier, Make: ein Feld Version, das die Release Channels der Vorlage listet. n8n nimmt auch eine Versionsnummer als Expression; Zapier und Make zeigen das Feld nur bei Vorlagen mit benannten Channels. Zapier und Make erhalten es mit der nächsten App-Version.
- App: Die Vorlagenliste hat eine Spalte Channels mit den benannten Channels jeder Vorlage.
17. September 2026: parallele synchrone Renderings
- Behoben: Synchrone Renderings, die parallel über die freien Render-Slots hinaus gesendet wurden, antworteten mit
503 region_unavailableund blieben im Rendering-Protokoll dauerhaft In Warteschlange oder Wird gerendert. Sie warten jetzt wie dokumentiert auf einen Slot; wer innerhalb von 30 Sekunden keinen findet, wird zu einem asynchronen Rendering (202,X-Render-Async-Fallback: true), das im Hintergrund fertig wird. Siehe Rendering. - apitemplate.io-Kompatibilität: Die Endpunkte warten auf ein solches Rendering und antworten mit dem Dokument (bisher antwortete ein Rendering im Hintergrund mit
successohnedownload_url), gebenRetry-Afterweiter und antworten mit504 render_timeoutund dertransaction_ref, wenn ein Rendering länger als zwei Minuten läuft. Siehe apitemplate.io-Kompatibilität.
17. September 2026: Office-Vorlagen im Validierungs-Endpunkt
- API:
POST /templates/{id}/validateprüft jetzt auch Word- und PowerPoint-Vorlagen: die Tags des gespeicherten Dokuments, Fehler, die erst beim Füllen mit den Daten auftreten, und die Daten gegen das gespeicherte Schema. Ihre Meldungen tragen die neuen Felderpartundparagraph. - SDKs:
Diagnostichat in@formfeed/sdkund im Python-SDK mit dem nächsten Release die Felderpartundparagraph.
17. September 2026: PDF-Umwandlung in Agenten und No-Code-Apps
- Pakete 0.3.2:
@formfeed/mcpundn8n-nodes-formfeedmit den Änderungen unten; die übrigen Pakete ziehen auf 0.3.2 mit. - MCP: Das neue Werkzeug
convert_to_pdfwandelt ein Word-, Excel-, PowerPoint-, OpenDocument- oder RTF-Dokument oder das Rendering einer Word- oder PowerPoint-Vorlage in ein PDF um. Der lokale Server liest eine Datei auch über ihren Pfad. Siehe MCP-Server. - n8n: Die Ressource PDF wandelt ein Dokument aus einem Binärfeld oder ein Rendering um; Output bietet DOCX und PPTX an, und der Name einer heruntergeladenen Datei trägt die Endung dessen, was gerendert wurde. Siehe n8n.
- Zapier: Die Aktion Convert Document to PDF sowie DOCX und PPTX als Ausgabe von Create Document. Sie kommen mit der nächsten Version der App zu Zapier. Siehe Zapier.
- Make: Das Modul Convert a document to PDF sowie DOCX und PPTX als Ausgabe von Create a document, mit dem nächsten Deploy der App. Siehe Make.
- Navigation: Verbrauch steht jetzt im Organisationsbereich der Seitenleiste, neben Abrechnung: Einheiten zählen für die ganze Organisation, und die Seite schlüsselt sie nach Workspace auf.
- Pakete 0.3.3:
@formfeed/enginemit derround-Korrektur sowie CLI, Dev-Kit und Test-Helfer, die damit lokal rendern. - Behoben:
round(x, 0, 'floor')undround(x, 0, 'ceil')rundeten zum nächsten Wert; sie runden jetzt wie in Jinja2 ab und auf, auch alsmethod='floor', in allen drei Template-Sprachen. Die Helfer-Referenz sagt jetzt, dassnumberohne Nachkommastellen die eigenen Nachkommastellen der Zahl behält, höchstens drei;number(0)ergibt ganze Zahlen.
17. September 2026: Pakete 0.3.1
- Pakete 0.3.1:
@formfeed/sdk,formfeed(Python),formfeed(CLI),@formfeed/engine,@formfeed/devkit,@formfeed/testing,@formfeed/mcpundn8n-nodes-formfeedmit den folgenden Korrekturen. - Word-Vorlagen: Ein Tag in einem Feldcode (
HYPERLINK,REF, …) bleibt, wie es ist, und das Panel Tags,formfeed validateund der MCP-Server warnen jetzt davor (office-tag-in-field). - CLI:
ignoreinformfeed.jsonlässt passende Vorlagenordner jetzt beiformfeed templates pushohne Slug aus (die Einstellung wurde gelesen, wirkte aber nicht);formfeed renders pullfunktioniert für Renderings von Word- und PowerPoint-Vorlagen; das echte Rendering vonformfeed devnutzt bei Bildvorlagen deren eigenes Format statt immer PNG. Siehe Konfiguration. - MCP:
list_templatesfiltert nachdocxundpptx, undvalidate_templateprüft das Dokument einer Word- oder PowerPoint-Vorlage und nennt Teil und Absatz. Siehe MCP-Server. - Behoben:
formfeed render,formfeed ci previewund das echte Rendering vonformfeed devdruckten Kopf- und Fußzeilen-Vorlagen ungefüllt ({{ company.name }}); sie werden jetzt mit denselben Daten wie der Inhalt gefüllt gesendet. - Jinja2:
sum(attribute='total')undsum(attribute=…, start=…)addieren das Attribut (sie ergaben 0), und{{ values }}gibt eine Liste oder ein Dict wie Python aus ([1, 2],{'a': 1}) statt1,2, sodass Chart-Skripte"data": {{ values }}verwenden können. - apitemplate.io-Import:
<script>- und<style>-Blöcke des CSS-Felds, die Template-Syntax enthalten, landen am Ende der Vorlage statt im Head-Tab, weil der Head nicht mit Daten gefüllt wird. Siehe Umstieg von apitemplate.io.
17. September 2026: Pakete 0.3.0
- Pakete 0.3.0:
@formfeed/sdk,formfeed(Python),formfeed(CLI),@formfeed/engine,@formfeed/devkit,@formfeed/testing,@formfeed/mcpundn8n-nodes-formfeedmit allem vom 14. bis 16. September: Word- und PowerPoint-Vorlagen und die Umwandlung von Office-Dateien in PDF in den SDKs und der CLI, der apitemplate.io-Import mit API-Schlüssel,formfeed workspaces deleteundoutput, das die Vorlage entscheidet. - Vorlagenliste: Die Namensspalte hat Buttons zum Kopieren von Slug und Vorlagen-ID, den beiden Angaben, mit denen ein API-Aufruf eine Vorlage nennt. Dafür brauchen Sie weder das Zeilenmenü noch den Editor.
- Vorschau Fließend: Kopf- und Fußzeile stehen in den Seitenrändern, gemessen von den Seitenkanten, so wie Chromium sie druckt, statt über dem Inhalt. Die Seite entspricht jetzt der Vorschau Seiten.
- Passwort ändern: Das Benutzermenü hat den Eintrag Passwort ändern.
- Behoben: Die Vorschauen Seiten und Fließend im Editor ließen Seitenzahlen in Kopf- und Fußzeilen leer (
Seite von); jetzt zeigen sie sie wie das PDF. - Behoben: Der Batch-Dialog für Tabellen zeigte Ausgabe und Dateiname aus Spalte leer, bis Sie einen Wert wählten; jetzt stehen dort Wie die Vorlage und Zeilennummer.
16. September 2026: Word- und PowerPoint-Vorlagen
- Word- und PowerPoint-Vorlagen: Eine Vorlage kann eine
.docx- oder.pptx-Datei mit Tags wie{{ customer.name }}im Text sein, in allen drei Vorlagensprachen. In Word setzenqrcode,barcode,epcQr,imageundpageBreakBilder und Seitenumbrüche; auf Folien werden Bilder zu Bildformen.chart,markdownund Includes lehnt die API mitunsupported_in_office(422) ab. Siehe Word- und PowerPoint-Vorlagen. - In der App: Der Dialog zum Anlegen bietet eine Word-Vorlage aus einer Beispieldatei oder einem Upload und eine PowerPoint-Vorlage aus einer Beispielpräsentation oder einem Upload. Die Vorlagenseite zeigt die Datei, die Tags jedes Teils mit ihren Problemen, Datensätze, Einstellungen und Versionen, eine im Browser gefüllte Schnellvorschau und den Button Echtes Rendering.
- API: die Vorlagenarten
docxundpptx.POST /templatesund das Anlegen einer Version nehmen das Dokument alsmultipart/form-data; eine Version ohne Datei behält das letzte Dokument.GET /templates/{id}/versions/{which}/filelädt es herunter. Renderings dieser Vorlagen erzeugenoutput: "docx"bzw."pptx"oder"pdf", undsettings.office.outputlegt den Standard fest, wenn eine Anfrage keinen nennt. - Pläne: Live-Renderings von Word- und PowerPoint-Vorlagen gibt es ab Starter. Im Free-Plan liefern Test-Renderings nur das markierte PDF, und eine Anfrage nach
docxoderpptxbeantwortet die API mittest_output_unavailable(403). - Office zu PDF:
POST /pdf/convertwandelt einen Upload aus Word, Excel, PowerPoint, OpenDocument oder RTF bis 20 MB, der nicht gespeichert wird, oder die Ausgabe eines Renderings einer Word- oder PowerPoint-Vorlage in PDF um, mitpage_ranges,landscapeundsingle_page_sheets. Auch HTML wird angenommen, weil Berichtsexporte es oft unter einem.doc-Namen speichern; verlinkte Bilder und Stylesheets bleiben leer. Ab dem Starter-Plan, gezählt wie ein PDF-Rendering. In der App: Office zu PDF auf der Seite Renderings. Siehe PDF-Tools. - Neue Fehlercodes:
file_type_unsupported(415),office_document_invalid,office_document_too_largeundoffice_conversion_failed(422),office_unavailable(503, mitRetry-After).file_too_largeundsource_encryptedgelten auch für Vorlagendateien und Uploads zur Umwandlung. - SDKs:
docxundpptxbei den Ausgabeformaten und Vorlagenarten;templates.create()undtemplates.versions.create()(Python:create_version()) mit einerfile;templates.versions.file()(Python:version_file());pdf.convert()für einen Upload oder ein Rendering. Siehe TypeScript und Python. - CLI: Ein Vorlagenordner kann
template.docxodertemplate.pptxstatt der HTML-Dateien enthalten.templates pullschreibt das Dokument der geholten Version, undpushlädt es nur hoch, wenn es sich geändert hat;validateunddevlisten die Funde nach Teil und Absatz;render,ci previewunddevfüllen das Dokument lokal und wandeln es für PDF über die API um;testvergleicht das gefüllte XML mit.xml-Snapshots.formfeed pdf convert <Datei | Rendering-ID>wandelt jede angenommene Office-Datei um. QR-Codes, Barcodes und SVG-Bilder zeichnet das optionale Paket@resvg/resvg-js. Siehe Projektstruktur. - apitemplate.io-Import mit API-Schlüssel: Vorlagen → Importieren → apitemplate.io → Mit API-Schlüssel listet alle Vorlagen des Kontos mit ihrer Gruppe und liest und prüft die gewählten PDF-Vorlagen in einem Durchgang;
formfeed import apitemplate --all,--group <name>oder--template <id…>tut dasselbe mit--key(oderAPITEMPLATE_API_KEY) und--source-region. Das JSON aus dem Editor von apitemplate.io wird zum Datensatzdefaultdes Entwurfs, Ränder ohne Einheit gelten als Pixel (auch im Kompatibilitätsendpunkt), Kopf- und Fußzeile behalten die Größe, in der apitemplate.io sie zeichnet,<link>- und<script>-Tags aus dem CSS-Feld kommen in den Head, undcustom_header,custom_footerund die Textfelder werden zu Kopf- und Fußzeile. Siehe Von apitemplate.io migrieren. - Mehrere Vorlagen archivieren und löschen: Wählen Sie Vorlagen in der Liste aus und archivieren Sie sie, mit Rückgängig; in der Ansicht Archiviert stellen Sie sie wieder her oder löschen sie als Inhaber oder Admin mit Endgültig löschen… nach einer getippten Bestätigung.
- Innenabstand von Kopf- und Fußzeile:
settings.header.paddingundsettings.footer.padding(Standard0 10mm) ersetzen den seitlichen Innenabstand der Box um Kopf- und Fußzeile von Chromium, damit Gestaltungen bis an den Rand reichen können; das Einstellungspanel bearbeitet sie als Innenabstand der Kopfzeile und Innenabstand der Fußzeile. Siehe Referenz der Einstellungen. - Vorschauen wie das PDF: Die Vorschauen Fließend und Seiten zeichnen Kopf- und Fußzeile über die ganze Seitenbreite, Seiten setzt die Kopfzeile an die obere und die Fußzeile an die untere Kante, und Elemente der Vorlage behalten dort ihr eigenes Box-Modell, wie im PDF.
- Zoom in den Vorschauen: Strg+Mausrad, Zwei-Finger-Zoom und Strg+Plus, Minus und 0 zoomen die Vorschauen Fließend und Seiten und die Schnellvorschau von Word-Vorlagen, die dazu Buttons zum Vergrößern und Verkleinern und Einpassen hat.
- Rechnungs-E-Mail: Die Rechnungs-E-Mail der Organisation ist die Adresse, an die Stripe Rechnungen schickt (sonst die des ersten Inhabers), und zwar in beide Richtungen: Eine Änderung in der App erreicht Stripe, eine Änderung im Kundenportal kommt zurück. Auch Kontingent- und Abrechnungsmails gehen an sie. Der Checkout fragt die vollständige Rechnungsadresse ab.
- Erstattungen: Rechnungen auf der Seite Abrechnung zeigen Erstattet oder Teilweise erstattet.
15. September 2026: Workspaces löschen
- Workspace in der App löschen: Inhaber und Admins löschen einen Workspace unter Einstellungen → Workspaces, nachdem sie seinen Slug eingegeben haben. Er verschwindet sofort, seine API-Schlüssel funktionieren nicht mehr, und seine Vorlagen, Renderings, Ausgaben und Dateien werden nach 30 Tagen entfernt. Der Slug ist sofort wieder frei. Der letzte Workspace einer Organisation bleibt.
- Über die API:
DELETE /workspaces/{id}löscht jeden Workspace der Organisation des Schlüssels, zum Beispiel Vorschau-Workspaces pro Branch, die ein CI-Job aufräumt.formfeed workspaces delete <id> --yesin der CLI,workspaces.delete()in TypeScript und Python. - Neuer Scope:
workspace:delete, nicht standardmäßig in neuen Schlüsseln und nie in CLI-Anmeldeschlüsseln. Siehe Scopes. - Neuer Fehlercode:
last_workspace(409).
15. September 2026: Scopes und Standardausgabe
- Ein Schreib-Scope enthält seinen Lese-Scope:
template:writefügttemplate:readhinzu,file:writefügtfile:readhinzu undrender:createfügtrender:readhinzu, weil Schreibzugriffe mit dem Objekt antworten und asynchrone Renderings abgefragt werden. Bestehende Schlüssel wurden ergänzt. Der Schlüssel-Dialog zeigt jeden enthaltenen Scope unter seinem Schreib-Scope, angehakt und gesperrt. Siehe Scopes. - Scopes der Dateibibliothek in der App: Der Dialog zum Anlegen eines Schlüssels bietet
file:readundfile:writean, damit Schlüssel aus der App Dateien hochladen können; die Upload-Aktionen von Zapier und Make scheiterten bisher mit 403. - Die Vorlage entscheidet über die Ausgabe: Ein Rendering ohne
outputerzeugt bei PDF-Vorlagen ein PDF und bei Bildvorlagen das Format aussettings.image.formatder Vorlage (ohne Angabe PNG); bisher renderten Bildvorlagen dann ein PDF.POST /renders/batchnimmt einoutputauf oberster Ebene für seine Einträge, und der Batch-Dialog für Tabellen steht standardmäßig auf Wie die Vorlage; bisher renderte er jeden Batch als PDF. CLI, MCP, n8n, Zapier und Make lassenoutputweg, solange Sie keins wählen. Siehe Rendering.
14. September 2026: Bausteine im Editor
- Panel Bausteine: Der Button Bausteine im Editor öffnet neben dem Code ein Panel mit Suche, einer Live-Vorschau jedes Bausteins und jedem Baustein als Befehl in der Palette. Beim Einfügen kommen die Beispieldaten des Bausteins, nur die CSS-Regeln, die Ihrem Stylesheet fehlen, und seine Beschriftungen auf Englisch und Deutsch in das Panel Übersetzungen; Fußzeilen-Bausteine kommen in den Tab Fußzeile. Siehe Bausteine.
- Neue Bausteine: Briefkopf und rechtlicher Fußtext aus dem Brand Kit, Anschriftfeld für Fensterumschläge (DIN 5008), Informationsblock, Rechnungsüberschrift mit Leistungszeitraum, Zahlungsbedingungen und Bankverbindung, Hinweis Kleinunternehmer (§ 19 UStG), Hinweis Reverse Charge, Zusammenhalten, Seitenumbruch und Kennzahlen. Die bestehenden Bausteine lesen die Farben des Brand Kits und beschriften ihre Überschriften mit
t. - Diagramme aus einfachen Daten:
chartzeichnet auslabelsmitvaluesoder mehrerenseriesmitlabel,valuesundcolor. Eine Integration sendet also Zahlen statt einer Chart.js-Konfiguration. Reihen und Segmente ohne Farbe nehmen eine feste Palette, eine einzelne Reihe ohne Namen zeigt keine Legende. Eine vollständige Konfiguration mitdataundoptionsfunktioniert weiterhin. Der Baustein Diagramm nutzt das mit der primären Farbe des Brand Kits. - Partials der Organisation erscheinen im Panel, werden als Include eingefügt und in der Vorschau mit den Daten der Vorlage gezeigt.
- Behoben: Der Baustein Rechnungstabelle zeigte in Handlebars-Vorlagen leere Zellen.
- Behoben: Die Seite Partials und die Vervollständigung im Editor schrieben Liquid-Includes als
{% render "name" %}. Damit sieht das Partial nurbrand, nicht die Daten der Vorlage. Beide schreiben jetzt{% include "name" %}, und die Dokumentation sagt es. Liquid-Vorlagen, die ein geteiltes Partial schon mitrendereinbinden, sollten aufincludewechseln, wenn das Partial Daten der Vorlage liest.
13. September 2026: lokale Webhooks und nachstellbare Renderings
- Render-Anfragen aufbewahren: eine neue Workspace-Einstellung, standardmäßig aus. Mit 24 Stunden (ab Starter) oder 7 Tagen (ab Pro) wird die Anfrage jedes Renderings, synchron und asynchron, nach dem Ende des Renderings aufbewahrt; der Plan begrenzt die Wahl. Bisher wurden asynchrone Anfragen in jedem Plan 24 Stunden aufbewahrt und synchrone gar nicht. Passwörter der Nachbearbeitung werden nie aufbewahrt, deshalb wird ein passwortgeschütztes Rendering nicht aus dem Render-Protokoll erneut gerendert. Siehe Datenresidenz.
- Ein fehlgeschlagenes Rendering nachstellen:
GET /renders/{id}/inputliefert die aufbewahrte Anfrage eines Renderings (Vorlage und Version, Daten, Locale, Optionen), undformfeed renders pull <render id>schreibt ihre Daten als Datensatz ins Projekt, mit--run, um lokal zu rendern und Zeile und Spalte des Fehlers zu zeigen,--snapshot, um aus einem guten Rendering einen Test zu machen, und--redact, um personenbezogene Daten unter Erhalt der Form zu ersetzen. Jeder Lesezugriff wird protokolliert. Siehe Ein fehlgeschlagenes Rendering nachstellen. - Webhooks lokal entwickeln:
formfeed listen --forward-to http://localhost:3000/webhooksleitet die Webhook-Ereignisse des Workspace über einen WebSocket, den die CLI öffnet, an einen lokalen Server weiter, signiert mit einem Geheimnis, das für einen API-Schlüssel über Sitzungen hinweg gleich bleibt, mit den normalen Wiederholungen und dem Zustellprotokoll. Nur Test-Ereignisse, außer mit--live; drei Sitzungen pro Workspace.formfeed trigger render.completed --template <slug>rendert wirklich mit einem Test-Schlüssel, damit ein echtes Ereignis entsteht. Siehe Webhooks lokal entwickeln. - Ereignisse erneut senden:
POST /webhooks/events/{id}/resendsendet ein gespeichertes Ereignis erneut an einen registrierten Endpunkt oder eine Listen-Sitzung, auch bereits zugestellte Ereignisse; in der CLIformfeed webhooks resend <evt_id>. - Umgebungen für Endpunkte: Webhook-Endpunkte nehmen
environmentsan (live,testoder beide, der Standard), damit ein Staging-Empfänger keine Produktions-Renderings mehr sieht. Siehe Test- und Live-Ereignisse. - Neue Scopes:
render:inputundwebhook:listen, standardmäßig nicht in neuen Schlüsseln;formfeed logingibt sie Editoren, Admins und Inhabern. Siehe Scopes. - Neue Fehlercodes:
render_input_expired(410),listen_session_limit(409) undlisten_session_ended(410). - SDKs:
renders.input(),webhooks.resend()undwebhooks.listen.start()/end()in TypeScript und Python; Endpunkte nehmenenvironmentsan.
13. September 2026: Release Channels und typisierte Vorlagen
- Release Channels: benannte Zeiger von einer Vorlage auf eine Version, etwa
staging, nebenpublished. Renderings wählen einen mit"version": "staging"(Live- und Test-Schlüssel), und dastemplatedes Renderings erhältchannelundcanary, in der API und in Webhooks. Channels verschieben, promoten, zurückrollen und löschen Sie im Panel Versionen des Editors, mitPUT /templates/{id}/channels/{name}und den Endpunktenpromoteundrollbackoder mit der CLI. Canary-Releases schicken 1 bis 50 Prozent der Renderings eines Channels an eine zweite Version, gewählt anhand desIdempotency-Key. Verschiebungen erreichen Renderings innerhalb einer Minute. Starter hat 2 Channels pro Vorlage, Pro und Business 10 sowie Canaries. Siehe Release Channels. - Schema-Prüfung beim Veröffentlichen: Veröffentlichen, Verschieben eines Channels, Promoten und Zurückrollen vergleichen das Datenschema der Version, die live geht, mit dem, das Aufrufer gerade verwenden. Speichern beide ein Schema, antwortet eine brechende Änderung (ein neues Pflichtfeld, ein engerer Typ, ein entfernter Enum-Wert) mit
409 schema_breaking_change, außer die Anfrage sendetallow_breaking: true; bei abgeleiteten Schemas ist das Ergebnis eine Warnung. Antworten zum Veröffentlichen und zu Channels enthaltenschema_check. Der Editor veröffentlicht jetzt über die API und listet brechende Änderungen vor dem Veröffentlichen, mit Publish anyway. - Store as contract: Der Schema-Bereich des Editors leitet ein Schema über alle Datensätze ab (ein Feld, das nur einige Datensätze enthalten, ist optional) und speichert es mit der nächsten Version, mit einem Pflicht-Schalter pro Feld.
- Typisierte Vorlagendaten:
formfeed typeserzeugt TypeScript (formfeed.d.ts, erweitert@formfeed/sdk) oder Python (formfeed_templates.py, einTypedDictpro Vorlage undtyped(client)) aus gespeicherten oder abgeleiteten Schemas, undformfeed types --checklässt die CI scheitern, wenn die Datei veraltet ist. Im TypeScript-SDK prüfenrenders.createundrenders.batchdiedatader Vorlagen, die die Datei kennt. Siehe Typisierte Vorlagendaten. - Neue Fehlercodes:
channel_not_found(404),channel_name_invalid(422),channel_in_use(409) undschema_breaking_change(409). Ein benannter Channel im Free-Plan oder ein Canary unterhalb von Pro antwortet mit403 forbiddenundfeature: "channels"oderfeature: "canary". - CLI:
formfeed types,formfeed channels list|set|promote|rollback|delete,templates push --channel <name>und--allow-breaking;formfeed.jsonnimmt Standardwerte untertypesan. - SDKs:
templates.channels.list(),set(),promote(),rollback()unddelete(),allowBreaking/allow_breakingbeim Veröffentlichen und Channel-Namen inversions.get/version(), in TypeScript und Python. Das TypeScript-SDK exportiertFormfeedTemplates,TemplateData,TypedRenderRequest,Channel,ChannelListundSchemaCheck.
13. September 2026
- Brand Kit: eines pro Organisation, in jedem Plan. Auf der neuen Seite Marke legen Sie Firmenname, rechtlichen Fußtext, Farb-Tokens, Schriften für Überschriften und Fließtext, Grundgröße, drei Logos sowie Papier und Ränder für neue Vorlagen fest. Vorlagen lesen es als
brand({{ brand.logo.primary }},{{ brand.legal_footer }}) und als CSS-Variablen (--brand-color-primary,--brand-font-heading); Logos funktionieren auch in Kopf- und Fußzeilen. Änderungen erreichen veröffentlichte Vorlagen ohne neues Veröffentlichen.GET /brandliest es. - Geteilte Partials: Briefköpfe, Fußzeilen und andere Fragmente für die ganze Organisation auf der neuen Seite Partials, per Name eingebunden wie Partials der Vorlage und nach ihnen aufgelöst. Beim Bearbeiten zeigt die App, welche Vorlagen sich ändern. API:
GET,PUTundDELETE /partials/{name}mit Konflikterkennung überbase_version; bis zu 200 pro Organisation. Siehe Geteilte Partials. - Pro Rendering festgehalten: Jedes Rendering hält die Version des Brand Kits und die Versionen der verwendeten geteilten Partials fest, und die Deduplizierung verwendet ein Ergebnis nur wieder, wenn sie unverändert sind.
- Behoben: Das echte Rendering im Editor enthält jetzt die Schriften der Organisation; bisher schickte es keine mit, Eine Vorlage mit Schriften, die unter Schriften hochgeladen sind, wurde dort deshalb mit Ersatzschriften gedruckt, anders als bei API-Renderings.
- CLI:
formfeed brand pullspeichert das Kit in.formfeed/brand.jsonfürdev,render,testundci preview;formfeed partials list|pull|pushgleicht geteilte Partials mit dem Ordnerpartials/des Projekts ab, mit--engine,--dry-runund--forcesowie Exit-Code 2 bei einem Konflikt.formfeed templates pushlässt geteilte Partials aus der Version heraus. - SDKs:
brand.get()sowiepartials.list(),get(),put()unddelete()in TypeScript und Python. - Serverseitige Validierung:
POST /templates/{id}/validateprüft eine Version mit Daten, ohne zu rendern: Syntax, Kopf- und Fußzeile, fehlende Partials, Laufzeitfehler und die Daten gegen das gespeicherte Schema. Kostenlos. validate_data: truebei Renderings und Batch-Einträgen prüft die Daten zuerst gegen das gespeicherte Schema der Vorlage und antwortet mit422 data_validation_errorsamterrors-Liste, bevor etwas gerendert oder gezählt wird. Diagnosen haben für Datenfehler jetztpath.- Kein dokumentierter Endpunkt und keine Option antwortet mehr mit
501 not_implemented. - Jinja2-Kompatibilität:
.format()versteht Python-Formatangaben ("{:,.2f}", verschachtelte Felder);namespace()und{% set ns.total = … %}funktionieren;truncate,map(attribute=…),selectattrundrejectattrnehmen ihre Jinja2-Argumente. Der Editor warnt nicht mehr bei Makro-Argumenten,Trueoder einem Schleifennamen, den zwei Schleifen verwenden. - Behoben: Aus apitemplate.io importierte Vorlagen mit einem
namespace()-Zähler scheiterten mit „Cannot read properties of undefined“, und die versteckten Schleifen-Wrapper des visuellen Editors erschienen als leere Tabellenzeilen. - Behoben: Das Speichern oder Importieren einer Vorlage mit einem
<script>-Tag scheiterte in der App mit „Http failure response … 0 undefined“. Die App speichert Versionen jetzt über die API;POST /templates/{id}/versionsnimmtdata_setsan. - Pakete 0.2.0:
@formfeed/sdk,formfeed(Python),formfeed(CLI),@formfeed/engine,@formfeed/devkit,@formfeed/testing,@formfeed/mcpundn8n-nodes-formfeedmit allem oben Genannten und vom 12. September.
12. September 2026
- Dateibibliothek: Bilder und PDFs mit
POST /fileshochladen, auflisten, lesen und löschen und über ihren Namen mitasset('logo.png')verwenden; auch relative Bildpfade werden gegen die Bibliothek aufgelöst. Neue Scopesfile:readundfile:write;file:deletegilt jetzt auch für Dateien der Bibliothek. Neuer Fehlerfile_too_large(413). - PDF-Post-Processing: Bild-Wasserzeichen (
watermark.image, ein PNG oder JPEG der Bibliothek) und PDFs der Bibliothek als Merge-Quellen (merge_after,/pdf/merge), über Namen oderfil_…-ID. - WebP-Ausgabe:
"output": "webp", mitimage.quality(100 ist verlustfrei). - SDKs:
client.filesin TypeScript und Python; Wasserzeichen nehmenimage, Merges nehmen Dateien der Bibliothek. - CLI:
formfeed files list|push|pull|deletemit einem Ordnerfiles/im Projekt,formfeed devliefert diesen Ordner aus, damitasset()offline funktioniert, undrendersowieci previewlösenasset()gegen die Bibliothek des Workspace auf.render --output webp. - Integrationen: Upload File in n8n und Zapier; Upload a File, List Files und Delete a File in Make; WebP überall als Ausgabeformat.
- Behoben: Gelöschte und abgelaufene Ausgaben werden jetzt aus dem Speicher entfernt; dem Aufräumen fehlte seit dem 11. September eine Datenbankberechtigung.
Private Beta, September 2026
Die erste Version, die Beta-Workspaces zur Verfügung steht.
- API: synchrone und asynchrone Renderings aus Vorlagen, HTML und URLs; Batches mit bis zu 1.000 Renderings und optionalem Zip; Webhooks mit Signaturen und Wiederholungen; Idempotenz-Schlüssel, Deduplizierung und der Fallback von synchron auf asynchron; Vorlagen und Versionen; Verbrauch; die Kompatibilitätsendpunkte für apitemplate.io.
- PDF-Post-Processing: PDFs zusammenführen, Passwortschutz (AES-256) und Text-Wasserzeichen, als
post-Block eines Renderings oder über/pdf/merge,/pdf/protect,/pdf/watermark, dazu das kostenlose/pdf/info. Ab dem Starter-Plan. - Vorlagen: Jinja2-kompatibel, Liquid und Handlebars mit einem gemeinsamen Satz von Helfern, darunter QR-Codes, Barcodes, SEPA-Zahlungscodes, Diagramme und Tailwind.
- Tools: der Web-Editor mit Autovervollständigung und paginierter Vorschau; die
formfeed-CLI mit lokaler Vorschau, Validierung, Snapshot-Tests und CI-Vorschauen; Importer für apitemplate.io, PDFMonkey und jsreport. - Pakete:
@formfeed/sdk,formfeed(Python),@formfeed/engine,@formfeed/testing,@formfeed/devkit,@formfeed/mcp,n8n-nodes-formfeed. - Region: EU (Frankfurt).