Skip to content
🤷

Forgive us! These docs are a work in progress. Some pages may be incomplete or describe features that aren't quite finished yet. Farkitect is in early development and we don't recommend using it for real work just yet. Feel free to explore — just be aware that things are still being built.

.farki File Format

The .farki format is Farkitect’s native interchange format — human-readable JSON for importing and exporting models.

{
"$format": "farki/1.2",
"scope": "package",
"metadata": { ... },
"package": { ... }
}
FieldRequiredDescription
$formatYesFormat version identifier. Exports emit "farki/1.2"; imports also accept the older "farki/1.1"
scopeYes"package" (single package tree) or "project" (complete project)
metadataYesFile metadata including creation timestamp and content summary
packagePackage scopeThe root package (when scope = “package”)
packagesProject scopeArray of root packages (when scope = “project”)
"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.

{
"name": "M1 Farquind Applications",
"layer": "M1",
"imports": ["M2 ArchiMate 3.2"],
"elements": [ ... ],
"diagrams": [ ... ],
"catalogs": [ ... ],
"boards": [ ... ]
}
FieldRequiredDescription
nameYesPackage name
notesNoMarkdown description
layerYes"M3", "M2", or "M1"
packageKindM2 only"standard" or "common"
isReadOnlyNotrue to prevent modification
importsNoArray of M2 package names this package uses
elementsNoArray of child elements
diagramsNoArray of diagrams
catalogsNoArray of catalogs
boardsNoArray of board (Kanban) views
{
"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"
}
}
{
"name": "Customer Systems",
"type": "Package",
"$id": "customer-systems",
"elements": [ ... ]
}
{
"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"
}
{
"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"
}
}
]
}

Every element has a $id — a unique, human-readable identifier within the file.

RuleExample
Unique within the fileNo two elements share a $id
Kebab-casefq-vessels, customer-segment
Used for cross-referencesRelationships reference source/target by $id
StableRenaming in the UI doesn’t change $id

M1 elements reference their M2 type using Package Name:Type Name:

"classifier": "M2 Business Model Canvas:Customer Segment"

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.

{
"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:

FieldOnDescription
showLabelnode / edgefalse hides the label on this diagram (default shown)
labelOffsetnode / edge{ x, y } position of a dragged label, relative to its default anchor
labelSizenode / edge{ width, height } of a manually resized label

The diagram itself may carry showStereotypes and showEdgeLabels (the master switch for relationship labels).

M2 element types include additional fields:

FieldDescription
notationVisual appearance (shape, colour, icon, compartments)
palettePalette configuration (usually {})
propertiesArray of Property definitions
constraintsRelationship constraints (validPairs)
packageRoleSub-package role (elementTypes, relationshipTypes, etc.)

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 }]
}
FieldDescription
classifierThe element type whose instances become cards (Package:Type)
groupByPropertyThe enumeration property that defines the columns, as a portable prop:{$id} slug
columnConfigColumn order / hidden / collapsed (by literal storage value; "__none__" is the “(No value)” column), limits, and width
cardConfig.propertiesWhich property values appear on cards (prop:{$id} refs)
sortState / filterStateCard ordering and name filter
cardRanksManual 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.

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 element

Inside 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.