Drawing Index
The drawing index is a folder holding one JSON file for each drawing you save, saying what the drawing is: where it is, its units and when it was saved, what it is (its classification) and its notes, its labelled variables and their values, its size, its elements counted and measured by layer, and what the save extensions gave back. With it, your drawings can be searched, listed or loaded into a database without opening them.
Turn it on in Preferences (Keep an index of saved drawings) and choose the folder: a shared folder works, so a team can keep one index. It is off unless you turn it on.
When it is written
Each time a drawing is saved (File › Save, Save As…), after the file is written and the save extensions have run, the drawing is described and its entry is written to the index folder, away from the window, so saving isn't held up. Saving it again replaces its entry. An entry that can't be written (the folder is gone, say) is said in the Interactive window; the drawing is saved anyway.
Each drawing's file is named after it, then an id worked out from its full path: Shipper-3f2a9c0d1e4b5a67.json. The
same drawing always gets the same file; two drawings of the same name in different folders get different ones. A
drawing that is moved or renamed gets a new entry; the old one stays until you delete it.
What a file holds
A JSON object, with the same fields for every drawing (a field with nothing to say is null, or an empty list or
object), so the files can be loaded into one table:
| Field | Type | Meaning |
|---|---|---|
schema |
number | Which set of fields this is: 1. It goes up if they change in a way a reader would notice. |
id |
text | The drawing's id: 16 hex digits worked out from its full path (the end of the file's name). The same for the same path each time: a key for a database. |
path |
text | The drawing file's full path. |
folder |
text | The folder it is in. |
fileName |
text | Its name with its extension: "Shipper.piq". |
name |
text | Its name without: "Shipper". |
fileSize |
number | The file's size in bytes. |
saved |
text | When it was saved, in UTC: "2026-11-03T14:05:00Z". |
user |
text | Who saved it (the computer's user name). |
machine |
text | The computer it was saved on. |
product |
text | The app that saved it: "ParametrIQ CAD". |
productVersion |
text | Its version. |
format |
number | The drawing file format version it was saved in. |
units |
text | "mm" or "in": the units of every size and length below. |
classification |
object | What it is, as Drawing Properties sets it: category, style, product, tags (a list), description and any other field, each text ("" when not given). |
notes |
object | The drawing's notes, by name: {"Customer": "Acme"}. |
variables |
list | Its labelled variables (those it asks for when it is run), in order, each {name, label, value}: value a number, text, true or false, a position {x, y}, or null if it can't be worked out. |
size |
object | The drawing's extent: width, height, and its corners minX, minY, maxX, maxY; null if nothing is drawn. |
pages |
list | Its pages, each {name, elements} (how many elements are on it). |
elements |
number | How many elements the page worked on has (those exported). |
length |
number | Their total length. |
layers |
list | The layers with elements on them, each {layer, name, cutting, count, length, area}: its number and name, whether it is cut (Cut, Partial Cut, Perforation …), how many elements, their total length, and the area the closed ones enclose. |
kinds |
object | How many elements of each kind: {"LINE": 4, "ARC": 2}. |
saveExtensions |
list | What each save extension did when it was saved, each {name, file, record, error}: its name, its file, what it gave back (as JSON, or null), and why it went wrong (null if it didn't). |
For example:
{
"schema": 1,
"id": "3f2a9c0d1e4b5a67",
"path": "D:\\Drawings\\Shipper.piq",
"folder": "D:\\Drawings",
"fileName": "Shipper.piq",
"name": "Shipper",
"fileSize": 4210,
"saved": "2026-11-03T14:05:00Z",
"user": "ana",
"machine": "STUDIO-2",
"product": "ParametrIQ CAD",
"productVersion": "3.2",
"format": 1,
"units": "mm",
"classification": { "category": "Box", "style": "FEFCO 0201", "product": "", "tags": ["shipper"], "description": "" },
"notes": { "Customer": "Acme" },
"variables": [
{ "name": "L", "label": "Length", "value": 300 },
{ "name": "W", "label": "Width", "value": 200 }
],
"size": { "width": 1030, "height": 560, "minX": 0, "minY": 0, "maxX": 1030, "maxY": 560 },
"pages": [ { "name": "Page 1", "elements": 38 } ],
"elements": 38,
"length": 9120.5,
"layers": [
{ "layer": 0, "name": "Cut", "cutting": true, "count": 22, "length": 6410.2, "area": 0 },
{ "layer": 1, "name": "Crease", "cutting": false, "count": 16, "length": 2710.3, "area": 0 }
],
"kinds": { "LINE": 36, "ARC": 2 },
"saveExtensions": [
{ "name": "Order", "file": "orders.js", "record": { "order": 4711 }, "error": null }
]
}
Loading it into a database
Each file is one row: id is its key, and the other plain fields (path, name, saved, units, format,
fileSize …) are columns. The lists (variables, layers, pages, saveExtensions) fit tables of their own,
keyed by the drawing's id and the variable's name, the layer's layer, and so on. Most databases read JSON files
directly; a script that loads the folder's newest files every so often keeps the database up to date.
To write to a database yourself as each drawing is saved, use a save extension: what it
returns is kept in saveExtensions here too.
See also: Preferences, Saving, Drawing Properties.