<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thorsten Marx ㋡</title>
    <description>The latest articles on DEV Community by Thorsten Marx ㋡ (@thmarx).</description>
    <link>https://dev.to/thmarx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F25903%2Fc3664aa0-af4b-4604-864a-d38d2335a1b6.jpg</url>
      <title>DEV Community: Thorsten Marx ㋡</title>
      <link>https://dev.to/thmarx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thmarx"/>
    <language>en</language>
    <item>
      <title>Why I Built a Markdown-First CMS Instead of Another Headless CMS</title>
      <dc:creator>Thorsten Marx ㋡</dc:creator>
      <pubDate>Thu, 25 Jun 2026 16:01:45 +0000</pubDate>
      <link>https://dev.to/thmarx/why-i-built-a-markdown-first-cms-instead-of-another-headless-cms-400c</link>
      <guid>https://dev.to/thmarx/why-i-built-a-markdown-first-cms-instead-of-another-headless-cms-400c</guid>
      <description>&lt;p&gt;To answer that question, I need to go back a bit. It all started in 2020, when I needed a CMS for a few personal projects. Up until that point I had mostly worked with WordPress, but it didn't feel like the right fit for what I had in mind. So I started an evaluation phase, looking at various systems.&lt;/p&gt;

&lt;p&gt;After a while I found several options that covered parts of my requirements, but none of them were quite what I wanted overall. That's when I decided to just build a CMS myself — the system I actually wanted to work with.&lt;/p&gt;

&lt;p&gt;Headless CMS were already gaining momentum back then, and I even spent some time building a headless prototype. But for the things I wanted to build, headless was clearly overkill and would have added significantly more work per project. Don't get me wrong: headless CMS are great, just not the right solution for every problem. That pushed me towards a more traditional approach.&lt;/p&gt;

&lt;p&gt;My goals for the first version were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a lean and fast system&lt;/li&gt;
&lt;li&gt;content in Markdown, so I could write using any editor I liked without having to build a UI&lt;/li&gt;
&lt;li&gt;content and configuration versioned in Git&lt;/li&gt;
&lt;li&gt;installation that's as simple as possible&lt;/li&gt;
&lt;li&gt;a setup that's attractive for developers, both for plugin and project development&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lightweight system, simple installation
&lt;/h2&gt;

&lt;p&gt;The system needed to be as simple to handle as possible. Installation should not require running through a complex wizard, and there should be no database involved.&lt;/p&gt;

&lt;p&gt;Installing CondationCMS is accordingly short:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://github.com/CondationCMS/cms-server/releases/download/v8.2.0/condation-server-linux-x64-2026.06.tar.gz
&lt;span class="nb"&gt;tar &lt;/span&gt;xfvz condation-server-linux-x64-2026.06.tar.gz
&lt;span class="nb"&gt;cd &lt;/span&gt;condation-server
./server.sh server start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The CMS is running and the test site is available at &lt;strong&gt;&lt;a href="http://localhost:2020" rel="noopener noreferrer"&gt;http://localhost:2020&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It starts in &lt;em&gt;DEV&lt;/em&gt; mode and will need some configuration before going to production, but depending on your internet speed the whole thing is up in under five minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content in Markdown, versioned in Git
&lt;/h2&gt;

&lt;p&gt;Creating content should be as straightforward as possible: create a file in your editor of choice, add front matter and Markdown content, done.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Page title&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Page content&lt;/span&gt;

Here is some content!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A big advantage here is that content is easy to create and can be managed directly in Git. And it goes beyond just the content itself: site configuration, defined image resolutions, module configuration, and project extensions all live in the same repository. Everything that belongs to the project gets versioned together, which makes deployment significantly simpler and keeps the project portable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A system that's attractive for developers
&lt;/h2&gt;

