Was ausgeliefert wurde

Jede Version und die Änderungen darunter, die jemandem auffallen würden. Neueste zuerst; die Versionen sind die Tags im Repository.

Oktober 2026

Analytics includes Microsoft Clarity, behind the same switch

Allowing analytics in the cookie banner now also allows Microsoft Clarity, which shows where people click and scroll. It loads only after the page has, every word and picture is masked in the browser before anything is sent, and it never runs on a shared document or folder. Refused or unanswered, it does not load at all. The privacy and cookies pages list what it sets.

Every conversion says what it does to your file

Under each converter, in all five languages: what comes across, what is left behind, an example of the output, the limits, and the questions people ask about that conversion. Sharing a document as a link, the API, the command line and the GitHub Action have pages of their own. The converter loads about half as much script before it draws.

A downloaded .zip opens in Windows whatever its pages are called

Windows refused a whole .zip as invalid when one path inside it ran past 260 bytes — about 130 letters of a Cyrillic title. Long page and folder names are now shortened to fit, two that come out the same are numbered, and links between the pages follow the shorter names.

Deleted documents wait in a Trash for 14 days

Deleting a document — from the history, the API, the CLI or an assistant — now moves it to a Trash below your folders, and the notice that says so has an Undo. Restore puts it back with its folder, sharing and versions; after 14 days it goes for good. The Trash does not count against your storage. Assistants get tp_restore_document to undo a delete themselves. And the history picks like a file browser: Shift for a run of rows, Cmd or Ctrl for one more.

A history of a thousand documents opens at once

The history drew every row before showing any, and with a thousand documents that held the page for two seconds after a click. It now shows the first hundred straight away and the rest as you scroll; search, sorting, the count and Select all still cover every document.

A start for a new account

An empty history now offers three ways in — drop a file, paste text, or open a sample that is a short guide to TransformPipe showing what a page can hold. A new account gets three first steps above its documents, ticked by what it actually does: save, share a link, connect an assistant. And connecting Claude or ChatGPT ends with things to ask it.

Download a whole folder as a .zip

A folder’s menu — a right click in the tree, or ⋯ over the list — downloads it and everything under it as a .zip of Markdown files laid out like the tree, plain or for Obsidian. Links between its pages become links between the files, and a notice counts the documents as a large space is read.

Linked Obsidian notes become linked pages

In the Obsidian plugin 1.1, a link to another published note opens that note's page, heading links included, and "Publish note with linked notes" sends a note and its neighbours in one go. Links are decided when the page is read: publish the other note later and the link starts working by itself; make it private and it reads as words again.

Links on a shared page go where the reader can follow

A page of an import shared on its own linked to its sibling pages by their address in the app, so a reader without the owner's account clicked through to an empty converter. A sibling that is shared now opens at its own link, and one that is not reads as plain words. Exports converted into one document also shrink their pictures now, as page-by-page imports already did, so far fewer screenshots are left out.

Storage counts what is kept, and big folders stay whole

A document saved from a Word, PowerPoint or Excel file counted the file’s size against the account rather than the Markdown kept from it; it counts the Markdown now. One oversized page no longer stops an import — it is skipped, and the notice names it. A page too large to show as a web page offers its Markdown instead of an error, and copying a very large shared folder stops cleanly rather than half way. The limits written on the site say 250 MB and 5,000 documents, as they have been since the 15th.

Large Confluence spaces open again

An export whose pages and pictures came to more than 64 MB was refused as "not a readable .zip" since conversion moved off the page: the converter took itself for a server and used a server’s limit. It reads up to 512 MB again — a 948-page space with a thousand screenshots opens in seconds.

Every picture of an imported export comes across, and folders are a tree

Screenshots in an export are made the size a page needs on the way in, and a page of screenshots gets nearly all of its 4 MB for them: in a real 178-page Confluence space, 793 pictures of 793 now arrive, where 43 were left as their names. Folders sit in a tree beside the list, documents and folders drag onto it, a right click on a folder renames, moves, shares or deletes it, and moving offers the folders used last and a search over every folder with its path.

Share a whole folder as one link

A folder can be shared as one read-only link: the reader sees its tree and opens any page in it, and links between an import’s pages move through the folder rather than into the app. Only what is filed in the folder is reachable, and turning the link off ends it. Imported Confluence pages also lose the space name repeated in front of every title.

Read a document as a book

The book button beside Full screen lays a document out as two pages side by side, in a serif face, turned with the arrows, the keyboard, a swipe or a click at the edge of a page. Text runs on from one page to the next; a table, a picture or a block of code is never cut in half. On a narrow screen it is one page at a time, and full screen opens the book across the whole screen.

Two connector tools renamed to say what they do

In the assistant connector, tp_convert_markdown is now tp_convert_from_markdown — it writes Confluence, Jira and Slack markup as well as HTML — and tp_help is tp_search_documentation. The old names keep working for anything already connected. Every tool now states plainly whether it reads, adds, changes, deletes or publishes.

Say no to a share, and tidy folders from an assistant

A document or folder somebody shared with you can be removed from your list: your access ends, their copy stays, and nobody is emailed about it. An assistant connected over MCP can now rename, move and delete folders too, asking first before anything is deleted or moved where other people can read it.

A history with room for names, and an assistant that answers in cards

The history’s format chips are one menu beside the search, with a count for each, and Shared with me is a button next to it. A row’s share, versions, downloads and delete moved into one ⋯ menu and Content says only the words, so a name is no longer cut to five letters. Every tool the assistant connector has now answers with a card — the account and its folders, a folder, a summary, a conversion, the documentation — and the assistant stops retelling it.

Folders from a script, a terminal and an assistant

The API lists, makes, renames, moves, deletes and shares folders, and files a document in one as it is saved (?folder=). The command line has tp folders, tp mkdir, tp mv, tp share-folder, tp rmdir and --folder on push and list. An assistant connected over MCP can list folders, save into a path, move documents and share a folder — and no longer repeats in words what its card already shows.

Share a whole folder, and keep one shared with you

A folder is shared the way a document is: a link anyone can open, with an end date and a password if you want them, or named addresses that sign in and are emailed the link. The reader gets the whole tree with working links between pages, and signed in can save all of it to their own account in one press. Folders shared with you appear under Shared with me.

