Andre482127 downloadsBuild and edit risk bowtie diagrams in a visual editor with barriers, escalation factors, analysis stacks, and PNG export.
Build and edit risk bowtie diagrams in Obsidian with an interactive visual editor. O-Tie is for bowtie risk analysis — a visual method used in process safety, operations, and HSE work to show how a hazard can lead to a top event (loss of control), which threats can cause it, which consequences may follow, and which barriers prevent or reduce harm.
Diagrams are stored as .bowtie files in your vault and auto-save as you edit.

A bowtie for a cold-storage ammonia loss-of-primary-containment scenario.

A chained, multi-event bowtie: between-event barriers sit between two top events, so threats feed the first event and consequences flow from the second.

Per-barrier analysis stacks and escalation factors (safeguards and degradation factors).
Regenerate these images with
npm run screenshots(requiresnpx playwright install chromiumonce).
.bowtie filesThreats → Prevention Barriers → Top Event → Mitigation Barriers → Consequences
↑
Hazard
main.js, manifest.json, and styles.css from the latest release.<vault>/.obsidian/plugins/o-tie/..bowtie file opens in the editor.Open Settings → O-Tie to configure:
.bowtie files are normal vault files, but Obsidian Sync does not include custom extensions by default. On every device (desktop, phone, and tablet):
.bowtie files is under Excluded folders.After updating O-Tie on desktop, let Obsidian Sync finish, then reload Obsidian on mobile so the plugin files (main.js, styles.css, manifest.json) update.
| Command | Description |
|---|---|
| Create new bowtie | Create a new .bowtie file |
| Open bowtie file | Open the active .bowtie file in the editor |
| Export bowtie as image | Export the diagram as PNG |
.bowtie files are JSON. The hazard and top event live inside events, and barriers can carry escalation chains and an analysis stack:
{
"id": "b1f2…",
"name": "Defective steamcracker",
"events": [
{
"id": "ev1",
"label": "Loss of containment",
"hazard": "High-pressure ethylene",
"transitionBarriers": []
}
],
"threats": [
{
"id": "t1",
"label": "Tube corrosion / fatigue",
"preventionBarriers": [
{
"id": "pb1",
"label": "Mechanical integrity inspection",
"degradationChains": [],
"stack": [
{ "id": "s1", "field": "type", "label": "Active Hardware", "color": "#48c9b0" }
],
"stackCollapsed": false
}
]
}
],
"consequences": [
{ "id": "c1", "label": "Fire / explosion", "mitigationBarriers": [] }
],
"view": { "zoom": 1, "panX": 0, "panY": 0 },
"createdAt": "2026-06-12T00:00:00.000Z",
"updatedAt": "2026-06-12T00:00:00.000Z"
}
Files written by older versions (with top-level hazard/topEvent and barrier escalationFactors) are migrated automatically on open.
See examples/steamcracker.bowtie and examples/cold-storage-ammonia.bowtie.
See CHANGELOG.md.
npm install
npm run dev # watch mode
npm run build # production build
npm run lint # Obsidian plugin guidelines check
npm test # unit tests (model + layout)
npm run screenshots # regenerate README images (needs: npx playwright install chromium)
npm run examples # regenerate example .bowtie files
See CONTRIBUTING.md for setup, asset regeneration, and the release/QA checklist.
This plugin bundles html-to-image (MIT) for PNG export.
MIT — see LICENSE.