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.

Creating Your First Metamodel

In this tutorial, you’ll build a custom metamodel — a “Farquind Org Map” — that defines element types for mapping people, teams, and systems at Farquind Yachts. By the end, you’ll have a working M2 with element types, relationship types, notation, and constraints, tested against real Farquind content.

Prerequisites: You’ve completed the core modelling tutorials (2.1–2.6) and are comfortable with the Explorer, Canvas, Palette, and Properties panel.

What you’ll build: An M2 metamodel with three element types (Person, Team, System), two relationship types (Belongs To, Manages), and a test M1 model mapping Farquind’s organisation.

A metamodel defines the building blocks available for modelling. Think of it as a language:

  • Element types define the kinds of things you can model (Person, Team, System)
  • Relationship types define how those things can connect (Belongs To, Manages)
  • Constraints control which connections are valid (a Person belongs to a Team, not the other way around)
  • Notation controls how each type looks on diagrams (shape, colour, icon)

Your metamodel lives at the M2 layer. Users create M1 instances of your types when they build models. For more on this, see Understanding the Four Layers.

  1. In the Explorer, right-click on the root of the tree
  2. Select New Metamodel…
  3. Enter the name Farquind Org Map
  4. Click Create

This creates the standard M2 package structure:

Farquind Org Map/
├── Element Types/
├── Relationship Types/
├── Enumerations/
└── Views/
├── Diagrams/
├── Catalogs/
└── Matrices/

Layer sub-packages group related element types. Our org map has two natural groupings.

  1. Right-click on Element Types and select New Package
  2. Name it People & Teams
  3. Create another package named Technology
Farquind Org Map/
├── Element Types/
│ ├── People & Teams/
│ └── Technology/
├── Relationship Types/
├── Enumerations/
└── Views/
  1. Right-click on People & Teams and select New Element Type
  2. Rename it to Person
  3. In the Properties panel, configure the notation:
    • Shape: rounded
    • Colour: #81D4FA (light blue)
    • Icon: use the user icon from Lucide — copy the SVG markup and paste it into the Icon field
  1. Right-click on People & Teams > New Element Type
  2. Rename it to Team
  3. Configure notation:
    • Shape: rectangle
    • Colour: #A5D6A7 (light green)
    • Icon: use the users icon from Lucide
  1. Right-click on Technology > New Element Type
  2. Rename it to System
  3. Configure notation:
    • Shape: rectangle
    • Colour: #CE93D8 (light purple)
    • Icon: use the monitor icon from Lucide

Your element types now look like this:

Element Types/
├── People & Teams/
│ ├── Person (rounded, blue, user icon)
│ └── Team (rectangle, green, users icon)
└── Technology/
└── System (rectangle, purple, monitor icon)

This connects a Person to the Team they work in.

  1. Right-click on Relationship Types > New Relationship Type
  2. Rename it to Belongs To
  3. Configure notation:
    • Line style: solid
    • Target marker: arrow
    • Colour: #DDDDDD
    • Source-to-target verb: belongs to
    • Target-to-source verb: has member

This connects a Person to the System they are responsible for.

  1. Right-click on Relationship Types > New Relationship Type
  2. Rename it to Manages
  3. Configure notation:
    • Line style: dashed
    • Target marker: arrow
    • Colour: #DDDDDD
    • Source-to-target verb: manages
    • Target-to-source verb: managed by

Without constraints, any element can connect to any other. Let’s restrict the relationships to valid combinations.

  1. Select the Belongs To relationship type
  2. In the Properties panel, find the Constraints section
  3. Add a valid pair: Source: Person, Target: Team
  1. Select the Manages relationship type
  2. Add a valid pair: Source: Person, Target: System

Now users can only draw Belongs To from a Person to a Team, and Manages from a Person to a System. Any other combination is prevented.

  1. Right-click on the project root > New Root Package
  2. Name it M1 Farquind Organisation
  3. Select the package, and in the Properties panel, add an import for Farquind Org Map

The Palette now shows your custom element types.

  1. Right-click on M1 Farquind Organisation > New Diagram

  2. Name it Executive & Systems

  3. From the Palette, drag elements to create:

    • Chase Martin (Person) — CEO
    • Theo Gibson (Person) — CTO
    • Maya Hawn (Person) — VP Engineering
    • Software & Digital (Team)
    • Engineering (Team)
    • FQ Vessels (System)
    • FQ Manufacturing (System)
  4. Draw relationships:

    • Chase Martin → Software & Digital (try to draw Belongs To — this won’t be allowed because Chase doesn’t belong to this team. Try connecting Theo Gibson instead — Belongs To works from Person to Team)
    • Theo Gibson Belongs To Software & Digital
    • Maya Hawn Belongs To Engineering
    • Theo Gibson Manages FQ Vessels
    • Maya Hawn Manages FQ Manufacturing
  5. Save with Ctrl+S / Cmd+S

Your metamodel is working. The constraints prevented invalid connections, the notation makes each type visually distinct, and the Farquind org structure is starting to take shape.

  • How to create an M2 metamodel package with the standard structure
  • How to organise element types into layers
  • How to define element types with shape, colour, and icon notation
  • How to define relationship types with line styles, markers, and verbs
  • How to add pair-wise constraints to restrict valid connections
  • How to test the metamodel by creating an M1 model and diagram