An export arrives as its pages, in folders

A Notion, Confluence or Obsidian export used to become one document — a Confluence section came out at 275,000 words, which nobody reads. Now every page is a document of its own, in a folder that follows the export’s tree, links between pages and contents lists still working. Folders can be made, renamed, moved and deleted in the history, and a large export no longer freezes the page while it converts.

An export .zip can be 250 MB, and a Word or PowerPoint file 50 MB

Every file used to stop at 10 MB, which is a fair size for words and a small one for a Confluence space with its attachments — a section of a few dozen pages came to 60 MB. Text files keep their 10 MB; Word, PowerPoint, Excel, EPUB, OpenDocument and Evernote files take 50 MB, and Notion, Confluence and Obsidian exports 250 MB. Only the pages and their pictures are unpacked, so a video or a PDF attached to a page costs nothing.

Word documents made of Word’s own styles

Markdown → Word has a page of its own, and the .docx it makes is a different file. Headings are Heading 1 to 6, so the navigation pane and a table of contents find them; lists are Word’s lists; footnotes sit at the foot of the page; links to headings jump. It is made in the browser, so a document no longer has to be saved first.

An assistant can hand you Confluence, Jira or Slack markup

The connector’s tp_convert_markdown takes to now — confluence, jira or slack beside the HTML it always returned — with the same writers as the new screens. Asking Claude or ChatGPT for “this as a Jira description” or “this for our Slack webhook” gets the markup those take, not Markdown with its asterisks.

Markdown into Confluence, with Confluence’s own pieces

A Markdown file now converts to Confluence storage format — the XHTML a page is saved as. A fenced block becomes the code macro with its language, > [!WARNING] the warning panel, a task list Confluence’s own with boxes that tick, and a link to a heading still jumps to it. Copy for Confluence also pastes it formatted into the Cloud editor.

Markdown into Jira wiki markup, escaped properly

Markdown now converts to Jira wiki markup: h2. headings, *bold*, {code} blocks with their language, ||tables|| and panels for alerts. The care is in the escaping — a bracket, an emoticon like (i) or a hyphen at the edge of a word is made to mean only itself, and nothing else is backslashed.

Markdown into Slack’s mrkdwn, for bots and webhooks

Markdown now converts to Slack’s mrkdwn — the text a bot, a webhook or an API call posts. Bold is one asterisk, a link is <address|words>, a heading is a bold line, a list is bullets by depth, and a table is a code block with its columns padded, since a message has no tables. Copy for Slack pastes it formatted into the message box too.

Markdown into an EPUB book

A Markdown file now becomes an .epub that any e-reader opens — a chapter per top heading, a table of contents, and the pictures, formulas and diagrams inside the book. The inverse of EPUB in, and made in the browser like everything else here.

Confirm your address with one click, not a code

Signing up with an email address now sends a link instead of a six-digit code to copy. Open it and the address is confirmed, you are signed in, and you are back on the page you came from — including an app you were connecting. The email comes from transformpipe.com.

What shipped, once a month by email — if you want it

A short monthly email about what is new, sent only to people who ask for it. Subscribe on the changelog page or from the account menu; signed out, you confirm the address from an email first, and nothing is sent until you do. Every one has a link to stop.

A few emails in your first weeks

An account now gets a welcome by email, and in the days after a couple of tips or a question about how it is going — which ones depends on whether you have saved or connected anything yet. Each has an unsubscribe link, and the privacy page says what the mail service is given.

Connecting an app starts on our page, not Google’s

Pressing Sign in in Obsidian, or connecting an assistant, while signed out used to send the browser straight to Google’s account picker without a word of TransformPipe. It now opens a sign-in that names the app asking, and offers an email address as well as Google — new account included. Signing in either way goes on to approving the connection.

The Obsidian plugin shows you where to start

Version 1.0.3 of the plugin says what it does the first time it runs and puts a Publish button in the ribbon. Publishing before you have an account no longer ends on a notice pointing at the settings: it asks you to sign in, and the note is published as soon as you come back from the browser. On an iPhone, Sign in used to open nothing at all; it now opens the browser.

Signing in from a phone comes back to the app

Approving TransformPipe from Obsidian on a phone could end on a page that did nothing: the browser dropped the jump back to the app. An app’s sign-in now ends on a page that opens it, with a button for when the browser will not. Add to Obsidian now opens the plugin’s page in Obsidian’s directory, which works on any device, with a link into the app beside it.

One page for every assistant

/agents was Claude’s page under another name. It is now the way in to all of them: a card each for Claude, ChatGPT and Obsidian with its own way to connect, the table of every assistant and where it stands, and the address any other MCP client connects with. The documentation now covers ChatGPT too, and says what an update and a share do today.

Claude, ChatGPT and Obsidian, one click from any page

The assistants’ icon in the header opens a list of the three that work today, each with its own logo, and the plugin for Obsidian now lives beside them at /agents/obsidian, built the same way as the Claude and ChatGPT pages. The old /obsidian address still opens it.

A chat shows what changed, and asks with a button

An update made from Claude or ChatGPT now shows the lines it changed, added in green and removed struck through. Asking for a document's history draws every earlier text as a timeline, each one readable in place. And publishing, sharing with people or changing a shared page no longer waits for a typed "yes": the card shows what would happen and a button that does it.

Share with one more person without losing the others

Asked to share a document with somebody else, an assistant could only replace the list of readers, so it stopped to ask which was meant. It now adds or removes one address and leaves everyone else where they were, and reading a document says who it is shared with.

Cards no longer say "Unable to reach TransformPipe"

After an update to TransformPipe, Claude and ChatGPT showed "Unable to reach TransformPipe" where a card should have been, until the connector was reconnected. A card is now found whichever version the assistant asks for.

Pages that show the real thing

/obsidian is new: what the plugin does, in screenshots of it running, in five languages. The Claude and ChatGPT pages show real chats now too — a document saved, published, found from another chat and updated under the same link — and each has a section for the phone. The table of ways in lists the Obsidian plugin where Cursor was.

Sharing from a chat shows who can open it

Sharing a document from Claude or ChatGPT used to end in a sentence. It now ends in a card: the document, whether it is shared, who it is shared with, how often the link has been opened, and a button for the shared link — the same answer every time, not only when somebody asks for one.

Ask an assistant what changed in a document

Updating a document keeps the text it replaced, the newest ten of them, and until now an assistant could not see those: asked what changed, Claude or ChatGPT answered that there was no history. Document history now lists every earlier text and reads any of them back, so the question gets an answer — what moved, what was added, what the first draft said.

TransformPipe for Obsidian

A plugin, listed in Obsidian’s community directory: Publish note turns the note into a page and copies its link, and publishing again after an edit updates the same page, so the link already sent keeps working. Share it with named people instead, make it private, or export it as Word or PDF into the vault. Pictures from the vault travel inside the page. It signs in through the browser, with nothing to paste, and keeps the sign-in in the system keychain. Desktop and mobile.

A downloaded file opens its diagrams full screen too

Each diagram in a downloaded .html now has a Full screen link that lays it over the whole page, fitted to the screen, and a × — or the browser’s Back — that puts it away where the reader was. Done with CSS alone: the file still runs no script, so it is as safe to open from an email as it was. The download from a document opened by link now has its diagrams drawn as well; it had been leaving them as source.

Diagrams are drawn on a public link

A document shared as a link that anyone can open showed every Mermaid diagram as its source text: the page ran no script at all, and a diagram needs one to be drawn. It now loads one of ours, and only that — nothing in a document can run — which draws the diagrams in the page’s light or dark and gives a diagram, or a table too wide for the page, a Full screen button. Every link already sent shows them; nothing needs to be shared again. Download .html on that page gives the file with the diagrams drawn into it too.

A wide table opens on the whole screen

A table too wide for the page now has a Full screen button above it, like a diagram. It opens at its own size across the whole screen — not shrunk, because shrinking text is how it stops being readable — scrolls both ways, and keeps its header row in sight as the rows go past. Tables that fit get no button. A downloaded file is unchanged. Opened from a document read full screen, Escape now closes the table or diagram and leaves the document full screen, in Chrome and Edge; elsewhere a second Escape does it.

A diagram opens on the whole screen

A Mermaid diagram keeps its own size in a document, so a big one ran off the side of the preview. Each now has a button in its corner — or double-click it — that opens it over the whole screen, fitted to it. Zoom with the wheel, a pinch or the buttons, drag to move, Escape to close. In the converter, the live preview, shared pages and the blog; a downloaded file is unchanged.

Download Markdown for Obsidian

Obsidian finds a heading by its words, not by the short anchor GitHub writes, so a table of contents did nothing once a downloaded file was in a vault. The new download, next to Markdown in the app and on a shared page, writes those links the way Obsidian reads them; they still work here. The plain .md is still the source, exactly as written.

Links to a heading jump to it

A table of contents — Setup — did nothing in the preview, on a shared page or in the downloaded file, because a heading’s anchor carries a prefix the link did not. Links now find their heading however they were written: as GitHub or Obsidian writes them, in any language.

Assistants can update a document and keep its link

Ask Claude or ChatGPT to fix or rewrite a document you already have, and the new connector tool tp_update_document changes it in place: the same link shows the new text and the old text is kept as a revision. A document that is already shared is changed only after you say yes.

Update a document and keep its link

PUT /api/v1/documents/:id, and tp push --update in the command line, give a document new text without a new address: the link, its password, its end and its opens stay. The text it replaces is kept as a revision, the newest ten, and the shared page says when it was updated.

A page for ChatGPT

/agents/chatgpt has the three steps for adding TransformPipe in ChatGPT — Plugins, Add, Create MCP App, the address — what ChatGPT can reach and what it cannot, and the questions people ask, in five languages. The assistants’ table marks ChatGPT as working today.

Making a shared document private asks first

Switching a shared document to Private ends its link for good, and sharing again makes a new one. The Share dialog now says so and waits for a yes, so an old link no longer stops working without anybody meaning it to.

Word and PDF downloads work again

Downloading a saved document as Word or PDF answered with an error on transformpipe.com, from the app, the API and the command line alike. Both files are built again.

The cards show in Claude

The card beside a saved document, the list of your documents and the delete confirmation were on the page in claude.ai but never shown. They are drawn now, in a new conversation.

ChatGPT connects

Add a connector at https://transformpipe.com/api/mcp in ChatGPT’s developer mode, sign in, and ChatGPT saves, finds and shares documents on your account, with the same cards Claude draws. It stopped at “Unknown client” before sign-in until today, and then failed after you approved it with an error about JSON; both are fixed.

September 2026

The Share dialog keeps its size

The three modes were three layouts, and the dialog grew and shrank every time a chip was pressed. Now each is the same panel at the same height — the address, a line on who can open it, the end date with the password or the people, and the opens — and what does not apply is shown disabled rather than taken away. A password can be set while the document is still private, so its link is protected from the start. And on a shared page, the .md in the download menu now lights up with the rest of its item.

The Share dialog says less

Each setting had grown a sentence explaining it, and the dialog read like a page. Now the end date and the password sit together as two lines of settings, each control showing its own state, and the opens are one grey line at the foot. The words that stay are the ones that matter: that a link has expired, and that naming somebody emails them.

A shared link can ask for a password

In the Share dialog a link can now be given a password, even before it is shared. Whoever opens it is asked for it first — before the page, both downloads and Save a copy, though you, signed in, are not — and entering it once keeps it open in that browser for a day. It is kept only as a hash, so it can be changed or taken off but never shown, and a new one ends every earlier entry at once. It is set in the dialog or the API; no assistant can set or remove it.

Shared with named people, the Views tab says which of them opened it

For a document shared with specific addresses, the Views tab now lists each of them — opened how often and when last, or not yet — and every open in the list says whose it was, with your own as “you”. Those readers sign in to open it, and the page they read tells them the person who shared it can see when they do. A link anyone can open still records nobody.

Every open of a shared link, in a tab of its own

A saved document has a Views tab beside Check: every time its link was opened, grouped by day, with whether it was the shared page or the app. It lists opens, not people, and keeps nothing about who opened it — the time and the place are the whole of each row. The opens go with the link when it is revoked, and the API lists them too, at GET /api/v1/documents/:id/views.

The AI summary says more, and says it is working