&lt;p&gt;Through the integration of the GraalJS engine, small extensions can be implemented directly inside the project as an &lt;strong&gt;Extension&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, a new shortcode can be defined and then used in Markdown:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;$hooks&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;system/hooks.mjs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// register component via js extensions&lt;/span&gt;
&lt;span class="nx"&gt;$hooks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system/content/shortCodes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;shortCodes&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;shortCodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`Hello &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Extensions are plain JavaScript files, always part of the project, and automatically included in Git. They work well for small, project-specific solutions that you don't need to share across projects.&lt;/p&gt;

&lt;p&gt;When things get more complex, there are modules — what other systems usually call plugins. Modules are written in Java and offer everything extensions do, plus access to the full Java ecosystem. If you need to integrate a third-party library or build something that should be reusable across multiple sites, a module is the right tool.&lt;/p&gt;

&lt;p&gt;Providing that same shortcode via a module looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// register component via java module&lt;/span&gt;
&lt;span class="nd"&gt;@ShortCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;hello_shortcode&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Hello "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modules are installed globally on the server and can then be activated per site.&lt;/p&gt;

&lt;p&gt;Looking back at those five goals from 2020 — lean, Markdown-based, Git-versioned, easy to install, developer-friendly — CondationCMS hits all of them. It's the system I wanted back then, and it's still the one I'd reach for today. If any of this sounds like what you've been looking for, the best way to find out is to give it a try.&lt;/p&gt;

</description>
      <category>java</category>
      <category>cms</category>
      <category>flatfile</category>
      <category>flatfilecms</category>
    </item>
    <item>
      <title>CondationCMS: A New Era for Editors, Developers &amp; Admins 🚀</title>
      <dc:creator>Thorsten Marx ㋡</dc:creator>
      <pubDate>Mon, 01 Sep 2025 08:57:30 +0000</pubDate>
      <link>https://dev.to/thmarx/condationcms-a-new-era-for-editors-developers-admins-4150</link>
      <guid>https://dev.to/thmarx/condationcms-a-new-era-for-editors-developers-admins-4150</guid>
      <description>&lt;p&gt;The Next Big Release of &lt;strong&gt;CondationCMS&lt;/strong&gt; – More Freedom for Editors, Developers, and Admins 🚀&lt;/p&gt;

&lt;p&gt;In CMS projects, many different people come together – and each role has its own needs. With the upcoming release of &lt;strong&gt;CondationCMS&lt;/strong&gt;, we’ve taken this diversity seriously. Whether you’re an &lt;strong&gt;Editor&lt;/strong&gt;, &lt;strong&gt;Developer&lt;/strong&gt;, or &lt;strong&gt;Admin&lt;/strong&gt;, you’ll get powerful new tools and features designed to make your daily work easier – and more exciting.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Editors ✍️
&lt;/h2&gt;

&lt;p&gt;Until now, content editing mostly happened directly in a plain text editor – not exactly the most user-friendly setup. The new release finally introduces the Manager App: a dedicated module built specifically for content editors.&lt;/p&gt;

&lt;p&gt;With it, you can create, organize, and manage content in a clean, structured way. And here’s the kicker: the Manager App can be enabled per project. That means you can run a secure editorial system while keeping the delivery system lightweight.&lt;/p&gt;

&lt;p&gt;👉 More clarity, fewer detours – content management has never been this smooth.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Developers 💻
&lt;/h2&gt;

&lt;p&gt;In CondationCMS, there are two main developer roles:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend/Template developers&lt;/strong&gt;, who set up projects, turn HTML templates into CMS templates, and create themes with JavaScript and CSS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module developers&lt;/strong&gt;, who dive deep into integrations and custom features.&lt;/p&gt;

&lt;p&gt;Both groups will love what’s coming in this release:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Template developers&lt;/strong&gt; can now also define the forms that editors will use later to manage content – creating a direct bridge between design and editorial workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module developers&lt;/strong&gt; get a huge productivity boost: routes, tags, and template components can now be registered with simple annotations.&lt;/p&gt;

&lt;p&gt;The result: less boilerplate, more creativity – whether you’re building themes, extensions, or full-blown modules.&lt;/p&gt;

&lt;p&gt;👉 No matter if you’re starting a project or shipping a new feature: CondationCMS takes care of the heavy lifting.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Admins 🔧
&lt;/h2&gt;

&lt;p&gt;Of course, we haven’t forgotten the people who keep everything running behind the scenes. The new release brings:&lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;extended and hardened CLI&lt;/strong&gt; that’s even more reliable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Server modules for global features&lt;/strong&gt; that should only be configured by admins – like the backup module or the git module. These are no longer tied to individual projects but managed centrally and securely.&lt;/p&gt;

&lt;p&gt;Enhanced password security, which is especially critical when using the new Manager App.&lt;/p&gt;

&lt;p&gt;👉 More security, more stability, more control – without unnecessary complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line 🌟
&lt;/h2&gt;

&lt;p&gt;This release is packed with countless hours of work – all with one goal: making &lt;strong&gt;CondationCMS easier, safer, and more enjoyable&lt;/strong&gt; for everyone involved.&lt;br&gt;
Whether you love creating content, building features, or running systems: the new CondationCMS delivers the tools you need to simplify your work – and maybe even make it a little more fun.&lt;/p&gt;

</description>
      <category>cms</category>
      <category>java</category>
      <category>flatfile</category>
      <category>flatfilecms</category>
    </item>
    <item>
      <title>CondationCMS manager application</title>
      <dc:creator>Thorsten Marx ㋡</dc:creator>
      <pubDate>Thu, 07 Aug 2025 08:28:17 +0000</pubDate>
      <link>https://dev.to/thmarx/condationcms-manager-application-1n8c</link>
      <guid>https://dev.to/thmarx/condationcms-manager-application-1n8c</guid>
      <description>&lt;h1&gt;
  
  
  CondationCMS – The New Manager
&lt;/h1&gt;

&lt;p&gt;After five months of hard work, I'm proud to present the new Manager Application, coming in the next major update of &lt;strong&gt;CondationCMS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But first, let me explain why I initially said &lt;strong&gt;CondationCMS&lt;/strong&gt; doesn’t need a manager at all—and why I’ve now built one.&lt;/p&gt;

&lt;p&gt;In the early days of &lt;strong&gt;CondationCMS&lt;/strong&gt;, every piece of content had to be created in a text editor. That worked fine—as long as the person writing the content had some technical background. It was just Markdown with a YAML header, after all.&lt;/p&gt;

&lt;p&gt;But at some point, I realized I didn’t want to be the one getting called for every small content change. So I decided to build something that would allow non-technical users to create and update content on their own.&lt;/p&gt;

&lt;p&gt;Here’s what I had in mind when starting the project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Manager is primarily for content authors&lt;/li&gt;
&lt;li&gt;Template development should stay outside the Manager&lt;/li&gt;
&lt;li&gt;Content creation should be as simple and non-technical as possible&lt;/li&gt;
&lt;li&gt;Authors should get all the tools they need—nothing more&lt;/li&gt;
&lt;li&gt;Template developers should be able to define custom forms to give users just the right amount of control&lt;/li&gt;
&lt;li&gt;Authors shouldn’t be able to break the layout—so complex editors like Elementor in the WordPress world offer too much freedom for this use case&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That was the basic idea—and here’s the result.&lt;/p&gt;

&lt;p&gt;Please note: This short clip doesn’t show every feature, but it should give you a good idea of how content editing works in &lt;strong&gt;CondationCMS&lt;/strong&gt;.&lt;br&gt;
More videos will follow soon, highlighting individual features.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/GIqrmMWgWMg"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>flatfilecms</category>
      <category>condationcms</category>
      <category>java</category>
      <category>opensource</category>
    </item>
    <item>
      <title>CondationCMS, the java based flat file cms</title>
      <dc:creator>Thorsten Marx ㋡</dc:creator>
      <pubDate>Wed, 06 Aug 2025 17:24:54 +0000</pubDate>
      <link>https://dev.to/thmarx/condationcms-the-java-based-flat-file-cms-1dh1</link>
      <guid>https://dev.to/thmarx/condationcms-the-java-based-flat-file-cms-1dh1</guid>
      <description>&lt;p&gt;A couple of years ago, I worked for one of the major CMS vendors here in Germany. That’s when I really fell in love with content management. Even after I left the company, the CMS world never quite let go of me. I kept testing new systems—especially open-source ones. There's something fascinating about seeing how different teams solve the same core challenges in entirely different ways.&lt;/p&gt;

&lt;p&gt;As a developer, my head is always full of ideas. Whether it's a web app, a software tool, or just a “what-if” concept—I always have something brewing that keeps my spare time interesting. In the early days, WordPress was my go-to platform for nearly every web project. But over time, I started looking for alternatives—systems I could shape more freely and build on in my own way.&lt;/p&gt;

&lt;p&gt;Eventually, I hit a point where even the best open-source solutions didn’t quite give me what I needed. Either they were too bulky, too rigid, or simply not fun to work with. That’s when the idea hit me: Why not build my own CMS? It was one of those long-time "dream projects" that had been sitting in the back of my mind for years. Now it was time to bring it to life.&lt;/p&gt;

&lt;p&gt;The initial goal was modest: a lightweight, flexible platform with support for plugins, themes, templates, Markdown, and multisite functionality. Nothing fancy—just enough to experiment and build a few websites. One key decision early on: no UI. I wanted everything to be editable directly in the filesystem, using whatever code editor you prefer.&lt;/p&gt;

&lt;p&gt;After a while, the system became surprisingly fast and stable. That’s when friends started asking me to build websites for their small businesses. I agreed—but only on one condition: I wanted to use my custom CMS. When they said yes, I was thrilled (and a little terrified). Suddenly, my little side project had real-world users.&lt;/p&gt;

&lt;p&gt;And that’s how CondationCMS was born—the first Java-based flat file CMS. It all started about three years ago, and the journey is still going strong.&lt;/p&gt;

</description>
      <category>cms</category>
      <category>java</category>
      <category>flatfile</category>
    </item>
  </channel>
</rss>
