Compatibility
How IDML grows between InDesign versions, how it carries documents to older versions, and what a tool that rewrites a package must keep for InDesign.
IDML grows by addition, travels both up and down between InDesign versions, and survives a round trip through another tool only if that tool writes back what it did not understand.
In short Each InDesign version can add elements and attributes; it rarely removes or
renames them, so a newer package is mostly an older one plus extra vocabulary. A newer
InDesign opens an older package, and IDML is also how a document goes the other way: an
older InDesign (CS4 or later) cannot open a newer .indd, but it can open an IDML export.
A tool that rewrites a package in between has to keep the parts and attributes it did not
read, and spell what it writes the way InDesign does, or InDesign opens the result
differently from the file that went in.
The vocabulary grows by addition
A package follows the document model named by its
DOMVersion. When InDesign gains a feature, its
packages gain the elements and attributes that describe it. The package layout (the
mimetype, the design map, the spread, story and resource parts) has not changed since
the first version that wrote IDML. A reader built for one version therefore finds the
parts it knows where it expects them in files from other versions, and the parts it does
not know are additions it can skip.
readerVersion in the <?aid ?> instruction, the producer's claim about the oldest reader
that can open the package, is 6.0 in every InDesign-written package we have seen, whatever
version wrote it.
Up and down between InDesign versions
- Upward. A newer InDesign opens IDML written by an older one.
- Downward. An
.inddsaved by a newer InDesign does not open in an older one. Exporting IDML from the newer version and opening that in the older one is the way across. What the older version has no model for cannot survive the trip. - Before IDML. InDesign CS3 and earlier had their own XML interchange format, INX. IDML
replaced it in CS4 (version 6.0, the
readerVersionevery package names).
Books are not IDML
An InDesign book (.indb) is a separate file that lists several documents. IDML describes
one document: each document of a book exports as its own package, and nothing in a package
records that it belongs to a book.
What a tool that rewrites a package must keep
A round trip through another tool and back to InDesign preserves the document only if the tool:
- writes back every part it did not change, including the ones it never read: fonts,
preferences, tags, metadata, the XML structure in
XML/BackingStory.xml; - keeps the attributes and child elements it did not understand on the elements it does rewrite, and the order of the elements it does not move;
- spells what it writes the way InDesign does. InDesign reads some properties only as
typed
<Properties>children, needsPageCountandBindingLocationon every spread, and does not read a missingItemTransformas the identity: it places the item relative to the spread's first page, so an item meant for the right-hand page of a facing spread lands on the left one. The full list is on what InDesign needs to open a file.
Two behaviours of InDesign on opening are worth knowing because they change a package
without anyone editing it: a story that no text frame references is discarded, and a face
the text applies but Resources/Fonts.xml does not declare is reported as not available.
A tool's own reader cannot check any of this. A file that its writer produces and its reader accepts can still open wrong in InDesign, because both share the same assumptions. Only opening the file in InDesign settles it.
In Paged: Paged writes IDML by patching the package it read, never by regenerating it. Every entry it did not change is copied with its original compressed bytes; spreads, master spreads, stories, the design map and four resource parts are rewritten by a pass that replaces only the attributes and text the edit touched; a new spread or story is generated as a whole part and added to the design map. Over 99 corpus packages, an unedited round trip came back byte-identical: 11,876 entries, no differences. Two changes are made on purpose, both to match InDesign: a story no frame references is dropped, and
Fonts.xmlgains every applied face it did not declare.An untouched
ItemTransformorStrokeWeightkeeps its source spelling, aFillTintof-1is kept rather than deleted, and an identityItemTransformis always written, never removed. (Removing it once made every save toggle the attribute, and InDesign then drew the right-hand pages of a book on the left ones.) Known gaps: a removed page leaves its entry behind, a master spread created in Paged is not written, and an item's hidden state, a name set in Paged and text variables authored in Paged do not reach the IDML yet. Export returns a list of what the format could not carry.A
.pagedfile is a valid IDML package with Paged's own parts added underpaged/, so InDesign opens it as IDML. Tracked
Frequently asked questions
Can an older version of InDesign open IDML from a newer one?
Yes, back to InDesign CS4, which is the reason IDML exists alongside .indd. Features the
older version has no model for are lost on the way.
What is INX? The XML interchange format of InDesign CS3 and earlier. IDML replaced it in CS4.
Can IDML hold an InDesign book?
No. A book (.indb) is a list of documents; each document exports as its own IDML
package, and the package does not record the book.
Why does a package written by my tool open differently in InDesign than in my tool?
Usually because the writer relies on a default InDesign does not apply: a missing
ItemTransform read as identity, a property written as an attribute that InDesign reads
only as a typed child, a spread without PageCount. Your reader shares the writer's
assumptions, so only InDesign shows the difference. See
what InDesign needs to open a file.
Version markers
The <?aid ?> processing instruction and the DOMVersion attribute — what each field names, and the values InDesign writes in real packages.
Malformed packages
What an IDML package must contain to be read at all, which odd-looking values are legal, and what a reader should tolerate in a package that is wrong.