A summary was three to five sentences that said what a document was about and little you could act on. It is now a paragraph on what the document is and where it lands, then its specifics as a list — figures, names, decisions, dates, open questions — in the document’s own language. While it is being written the tab says so instead of sitting empty, and the text appears as it arrives. When the main model is busy a faster one steps in, a failed regenerate keeps the summary you had, and an error reads as a sentence. Summaries made before today stay as they were until you press Regenerate.

A shared link says how often it was opened

The Share dialog now shows how many times a link has been opened and when it last was, and so do the API and the assistant tools. It counts opens, not people — your own included — and it knows nothing about who opened it: the shared page asks for a one-pixel picture, and that request adds one to the count. The bots that fetch a link to draw its preview in a chat are not counted, and a link that is revoked starts again at nought.

The documentation copies as Markdown, for an assistant

A Copy page button beside the documentation’s title puts the whole manual on the clipboard as Markdown — made from the page you are reading, in your language, by the same HTML to Markdown converter this site runs — ready to paste into Claude or any other assistant. The arrow beside it opens the same Markdown as plain text in a new tab. The questions at the foot come along with their answers, closed or not.

On a phone, the menu scrolls and a long page has its contents

The phone menu ran off the bottom of the screen and could not be scrolled, so the last rows were out of reach; it scrolls now, and it opens on documentation, the blog and the assistants instead of fifteen conversions, with the language beside them — the bar has no room for it on a phone. The documentation and every article get a contents button in the bottom corner that names the section you are in and lists the rest.

A shared link can stop working on a date you pick

The Share dialog now asks how long a link works: with no end, for an hour, a day, a week, a month, or until a day you choose. After it the page says the link has expired instead of opening the document, and both downloads and Save a copy stop with it; a new date, or no end, opens the same link again. The API takes expires_at, tp push --share --expires 7d does it from a terminal, and an assistant is told when a link ends. A revoked link also stops opening within a minute now — a cached copy could outlive the revoke by ten.

The assistants page leads with sharing

It opened on finding a document again, when what most people come for is sending one: the page now starts there, in all five languages. Add to Claude sits beside the connector address rather than above it, copying the address is an icon inside its field, and on a phone the address breaks after the host instead of being cut off. The four cards on what it is for are one size, the comparison’s headings sit over their columns, and no card ends on a line of one word.

A shared document downloads as Markdown too, whatever it is called

The Download button on a shared page now has an arrow beside it, and behind it the Markdown source, for somebody who means to keep working on the thing rather than read it. And downloading works for every name: a document called anything outside the Latin alphabet — Cyrillic, Greek, Japanese, an emoji — answered its HTML, Word and PDF downloads with a bare server error, on the shared page, in the app and in the API. The file now arrives under its own name.

Coming back no longer means seeing an old version of the site

Since 18 September the offline cache kept the site’s stylesheet from your first visit and served it on every one after, so anybody coming back saw today’s pages drawn with old styles — the list of conversions in three columns where there are five, and any other change to how things look missing until a hard refresh. The stylesheet now comes from the network whenever there is one, and the old cache is cleared. It can take one ordinary reload to take effect. Offline still works.

A shared document gets more of the screen

A shared page, and the .html file downloaded from one, held the document to 48rem, so on a wide screen a five-column table scrolled sideways between two empty margins. The column is 56rem now, the width the preview in the app already used in full screen, so the page somebody is sent is no longer narrower than the one it was written in. Phones and print are unchanged.

The assistants link is an icon like its neighbours

In the header it was a bordered pill with its name spelled out on a wide screen — the loudest thing in the bar, for a list of one. It is a glyph now, the size of Docs and Blog beside it, lit while you are on the assistants pages the way they are on theirs. The name is in the tooltip, and the phone’s menu still has it as a row.

The page that says what this is, saying rather more

/about answered the question in four hundred words and five short sections, which is an introduction rather than an answer. It now opens on the problem, says who it is for, says what separates it from a converter that uploads your file — and says what it does not do: no PDFs, no LaTeX, no five hundred files at once, four megabytes a document. Seven questions at the foot, in the same accordion the front page uses, and marked up so a search engine can show the answers. All of it in five languages.

An assistant asks before it publishes

Saving a document through the connector could publish it to the public web in the same call, and the only thing standing in the way was a sentence in the tool’s description asking the model to be careful. Prose is not a gate. Publishing now takes the same explicit confirmation deleting has taken all along: called without it, the tool changes nothing and answers with the document’s name and who would have been able to read it. Revoking a link is not gated, because taking access away discloses nothing.

Visits counted on our own server, anonymously

TransformPipe now counts visits and a handful of actions — a page opened, a conversion run, a download, a save, a share — as daily totals on its own server. No cookie, nothing stored in your browser, no identifier and no IP address, and nothing about a document beyond which conversion or format it was; where a visit came from is kept only as the referring site’s name, or the campaign tag in the link that was followed. The privacy and cookies pages say so, in five languages.

The front page says where a document can go next

The front page explained the converter and never mentioned the assistants. A line under the heading now says that everything converts in your browser and that, signed in, your documents reach Claude through the MCP connector — with ChatGPT and the other assistants named as what they are: being tested. The description a search result shows says the same about Claude. In five languages.

A shared link to the changelog shows a picture

A link to the changelog, to any entry on it, to the live preview or to the pages for assistants unfurled in Slack, LinkedIn or a chat as a grey box: each named a share image that had never been drawn. They all have one now — the entries share the changelog’s — and a page that names a picture which does not exist no longer gets published.

Fifteen conversions, and PDF only on the way out

The front page’s questions, the documentation and the invitation on a shared document still said ten conversions a week after there were fifteen, and a few of them listed PDF as something you could convert from. It is not: a PDF is what a document can become, through the print dialog or the API, never what it starts as. They all name the fifteen now — PowerPoint, OpenDocument, rich text, EPUB and Evernote included — and the extension and the shared page count them rather than saying a number, so the next conversion cannot leave them behind.

In Claude’s connector directory

TransformPipe is listed in Claude’s connector directory, at claude.ai/directory/tp: open the listing, press Connect, sign in, and Claude can save, share and find your documents. No address to paste any more. The pages for assistants, the setup guide and the documentation now start there, and the address stays for every other MCP client and for an organisation that keeps the directory switched off.

