Custom elements

Author and import your own fixture and furniture symbols as .kalarelement files — including with the built-in online element editor.

The fixture and furniture catalogue ships with a large default set, but you can grow it yourself. A custom item is a .kalarelement file — the same format as the built-in symbols, just with its own extension so it’s recognisable in Files, AirDrop and Mail. Drop one into the right place and it appears in the picker next to the built-ins.

The online element editor for .kalarelement files
The online element editor — design a symbol visually, then export a .kalarelement file.

The online element editor

The quickest way to make one is the online element editor — a free, browser-based tool (desktop only) that runs entirely on your machine; nothing is uploaded.

  • Open an existing .kalarelement or any bundled .json symbol to start from.
  • Draw the top-down plan symbol on a live canvas with rectangles, lines, polylines, polygons, circles, ellipses, arcs and text — in the same outline / detail / hairline stroke styles the app uses.
  • Fill in the name, category, size, regions, tags and optional 3D height.
  • Export a ready-to-use .kalarelement file.

Everything you make validates against the same contract the app loads, so what exports is what the app reads.

Two tiers: app-wide and per-project

Custom elements live on disk in two places:

  • App-wide — available in every drawing. Files under Documents/Elements/.
  • Per-project — available only to drawings inside one project. Files under Documents/Projects/<project>/Elements/.

Each tier mirrors the built-in split into furniture/ and fixture/ sub-folders (the file’s own kind field is what actually decides which class it joins — the folder is just a hint). Under the app-wide root, base/ is your own growing catalogue; sibling folders are “packs” you can hand to someone else as a folder.

Documents/
├── Elements/                     ← app-wide
│   ├── base/
│   │   ├── furniture/  *.kalarelement
│   │   └── fixture/    *.kalarelement
│   └── <pack-name>/ …
└── Projects/<project>/Elements/  ← per-project
    ├── furniture/ …
    └── fixture/ …

Which one wins

When the same id exists in more than one tier:

  • Built-in beats app-wide. A custom app-wide element can’t silently shadow a built-in id — that would break drawings that already reference it. Give app-wide elements their own ids.
  • Project beats everything, but only inside that project. The same id resolves to the built-in or app-wide symbol everywhere else. That’s how a client pack can re-skin, say, a sofa for one project without touching anything else.

Adding an element

From inside the app — open the Library tab, choose the Elements filter, and tap + to import a .kalarelement file. It lands in your app-wide library and shows up straight away.

Via Files, AirDrop or Mail — drop a .kalarelement into one of the folders above. The catalogue refreshes automatically (changes deeper in the folder tree appear next time you return to the app).

To make an element project-specific, move its file into that project’s Elements/ folder with the Files app.

What an element captures

Each element records a few things:

  • kind"fixture" or "furniture".
  • id — unique across fixtures and furniture.
  • displayName, and an optional category, regions, tags.
  • size — the default footprint in metres (width × depth).
  • shapes — the top-down symbol, drawn in a normalised -0.5 … +0.5 square so (0, 0) is the item’s centre.
  • optionally height and a geometry3D build recipe for the 3D engine (otherwise the item falls back to a simple box of the right size).

The online editor creates and edits all of this for you — no hand-editing required.

Next