Best Markdown Editors When You Do Not Want to Code
1. Obsidian works great until sync randomly stops updating
Obsidian feels like cheating sometimes—it’s fast, local, plaintext, and can do everything short of launching your Zapier flows itself. At least until one Tuesday afternoon when I realized my laptop copy had not synced since the previous Friday. No warning. No red icon. Just silently out of date.
The issue? I’d switched wifi networks too often, and their Sync plugin gave up retrying background uploads. I only realized things were broken because the backlinks weren’t showing a meeting note I’d definitely written. After poking around Settings → Sync, it turns out there’s zero logging for failed uploads unless you open the developer console.
“Push successful.” That message stayed on screen, even when the .md file never hit their server.
Also: there’s no version conflict detection—if you edit the same note twice on two unsynced devices, only one survives. That’s fine when markdown is just you and your thoughts. Less so when it’s client data. The workaround I use now: a very dumb daily cron that diffs the Obsidian vault folder against a remote Git repo, then pings me in Slack if too many lines change too quickly.
2. Typora looks slick but breaks in real-time collaboration
I gave Typora a solid month. It’s about as distraction-free as you can get without throwing your laptop into a lake. But the second someone else wants to edit a doc with you, things fall apart.
If you sync files through Dropbox or Google Drive so someone else can edit them, Typora’s live markdown rendering will happily overwrite their changes if both of you happen to open the file within the same window. The real surprise here is that Typora doesn’t show merge conflicts—it just regenerates the whole document based on your local version and, without warning, that becomes the saved file when you hit Command+S.
Undocumented edge case
If you use the built-in table editor (which is great for tasks), editing a table after a line merge triggers a silent reformat that wipes out other user edits. You’ll only notice when the undo stack stops working.
The short-term fix is painfully analog: never co-edit. Long term, you’re better off using Typora as a single-user final draft editor, not a working notes tool.
3. IA Writer is elegant but fragile with third party file managers
IA Writer on iOS should be an ideal lightweight option for jotting markdown notes on-the-go—if you avoid the Files app. I learned this mid-flight when I saved a note to an iCloud folder I share with the team. Looked fine. But later that note was unreadable in IA Writer on macOS—just a blank window. Turns out, if you edit the same file in the Files app or in another editor (like Notes or Bear), IA Writer stores preview data in an invisible sidecar file that sometimes desyncs from the .md headline.
Things that made this worse:
- Saving to any folder that’s not explicitly “On My iPhone”
- Switching titles too fast—e.g. renaming a note before saving
- Enabling ‘Focus Mode’ while editing inside a Files-linked folder
I finally moved everything to a Git-tracked vault because I was tired of telling the team “it worked on mobile” with a straight face.
4. Logseq is amazing until metadata goes invisible in query results
Logseq is functionally incredible. It’s like Roam on espresso, with local-first files and bi-directional links that work even when your brain doesn’t. I use it daily. But the query language will fight you.
Spent 40 minutes trying to filter tasks using custom properties like :project
and :status
. The issue? Properties defined at the parent block level are not inherited by nested blocks when querying, unless you explicitly mention both levels—AND only if they were indented manually, not auto-generated through templates. You won’t find this anywhere in documentation, and the queries return valid results… just silently ignore half your data.
“task with :status doing” returns nothing, but
“task with (parent :status doing)” works IF the block was hand-indented, not inserted
It looked like everything was fine until I clicked one of the results and visibly saw missing lines that I knew had matching metadata. That moment is exactly when I stopped trusting the output of any Logseq query without visually cross-checking it for one level of indentation slop.
5. Joplin is oddly reliable except when attachments delete themselves
Joplin gives local-first privacy and end-to-end encryption, but it has this deeply weird habit where image attachments get stripped from notes if you sync too quickly between mobile and desktop. It’s something about their SQLite syncing engine combined with the delay between temporarily cached uploads and metadata pairing—it races itself.
Attachment weirdness sequence:
- Snap photo on Android in mobile app
- Immediately sync manually
- Switch to desktop and sync again within ~30 seconds
- Thumbnail shows, full file gone, broken link
The real kicker is: the degraded image link remains, so you think it’s working, but when you inspect the file path it’s blank. I found this by exporting as raw markdown and seeing a ![]()
placeholder with no hash.
One fix: disable auto-sync on mobile entirely and rely on once-daily sends from desktop. Yeah, not very automation-friendly. But at least your PDFs don’t vanish.
6. Bear feels great until tags break when exported
I used Bear almost exclusively for a year. Great UX, fast tagging, gorgeous themes, but exporting with tags is broken in two opposite ways depending on your chosen format. Export as markdown? Tags end up as inline hashtags only if they appear in the first 10 lines. Export as textbundle? Tag metadata lives separately and none of the popular markdown importers can see it.
This matters because if you’re using Bear for structured logging (e.g. notes tagged #meeting or #today or #friday-tech-standup), none of those are preserved in most bulk operations. I only caught this while trying to migrate two years of logs into Obsidian using a JSON-to-markdown converter script—my custom YAML frontmatter like ---\ndate: 2023-10-19\ntags: [meeting, ops]
had to be retroactively patched with a second pass across filenames. Tedious.
Unexpected discovery:
If you put the tags inside a codeblock, Bear skips them entirely. This accidentally saved one of my export scripts from ingesting a giant list of internal dev meta-tags (like #refactor #unblock-jenkins) that were meant as reminders, not classifiers.
7. Zettlr handles frontmatter well but YAML breaks with nested lists
For anyone running their knowledge base through static site generators or Jekyll setups, Zettlr is probably the most comfortable markdown editor that supports YAML frontmatter natively. It doesn’t hide the metadata like Bear, and it renders beautiful preview modes. But it fails miserably if you put indentation inside your YAML fields. It will display the file just fine—but any automation that parses the frontmatter will see invalid syntax if you do this:
---
title: Research Note
tags:
- ai
- machine-learning
notes:
- First point
- Sub-detail <-- breaks here
---
The preview and table of contents look normal inside Zettlr. But any script or build process will throw YAML errors. Spent half a day trying to figure out why my gtags extract wasn’t populating until I walked each file through a linter and saw that deep list nesting isn’t allowed in vanilla YAML without using complex structures like block scalars.
Fix was to flatten the list or ditch the sub-levels entirely. Still wish Zettlr gave a lint warning, or at least colored improper YAML the way Obsidian does.
8. Standard Notes is trustworthy but links are a nightmare
If you want encryption and permanence above all else, Standard Notes is the way to go. It stores markdown with strong encryption and backs up versions in the background, but what nobody tells you is that internal linking is basically unusable.
No autocomplete. No easy anchor generation. You get a raw [Link Text](url)
interface and zero assistance in building in-note navigation. This makes structured notes—anything that links across topics—a chore. It’s safe, but you’re stuck manually opening other notes in split view to copy URLs. One time I had to tag a client summary with 14 project notes, and I had a literal spreadsheet open with links I was pasting one by one.
Clear example where security compromises functionality. It’s intentionally spartan, but inverting the usual markdown flow—click, copy link, paste—they could make it three seconds faster if you’re linking within the app and not to the outside web.