[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-ZS1nhafLAAHyhXI17kUj-LqFCK7J5gnd2etkuQCztD4":3,"sanity-v-tiIDQ7EY1kPLI32bWWPftwxuAl7rsKeNdv_yjYelk":359},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":334},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"d52b334e-4233-4e7d-a10b-bfba1472c2fb","2026-07-07T07:40:00.000Z",{"_type":10,"current":11},"slug","agent-orchestration-is-so-two-years-ago",null," Agent orchestration is so two-years ago",[15,21,27,33],{"_id":16,"publishedAt":17,"slug":18,"title":20},"eb5b66eb-9410-4329-83bb-22bbff39402a","2026-04-28T13:00:00.000Z",{"_type":10,"current":19},"turn-scattered-knowledge-into-trusted-intelligence","Turning scattered knowledge into trusted intelligence: Stack Internal 2026.3",{"_id":22,"publishedAt":23,"slug":24,"title":26},"369c2401-b62e-4a37-8ff8-bf603023ecad","2026-03-02T15:03:00.988Z",{"_type":10,"current":25},"what-s-new-at-stack-overflow-march-2026","What’s new at Stack Overflow: March 2026",{"_id":28,"publishedAt":29,"slug":30,"title":32},"5e9053a4-07ea-447c-91ea-29e0b6228537","2026-02-02T15:00:00.000Z",{"_type":10,"current":31},"what-s-new-at-stack-overflow-february-2026","What’s new at Stack Overflow: February 2026",{"_id":34,"publishedAt":35,"slug":36,"title":38},"a1b538eb-a8a6-46d0-80a1-ac70ec9bb935","2026-01-05T10:00:00.000-05:00",{"_type":10,"current":37},"what-s-new-at-stack-overflow-january-2026","What’s new at Stack Overflow: January 2026",{"_createdAt":40,"_id":41,"_rev":42,"_type":43,"_updatedAt":44,"author":45,"body":59,"comments":310,"dateUrl":311,"excerpt":312,"legacyBody":313,"product":12,"publishedAt":316,"slug":317,"sponsored":12,"tags":319,"title":333,"visible":310},"2023-05-25T09:36:57Z","wp-post-3181","dgl3SCUzppW3U2LvCoRupY","blogPost","2023-07-13T14:54:15Z",[46],{"_createdAt":47,"_id":48,"_rev":49,"_type":50,"_updatedAt":51,"avatar":52,"employee":54,"name":55,"role":56,"slug":57},"2023-05-23T16:27:18Z","wp-author-114","07ZbrKPSUrjrV4wQ6fam8u","blogAuthor","2023-08-29T11:49:01Z",{"_type":53},"image","former","Jeff Atwood","Co-founder",{"current":58},"jeffatwood",[60,94,102,106,123,142,272,275,278,281,284],{"_key":61,"_type":62,"children":63,"markDefs":87,"style":93},"6c78fded8d39","block",[64,69,74,78,83],{"_key":65,"_type":66,"marks":67,"text":68},"6c78fded8d390","span",[],"I've enjoyed working with the excellent WMD \"what you see is what you mean\" ",{"_key":70,"_type":66,"marks":71,"text":73},"6c78fded8d391",[72],"1e15d3695e6a","Markdown control",{"_key":75,"_type":66,"marks":76,"text":77},"6c78fded8d392",[]," while building Stack Overflow. I've been very pleasantly surprised how easy it is to type a smattering of concise ",{"_key":79,"_type":66,"marks":80,"text":82},"6c78fded8d393",[81],"f0ec20856926","Markdown",{"_key":84,"_type":66,"marks":85,"text":86},"6c78fded8d394",[]," and generate rather nice-looking content.",[88,91],{"_key":72,"_type":89,"href":90,"reference":12},"link","http:\u002F\u002Fblog.stackoverflow.com\u002F2008\u002F05\u002Fpotential-markup-and-editing-choices\u002F",{"_key":81,"_type":89,"href":92,"reference":12},"http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMarkdown","normal",{"_key":95,"_type":62,"children":96,"markDefs":101,"style":93},"d9b847f53c13",[97],{"_key":98,"_type":66,"marks":99,"text":100},"d9b847f53c130",[],"One of Markdown's biggest advantages is its simplicity. Here's a little Markdown test post I've been using that exercises the basic formatting options:",[],{"_key":103,"_type":104,"code":105,"markDefs":12},"f611585e3a11","code","##Header##\n\n----------\n\nSome **bold** Some *italic* and [a link][1] \n\nA little code sample\n\n    \u003C\u002Fhead>\n    \u003Ctitle>Web Page Title\u003C\u002Ftitle>\n    \u003C\u002Fhead>\n\nA picture\n\n![alt text][2]\n\nA list\n\n- apples\n- oranges\n- eggs\n\nA numbered list\n\n1. a\n2. b\n3. c\n\nA little quote\n\n> It is now time for all good men to come to the aid of their country. \n\nA final paragraph.\n\n  [1]: http:\u002F\u002Fwww.google.com\n  [2]: http:\u002F\u002Fwww.google.com\u002Fintl\u002Fen_ALL\u002Fimages\u002Flogo.gif",{"_key":107,"_type":62,"children":108,"markDefs":122,"style":93},"587068f820e9",[109,113,118],{"_key":110,"_type":66,"marks":111,"text":112},"587068f820e90",[],"However, I've also noticed ",{"_key":114,"_type":66,"marks":115,"text":117},"587068f820e91",[116],"strong","there are a few edge cases where Markdown syntax can get weird and produce unexpected results",{"_key":119,"_type":66,"marks":120,"text":121},"587068f820e92",[],".",[],{"_key":124,"_type":62,"children":125,"markDefs":139,"style":93},"f7875b1a2cc3",[126,130,135],{"_key":127,"_type":66,"marks":128,"text":129},"f7875b1a2cc30",[],"I started to wonder if there were other edge conditions in advanced Markdown syntax I should know about. I figured John Fraser of ",{"_key":131,"_type":66,"marks":132,"text":134},"f7875b1a2cc31",[133],"2cf7b4d8ab22","AttackLab",{"_key":136,"_type":66,"marks":137,"text":138},"f7875b1a2cc32",[],", the author of the WMD control, would be the best person to ask. He was kind enough to respond in some detail, and granted permission for me to repost his thoughts, where he outlines three gotchas to worry about when using Markdown:",[140],{"_key":133,"_type":89,"href":141,"reference":12},"http:\u002F\u002Fattacklab.net\u002F",{"_key":143,"_type":62,"children":144,"markDefs":262,"style":271},"e425454ed07d",[145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,206,210,214,218,223,227,232,236,240,244,249,253,258],{"_key":146,"_type":66,"marks":147,"text":148},"e425454ed07d0",[116],"1) Markdown's single biggest flaw is its intra-word emphasis.",{"_key":150,"_type":66,"marks":151,"text":152},"e425454ed07d1",[],"\n\n\n\nI don't think anybody writes:\n\n\n\n",{"_key":154,"_type":66,"marks":155,"text":156},"e425454ed07d2",[104],"un*fricking*believable",{"_key":158,"_type":66,"marks":159,"text":160},"e425454ed07d3",[],"\n\n\n\noften enough to justify making it nearly impossible to talk about tokens with underscores in them:\n\n\n\n",{"_key":162,"_type":66,"marks":163,"text":164},"e425454ed07d4",[104],"some_file_name",{"_key":166,"_type":66,"marks":167,"text":168},"e425454ed07d5",[],"\n\n\n\nis interpreted as:\n\n\n\n",{"_key":170,"_type":66,"marks":171,"text":172},"e425454ed07d6",[104],"some\u003Cem>file\u003C\u002Fem>name",{"_key":174,"_type":66,"marks":175,"text":176},"e425454ed07d7",[],"\n\n\n\nIt even works across word boundaries:\n\n\n\n",{"_key":178,"_type":66,"marks":179,"text":180},"e425454ed07d8",[104],"file_one and file_two",{"_key":182,"_type":66,"marks":183,"text":184},"e425454ed07d9",[],"\n\n\n\nbecomes:\n\n\n\n",{"_key":186,"_type":66,"marks":187,"text":188},"e425454ed07d10",[104],"file\u003Cem>one and file\u003C\u002Fem> two",{"_key":190,"_type":66,"marks":191,"text":192},"e425454ed07d11",[],"\n\n\n\nWhenever you're writing tokens with underscores you have to make absolutely sure you're in a ",{"_key":194,"_type":66,"marks":195,"text":196},"e425454ed07d12",[104],"code span",{"_key":198,"_type":66,"marks":199,"text":200},"e425454ed07d13",[],". The same problem will also nail you on equations like a",{"_key":202,"_type":66,"marks":203,"text":205},"e425454ed07d14",[204],"em","b",{"_key":207,"_type":66,"marks":208,"text":209},"e425454ed07d15",[],"c, but that seems to pop up less frequently.\n\n\n\nShowdown follows the reference implementation on all this, but in WMD I do a little preprocessing to hack the idiocy away: basically I just backslash-escape any underscores or asterisks that might trigger it. It's a flagrant violation of the standard, but since it's a pre-pass that should produce identical output with any Markdown processor, I feel justified. Unfortunately my hack did screw up one edge case (which I don't have in front of me) and there isn't any way to disable it. Both those things will change in the next release.\n\n\n\n",{"_key":211,"_type":66,"marks":212,"text":213},"e425454ed07d16",[116],"2) List items only nest if they cross a magical four-character boundary",{"_key":215,"_type":66,"marks":216,"text":217},"e425454ed07d17",[],".\n\n\n\nSo:\n\n \n\nis interpreted as:\n\n \n\nWhich can be pretty surprising to humans. I've suggested an alternative algorithm a ",{"_key":219,"_type":66,"marks":220,"text":222},"e425454ed07d18",[221],"48b1d3dbfa55","couple",{"_key":224,"_type":66,"marks":225,"text":226},"e425454ed07d19",[]," of ",{"_key":228,"_type":66,"marks":229,"text":231},"e425454ed07d20",[230],"0699c61ce452","times",{"_key":233,"_type":66,"marks":234,"text":235},"e425454ed07d21",[]," but it looks like neither of the big implementors is interested. (The mailing list's HTML archive strips the whitespace from that first link; do \"View Source\" to make it make sense.)\n\n\n\n",{"_key":237,"_type":66,"marks":238,"text":239},"e425454ed07d22",[116],"3) Mixing HTML and Markdown has a couple of serious limitations.",{"_key":241,"_type":66,"marks":242,"text":243},"e425454ed07d23",[],"\n\n\n\nYou can put Markdown within inline elements:\n\n \n\nbut not within block elements:\n\n \n\nI think this is a symptom of Markdown's being designed for blog posts. You can paste in big chunks of foreign HTML verbatim without having to double-check them, but it's pretty much impossible to write whole pages in Markdown. Again Gruber's ",{"_key":245,"_type":66,"marks":246,"text":248},"e425454ed07d24",[247],"f1e6d7e2c5fe","not interested",{"_key":250,"_type":66,"marks":251,"text":252},"e425454ed07d25",[],"; dunno about Fortin.\n\n\n\nIn my mind, this last one is huge. If we allowed Markdown within block-level HTML, we could write a non-lossy version of ",{"_key":254,"_type":66,"marks":255,"text":257},"e425454ed07d26",[256],"e2177a0c0092","html2text",{"_key":259,"_type":66,"marks":260,"text":261},"e425454ed07d27",[]," and make my dream of Markdown as a transient editing format a reality.\n\n\n\nOh, also? The HTML parser is pretty broken, so what gets recognized as a complete block of HTML can sometimes be surprising. But Showdown uses an older, even-more-broken algorithm than the latest Markdown.pl beta, so I probably shouldn't point fingers.",[263,265,267,269],{"_key":221,"_type":89,"href":264,"reference":12},"http:\u002F\u002Fsix.pairlist.net\u002Fpipermail\u002Fmarkdown-discuss\u002F2007-July\u002F000690.html",{"_key":230,"_type":89,"href":266,"reference":12},"http:\u002F\u002Fsix.pairlist.net\u002Fpipermail\u002Fmarkdown-discuss\u002F2008-March\u002F001076.html",{"_key":247,"_type":89,"href":268,"reference":12},"http:\u002F\u002Fsix.pairlist.net\u002Fpipermail\u002Fmarkdown-discuss\u002F2007-March\u002F000569.html",{"_key":256,"_type":89,"href":270,"reference":12},"http:\u002F\u002Fwww.aaronsw.com\u002F2002\u002Fhtml2text\u002F","blockquote",{"_key":273,"_type":104,"code":274,"markDefs":12},"39c4893a8414","- level 1\n  - level 2\n    - level 3\n      - level 4\n        - level 5\n          - level 6",{"_key":276,"_type":104,"code":277,"markDefs":12},"27e1b5e757dc","- level 1\n    - level 2\n    - level 2\n        - level 3\n        - level 3\n            - level 4",{"_key":279,"_type":104,"code":280,"markDefs":12},"ef029449757e","\u003Cspan>This *will* work.\u003C\u002Fspan>",{"_key":282,"_type":104,"code":283,"markDefs":12},"630277b9b91c","\u003Cdiv>\n  This *won't* work.\n\u003C\u002Fdiv>",{"_key":285,"_type":62,"children":286,"markDefs":307,"style":93},"c53730a5d75a",[287,291,296,300,304],{"_key":288,"_type":66,"marks":289,"text":290},"c53730a5d75a0",[],"Remember, if you don't like Markdown, you can always fall back to HTML -- at least the whitelisted HTML. And if you're curious about how any of this works I strongly encourage you to head over to the ",{"_key":292,"_type":66,"marks":293,"text":295},"c53730a5d75a1",[294],"18ea3693c60e","WMD advanced demo sandbox",{"_key":297,"_type":66,"marks":298,"text":299},"c53730a5d75a2",[]," and ",{"_key":301,"_type":66,"marks":302,"text":303},"c53730a5d75a3",[116],"try it out for yourself",{"_key":305,"_type":66,"marks":306,"text":121},"c53730a5d75a4",[],[308],{"_key":294,"_type":89,"href":309,"reference":12},"http:\u002F\u002Fwmd-editor.com\u002Fexamples\u002Fsplitscreen",true,"2008\u002F06\u002F25","",{"code":314,"language":315},"\u003Cp>I've enjoyed working with the excellent WMD \"what you see is what you mean\"  \u003Ca href=\"http:\u002F\u002Fblog.stackoverflow.com\u002F2008\u002F05\u002Fpotential-markup-and-editing-choices\u002F\">Markdown control\u003C\u002Fa> while building Stack Overflow. I've been very pleasantly surprised how easy it is to type a smattering of concise \u003Ca href=\"http:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMarkdown\">Markdown\u003C\u002Fa> and generate rather nice-looking content.\u003C\u002Fp>\n\u003Cp>One of Markdown's biggest advantages is its simplicity. Here's a little Markdown test post I've been using that exercises the basic formatting options:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>##Header##\n\n----------\n\nSome **bold** Some *italic* and [a link][1] \n\nA little code sample\n\n    &lt;\u002Fhead&gt;\n    &lt;title&gt;Web Page Title&lt;\u002Ftitle&gt;\n    &lt;\u002Fhead&gt;\n\nA picture\n\n![alt text][2]\n\nA list\n\n- apples\n- oranges\n- eggs\n\nA numbered list\n\n1. a\n2. b\n3. c\n\nA little quote\n\n&gt; It is now time for all good men to come to the aid of their country. \n\nA final paragraph.\n\n  [1]: http:\u002F\u002Fwww.google.com\n  [2]: http:\u002F\u002Fwww.google.com\u002Fintl\u002Fen_ALL\u002Fimages\u002Flogo.gif\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>However, I've also noticed \u003Cstrong>there are a few edge cases where Markdown syntax can get weird and produce unexpected results\u003C\u002Fstrong>. \u003C\u002Fp>\n\u003Cp>I started to wonder if there were other edge conditions in advanced Markdown syntax I should know about. I figured John Fraser of \u003Ca href=\"http:\u002F\u002Fattacklab.net\u002F\">AttackLab\u003C\u002Fa>, the author of the WMD control, would be the best person to ask. He was kind enough to respond in some detail, and granted permission for me to repost his thoughts, where he outlines three gotchas to worry about when using Markdown:\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>1) Markdown's single biggest flaw is its intra-word emphasis.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>I don't think anybody writes:\u003C\u002Fp>\n\u003Cp>\u003Ccode>un*fricking*believable\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>often enough to justify making it nearly impossible to talk about tokens with underscores in them: \u003C\u002Fp>\n\u003Cp>\u003Ccode>some_file_name\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>is interpreted as:\u003C\u002Fp>\n\u003Cp>\u003Ccode>some&lt;em&gt;file&lt;\u002Fem&gt;name\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>It even works across word boundaries:\u003C\u002Fp>\n\u003Cp>\u003Ccode>file_one and file_two\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>becomes:\u003C\u002Fp>\n\u003Cp>\u003Ccode>file&lt;em&gt;one and file&lt;\u002Fem&gt; two\u003C\u002Fcode>\u003C\u002Fp>\n\u003Cp>Whenever you're writing tokens with underscores you have to make absolutely sure you're in a \u003Ccode>code span\u003C\u002Fcode>. The same problem will also nail you on equations like a\u003Cem>b\u003C\u002Fem>c, but that seems to pop up less frequently.\u003C\u002Fp>\n\u003Cp>Showdown follows the reference implementation on all this, but in WMD I do a little preprocessing to hack the idiocy away: basically I just backslash-escape any underscores or asterisks that might trigger it.  It's a flagrant violation of the standard, but since it's a pre-pass that should produce identical output with any Markdown processor, I feel justified.  Unfortunately my hack did screw up one edge case (which I don't have in front of me) and there isn't any way to disable it.  Both those things will change in the next release.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>2) List items only nest if they cross a magical four-character boundary\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>So:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>- level 1\n  - level 2\n    - level 3\n      - level 4\n        - level 5\n          - level 6\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>is interpreted as:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>- level 1\n    - level 2\n    - level 2\n        - level 3\n        - level 3\n            - level 4\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Which can be pretty surprising to humans.  I've suggested an alternative algorithm a \u003Ca href=\"http:\u002F\u002Fsix.pairlist.net\u002Fpipermail\u002Fmarkdown-discuss\u002F2007-July\u002F000690.html\">couple\u003C\u002Fa> of \u003Ca href=\"http:\u002F\u002Fsix.pairlist.net\u002Fpipermail\u002Fmarkdown-discuss\u002F2008-March\u002F001076.html\">times\u003C\u002Fa> but it looks like neither of the big implementors is interested. (The mailing list's HTML archive strips the whitespace from that first link; do \"View Source\" to make it make sense.)\u003C\u002Fp>\n\u003Cp>\u003Cstrong>3) Mixing HTML and Markdown has a couple of serious limitations.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>You can put Markdown within inline elements:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&lt;span&gt;This *will* work.&lt;\u002Fspan&gt;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>but not within block elements:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&lt;div&gt;\n  This *won't* work.\n&lt;\u002Fdiv&gt;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>I think this is a symptom of Markdown's being designed for blog posts.  You can paste in big chunks of foreign HTML verbatim without having to double-check them, but it's pretty much impossible to write whole pages in Markdown. Again Gruber's \u003Ca href=\"http:\u002F\u002Fsix.pairlist.net\u002Fpipermail\u002Fmarkdown-discuss\u002F2007-March\u002F000569.html\">not interested\u003C\u002Fa>; dunno about Fortin.\u003C\u002Fp>\n\u003Cp>In my mind, this last one is huge.  If we allowed Markdown within block-level HTML, we could write a non-lossy version of \u003Ca href=\"http:\u002F\u002Fwww.aaronsw.com\u002F2002\u002Fhtml2text\u002F\">html2text\u003C\u002Fa> and make my dream of Markdown as a transient editing format a reality.\u003C\u002Fp>\n\u003Cp>Oh, also?  The HTML parser is pretty broken, so what gets recognized as a complete block of HTML can sometimes be surprising.  But Showdown uses an older, even-more-broken algorithm than the latest Markdown.pl beta, so I probably shouldn't point fingers.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Remember, if you don't like Markdown, you can always fall back to HTML -- at least the whitelisted HTML. And if you're curious about how any of this works I strongly encourage you to head over to the \u003Ca href=\"http:\u002F\u002Fwmd-editor.com\u002Fexamples\u002Fsplitscreen\">WMD advanced demo sandbox\u003C\u002Fa> and \u003Cstrong>try it out for yourself\u003C\u002Fstrong>.\u003C\u002Fp>","html","2008-06-25T12:00:00.000Z",{"current":318},"three-markdown-gotcha",[320,328],{"_createdAt":321,"_id":322,"_rev":323,"_type":324,"_updatedAt":321,"slug":325,"title":327},"2023-05-23T16:43:21Z","wp-tagcat-company","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":326},"company","Company",{"_createdAt":321,"_id":329,"_rev":323,"_type":324,"_updatedAt":321,"slug":330,"title":332},"wp-tagcat-design",{"current":331},"design","Design","Three Markdown Gotchas",[335,341,347,353],{"_id":336,"publishedAt":337,"slug":338,"sponsored":12,"title":340},"76c9771b-34e6-4d98-8641-ecefc711f0ef","2026-07-06T15:23:34.559Z",{"_type":10,"current":339},"when-the-sensor-starts-thinking-snortml-agentic-ai-and-the-evolving-architecture-of-intrusion-detection","When the sensor starts thinking: SnortML, agentic AI, and the evolving architecture of intrusion detection",{"_id":342,"publishedAt":343,"slug":344,"sponsored":12,"title":346},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":345},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":348,"publishedAt":349,"slug":350,"sponsored":12,"title":352},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":351},"your-ai-shipped-a-backend-that-boots-that-is-the-whole-problem","Your AI shipped a backend that boots. That is the whole problem.",{"_id":354,"publishedAt":355,"slug":356,"sponsored":12,"title":358},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":357},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"data":360,"sourceMap":-1},{"count":361,"lastTimestamp":12},0]