Is Markdown the Best Format for Blogs?

Introduction
When building a developer blog, choosing how to store and write your content matters as much as how you display it. After experimenting with JSON, WYSIWYG editors, and headless CMSes, I found Markdown to be the cleanest, most scalable solution.
In this post, I'll explain why I use Markdown to structure my blog content, how it's stored, how it's dynamically rendered in the frontend — and why Markdown solves problems that plain JSON couldn’t.
Why I Store Blog Posts in Markdown
Here’s why Markdown is my go-to format:
1. 🧠 Simple, Human-Readable Syntax
Markdown feels natural to write. Headers, lists, code blocks, and links are quick to type, with zero friction. It's like writing an email with formatting superpowers — no UI lag, no weird HTML artifacts.
2. 🧱 Easy to Store, Version, and Track
Each post in my blog is stored as a simple JavaScript object that includes a Markdown content
field. This means I can:
- Store content in Git (like code)
- Track changes over time
- Use pull requests for content reviews
- Move fast without external tooling
3. 🔄 Dynamic and Flexible Rendering
One major pain point I faced early on was using raw JSON to structure post content. That meant manually defining paragraphs, code blocks, and titles like this:
[
{ "type": "h2", "text": "Introduction" },
{ "type": "p", "text": "This post will cover..." },
{ "type": "code", "language": "js", "text": "const x = 42;" }
]
This quickly became messy and hard to scale. Every post had a slightly different structure, and I found myself writing a custom renderer to deal with all the variations. Markdown solved that instantly.
With Markdown, I can write naturally and let a parser like marked
or remark
handle the conversion to HTML, cleanly and consistently.
4. ✍️ Developer-First Writing Experience
Since my entire blog is code-based, it makes sense that writing should happen in code too. I can write a new blog post in my code editor, commit it with Git, and deploy. No extra UIs or plugins needed.
How I Use It in My Blog
Here’s what a blog post structure looks like in my setup:
{
slug: 'mastering-async-javascript',
title: 'Mastering Asynchronous JavaScript',
date: 'October 26, 2023',
excerpt: 'A deep dive into Promises, async/await...',
content: `## Introduction\nAsynchronous programming is...`,
author: 'Sebastian Alvarez',
tags: ['JavaScript', 'Async']
}
The content
is raw Markdown. In the frontend, I convert it using marked
:
<div
className="prose dark:prose-invert max-w-none"
dangerouslySetInnerHTML={{ __html: marked(post.content) }}
/>
This gives me the freedom of Markdown plus full control of rendering.
Styling with Tailwind (Secondary but Nice)
To make the Markdown look good, I use Tailwind’s @tailwindcss/typography
plugin. It gives me a prose
class that adds consistent styles to elements like <h1>
, <p>
, <pre>
, and more.
Tailwind's utility-based customization lets me tweak the style without touching the HTML. For example:
prose-headings:text-primary
prose-a:text-accent hover:prose-a:text-primary
prose-code:font-code
prose-pre:bg-muted
This means I don’t have to worry about content authors messing up the layout — Markdown handles structure, and Tailwind handles appearance.
Conclusion
Markdown hits the sweet spot for blogging as a developer:
- Fast to write
- Easy to maintain
- Dynamic to render
- Portable across tech stacks
- Perfect for Git-based workflows
If you're building a blog or dev-focused site, consider Markdown as your foundation — and let styling be a second step, not the first problem to solve.