.farki File Format
The .farki format is Farkitect’s native interchange format — human-readable JSON for importing and exporting models.
Top-Level Structure
Section titled “Top-Level Structure”{ "$format": "farki/1.2", "scope": "package", "metadata": { ... }, "package": { ... }}| Field | Required | Description |
|---|---|---|
$format | Yes | Format version identifier. Exports emit "farki/1.2"; imports also accept the older "farki/1.1" |
scope | Yes | "package" (single package tree) or "project" (complete project) |
metadata | Yes | File metadata including creation timestamp and content summary |
package | Package scope | The root package (when scope = “package”) |
packages | Project scope | Array of root packages (when scope = “project”) |
Metadata
Section titled “Metadata”"metadata": { "createdAt": "2026-03-15T00:00:00.000Z", "summary": [ { "name": "M2 ArchiMate 3.2", "layer": "M2", "elementCount": 61 } ]}Project-scope files may also include name, description, and sourceProject.
Package
Section titled “Package”{ "name": "M1 Farquind Applications", "layer": "M1", "imports": ["M2 ArchiMate 3.2"], "elements": [ ... ], "diagrams": [ ... ], "catalogs": [ ... ], "boards": [ ... ]}| Field | Required | Description |
|---|---|---|
name | Yes | Package name |
notes | No | Markdown description |
layer | Yes | "M3", "M2", or "M1" |
packageKind | M2 only | "standard" or "common" |
isReadOnly | No | true to prevent modification |
imports | No | Array of M2 package names this package uses |
elements | No | Array of child elements |
diagrams | No | Array of diagrams |
catalogs | No | Array of catalogs |
boards | No | Array of board (Kanban) views |
Elements
Section titled “Elements”Class (Element Type or Instance)
Section titled “Class (Element Type or Instance)”{ "name": "FQ Vessels", "type": "Class", "$id": "fq-vessels", "classifier": "M2 ArchiMate 3.2:Application Component", "notes": "Fleet telemetry and diagnostics platform.", "propertyValues": { "Lifecycle Status": "active" }}Package (Nested)
Section titled “Package (Nested)”{ "name": "Customer Systems", "type": "Package", "$id": "customer-systems", "elements": [ ... ]}Relationship
Section titled “Relationship”{ "name": "FQ Orders serves Fleet Dashboard", "type": "Relationship", "source": "fq-orders", "target": "fleet-dashboard", "$id": "fq-orders-serves-fleet-dashboard", "classifier": "M2 ArchiMate 3.2:Serving"}Owned (Nested) Elements
Section titled “Owned (Nested) Elements”{ "name": "Entity", "type": "Class", "$id": "entity", "nestedElements": [ { "name": "customerId", "type": "Class", "$id": "customer-id", "classifier": "M2 Logical Data Model:Attribute", "propertyValues": { "Data Type": "integer", "Is Primary Key": "true" } } ]}The $id Convention
Section titled “The $id Convention”Every element has a $id — a unique, human-readable identifier within the file.
| Rule | Example |
|---|---|
| Unique within the file | No two elements share a $id |
| Kebab-case | fq-vessels, customer-segment |
| Used for cross-references | Relationships reference source/target by $id |
| Stable | Renaming in the UI doesn’t change $id |
Classifier References
Section titled “Classifier References”M1 elements reference their M2 type using Package Name:Type Name:
"classifier": "M2 Business Model Canvas:Customer Segment"Property Values
Section titled “Property Values”Flat object mapping property names to values:
"propertyValues": { "Lifecycle Status": "active", "Start Date": "2025-06-15", "Is Required": "true"}Enumeration values use the machine value, not the display name.
Diagrams
Section titled “Diagrams”{ "name": "Application Overview", "notation": "M2 ArchiMate 3.2", "viewport": { "panX": 0, "panY": 0, "zoom": 1.0 }, "nodes": [ { "element": "fq-vessels", "x": 100, "y": 200, "width": 160, "height": 80 } ], "edges": [ { "source": "fq-orders-node", "target": "fq-vessels-node", "relationship": "orders-serves-vessels" } ]}Diagram nodes and edges may also carry per-diagram label overrides, emitted only when set:
| Field | On | Description |
|---|---|---|
showLabel | node / edge | false hides the label on this diagram (default shown) |
labelOffset | node / edge | { x, y } position of a dragged label, relative to its default anchor |
labelSize | node / edge | { width, height } of a manually resized label |
The diagram itself may carry showStereotypes and showEdgeLabels (the master switch for relationship labels).
M2-Specific Fields
Section titled “M2-Specific Fields”M2 element types include additional fields:
| Field | Description |
|---|---|
notation | Visual appearance (shape, colour, icon, compartments) |
palette | Palette configuration (usually {}) |
properties | Array of Property definitions |
constraints | Relationship constraints (validPairs) |
packageRole | Sub-package role (elementTypes, relationshipTypes, etc.) |
Boards
Section titled “Boards”A board is a Kanban view of the instances of one element type, grouped into columns by an enumeration property.
{ "name": "Application Component Board", "classifier": "M2 ArchiMate 3.2:Application Component", "groupByProperty": "prop:lifecycle-status", "columnConfig": { "order": ["__none__", "active", "retiring"], "hidden": [], "limits": [{ "key": "active", "max": 8 }] }, "cardConfig": { "properties": ["prop:owner"] }, "sortState": [{ "id": "name", "desc": false }], "cardRanks": [{ "element": "fq-vessels", "rank": 1000 }]}| Field | Description |
|---|---|
classifier | The element type whose instances become cards (Package:Type) |
groupByProperty | The enumeration property that defines the columns, as a portable prop:{$id} slug |
columnConfig | Column order / hidden / collapsed (by literal storage value; "__none__" is the “(No value)” column), limits, and width |
cardConfig.properties | Which property values appear on cards (prop:{$id} refs) |
sortState / filterState | Card ordering and name filter |
cardRanks | Manual card order ({$id} refs) when the board uses Manual sort |
Enum literals and properties are stored as portable slugs so a board survives round-tripping through .farki even if display names change. A board whose groupByProperty can’t be resolved on import is dropped with a warning.
.farki.zip Archives
Section titled “.farki.zip Archives”When a package contains attachments (images or files) and you export with attachments, Farkitect writes a .farki.zip archive instead of a plain .farki:
mypackage.farki.zip├── model.farki # the JSON model (as above)└── files/ └── <element-$id>/<fileName> # one folder per attachment-carrying elementInside model.farki, each attachment-carrying element gains an attachmentFile descriptor (M1 only):
"attachmentFile": { "fileName": "architecture.xlsx", "mimeType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "size": 245760}On import, a .farki.zip is auto-detected and its payloads are restored to the matching elements. A plain .farki (the “Model only” export) omits the payloads; the descriptor is stripped and the model still loads, just without the files.