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.
.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
.kalarelementor any bundled.jsonsymbol 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
.kalarelementfile.
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
sofafor 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 optionalcategory,regions,tags.size— the default footprint in metres (width×depth).shapes— the top-down symbol, drawn in a normalised-0.5 … +0.5square so(0, 0)is the item’s centre.- optionally
heightand ageometry3Dbuild 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.