The live preview scrolls in full screen

Full screen gave the live preview the whole screen and then cut the document off at the bottom of it: the pane grew as tall as what was in it, so there was nothing to scroll and no way to reach the rest. Both panes now keep to the screen and scroll on their own, side by side on a wide screen and one above the other on a narrow one.

A page for the assistants, and one for Claude

/agents says what the connector is for rather than how to add it: everything an assistant writes, saved to your account, found again from any device and sent as a link to a finished page. /agents/claude has the steps for claude.ai, Claude Desktop and Claude Code, a side-by-side with artifacts, and what Claude can and cannot reach. Both copy the connector’s address in one click, and both list the assistants still being tested — ChatGPT, Cursor, Gemini, VS Code and Windsurf — which get a page each once connecting them has been seen to work. A button in the header leads there, and a row in the phone menu. In five languages.

Every article offers the conversion it is about

Halfway down each of the 350 articles there is now one card: convert a file, in the browser, no account. Which conversion it offers is read out of the article’s own links rather than fixed — the PowerPoint piece offers PowerPoint and says so on the button, and a piece about syntax offers the default. It sits between two sections rather than inside an argument, it is in the prerendered copy as well as the app, and the prose in content/blog did not change: 350 Markdown files with the same paragraph pasted in is 349 places for it to go stale.

What Pandoc is, before the command somebody wanted to run

The most-read piece here is about alternatives to Pandoc, and nothing said what Pandoc is. It does now, in five languages: one binary, fifty readers, sixty-six writers and a document model in between, which is why the format list is long without anybody having written a thousand converters. It also answers the two things people search for and do not find — there is no Pandoc app and no official Pandoc online, only a demo — and it ends on the jobs this site is the better tool for, and the ones it is not.

Pandoc reads PowerPoint now, and four articles said it could not

Version 3.8.3 added pptx and xlsx readers on 1 December 2025, and four articles here still said a deck could not be read at all — one of them published this morning with the date it was checked printed next to the claim. Corrected in five languages, and the correction is not simply that it works: the reader opens no notes part, so a deck converts and every sentence under the slides is dropped without a warning. Its own source says Stability : alpha, which is more than the advice repeating the old answer ever said.

What Microsoft’s converter is for, and when it is not

MarkItDown is the default answer to “convert this document for a model to read”, and its own documentation says what it is for: text analysis pipelines, in Python, beside the files. The new article reads the dependency list rather than the front page — Mammoth for Word, python-pptx for decks, pdfminer for PDF — because that list is where the ceiling is, and it names the four reasons somebody goes looking for something else. In five languages, with the limits of this site stated in the same paragraph.

The extension is in both stores

Chrome and Firefox both publish it now, at 2.2.0 and from the same source tree. The page you are looking at becomes Markdown from the button in the toolbar, a side panel follows you from tab to tab, and the fifteen conversions this site has run inside the extension, on your own machine. Signed out it never talks to us at all.

Ten converters, and what each one will not read

A comparison that counts what the front pages leave out. Pandoc reads a deck only since 3.8.3 and takes none of its speaker notes, calibre reaches Markdown only through its text exporter and drops every link unless told otherwise, LibreOffice Writer now saves CommonMark directly, and Docling reads the widest input list of the ten. Every claim comes from the tool’s own documentation with the date it was checked — and the section on this one lists the five things it does not do, because a comparison the seller wins outright is not one.

What a document costs an assistant

A token is about 3.5 English characters, which turns the question into arithmetic: a long article is 4,300 tokens, asking an assistant to convert it spends that going in and again coming back, and a megabyte of embedded picture is 300,000 — more than most context windows hold. A link to the same document is eleven. The article gives the formula rather than a percentage, including the case where the model has to read the document and the saving is nothing at all.

Three of the new conversions are written up

PowerPoint, EPUB and the question of where the pictures go each have an article now, in all five languages. The load-bearing facts were checked rather than remembered: Pandoc writes PowerPoint and does not read it, so the usual advice fails at the first command; calibre reaches Markdown through its text output and drops every link unless you ask it not to; and a picture carried inside the file costs a third more bytes than the one on disk, which is the whole reason most converters leave it behind.

There is a page that says what this is

There was not one. /about was a permanent redirect to the support page, and what it redirected to sat underneath a form about a broken file — so the page that says what TransformPipe is, how it works and who builds it did not exist at the address anybody would type. It does now, in five languages, and it describes fifteen conversions rather than the five it still claimed.

A conversion’s name no longer breaks after its arrow

The blocks under the dropzone, and the list of conversions in the footer, put the arrow at the end of one line and what it pointed at on the next. The arrow is bound to its word now, so a name that has to wrap wraps in front of it; the cards keep room for a second line so a row stays level either way; and the “Soon” badge moved off the name’s line, where it had been taking a third of the width.

An assistant can convert three more things

The connector offered HTML, CSV, TSV and JSON, and had done since before plain text shipped. It now also takes plain text, rich text and an Evernote export — the formats that are text, and so the ones a tool can carry at all. A file that is bytes still cannot come through a conversation, and the refusal now says where to take it instead.

Evernote, tags and all

An .enex export becomes one document with a note per section — and the tags come with it. They are how an Evernote library is organised, the reason ten thousand notes are findable at all, and several importers drop them without saying so. Checkboxes become a task list, and a picture is matched to its note by the hash the format links them with.

LibreOffice and rich text, both read

Two conversions rather than one. An .odt — what LibreOffice, OpenOffice and a Google Docs download are — converts with its headings, lists, tables, footnotes and pictures intact, because that format says what things are. An .rtf converts too, which is harder than it sounds: it says only what a writer did, so a heading has to be recognised rather than read.

— 2.2.0

EPUB, and a phone that works

A book is the twelfth conversion: a chapter is a section, in the order the book is read rather than the order its files are numbered. Reading a document full screen now works on an iPhone, where it had never worked at all; the tabs above a converted document stop taking the page sideways; and a dialog taller than a phone held sideways can be scrolled. For the extension, a saved page keeps the site’s own stylesheets — 2.1.0 was replaced in the store rather than left to clear review, because it did not.

