Files & interoperability
The .amdr native format and its forward-compatibility rules, DXF read and write, DWG through an external converter, SVG import, and PDF plot output.
The native format#
Drawings save as .amdr. Three properties govern its design.
Opening a file must not require reading all of it. The preview image, the title-block metadata and the external-reference dependency list are retrievable cheaply, so a file browser can show you what a drawing is before you commit to loading it, and you can see what a drawing depends on before you have its references.
A file saved by a newer version opens in an older one. A drawing containing entity types an older build does not understand must open without corrupting the unknown data on re-save.
Every object has a persistent id. Entities, layers, dimension styles and block definitions all carry a stable unique identifier that survives save and load, so relationships — entity to layer, reference to definition, dimension to the geometry it measures — are restorable rather than re-derived.
The reader drops rows, never the file#
Forward compatibility is usually read as being about unknown entity types, and that was handled from the start: a data blob the reader cannot parse is skipped with a count. The harder case is a known field written in an unexpected shape — one named view whose azimuth a newer build wrote as a string, or one entity row whose layer id it wrote as a number.
Draft is lenient about content and strict about the envelope. Every row array is validated per row: entities, sheets and their entities, block definitions, named views, named coordinate systems, plot style tables and the styles inside them, layers, text styles and dimension styles. One bad row costs that row.
Two things cannot be salvaged per row and are named as such: a malformed current coordinate frame costs the frame table, and a malformed workspace costs the arrangement. Both have a defined default to fall back to. Losing every layer falls back to the shipped layer table, because a drawing with no layers cannot resolve any appearance and its geometry would be present and invisible.
Every drop is reported, in its own sentence, as an error. A lost sheet or a lost named view is not an object and is work that will not come back by redrawing something — a file that opens silently missing a sheet is worse than one that refuses to open, because you find out later.
A field that is absent is not a field that is damaged. An older .amdr has no named views and no UCS table, and reporting that as damage every time it opened would teach a drafter to ignore the warning.
Format versions#
The format carries a version, which is what proves a file predates a change. It is used for narrow, one-time migrations — for example, converting layer 0's colour to ByBackground in files written before that existed, and only where the colour still holds the exact original default.
The alternative, a rule that runs forever ("any layer of this colour becomes background-aware"), reaches the same files and never stops: it would convert a layer somebody deliberately sets to that hex next year, with no way to make one stay.
DXF#
DXF is read and written. It is the interchange format that everything reads, and Draft's reader is deliberately tolerant: it handles planes, elevations, ellipses and splines, and it reports what it dropped rather than failing.
Draft writes R12 DXF.
DWG#
Reads only, and only where a supported external converter is installed — Draft bundles none of them. That is the shipped design rather than a shortfall: converters are detected when present, and a refusal names every route it tried with the licence each one carries. DWG write is not planned, so there is nothing to write with.
DWG is read through a separate process. An own DWG translator stays deferred.
The import router identifies a file from its bytes, describes it with a native probe, and produces DXF text for Draft's existing reader — natively where it can, through an external converter where it must. Everything arrives as DXF, and that is the design rather than a shortcut: a second geometry path into the scene graph would be a second place for every tolerance decision to be made differently, and the first time the two disagreed nobody would know which was right.
The DWG header is read natively — six ASCII bytes of version, then a fixed layout — so Draft can name the release, spot an encrypted file before launching a converter that cannot help, and catch a truncated one from its section locator. Nothing parses an entity.
Three converters are supported, and the difference between them is legal rather than technical:
| Converter | Note |
|---|---|
| The Amalgative bridge | Published as a separate download; the one Amalgative can fix |
| ODA File Converter | Free of charge but proprietary. Detected if installed, never bundled |
dwg2dxf | Used if the drafter already has it |
Draft bundles none of them. A process boundary is not a linking boundary, which is what keeps the licensing clean.
The converter is asked for ACAD2000, not R12 — even though Draft writes R12. Asking for R12 makes the converter degrade every ellipse and spline to a polyline before Draft ever sees it, throwing away curves that Draft holds exactly, outside Draft, silently.
The asymmetry is why an own DWG translator is not urgent: the value of DWG is read. Nobody needs Draft to write DWG, because everything reads DXF.
Formats that are identified but not converted#
.rvt and .skp are identified, not converted, and the probes exist to make that refusal specific.
A .rvt is a documented container, so it is read natively and its version, build and worksharing state are reported — one fact per line, then the refusal:
2024-format BIM model.
Build 20230413_1200(x64).
Worksharing: Central.
Reading this BIM model's geometry needs a licensed component Draft does not
include. The file's version and contents were read; its geometry was not.
That beats "unsupported format" by the whole distance between a fact and a shrug.
The worksharing line carries the file's own word rather than one of ours, and it is omitted entirely when worksharing is not enabled — a line saying so would be noise on the overwhelming majority of files.
A format this build has no name for is stated rather than swallowed — BIM model, format code 2031 — not one this build has a name for. — which is what lets a drafter tell us which release it came from. A file that states no format at all says that too. A .rfa swaps the noun: 2022-format BIM family.
The geometry in both cases is a licence rather than a technique, and there is no permissively-licensed reader to work from.
SVG#
SVGIN imports an SVG as drawing geometry; IMPORT offers it as one of its options. Paths, basic shapes and transforms come in as entities.
PDF#
Layouts plot to PDF at true paper size — see Layouts & plotting. Lineweights plot as real stroke widths in points, hatch islands are cut as holes, and curves are flattened to a fixed distance on the paper so they are smooth in the hand at any plot scale.
Draft plots to PDF and Amalgative Redline marks up PDF, so the two products hand work to each other directly.
3D formats#
Meshes exchange as OBJ and STL. STEP and IGES are B-rep interchange formats and Draft has no B-rep to write — see Three dimensions.