Version markers
The <?aid ?> processing instruction and the DOMVersion attribute — what each field names, and the values InDesign writes in real packages.
A package declares its vintage twice: an <?aid ?> processing instruction at the top of designmap.xml, and a DOMVersion attribute on the root element of every part.
In short The <?aid ?> instruction sits between the XML declaration and the
Document element of designmap.xml. Of its five pseudo-attributes, only product
varies between files: it names the InDesign build that wrote the package, such as
20.0(32). DOMVersion names the revision of InDesign's document model the package
follows, such as 20.0, and the same value is repeated on the root element of every part.
It tracks the application's major and minor version, but does not change with every
point release.
The top of a design map: the XML declaration, the <?aid ?> instruction, then the
Document element carrying DOMVersion.
The <?aid ?> processing instruction
A processing instruction is not an element. Its target here is aid, and its content is a
string of name="value" pairs that look like attributes but are parsed by the application,
not by an XML parser. It appears only in designmap.xml.
| Pseudo-attribute | Value in InDesign's packages | Meaning |
|---|---|---|
style | 50 | The style of the processing-instruction syntax. |
type | document | The file is a whole document. Snippets and assignment files use other values (see companion formats). |
readerVersion | 6.0 | The oldest reader the producer says can open the package. |
featureSet | 257 | A number identifying the set of features the package was written for. |
product | for example 20.0(32) | The InDesign version and build that wrote the package. |
Across the 271 InDesign-written packages in our corpus, written by InDesign versions 6.0
to 21.2, style, type, readerVersion and featureSet never vary. readerVersion="6.0"
points at InDesign CS4 (version 6.0), the first version that wrote IDML. product is the
field that tells files apart.
DOMVersion
DOMVersion is an attribute on the root element of a part: on Document in
designmap.xml, and on idPkg:Spread, idPkg:Story, idPkg:Graphic, idPkg:Styles and
every other part's root. In every InDesign-written package of our corpus, all parts carry the same value as
the design map. The META-INF/ files are not IDML parts and carry none.
| Attribute · Document | Values | Paged | paged.set |
|---|---|---|---|
| DOMVersion | real | read |
DOMVersion names the revision of the document model, which is what decides which elements
and attributes can appear. It follows product's major and minor version, but a point
release of InDesign does not always raise it:
product | DOMVersion |
|---|---|
20.0(32) | 20.0 |
20.1(71) | 20.0 |
17.2(105) | 17.0 |
16.4(54) | 16.2 |
13.1(76) | 13.1 |
6.0(352) | 6.0 |
In the corpus, DOMVersion ranges from 6.0 to 21.2. The commonest value is 11.4
(InDesign CC 2015), followed by 20.0 (InDesign 2025).
Reading the markers
To find out which InDesign wrote a file, read product from the <?aid ?> instruction:
it is the only marker that names the exact build. To find out which vocabulary to expect,
read DOMVersion. The steps, with a downloadable sample, are on
read which InDesign version wrote a file.
A writer generating a package from scratch should stamp a DOMVersion it actually follows
on every part and an <?aid ?> instruction in designmap.xml, copying an InDesign export
of that version.
In Paged: the importer reads
DOMVersionfrom the design map and keeps it. The writer stamps it on every part it generates (new spreads and stories) and records it asdomVersionin a.pagedfile's manifest; a document with noDOMVersiongets20.0. The<?aid ?>instruction is copied with the design map and not interpreted. Neither marker changes how a package is read. Tracked
Frequently asked questions
Where does an IDML package declare its version?
In two places: the <?aid ?> processing instruction near the top of designmap.xml,
whose product names the InDesign build, and the DOMVersion attribute, which is on the
root element of designmap.xml and repeated on the root element of every other part.
What is the difference between product and DOMVersion?
product is the exact InDesign build that wrote the file, such as 20.1(71).
DOMVersion is the revision of the document model the file follows, such as 20.0. A point
release of InDesign often keeps the previous DOMVersion, so the two can differ.
Do readerVersion and featureSet change between InDesign versions?
Not in practice. In 271 packages written by InDesign 6.0 through 21.2 they are always
readerVersion="6.0" and featureSet="257".
Does every part carry a DOMVersion?
Every IDML part does, on its root element, and in InDesign's packages the value is the same
in all of them. The files in META-INF/ are container files, not IDML parts, and carry none.
Round-tripping & versions
What an IDML round trip keeps and recomputes, and how every package records the InDesign version and format revision that wrote it.
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.