A saved page keeps the site’s own stylesheets

Saving a page as it looks could produce a file with none of the site’s styling in it — the text and the pictures all there, laid out as though the stylesheet had never existed. Every linked stylesheet was being inlined correctly and then overwritten, one by one, with the contents of an unrelated <style> from elsewhere in the page.

Three things that only went wrong on a phone

Reading a document full screen did nothing at all on an iPhone — Safari has no such API there, so the button threw instead of working, silently, since the day it shipped. The tabs above a converted document ran off the side of the screen once there were four of them. And a dialog taller than a phone held sideways could not be scrolled, so the bottom of the sign-in form was simply unreachable. All three are fixed.

A book, as one document

EPUB is the twelfth conversion. A .epub goes in and the whole book comes out as one document: a section per chapter, in the order the book is read rather than the order its files are numbered, under the titles the contents gives them, with the pictures inside and the links between chapters reduced to their words.

— 2.1.0

Everything a document is made of

A release about fidelity rather than reach. Diagrams are drawn, formulas are typeset, code is coloured, and six things people routinely write in Markdown stopped being printed as punctuation. PowerPoint became the tenth conversion, speaker notes included, and the pictures inside an export stopped being left behind in the .zip. A document says what is wrong with it. The extension reads what the screen shows rather than what the page claims. Each of those has a page of its own below; this card is the list.

Pictures survive an export

A Notion, Confluence or Obsidian export kept its pictures in the .zip and never unpacked them, so the document arrived with every image pointing at a file that was not there. A PowerPoint deck lost its slides’ pictures. A Word file lost its pictures having already handed every one of them over. All four now carry them, inside the document itself.

The formats that are coming say so

The blocks under the dropzone now name what is on the way — EPUB, ODT, RTF and Evernote — marked as not here yet. Arriving with an .epub and learning only that this does not take one was a worse answer than "not yet", and the row of empty space beside the eleventh conversion read as something that had failed to load.

The German, French, Spanish and Italian sign-in panel reads properly again

The panel added on 19 September went out with its accented characters mangled in four languages — "lässt" as "lässt", and ten more like it. The text was right; the file it was written into was not.

Plain text that looks like markup stays plain text

