Models write documents now. Somebody has to read them.
DocLang is the open markup format for documents that language models read and write: the structure, the text, the layout of every element on the page, and the reading order, in one file. Converters such as Docling produce it from PDFs, scans and Office files, and a converter makes the mistakes a fast reader makes. A line is misread, a heading is taken for a paragraph, a table cell lands in the wrong column, a caption hangs on the wrong picture.
Those mistakes are quick to spot when the document is in front of you and slow to fix in raw XML. Segler shows a DocLang document the way a reader would see it, with the element tree beside it and the page scan a click away, and lets you correct it where you read it.
Convert, review, use
Segler is one stop on a path that the DocLang ecosystem already lays out, and the other stops are better known than this one.
Convert
Duckling turns Word, Excel, PowerPoint, PDF, HTML, EPUB and some forty other formats into DocLang on your own machine. Docling and docling.rs do the same from code.
Review and correct
Segler opens the result, shows it beside the page it was read from, and saves your corrections without disturbing what you did not touch.
Use
Feed the corrected document to a retrieval pipeline, a training set, or a labeling project. The ecosystem page maps the tools that read DocLang.
What it does
Segler renders headings, running text, lists, tables and pictures in reading order, and edits them in place: retype a line, change a heading’s level, turn a table cell from body into header, fix or clear a bounding box, change an element’s label or layer, remove an element that should not be there. Every edit can be undone. Where a line carries bold or italic, its tags appear in the field so a correction keeps them.
When a .dclx archive carries the page images the model read, they open beside the document with the located boxes drawn over them, so a doubtful line can be checked against the scan. Segler validates the document against the DocLang specification as you work and lists what it finds, each finding a click from the element that carries it.
A save writes the file you opened with your edits applied and nothing else changed. Markup you did not touch comes back byte for byte, comments and whitespace included, and a document you did not change is not rewritten at all. That is the difference between an editor’s model and a converter’s, and it is why Segler is a library as well as an application: segler-core parses and serializes DocLang without losing any element, attribute or text run, and anyone can build on it.
It does not convert. Producing DocLang from a PDF is a converter’s job, which is what Duckling and Docling are for. And it makes no network connection of any kind: no account, no telemetry, no analytics, nothing about you or your documents sent anywhere.
The window is available in English and German. Element names and the attribute values you choose from lists stay in English in both, because a translated one would be a different document.
Get Segler
macOS from the Mac App Store. Windows from the Microsoft Store. Debian and Ubuntu (amd64 and arm64) from the Excelano apt repository, which also installs the desktop integration that opens a .dclx or .dclg on a double-click:
curl -fsSL https://excelano.com/apt/setup.sh | sudo sh && sudo apt install segler
On any platform with a Rust toolchain, cargo install segler-desktop builds the application and cargo install segler the command-line tool alone. segler inspect FILE reports what a document or archive contains. Nothing in the dependency tree compiles C.
Nothing to open yet? Sailing directions for the western approaches is a two-page archive written for the purpose, with a heading hierarchy, a table, lists, a picture and the two page images it was read from.
Open source, and the specification is the authority
Segler is licensed Apache-2.0, the same as DocLang, so that any part of it can go where the format lives. The format is defined in doclang-project/doclang. Segler implements it and does not restate it; where Segler and the specification disagree, the specification is right and Segler has a bug. The code is at github.com/excelano/segler.
The name is German for sailor.