[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-F2cEcM9s77BAGL-nB_ZmANM3ChGVBn44FmtUV_reeYc":3,"sanity-VEwSwlvfMwX8Q1lwNCJ3oqHUGO72e6ktlMABpZtVJnQ":417},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":392},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"d53f9358-3bb2-4f69-aebe-d31d19522cd4","2026-07-10T07:40:00.000Z",{"_type":10,"current":11},"slug","building-more-than-just-an-agent-harness",null,"Building more than just an agent harness",[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":369,"dateUrl":370,"excerpt":200,"legacyBody":371,"product":12,"publishedAt":374,"slug":375,"sponsored":12,"tags":377,"title":391,"visible":369},"2023-05-25T09:36:59Z","wp-post-3649","dgl3SCUzppW3U2LvCoS5oq","blogPost","2023-07-13T14:54:30Z",[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,101,120,150,159,167,194,202,208,217,225,235,243,251,259,267,275,283,333],{"_key":61,"_type":62,"children":63,"markDefs":96,"style":100},"41d9c2e95c6e","block",[64,69,74,78,83,87,92],{"_key":65,"_type":66,"marks":67,"text":68},"41d9c2e95c6e0","span",[],"One of the things that came out of ",{"_key":70,"_type":66,"marks":71,"text":73},"41d9c2e95c6e1",[72],"006eceffb6c4","Markdown, One Year Later",{"_key":75,"_type":66,"marks":76,"text":77},"41d9c2e95c6e2",[]," was that we ",{"_key":79,"_type":66,"marks":80,"text":82},"41d9c2e95c6e3",[81],"em","really",{"_key":84,"_type":66,"marks":85,"text":86},"41d9c2e95c6e4",[]," needed to ",{"_key":88,"_type":66,"marks":89,"text":91},"41d9c2e95c6e5",[90],"strong","open source our C# server-side implementation of Markdown",{"_key":93,"_type":66,"marks":94,"text":95},"41d9c2e95c6e6",[],".",[97],{"_key":72,"_type":98,"href":99,"reference":12},"link","http:\u002F\u002Fblog.stackoverflow.com\u002F2009\u002F10\u002Fmarkdown-one-year-later\u002F","normal",{"_key":102,"_type":62,"children":103,"markDefs":117,"style":100},"659834c48eec",[104,108,113],{"_key":105,"_type":66,"marks":106,"text":107},"659834c48eec0",[],"While the client side implementation of Markdown is ",{"_key":109,"_type":66,"marks":110,"text":112},"659834c48eec1",[111],"b2588036ebe5","already open sourced",{"_key":114,"_type":66,"marks":115,"text":116},"659834c48eec2",[],", there are two sides to the Markdown story on Stack Overflow -- what appears in the Javascript preview on the client, and what is rendered in C# on the server and ultimately stored in the database. While we are trying to normalize the client and server implementation over time -- I've made significant progress in the last two weeks in doing so -- there are inevitably small differences that creep in over time. It would be nice to have more eyeballs on this process to assist.",[118],{"_key":111,"_type":98,"href":119,"reference":12},"http:\u002F\u002Fblog.stackoverflow.com\u002F2009\u002F01\u002Fwmd-editor-reverse-engineered\u002F",{"_key":121,"_type":62,"children":122,"markDefs":145,"style":100},"3087b2834283",[123,127,132,136,141],{"_key":124,"_type":66,"marks":125,"text":126},"3087b28342830",[],"Since ",{"_key":128,"_type":66,"marks":129,"text":131},"3087b28342831",[130],"d2d72033579c","the original C# library we used for Markdown",{"_key":133,"_type":66,"marks":134,"text":135},"3087b28342832",[]," was not open source, this was a problem. I mailed the author, ",{"_key":137,"_type":66,"marks":138,"text":140},"3087b28342833",[139],"8066b935afdd","Milan Negovan",{"_key":142,"_type":66,"marks":143,"text":144},"3087b28342834",[],", and he granted copyright to me.",[146,148],{"_key":130,"_type":98,"href":147,"reference":12},"http:\u002F\u002Faspnetresources.com\u002Fblog\u002Fmarkdown_announced.aspx",{"_key":139,"_type":98,"href":149,"reference":12},"http:\u002F\u002Faspnetresources.com\u002F",{"_key":151,"_type":62,"children":152,"markDefs":157,"style":158},"5a94aba6c60a",[153],{"_key":154,"_type":66,"marks":155,"text":156},"5a94aba6c60a0",[],"Hi there, guys!\n\n\n\nSure, I don’t mind at all. I’ve always wanted the community to improve and contribute to its development, but never found the proverbial bandwidth to run the project that way.\n\n\n\nCheers!",[],"blockquote",{"_key":160,"_type":62,"children":161,"markDefs":166,"style":100},"69a43db83731",[162],{"_key":163,"_type":66,"marks":164,"text":165},"69a43db837310",[],"Milan",[],{"_key":168,"_type":62,"children":169,"markDefs":191,"style":100},"5565fa5e110d",[170,174,178,182,187],{"_key":171,"_type":66,"marks":172,"text":173},"5565fa5e110d0",[],"So, ",{"_key":175,"_type":66,"marks":176,"text":177},"5565fa5e110d1",[90],"I've released our C# implementation of Markdown under a proper open source license",{"_key":179,"_type":66,"marks":180,"text":181},"5565fa5e110d2",[]," -- as ",{"_key":183,"_type":66,"marks":184,"text":186},"5565fa5e110d3",[185],"daf8bec721c8","MarkdownSharp",{"_key":188,"_type":66,"marks":189,"text":190},"5565fa5e110d4",[],"!",[192],{"_key":185,"_type":98,"href":193,"reference":12},"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002F",{"_key":195,"_type":62,"children":196,"markDefs":201,"style":100},"b8477982a930",[197],{"_key":198,"_type":66,"marks":199,"text":200},"b8477982a9300",[],"",[],{"_key":203,"_type":53,"alt":204,"asset":205,"markDefs":12},"0f52f2d99ac2","markdown-sharp-logo",{"_ref":206,"_type":207},"image-c22b6ce749160701be4249c196af037260f7e8a7-569x72-png","reference",{"_key":209,"_type":62,"children":210,"markDefs":215,"style":100},"1ba0c6c870c3",[211],{"_key":212,"_type":66,"marks":213,"text":193},"1ba0c6c870c30",[214],"d3d8323d1fdf",[216],{"_key":214,"_type":98,"href":193,"reference":12},{"_key":218,"_type":62,"children":219,"markDefs":224,"style":100},"79d644413c25",[220],{"_key":221,"_type":66,"marks":222,"text":223},"79d644413c250",[],"I've already made a few changes to properly package it as a decent open source project:",[],{"_key":226,"_type":62,"children":227,"level":232,"listItem":233,"markDefs":234,"style":100},"312f09cb3b43",[228],{"_key":229,"_type":66,"marks":230,"text":231},"312f09cb3b430",[],"included relevant links, documentation, and related files",1,"bullet",[],{"_key":236,"_type":62,"children":237,"level":232,"listItem":233,"markDefs":242,"style":100},"c2124501185f",[238],{"_key":239,"_type":66,"marks":240,"text":241},"c2124501185f0",[],"added MDTest 1.1 test suite",[],{"_key":244,"_type":62,"children":245,"level":232,"listItem":233,"markDefs":250,"style":100},"f1a3047f46f0",[246],{"_key":247,"_type":66,"marks":248,"text":249},"f1a3047f46f00",[],"added Simple test suite",[],{"_key":252,"_type":62,"children":253,"level":232,"listItem":233,"markDefs":258,"style":100},"fefd6328edc0",[254],{"_key":255,"_type":66,"marks":256,"text":257},"fefd6328edc00",[],"both NUnit and console runnable tests",[],{"_key":260,"_type":62,"children":261,"level":232,"listItem":233,"markDefs":266,"style":100},"891930283a48",[262],{"_key":263,"_type":66,"marks":264,"text":265},"891930283a480",[],"standard Benchmark with short, medium, and long Markdown samples",[],{"_key":268,"_type":62,"children":269,"level":232,"listItem":233,"markDefs":274,"style":100},"c8c5f3fb7c4e",[270],{"_key":271,"_type":66,"marks":272,"text":273},"c8c5f3fb7c4e0",[],"refactored and profiled for 2x - 5x more performance",[],{"_key":276,"_type":62,"children":277,"level":232,"listItem":233,"markDefs":282,"style":100},"83e1ec7a0864",[278],{"_key":279,"_type":66,"marks":280,"text":281},"83e1ec7a08640",[],"the Stack Overflow specific changes (such as stricter italics\u002Fbold) are configurable, so you can toggle them on and off.",[],{"_key":284,"_type":62,"children":285,"markDefs":326,"style":100},"3fa42e307a81",[286,290,295,299,304,308,313,317,322],{"_key":287,"_type":66,"marks":288,"text":289},"3fa42e307a810",[],"One nice side effect of this process is that I've been able to incorporate ",{"_key":291,"_type":66,"marks":292,"text":294},"3fa42e307a811",[293],"e7e93e92ba6b","quite a few bug fixes",{"_key":296,"_type":66,"marks":297,"text":298},"3fa42e307a812",[],", some of them fairly serious. The ",{"_key":300,"_type":66,"marks":301,"text":303},"3fa42e307a813",[302],"0f9e580040a2","failure to escape backticks",{"_key":305,"_type":66,"marks":306,"text":307},"3fa42e307a814",[]," was a big one, and there was a subtle ",{"_key":309,"_type":66,"marks":310,"text":312},"3fa42e307a815",[311],"fbb17060783e","bug involving a single character of whitespace",{"_key":314,"_type":66,"marks":315,"text":316},"3fa42e307a816",[]," that caused all ",{"_key":318,"_type":66,"marks":319,"text":321},"3fa42e307a817",[320],"code","\u003Chr\u002F>",{"_key":323,"_type":66,"marks":324,"text":325},"3fa42e307a818",[],"s to be wrapped in paragraph tags since.. well, forever.",[327,329,331],{"_key":293,"_type":98,"href":328,"reference":12},"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002Fsource\u002Flist",{"_key":302,"_type":98,"href":330,"reference":12},"http:\u002F\u002Fmeta.stackoverflow.com\u002Fquestions\u002F12694\u002Fescaping-backticks-fails",{"_key":311,"_type":98,"href":332,"reference":12},"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002Fsource\u002Fdetail?r=20",{"_key":334,"_type":62,"children":335,"markDefs":365,"style":100},"8df0382fe30b",[336,340,345,349,354,358,362],{"_key":337,"_type":66,"marks":338,"text":339},"8df0382fe30b0",[],"Anyway, ",{"_key":341,"_type":66,"marks":342,"text":344},"8df0382fe30b1",[343],"bd4648ff5cd0","take a look at the project",{"_key":346,"_type":66,"marks":347,"text":348},"8df0382fe30b2",[],", feel free to ",{"_key":350,"_type":66,"marks":351,"text":353},"8df0382fe30b3",[352],"ef16ff6e78db","browse the source",{"_key":355,"_type":66,"marks":356,"text":357},"8df0382fe30b4",[],", and ",{"_key":359,"_type":66,"marks":360,"text":361},"8df0382fe30b5",[90],"please contribute whatever you can to make it better for everyone",{"_key":363,"_type":66,"marks":364,"text":95},"8df0382fe30b6",[],[366,367],{"_key":343,"_type":98,"href":193,"reference":12},{"_key":352,"_type":98,"href":368,"reference":12},"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002Fsource\u002Fbrowse\u002F",true,"2009\u002F12\u002F28",{"code":372,"language":373},"\u003Cp>One of the things that came out of \u003Ca href=\"http:\u002F\u002Fblog.stackoverflow.com\u002F2009\u002F10\u002Fmarkdown-one-year-later\u002F\">Markdown, One Year Later\u003C\u002Fa> was that we \u003Cem>really\u003C\u002Fem> needed to \u003Cstrong>open source our C# server-side implementation of Markdown\u003C\u002Fstrong>. \u003C\u002Fp>\n\u003Cp>While the client side implementation of Markdown is \u003Ca href=\"http:\u002F\u002Fblog.stackoverflow.com\u002F2009\u002F01\u002Fwmd-editor-reverse-engineered\u002F\">already open sourced\u003C\u002Fa>, there are two sides to the Markdown story on Stack Overflow -- what appears in the Javascript preview on the client, and what is rendered in C# on the server and ultimately stored in the database. While we are trying to normalize the client and server implementation over time -- I've made significant progress in the last two weeks in doing so -- there are inevitably small differences that creep in over time. It would be nice to have more eyeballs on this process to assist.\u003C\u002Fp>\n\u003Cp>Since \u003Ca href=\"http:\u002F\u002Faspnetresources.com\u002Fblog\u002Fmarkdown_announced.aspx\">the original C# library we used for Markdown\u003C\u002Fa> was not open source, this was a problem. I mailed the author, \u003Ca href=\"http:\u002F\u002Faspnetresources.com\u002F\">Milan Negovan\u003C\u002Fa>, and he granted copyright to me.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Hi there, guys!\u003C\u002Fp>\n\u003Cp>Sure, I don&rsquo;t mind at all. I&rsquo;ve always wanted the community to improve and contribute to its development, but never found the proverbial bandwidth to run the project that way.\u003C\u002Fp>\n\u003Cp>Cheers!  \u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Milan\u003C\u002Fp>\n\u003Cp>So, \u003Cstrong>I've released our C# implementation of Markdown under a proper open source license\u003C\u002Fstrong> -- as \u003Ca href=\"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002F\">MarkdownSharp\u003C\u002Fa>!\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002F\">\u003Cimg src=\"http:\u002F\u002Fstackoverflow.blog\u002Fwp-content\u002Fuploads\u002F2017\u002F02\u002Fp54d6.png\" alt=\"markdown-sharp-logo\">\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002F\">\u003C\u002Fa>\u003Ca href=\"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002F\">http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002F\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>I've already made a few changes to properly package it as a decent open source project:\u003C\u002Fp>\n\u003Cul>\u003Cli>\n\u003Cp>included relevant links, documentation, and related files\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>added MDTest 1.1 test suite\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>added Simple test suite\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>both NUnit and console runnable tests\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>standard Benchmark with short, medium, and long Markdown samples\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>refactored and profiled for 2x - 5x more performance\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>the Stack Overflow specific changes (such as stricter italics\u002Fbold) are configurable, so you can toggle them on and off.\u003C\u002Fli>\n\u003C\u002Ful>\u003Cp>One nice side effect of this process is that I've been able to incorporate \u003Ca href=\"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002Fsource\u002Flist\">quite a few bug fixes\u003C\u002Fa>, some of them fairly serious. The \u003Ca href=\"http:\u002F\u002Fmeta.stackoverflow.com\u002Fquestions\u002F12694\u002Fescaping-backticks-fails\">failure to escape backticks\u003C\u002Fa> was a big one, and there was a subtle \u003Ca href=\"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002Fsource\u002Fdetail?r=20\">bug involving a single character of whitespace\u003C\u002Fa> that caused all \u003Ccode>&lt;hr\u002F&gt;\u003C\u002Fcode>s to be wrapped in paragraph tags since.. well, forever.\u003C\u002Fp>\n\u003Cp>Anyway, \u003Ca href=\"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002F\">take a look at the project\u003C\u002Fa>, feel free to \u003Ca href=\"http:\u002F\u002Fcode.google.com\u002Fp\u002Fmarkdownsharp\u002Fsource\u002Fbrowse\u002F\">browse the source\u003C\u002Fa>, and \u003Cstrong>please contribute whatever you can to make it better for everyone\u003C\u002Fstrong>.\u003C\u002Fp>","html","2009-12-28T12:00:00.000Z",{"current":376},"introducing-markdownsharp",[378,386],{"_createdAt":379,"_id":380,"_rev":381,"_type":382,"_updatedAt":379,"slug":383,"title":385},"2023-05-23T16:43:21Z","wp-tagcat-community","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":384},"community","Community",{"_createdAt":379,"_id":387,"_rev":381,"_type":382,"_updatedAt":379,"slug":388,"title":390},"wp-tagcat-company",{"current":389},"company","Company","Introducing MarkdownSharp",[393,399,405,411],{"_id":394,"publishedAt":395,"slug":396,"sponsored":12,"title":398},"76c9771b-34e6-4d98-8641-ecefc711f0ef","2026-07-06T15:23:34.559Z",{"_type":10,"current":397},"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":400,"publishedAt":401,"slug":402,"sponsored":12,"title":404},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":403},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":406,"publishedAt":407,"slug":408,"sponsored":12,"title":410},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":409},"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":412,"publishedAt":413,"slug":414,"sponsored":12,"title":416},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":415},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"data":418,"sourceMap":-1},{"count":419,"lastTimestamp":12},0]