Two ways a converted .txt — and now a slide — could lose a word. [XX] min came out as a formula in italics with "min" stranded outside it, because \[ is both an escaped square bracket and LaTeX’s opening display delimiter; it now has to contain an operator or a command to be read as maths. And a word in angle brackets was read as an HTML tag and removed on the way through. Both are escaped now, so the text renders as it was typed.

A deck becomes a document, notes and all

PowerPoint is the tenth conversion. A .pptx goes in and one document comes out: a section per slide, in the order the deck plays, bullets still nested and tables still tables — and the speaker notes underneath each one, which are the half of a deck nobody outside the room has ever been able to read.

A document says what is wrong with it

A fourth tab beside the preview, with a count on it: links to sections that are not there, two headings competing for one anchor, a heading with no words, a picture with no alt text, a link with nothing to click. Each one carries the line it is on. Nothing is changed for you.

The things people actually write in Markdown

A note from Obsidian opened with a horizontal rule and its own YAML set as a heading. A GitHub alert showed the word [!WARNING]. A footnote marker stayed as [^1] and the note under it as a paragraph. Water came out with a line through the 2. All of that now reads the way it was written.

Code is highlighted, in the document's own colours

A fenced block with a language on it — ts, python, ```bash and about forty more — is now coloured, in the preview, the downloaded file, a shared link and every article on this site. Six colours rather than twenty, drawn from the same palette as the rest of the document, and they follow the theme you are reading in.

Maths between dollar signs

Write E=mc2E = mc^2 in a sentence, put a formula between $$ on its own lines, or use LaTeX's own delimiters and environments, and it is set as maths — in the preview, in the file you download, in a shared link and in what the API returns. A price written as $5 to $10 is still a price.

The sign-in dialog says what an account is for

It was the shape every product ships — an envelope in one box, a padlock in the next, and a narrow column with no room in it. There is now a panel beside the form listing what signing in actually gets you: the history, shareable links, a key for the API and the extension. The form beside it has room to breathe, and on a phone it stands alone.

Mermaid diagrams are drawn, not printed as code

A ```mermaid fence used to come out of every conversion as a block of text. It is now a picture — in the preview, in the .html you download and in what you print — and the picture follows the theme you are reading in. A fence that does not parse keeps its source, which is the thing worth seeing when a diagram is wrong.

The blog reads in all five languages

All sixty-three articles now exist in English, German, French, Spanish and Italian — 315 in all. They are written rather than machine-translated: the prose is rebuilt, the search terms are the ones a reader of that language actually types, and each language keeps its own conventions, down to which quotation marks it uses.

The whole blog reads in French

All sixty-three articles now exist in French alongside the English and German. They are written rather than machine-translated: the prose is rebuilt rather than transposed, and the search terms are the ones a French reader actually types — while the dates, the links, the code and every checked-on citation stay exactly as they were.

Publishing a public link waits for a confirmed address

Sharing a document with named people works as it always has, whether or not the address on the account has been confirmed. Publishing one to a link anybody can open now asks for the confirmation first — on every route that can do it, which was the actual bug: two of the three were not asking.

A daily limit on share notices, and a rate limit on the rest

An account may send fifty share notices a day. Adding somebody to a document still works past that — they simply get no email about it. The app's own endpoints are now rate limited the way the public API has always been, so a script in a loop gets a 429 instead of everything it asks for.

Install it, and it works without a network

Chrome, Edge and Safari now offer to install TransformPipe as an app — its own window, its own icon, no address bar. Opened with no connection it still starts and still converts: every conversion runs in the browser anyway. Documents on the account need the network, as they always did.

A document in a chat looks like a document

An assistant that saves or opens a document through the connector can now draw a card for it — the name, what it weighs, the counts, the first lines, and a button that opens it here — instead of a paragraph of text. Asking what is on the account draws a list whose rows open the document rather than printing an id per line, and a delete that has not been confirmed draws the document it would remove, by name, with the button that removes it. Hosts that do not draw cards yet get the same sentences they always did.

Contact is Support, and it opens on the form

/contact is now /support, and the first thing on it is two fields: what happened, and what you expected. The button opens a GitHub issue with both already written into it — nothing is sent from the page, and the issue exists once you press Submit there. The old address redirects, so a link to it still lands in the right place.

Words that CSS held apart stay apart

A row like 39 words · 1 heading · 1 table is usually built as separate elements with the space between them coming from the layout rather than from the markup — so it converted as 39words1heading1table. The extension now reads the page with its layout in hand and puts those spaces back before converting. Stat rows, tag lists and breadcrumbs come out as sentences again.

A document somebody shared with you is a document

The page a share link opens now carries the same card every other screen puts above a document — the name, what it weighs, when it was made, and the counts — instead of a line of small print. Save a copy puts it on your own account, Share publishes that copy, and Copy Markdown takes the text. Signed out, those buttons open the sign-in dialog rather than sitting there disabled.

The connector says who it is

The connector now carries an icon, a name and a sentence about what it does, so an assistant shows what it is connected to rather than a bare URL. It is read after signing in, not before: every message needs a token, initialize included, because a server that answers one without a token is a server a client reads as having no sign-in at all.

A browser extension

The page you are on, as Markdown, without leaving it: press the button in the toolbar and the article comes back without the navigation, the sidebar or the cookie notice. Copy it, download it, or save the page as a self-contained .html file with its pictures inside. The side panel is the same thing kept open beside the page, converting each tab as you arrive at it, and the ten conversions the site has run inside the extension too — nothing is uploaded and none of it needs a network. Signed in, Save and Share put a document on your account and publish a link or name the people who may read it. What it is and what it never does.

A shared document says where it came from

Somebody who opens a link you shared now finds a line at the foot of it about what made the page, and a way to convert something of their own. The downloaded .html carries the same line, quietly, in its footer. Nothing about the document itself changed.

Your documents, two letters away

⌘K now opens on the five documents you converted last, and typing searches them by name alongside the conversions and the pages — every document in the list, not only the five. See all documents goes to the history.

The cookie question, asked properly

A banner on a first visit, with three answers of one click each: accept, only necessary, or open the switches. Analytics is the single optional thing on this site and it stays off until it is allowed — before an answer, Google’s tags write nothing to your browser. The answer is kept in this browser, so the banner is asked once; the button at the foot of the cookies page reopens it, and the privacy and cookies pages now say all of this.

A bar you can type into

The header is rebuilt around a search box: press ⌘K — Ctrl K away from a Mac — and every conversion and every page in the app is two letters away. The bar itself now sits under the page rather than on top of it, the conversion you are on is the first thing on it, and the trail saying where you are moved out of the page and into a line of its own underneath.

A new mark

The name is now a drawing rather than six characters of monospace: a T and a p sharing one stem. The same pair, on its own, is the icon — so the tab, the bookmark, the phone home screen and the Android launcher all get a real icon instead of a letter the browser guessed at.

An Obsidian vault, in one document

A tenth conversion: drop a zipped Obsidian vault and get one Markdown document back — every note in order, with a table of contents. [[Wikilinks]] keep their words; merged into one document there is nowhere left for them to point, so the address does not carry over, the same rule this app already applies to a Notion or Confluence export.

Plain text and Excel, converted honestly

Two more conversions. Raw text → Markdown escapes Markdown's own characters before converting, so a .txt file with a literal asterisk or underscore in it comes out saying the same thing rather than gaining accidental emphasis — .txt used to be accepted on Markdown → HTML as though it already were Markdown, and no longer is. Excel → Markdown table turns an .xlsx workbook into one table per sheet, with a table of contents once there is more than one.

Notion and Confluence exports, in one document

Two new conversions: drop the .zip from Notion's "Export as Markdown & CSV" or a Confluence space's "Export → HTML", and get one Markdown document back — every page in order, with a table of contents, a Notion database included as a table. A link from one page to another in the export keeps its words; merged into one document there is nowhere left for it to point, so the address does not carry over.

A PDF from the API, without a browser

GET /api/v1/documents/:id.pdf lays a document out as a PDF on the server, for a script or a CI job that has no browser to print from. The app itself still uses "Print or save as PDF" for that — it is the browser's own, exact rendering, and this does not replace it.

Download a saved document as Word

The download menu on a saved document now offers a .docx, built on the spot from the same HTML the preview already renders. No headless browser involved — it needs a save first, since the conversion runs on the account's copy.

Webhooks: a signed notice when a document is created or shared

Account menu → Webhooks registers a URL that gets a signed POST for two events, document.created and document.shared. Session-only to manage, on purpose — it stays off the scriptable API, so a leaked API key cannot turn into a standing feed of every document that comes after it.

Link a document to an earlier one, and see what changed

A push can now say it is a new version of an earlier document — ?replaces= in the API, --replaces from the CLI, a replaces input in the Action. It is opt-in: nothing links documents on its own, and a plain push stays the unrelated document it has always been. Linked documents get a chain icon in the history and a line-by-line diff against the version before them.

History search now looks inside your documents

Searching your history used to match file names only. Signed in, it now also finds a document by what is written inside it — the name box still works exactly as before, it just stops being the only way in.

A Summary tab, generated once and kept

A saved document now has a third tab beside Preview and Markdown: three to five sentences that say what it says, so you can tell what something is without opening it. The first open generates it; after that, reading it again is free. Regenerate is one click, for a document that has moved on since.

Nothing reaches your account until you save it

Converting a file used to put it in your account. Drop, look, close the tab — and it was there, along with everything else you had ever glanced at. Signing in was worse: whatever this browser had converted was uploaded in one go, so twenty-five things you had looked at became twenty-five documents you had never asked to keep.

Now a conversion stays in this browser, and Save puts it in the account. The history shows both and says which is which; sharing still needs a saved document, and says so rather than being mysteriously unavailable.

The connector and the API always worked this way — tp_convert_markdown saves nothing, tp_save_document saves — so this is the interface catching up with them.

Paste it, or type it and watch

Everything here needed a file, which is an odd thing to ask of somebody holding the Markdown in their clipboard. The converter now takes pasted text as well as a dropped file — for every conversion except Word, where there is nothing to paste — and what comes back is the same document, with the same preview, download, save and share.

And a page for the other question: /markdown-live-preview is Markdown on the left and the document on the right, as it is typed. Nothing is uploaded and nothing is saved; the text stays in the tab. It is the converter underneath, so what is on the right is what a downloaded file contains.

Both panes take their height from the window, so a tall screen is a tall editor, and there is a fullscreen for when that is still not enough. Text pasted on the converter arrives here already rendered, and Convert and keep sends it back the other way — to the document screen, with the history, the share link and the other formats.

Every conversion, everywhere it can go

The app converted five things and the other two ways in did not. An assistant could only be handed Markdown, and the API refused Word outright.

Now tp_convert_to_markdown takes HTML, CSV, TSV or JSON through the connector, and tp_save_document takes the same with from, so a document is stored knowing what it was made from. And the API accepts a .docx as the request body — the one place a Word file can go, because a file is bytes and a tool call is JSON: an assistant never holds the file, only the text somebody extracted from it.

The Connect button now connects

Approving an assistant did nothing. The page said the form had not come from here, and it was right in a way that was wrong: the approval page asked browsers not to send a referrer, and Chrome takes a page’s origin off the same setting — so the page’s own form arrived claiming to come from nowhere, and the check that stops another site approving things for you stopped the page itself.

Nothing had ever been connected through it. The tests could not see this, because a test is not a browser and sends whichever headers it is told to; the database could, and said so plainly: every request shown, none ever approved.

Behind that sat a second one. The page tells the browser it may only send you to the assistant that asked — and it had been saying it may send you nowhere but back to us, so approving worked and the trip back to the assistant was refused by the page itself. It now names that one address, and nothing else.

An assistant can say who it is without registering

Connecting an assistant used to mean it registered itself here first, and Claude made a new client every time somebody connected. It can now identify itself with a metadata document instead — an address it publishes, which this server reads — which is what the MCP specification prefers. Registration still works for clients that do not.

The approval page changed with it. It now says where a client’s description was published, and warns when the only place it can be sent back to is a program on your own computer, because anything running there can ask to be sent there too.

This page

A changelog, at /changelog and linked from the footer. Every release and, between them, the changes worth naming — read from one typed list and rendered by the converter the product sells.

A page for an address that is not a page

There was none: an unmatched address got the host’s own error page, with nothing to click. There is now a 404 carrying the site’s chrome and three ways out, written once and re-rendered in the reader’s language.

Two soft 404s came out with it. A link to an article that does not exist answered 200, which a crawler indexes as a real page; and /de/history was a plain 404 in four languages, so the screen worked until somebody reloaded it.

The blog in German

Twenty-nine of the fifty-six articles are in German, and the blog can now be translated one article at a time.

The rule throughout is that a language has what it has. Its index lists only its own articles, an article claims an hreflang only for the languages that actually have text, and a language with nothing translated gets no index at all rather than a heading over an empty list. Covers are drawn per language, because the headline is part of the picture.

Email that arrives

A welcome message, sent once when an account is first used, and a notice to somebody a document has been shared with.

Both took three attempts. The notice was wired to an endpoint the app never calls, then fired after the response so the request never left the function, then blocked by a key that was genuinely absent from the first builds. Deliverability needed DMARC, not just SPF and DKIM.

Signing in with an email address

Google was the only way in. There is now a dialogue with sign-in, sign-up, a password reset and a one-time code, and an unconfirmed account is held back: no publishing by link, and ten documents rather than five hundred, until the address is confirmed.

Five languages

The interface, the documentation and the pages of words are in English, German, French, Spanish and Italian, with the words in one typed catalogue and a build step that walks every language against English: same keys, same array lengths, nothing empty, the same placeholders. It found 192 missing keys on its first run.

The language is in the address — /de/docs, /fr/csv-to-markdown — and English keeps the bare paths, because sixty-eight pages were already indexed at them.

An embed, and the frame policy the app never had

/embed is the converter with no chrome, for a page that wants to host it, and it talks to its host with postMessage. Adding it meant writing the rule that was missing: every other route now refuses to be framed at all, which nothing had said before.

The connector has its own dialogue

Adding TransformPipe to an assistant used to open the API keys dialogue — a screen headed "API keys" with a key generator at the top, so a person who chose "MCP connector" had to work out they were in the right place. It is its own dialogue now, with the address, the one-line command and the assistants already connected.

A guard for the failures that only happen on the platform

Two things had taken production down and neither could fail locally: an extensionless import that a bundler hides and Node refuses, and a vercel.json pattern that produces no deployment at all. Both are now checked before the build, and the guard was proved by reintroducing each bug.

Share an article

X, LinkedIn and Reddit, under the prose rather than above it — somebody shares an article they have read.

— 2.0.0

TransformPipe, and four conversions

The rename, at transformpipe.com, and four formats in rather than one: HTML, Word, CSV and TSV, and JSON. Each conversion has an address of its own, because "word to markdown" is a thing people type into a search box.

JSON picks a rendering per shape rather than one rule for everything — an array of flat objects becomes a table, an array of scalars a list, an object a heading per nested key, and anything past three levels a fenced block, because a heading at depth seven is not a heading.

Also: an assistant can act on an account through a connector that needs no API key pasted anywhere; fifty-six articles, up from twenty, each with a cover the build refuses to ship without; and the blog stopped being sent to everybody who opened the converter, which had been 952 kB of Markdown in the main bundle.

— 1.1.0

A blog, and real HTML for every page

Twenty articles at /blog, rendered by the converter they describe. An FAQ under the dropzone and again in the documentation, from one list.

Every page a stranger arrives on is now a real file with its own title, description, canonical link and structured data, plus sitemap.xml and robots.txt. And the downloaded .html became genuinely self-contained — it used to link its typeface from Google Fonts.

— 1.0.0

Markdown in, a document out

The first release. A converter with a preview, an HTML source view and a self-contained download; accounts and history across devices; sharing by link or by address, with a read-only page.

A public API with revocable keys and quotas, a dependency-free CLI, and a GitHub Action that comments rendered links on a pull request. Documentation at /docs, with screenshots captured from the running app.

Nur Änderungen, die im Produkt auffallen. Interner Umbau und Infrastrukturarbeit stehen nicht hier, und die Einträge selbst sind auf Englisch.