haderlka45 downloadsWeigh pro and contra arguments in a Markdown table. Rendered as editable cards with weights and a result bar.
Weigh the pros and cons of a decision right inside your notes. You write a plain Markdown table of arguments with weights. Obsidian shows it as editable cards and a bar that shows which side wins.
Source code: github.com/haderlka/obsidian-procon-decisions. Issues and ideas are welcome.

![]() |
![]() |
| Colored design, dark theme | Plain design, dots as weight symbol |

On a phone: columns stack and the controls are always visible
Run Insert pro/con decision from the command palette, or type a procon code block yourself:
```procon
| Side | Argument | Weight |
| ---- | ------------------------- | ------ |
| pro | Much better job market | 5 |
| pro | Friends already live there | 3 |
| con | Rent is getting expensive | 4 |
| con | Far away from family | 3 |
```
You can put a decision anywhere in a note, between normal text, and have as many as you like.
| Column | What goes in it |
|---|---|
| Side | pro, +, yes, for for arguments in favour. con, contra, -, no, against for arguments against. Case doesn't matter. |
| Argument | Any text. Write a literal pipe as |. |
| Weight | A number (1–10), or a run of symbols such as ★★★ or 🔥🔥. Empty means 1. |
# My question is kept in the file but not displayed.| Action | How |
|---|---|
| Add an argument | Type into Add a pro… / Add a con… and press Enter. The field stays focused, so you can keep typing. End the text with !4 to set the weight at the same time. |
| Change the text | Click the text, edit it, then press Enter (or tap Done). Esc cancels. Clearing the text removes the argument. |
| Change the weight | Click a symbol. With the keyboard, focus the weight and use the arrow keys or 1–9. |
| Move to the other side | Use the ⇄ button. |
| Reorder or move | Drag the ⋮⋮ grip, with a mouse or a finger. |
| Delete | Use the × button. |
On desktop the buttons appear when you hover over a card. On touch devices they're always visible.
Every edit rewrites the table inside your note, so the Markdown always matches what you see. Undo (Ctrl/Cmd+Z in the editor) works as usual.
| Setting | Options |
|---|---|
| Design | Colored (default) or Plain. |
| Weight symbol | Stars, hearts, dots, diamonds, flames or bolts. |
| Maximum weight | 3–10 symbols per argument (default 5). Higher weights in the file are capped to this value. |
Once the plugin is listed in the community plugin directory:
Use this before the plugin is listed, or to install a specific version.
main.jsmanifest.jsonstyles.css.obsidian/plugins/. Create a folder named procon-decisions inside it. The folder name must match the plugin id.<your vault>/.obsidian/plugins/procon-decisions/
├── main.js
├── manifest.json
└── styles.css
Updating a manual install: download the three files from the newer release, replace the old ones, then turn the plugin off and on again (or restart Obsidian).
Phones and tablets: Obsidian mobile can't easily reach the hidden .obsidian folder. The simplest way is to install on desktop and let your sync carry the plugin over. With Obsidian Sync, turn on Installed community plugins and Active community plugin list under Settings → Sync. iCloud, Syncthing and similar tools sync the folder automatically. Then enable the plugin on the phone.
This plugin makes no network requests and collects no data. It only reads and writes the procon code blocks in the notes you edit.
npm ci # install dependencies
npm run dev # rebuild main.js on every change
npm run build # type-check and create a production build
npm run lint # Obsidian's official review rules (eslint-plugin-obsidianmd)
npm test # unit tests for the parser/serializer (Node ≥ 22.18)
npm run screenshots # regenerate the README images in docs/ (needs Chrome or Edge)
To try changes, link or copy the project folder into <vault>/.obsidian/plugins/procon-decisions/. Reload the plugin after each build.
npm version patch (or minor / major). This updates package.json, manifest.json and versions.json, and creates a git tag.git push --follow-tags.Tags have no v prefix: 1.0.1, not v1.0.1.
If this plugin helps you make better decisions, you can support its development: