<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>PYCORA PRO Blog</title>
        <link>https://docspycorapro.axcora.com/blog</link>
        <description>PYCORA PRO Blog</description>
        <lastBuildDate>Tue, 20 Oct 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Migrate from WordPress to Pycora Pro — Zero Hosting Cost]]></title>
            <link>https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora</link>
            <guid>https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora</guid>
            <pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[How to migrate your WordPress site to Pycora Pro. Keep your content, ditch the database, and host for free on Cloudflare Pages.]]></description>
            <content:encoded><![CDATA[<p>WordPress powers 43% of the web. But it also brings:</p>
<ul>
<li class="">Monthly hosting costs</li>
<li class="">Security updates</li>
<li class="">Plugin bloat</li>
<li class="">Slow page loads</li>
<li class="">Database maintenance</li>
</ul>
<p><strong>Pycora Pro</strong> converts your WordPress site to static HTML — no database, no PHP, no monthly fees.</p>
<p>Here's how.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-migrate">Why Migrate<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#why-migrate" class="hash-link" aria-label="Direct link to Why Migrate" title="Direct link to Why Migrate" translate="no">​</a></h2>
<table><thead><tr><th></th><th>WordPress</th><th>Pycora Pro</th></tr></thead><tbody><tr><td><strong>Hosting</strong></td><td>$10–30/month</td><td>$0</td></tr><tr><td><strong>Database</strong></td><td>Required</td><td>None</td></tr><tr><td><strong>Security</strong></td><td>Patches monthly</td><td>Zero attack surface</td></tr><tr><td><strong>Speed</strong></td><td>1–3s load</td><td>&lt; 500ms</td></tr><tr><td><strong>Maintenance</strong></td><td>Weekly</td><td>None</td></tr><tr><td><strong>Backup</strong></td><td>Plugin required</td><td>Git</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1--export-wordpress-content">Step 1 — Export WordPress Content<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-1--export-wordpress-content" class="hash-link" aria-label="Direct link to Step 1 — Export WordPress Content" title="Direct link to Step 1 — Export WordPress Content" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="option-a-wordpress-export-tool">Option A: WordPress Export Tool<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#option-a-wordpress-export-tool" class="hash-link" aria-label="Direct link to Option A: WordPress Export Tool" title="Direct link to Option A: WordPress Export Tool" translate="no">​</a></h3>
<ol>
<li class="">Log in to WordPress admin</li>
<li class="">Go to <strong>Tools</strong> → <strong>Export</strong></li>
<li class="">Select <strong>All content</strong></li>
<li class="">Click <strong>Download Export File</strong></li>
</ol>
<p>You'll get an <code>.xml</code> file.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="option-b-wp-cli">Option B: WP-CLI<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#option-b-wp-cli" class="hash-link" aria-label="Direct link to Option B: WP-CLI" title="Direct link to Option B: WP-CLI" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">wp </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--dir</span><span class="token operator">=</span><span class="token plain">./export</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2--convert-to-markdown">Step 2 — Convert to Markdown<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-2--convert-to-markdown" class="hash-link" aria-label="Direct link to Step 2 — Convert to Markdown" title="Direct link to Step 2 — Convert to Markdown" translate="no">​</a></h2>
<p>Use the <a href="https://github.com/lonekorean/wordpress-export-to-markdown" target="_blank" rel="noopener noreferrer" class="">wordpress-export-to-markdown</a> tool:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">npx wordpress-export-to-markdown</span><br></div></code></pre></div></div>
<p>Follow the prompts. You'll get Markdown files in <code>output/</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3--organize-content">Step 3 — Organize Content<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-3--organize-content" class="hash-link" aria-label="Direct link to Step 3 — Organize Content" title="Direct link to Step 3 — Organize Content" translate="no">​</a></h2>
<p>Move posts to Pycora's content structure:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">mkdir</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-p</span><span class="token plain"> content/posts</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">mv</span><span class="token plain"> output/posts/*.md content/posts/</span><br></div></code></pre></div></div>
<p>Each file should look like:</p>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token front-matter-block punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token front-matter-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token front-matter-block"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">title</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml string" style="color:rgb(255, 121, 198)">"My WordPress Post"</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">date</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml datetime number">2024-01-20</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">tags</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token front-matter-block front-matter yaml language-yaml">wordpress</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> migration</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token front-matter-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token front-matter-block"></span><span class="token front-matter-block punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">#</span><span class="token title important"> My WordPress Post</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Content here...</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4--convert-images">Step 4 — Convert Images<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-4--convert-images" class="hash-link" aria-label="Direct link to Step 4 — Convert Images" title="Direct link to Step 4 — Convert Images" translate="no">​</a></h2>
<p>Download WordPress images:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># From your WordPress uploads folder</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">wget</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-r</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-np</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-nH</span><span class="token plain"> --cut-dirs</span><span class="token operator">=</span><span class="token number">3</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-R</span><span class="token plain"> index.html https://yoursite.com/wp-content/uploads/</span><br></div></code></pre></div></div>
<p>Move to Pycora:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">mv</span><span class="token plain"> uploads/* static/img/</span><br></div></code></pre></div></div>
<p>Update image paths in Markdown:</p>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token url operator">!</span><span class="token url">[</span><span class="token url content">Old</span><span class="token url">](</span><span class="token url">https://yoursite.com/wp-content/uploads/2024/01/image.jpg</span><span class="token url">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">→</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token url operator">!</span><span class="token url">[</span><span class="token url content">Old</span><span class="token url">](</span><span class="token url">/img/2024/01/image.jpg</span><span class="token url">)</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5--rebuild-permalinks">Step 5 — Rebuild Permalinks<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-5--rebuild-permalinks" class="hash-link" aria-label="Direct link to Step 5 — Rebuild Permalinks" title="Direct link to Step 5 — Rebuild Permalinks" translate="no">​</a></h2>
<p>WordPress URLs are usually:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">/blog/2024/01/20/my-post/</span><br></div></code></pre></div></div>
<p>Pycora Pro URLs are:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">/posts/my-post/</span><br></div></code></pre></div></div>
<p>To keep old URLs working, add redirects in <code>static/_redirects</code>:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">/blog/*    /posts/:splat    301</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-6--choose-a-theme">Step 6 — Choose a Theme<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-6--choose-a-theme" class="hash-link" aria-label="Direct link to Step 6 — Choose a Theme" title="Direct link to Step 6 — Choose a Theme" translate="no">​</a></h2>
<p>Pycora Pro ships with a <strong>bento design system</strong>. Pick a layout:</p>
<ul>
<li class=""><strong>Blog</strong> — for content sites</li>
<li class=""><strong>Portfolio</strong> — for creative work</li>
<li class=""><strong>Company profile</strong> — for businesses</li>
</ul>
<p>Edit <code>content/index.md</code> and <code>_data/site.yaml</code> to match your brand.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-7--test-everything">Step 7 — Test Everything<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-7--test-everything" class="hash-link" aria-label="Direct link to Step 7 — Test Everything" title="Direct link to Step 7 — Test Everything" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">python ssg.py</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">python dev.py</span><br></div></code></pre></div></div>
<p>Check:</p>
<ul>
<li class="">All posts render</li>
<li class="">Images load</li>
<li class="">Links work</li>
<li class="">Tags are correct</li>
<li class="">Feeds are generated</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-8--deploy">Step 8 — Deploy<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-8--deploy" class="hash-link" aria-label="Direct link to Step 8 — Deploy" title="Direct link to Step 8 — Deploy" translate="no">​</a></h2>
<p>Push to GitHub, then connect to Cloudflare Pages:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> commit </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-m</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"migrated from WordPress"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> push</span><br></div></code></pre></div></div>
<p>See our <a class="" href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare">Cloudflare Pages guide</a> for details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-9--set-up-redirects">Step 9 — Set Up Redirects<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-9--set-up-redirects" class="hash-link" aria-label="Direct link to Step 9 — Set Up Redirects" title="Direct link to Step 9 — Set Up Redirects" translate="no">​</a></h2>
<p>To keep SEO, redirect old WordPress URLs to new Pycora URLs:</p>
<p><strong><code>static/_redirects</code>:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">/wp-content/uploads/*    /img/:splat    301</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">/category/*              /tags/:splat   301</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">/feed/                   /feed.xml       301</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-10--submit-new-sitemap">Step 10 — Submit New Sitemap<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#step-10--submit-new-sitemap" class="hash-link" aria-label="Direct link to Step 10 — Submit New Sitemap" title="Direct link to Step 10 — Submit New Sitemap" translate="no">​</a></h2>
<ol>
<li class="">Generate <code>sitemap.xml</code> automatically</li>
<li class="">Submit to <a href="https://search.google.com/search-console" target="_blank" rel="noopener noreferrer" class="">Google Search Console</a></li>
<li class="">Submit to <a href="https://www.bing.com/webmasters" target="_blank" rel="noopener noreferrer" class="">Bing Webmaster Tools</a></li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-about-wordpress-features">What About WordPress Features?<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#what-about-wordpress-features" class="hash-link" aria-label="Direct link to What About WordPress Features?" title="Direct link to What About WordPress Features?" translate="no">​</a></h2>
<table><thead><tr><th>WordPress Feature</th><th>Pycora Pro Replacement</th></tr></thead><tbody><tr><td>Posts</td><td>Markdown in <code>content/posts/</code></td></tr><tr><td>Pages</td><td>Markdown in <code>content/</code></td></tr><tr><td>Categories</td><td>Tags</td></tr><tr><td>Comments</td><td>Disqus or Utterances</td></tr><tr><td>Search</td><td>Pagefind (client-side)</td></tr><tr><td>Contact form</td><td>Formspree</td></tr><tr><td>SEO</td><td>Built-in + JSON-LD</td></tr><tr><td>Analytics</td><td>Plausible or Fathom</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cost-savings">Cost Savings<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#cost-savings" class="hash-link" aria-label="Direct link to Cost Savings" title="Direct link to Cost Savings" translate="no">​</a></h2>
<table><thead><tr><th></th><th>WordPress</th><th>Pycora Pro</th></tr></thead><tbody><tr><td><strong>Hosting (1 year)</strong></td><td>$180</td><td>$0</td></tr><tr><td><strong>Plugins</strong></td><td>$200</td><td>$0</td></tr><tr><td><strong>Theme</strong></td><td>$60</td><td>$145 (one-time)</td></tr><tr><td><strong>Total first year</strong></td><td><strong>$440</strong></td><td><strong>$145</strong></td></tr><tr><td><strong>Total year 2+</strong></td><td><strong>$440</strong></td><td><strong>$0</strong></td></tr></tbody></table>
<p><strong>Pycora Pro saves you $295+ in the first year, $440+ every year after.</strong></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-pycora-pro">Get Pycora Pro<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#get-pycora-pro" class="hash-link" aria-label="Direct link to Get Pycora Pro" title="Direct link to Get Pycora Pro" translate="no">​</a></h2>
<p>Ready to ditch WordPress? Get Pycora Pro on <a href="https://creativitaz.gumroad.com/l/pycora-pro" target="_blank" rel="noopener noreferrer" class="">Gumroad</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="next-steps">Next Steps<a href="https://docspycorapro.axcora.com/blog/migrate-wordpress-to-pycora#next-steps" class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docspycorapro.axcora.com/docs/intro">Introduction</a> — what is Pycora Pro</li>
<li class=""><a class="" href="https://docspycorapro.axcora.com/docs/user-guide/cloud/deploy">Deployment</a> — deploy anywhere</li>
<li class=""><a class="" href="https://docspycorapro.axcora.com/docs/user-guide/content-creation/">Content Creation</a> — edit via CMS</li>
</ul>]]></content:encoded>
            <category>Migration</category>
            <category>Tutorial</category>
            <category>Python</category>
        </item>
        <item>
            <title><![CDATA[Pycora vs Astro — Python vs JavaScript for Modern Static Sites]]></title>
            <link>https://docspycorapro.axcora.com/blog/pycora-vs-astro</link>
            <guid>https://docspycorapro.axcora.com/blog/pycora-vs-astro</guid>
            <pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Compare Pycora (Python SSG) with Astro (JavaScript SSG) — build speed, client JS, dependencies, and developer experience.]]></description>
            <content:encoded><![CDATA[<p>Astro is one of the most popular static site generators in 2026. It's fast, flexible, and has a huge ecosystem.</p>
<p><strong>Pycora Pro</strong> takes a different approach: pure Python, zero client JS, zero build step.</p>
<p>Here's how they compare.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-core-difference">The Core Difference<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#the-core-difference" class="hash-link" aria-label="Direct link to The Core Difference" title="Direct link to The Core Difference" translate="no">​</a></h2>
<table><thead><tr><th></th><th>Astro</th><th>Pycora Pro</th></tr></thead><tbody><tr><td><strong>Language</strong></td><td>JavaScript / TypeScript</td><td>Python</td></tr><tr><td><strong>Runtime</strong></td><td>Node.js</td><td>Python 3.8+</td></tr><tr><td><strong>Build</strong></td><td>Vite + esbuild</td><td>Plain Python</td></tr><tr><td><strong>Template engine</strong></td><td>Astro / JSX</td><td>Jinja2 + PAX</td></tr><tr><td><strong>Client JS</strong></td><td>Opt-in islands</td><td>0 KB by default</td></tr><tr><td><strong>Dependencies</strong></td><td>npm (many)</td><td>pip (4)</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="build-speed">Build Speed<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#build-speed" class="hash-link" aria-label="Direct link to Build Speed" title="Direct link to Build Speed" translate="no">​</a></h2>
<table><thead><tr><th></th><th>Astro</th><th>Pycora Pro</th></tr></thead><tbody><tr><td><strong>Cold build (40 pages)</strong></td><td>3.8s</td><td>0.87s</td></tr><tr><td><strong>Incremental</strong></td><td>0.9s</td><td>0.4s</td></tr><tr><td><strong>Memory</strong></td><td>220 MB</td><td>65 MB</td></tr></tbody></table>
<p>Pycora is <strong>4x faster</strong> on the same content.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="client-javascript">Client JavaScript<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#client-javascript" class="hash-link" aria-label="Direct link to Client JavaScript" title="Direct link to Client JavaScript" translate="no">​</a></h2>
<p><strong>Astro</strong> ships ~15 KB of client JS by default (for hydration, view transitions, etc.).</p>
<p><strong>Pycora Pro</strong> ships <strong>0 KB</strong>. All interactivity is pure HTML/CSS or opt-in vanilla JS.</p>
<p>For sites that don't need client-side interactivity, this is a huge win for performance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dependencies">Dependencies<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#dependencies" class="hash-link" aria-label="Direct link to Dependencies" title="Direct link to Dependencies" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="astro">Astro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#astro" class="hash-link" aria-label="Direct link to Astro" title="Direct link to Astro" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># ~500 packages in node_modules</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pycora-pro">Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#pycora-pro" class="hash-link" aria-label="Direct link to Pycora Pro" title="Direct link to Pycora Pro" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">pip </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> jinja2 markdown pyyaml watchdog</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 4 packages</span><br></div></code></pre></div></div>
<p><strong>Astro has a build step. Pycora doesn't.</strong></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="templating">Templating<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#templating" class="hash-link" aria-label="Direct link to Templating" title="Direct link to Templating" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="astro-1">Astro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#astro-1" class="hash-link" aria-label="Direct link to Astro" title="Direct link to Astro" translate="no">​</a></h3>
<div class="language-astro codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-astro codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">---</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">const posts = await getCollection('posts');</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">---</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">&lt;html&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  &lt;body&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    {posts.map(post =&gt; (</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      &lt;article&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        &lt;h2&gt;{post.data.title}&lt;/h2&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      &lt;/article&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    ))}</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  &lt;/body&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">&lt;/html&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pycora-pro-1">Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#pycora-pro-1" class="hash-link" aria-label="Direct link to Pycora Pro" title="Direct link to Pycora Pro" translate="no">​</a></h3>
<div class="language-jinja codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jinja codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">{% for post in collections.posts %}</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">&lt;article&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  &lt;h2&gt;{{ post.title }}&lt;/h2&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">&lt;/article&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{% endfor %}</span><br></div></code></pre></div></div>
<p>Both are clean. Jinja2 is more familiar to Python developers.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="content-format">Content Format<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#content-format" class="hash-link" aria-label="Direct link to Content Format" title="Direct link to Content Format" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="astro--content-collections">Astro — Content Collections<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#astro--content-collections" class="hash-link" aria-label="Direct link to Astro — Content Collections" title="Direct link to Astro — Content Collections" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">src/content/posts/</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">├── post-01.md</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">└── post-02.md</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pycora-pro-2">Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#pycora-pro-2" class="hash-link" aria-label="Direct link to Pycora Pro" title="Direct link to Pycora Pro" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">content/posts/</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">├── post-01.md</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">└── post-02.md</span><br></div></code></pre></div></div>
<p>Same idea. Both use Markdown + frontmatter.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deployment">Deployment<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#deployment" class="hash-link" aria-label="Direct link to Deployment" title="Direct link to Deployment" translate="no">​</a></h2>
<p>Both deploy anywhere. Both are static.</p>
<table><thead><tr><th>Provider</th><th>Astro</th><th>Pycora</th></tr></thead><tbody><tr><td>Cloudflare Pages</td><td>✅</td><td>✅</td></tr><tr><td>Vercel</td><td>✅</td><td>✅</td></tr><tr><td>Netlify</td><td>✅</td><td>✅</td></tr><tr><td>GitHub Pages</td><td>✅</td><td>✅</td></tr></tbody></table>
<p><strong>Pycora advantage:</strong> no Node.js on the build server. Python is already there.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-to-use-astro">When to Use Astro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#when-to-use-astro" class="hash-link" aria-label="Direct link to When to Use Astro" title="Direct link to When to Use Astro" translate="no">​</a></h2>
<ul>
<li class="">You need React/Vue/Svelte components</li>
<li class="">You want view transitions</li>
<li class="">You need a rich ecosystem of integrations</li>
<li class="">Your team knows JavaScript</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-to-use-pycora-pro">When to Use Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#when-to-use-pycora-pro" class="hash-link" aria-label="Direct link to When to Use Pycora Pro" title="Direct link to When to Use Pycora Pro" translate="no">​</a></h2>
<ul>
<li class="">You prefer Python</li>
<li class="">You want zero client JS</li>
<li class="">You want faster builds</li>
<li class="">You want zero npm dependencies</li>
<li class="">You want a built-in CMS</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="can-you-use-both">Can You Use Both?<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#can-you-use-both" class="hash-link" aria-label="Direct link to Can You Use Both?" title="Direct link to Can You Use Both?" translate="no">​</a></h2>
<p>Yes. Astro has a Python integration via <code>@astrojs/python</code>. But you're still running Node.</p>
<p>Pycora Pro is <strong>Python all the way</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-verdict">The Verdict<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#the-verdict" class="hash-link" aria-label="Direct link to The Verdict" title="Direct link to The Verdict" translate="no">​</a></h2>
<table><thead><tr><th>Use case</th><th>Recommendation</th></tr></thead><tbody><tr><td>Content site, no JS</td><td><strong>Pycora Pro</strong></td></tr><tr><td>Interactive app</td><td>Astro</td></tr><tr><td>Python team</td><td><strong>Pycora Pro</strong></td></tr><tr><td>JS team</td><td>Astro</td></tr><tr><td>Performance-first</td><td><strong>Pycora Pro</strong></td></tr><tr><td>Component-heavy</td><td>Astro</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-pycora-pro">Get Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-astro#get-pycora-pro" class="hash-link" aria-label="Direct link to Get Pycora Pro" title="Direct link to Get Pycora Pro" translate="no">​</a></h2>
<p>Pycora Pro is <strong>$145, one payment, own forever</strong>.</p>
<p><a href="https://creativitaz.gumroad.com/l/pycora-pro" target="_blank" rel="noopener noreferrer" class="">Get Pycora Pro on Gumroad →</a></p>]]></content:encoded>
            <category>Comparison</category>
            <category>Astro</category>
            <category>Python</category>
            <category>SSG</category>
        </item>
        <item>
            <title><![CDATA[Why We Built a Python SSG in 2026]]></title>
            <link>https://docspycorapro.axcora.com/blog/why-python-ssg</link>
            <guid>https://docspycorapro.axcora.com/blog/why-python-ssg</guid>
            <pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Why Axcora built Pycora — a Python-native static site generator in 2026. The case against Node.js, Ruby, and Go for static sites.]]></description>
            <content:encoded><![CDATA[<p>In 2026, static site generators are everywhere. Astro, Eleventy, Hugo, Jekyll — the list goes on. So why did we build <strong>another one</strong>?</p>
<p>Because none of them ran on Python.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-problem">The Problem<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>Every SSG forces you into a language ecosystem:</p>
<table><thead><tr><th>SSG</th><th>Language</th></tr></thead><tbody><tr><td>Jekyll</td><td>Ruby</td></tr><tr><td>Eleventy</td><td>JavaScript</td></tr><tr><td>Astro</td><td>JavaScript</td></tr><tr><td>Hugo</td><td>Go</td></tr><tr><td>Gatsby</td><td>JavaScript</td></tr><tr><td>Hexo</td><td>JavaScript</td></tr></tbody></table>
<p>If you're a Python developer, you're stuck. Either:</p>
<ol>
<li class="">Learn a new language for your static site</li>
<li class="">Use Jekyll and deal with Ruby dependency hell</li>
</ol>
<p>Neither is good.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="python-developers-are-everywhere">Python Developers Are Everywhere<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#python-developers-are-everywhere" class="hash-link" aria-label="Direct link to Python Developers Are Everywhere" title="Direct link to Python Developers Are Everywhere" translate="no">​</a></h2>
<p>Python is the most popular programming language in the world. It's used for:</p>
<ul>
<li class="">Data science</li>
<li class="">Machine learning</li>
<li class="">Web scraping</li>
<li class="">Automation</li>
<li class="">Backend APIs</li>
<li class=""><strong>Static sites</strong></li>
</ul>
<p>Yet there was no first-class Python SSG.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-we-built">What We Built<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#what-we-built" class="hash-link" aria-label="Direct link to What We Built" title="Direct link to What We Built" translate="no">​</a></h2>
<p><strong>Pycora Pro</strong> is a Python-native static site generator. It uses:</p>
<ul>
<li class=""><strong>Python 3.8+</strong> — no compilation, no version managers</li>
<li class=""><strong>Jinja2</strong> — the most popular Python template engine</li>
<li class=""><strong>Markdown</strong> — with YAML frontmatter</li>
<li class=""><strong>PAX</strong> — our custom template loader</li>
</ul>
<p>The result: a static site generator that feels like Python.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-not-just-use-jekyll">Why Not Just Use Jekyll?<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#why-not-just-use-jekyll" class="hash-link" aria-label="Direct link to Why Not Just Use Jekyll?" title="Direct link to Why Not Just Use Jekyll?" translate="no">​</a></h2>
<p>Jekyll works. But:</p>
<ul>
<li class=""><strong>Ruby is a second language.</strong> Most Python devs don't know it.</li>
<li class=""><strong>Gem dependencies break.</strong> Every Ruby update, every gem update.</li>
<li class=""><strong>Slow builds.</strong> Jekyll is 4–5x slower than Pycora.</li>
<li class=""><strong>No Python integration.</strong> Can't use pandas, requests, or any Python library.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-not-eleventy-or-astro">Why Not Eleventy or Astro?<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#why-not-eleventy-or-astro" class="hash-link" aria-label="Direct link to Why Not Eleventy or Astro?" title="Direct link to Why Not Eleventy or Astro?" translate="no">​</a></h2>
<p>Both are excellent. But:</p>
<ul>
<li class=""><strong>Node.js dependency.</strong> You need Node + npm + a bundler.</li>
<li class=""><strong>JavaScript-only.</strong> Can't import Python modules.</li>
<li class=""><strong>Build complexity.</strong> Astro has a build step; Pycora doesn't.</li>
<li class=""><strong>Bundle size.</strong> Astro ships client JS by default; Pycora ships 0 KB.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-python-advantage">The Python Advantage<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#the-python-advantage" class="hash-link" aria-label="Direct link to The Python Advantage" title="Direct link to The Python Advantage" translate="no">​</a></h2>
<p>Using Python for static sites gives you:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-scripting">1. Scripting<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#1-scripting" class="hash-link" aria-label="Direct link to 1. Scripting" title="Direct link to 1. Scripting" translate="no">​</a></h3>
<p>Generate content programmatically:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># fetch_posts.py</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> requests</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">posts </span><span class="token operator">=</span><span class="token plain"> requests</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.example.com/posts"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> post </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"> posts</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">with</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">open</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"content/posts/</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">post</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string-interpolation interpolation string" style="color:rgb(255, 121, 198)">'slug'</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">.md"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"w"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> f</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        f</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">write</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"---\ntitle: </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">post</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string-interpolation interpolation string" style="color:rgb(255, 121, 198)">'title'</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">\n---\n\n</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">post</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string-interpolation interpolation string" style="color:rgb(255, 121, 198)">'body'</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-data-processing">2. Data Processing<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#2-data-processing" class="hash-link" aria-label="Direct link to 2. Data Processing" title="Direct link to 2. Data Processing" translate="no">​</a></h3>
<p>Use pandas, numpy, or any Python library to generate content:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> pandas </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> pd</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">df </span><span class="token operator">=</span><span class="token plain"> pd</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">read_csv</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"data.csv"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> _</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> row </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"> df</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">iterrows</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># generate markdown from CSV</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-no-runtime">3. No Runtime<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#3-no-runtime" class="hash-link" aria-label="Direct link to 3. No Runtime" title="Direct link to 3. No Runtime" translate="no">​</a></h3>
<p>Output is still pure static HTML. Python is only used <strong>at build time</strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-zero-client-js">4. Zero Client JS<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#4-zero-client-js" class="hash-link" aria-label="Direct link to 4. Zero Client JS" title="Direct link to 4. Zero Client JS" translate="no">​</a></h3>
<p>Pycora ships <strong>0 KB client JavaScript</strong> by default. Your site loads instantly.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="performance">Performance<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#performance" class="hash-link" aria-label="Direct link to Performance" title="Direct link to Performance" translate="no">​</a></h2>
<table><thead><tr><th></th><th>Pycora Pro</th><th>Jekyll</th><th>Eleventy</th><th>Astro</th></tr></thead><tbody><tr><td><strong>Build 40 pages</strong></td><td>0.87s</td><td>4.2s</td><td>2.1s</td><td>3.8s</td></tr><tr><td><strong>Runtime</strong></td><td>Python</td><td>Ruby</td><td>Node</td><td>Node</td></tr><tr><td><strong>Client JS</strong></td><td>0 KB</td><td>0 KB</td><td>0 KB</td><td>~15 KB</td></tr><tr><td><strong>Dependencies</strong></td><td>4 pip packages</td><td>Ruby + gems</td><td>Node + npm</td><td>Node + npm</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-philosophy">The Philosophy<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#the-philosophy" class="hash-link" aria-label="Direct link to The Philosophy" title="Direct link to The Philosophy" translate="no">​</a></h2>
<p>We're not trying to replace Astro or Eleventy. We're giving <strong>Python developers</strong> a native option.</p>
<p>If you're a Python developer, you shouldn't have to learn JavaScript to build a static site.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-pycora-pro">Get Pycora Pro<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#get-pycora-pro" class="hash-link" aria-label="Direct link to Get Pycora Pro" title="Direct link to Get Pycora Pro" translate="no">​</a></h2>
<p>Pycora Pro is <strong>$145, one payment, own forever</strong>.</p>
<ul>
<li class="">Python 3.8+</li>
<li class="">Jinja2 + PAX</li>
<li class="">Bento design system</li>
<li class="">Decap CMS included</li>
<li class="">Unlimited projects</li>
</ul>
<p><a href="https://creativitaz.gumroad.com/l/pycora-pro" target="_blank" rel="noopener noreferrer" class="">Get Pycora Pro on Gumroad →</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="next-steps">Next Steps<a href="https://docspycorapro.axcora.com/blog/why-python-ssg#next-steps" class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docspycorapro.axcora.com/docs/intro">Introduction</a> — what is Pycora Pro</li>
<li class=""><a class="" href="https://docspycorapro.axcora.com/docs/user-guide/local/getting-started">Getting Started</a> — install and run</li>
<li class=""><a class="" href="https://docspycorapro.axcora.com/docs/developer-guide/architecture">Architecture</a> — how it works</li>
</ul>]]></content:encoded>
            <category>Python</category>
            <category>SSG</category>
            <category>JAMstack</category>
        </item>
        <item>
            <title><![CDATA[Deploy Pycora Pro to Cloudflare Pages in 5 Minutes]]></title>
            <link>https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare</link>
            <guid>https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare</guid>
            <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Step-by-step guide to deploy your Pycora Pro static site to Cloudflare Pages — free hosting, automatic HTTPS, continuous deployment from GitHub.]]></description>
            <content:encoded><![CDATA[<p>Pycora Pro outputs pure static HTML. That means you can host it <strong>for free</strong> on Cloudflare Pages — unlimited bandwidth, automatic HTTPS, and continuous deployment from GitHub.</p>
<p>Here's the full walkthrough.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="prerequisites">Prerequisites<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h2>
<ul>
<li class="">Pycora Pro installed locally</li>
<li class="">A GitHub account</li>
<li class="">A Cloudflare account (free)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1--push-to-github">Step 1 — Push to GitHub<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#step-1--push-to-github" class="hash-link" aria-label="Direct link to Step 1 — Push to GitHub" title="Direct link to Step 1 — Push to GitHub" translate="no">​</a></h2>
<p>If your project isn't on GitHub yet:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> init</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> commit </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-m</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"initial commit"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> remote </span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token plain"> origin https://github.com/YOUR_USERNAME/pycora-site.git</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> push </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-u</span><span class="token plain"> origin main</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2--test-the-build-locally">Step 2 — Test the Build Locally<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#step-2--test-the-build-locally" class="hash-link" aria-label="Direct link to Step 2 — Test the Build Locally" title="Direct link to Step 2 — Test the Build Locally" translate="no">​</a></h2>
<p>Before deploying, make sure the build works:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">python ssg.py</span><br></div></code></pre></div></div>
<p>You should see:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">Ready in 0.87s - 41 files - MEDUSA v2.4.6</span><br></div></code></pre></div></div>
<p>The <code>output/</code> folder now contains your static site.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3--connect-to-cloudflare-pages">Step 3 — Connect to Cloudflare Pages<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#step-3--connect-to-cloudflare-pages" class="hash-link" aria-label="Direct link to Step 3 — Connect to Cloudflare Pages" title="Direct link to Step 3 — Connect to Cloudflare Pages" translate="no">​</a></h2>
<ol>
<li class="">Go to <a href="https://pages.cloudflare.com/" target="_blank" rel="noopener noreferrer" class="">pages.cloudflare.com</a></li>
<li class="">Click <strong>Create a project</strong></li>
<li class="">Click <strong>Connect to Git</strong></li>
<li class="">Authorize Cloudflare to access your GitHub account</li>
<li class="">Select your repository</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4--configure-build-settings">Step 4 — Configure Build Settings<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#step-4--configure-build-settings" class="hash-link" aria-label="Direct link to Step 4 — Configure Build Settings" title="Direct link to Step 4 — Configure Build Settings" translate="no">​</a></h2>
<table><thead><tr><th>Setting</th><th>Value</th></tr></thead><tbody><tr><td><strong>Project name</strong></td><td><code>pycora-site</code> (or your choice)</td></tr><tr><td><strong>Production branch</strong></td><td><code>main</code></td></tr><tr><td><strong>Framework preset</strong></td><td>None</td></tr><tr><td><strong>Build command</strong></td><td><code>python ssg.py</code></td></tr><tr><td><strong>Build output directory</strong></td><td><code>output</code></td></tr></tbody></table>
<p><strong>Important:</strong> Cloudflare needs Python 3.8+ in the build environment. Cloudflare Pages has Python pre-installed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="environment-variables-optional">Environment Variables (Optional)<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#environment-variables-optional" class="hash-link" aria-label="Direct link to Environment Variables (Optional)" title="Direct link to Environment Variables (Optional)" translate="no">​</a></h3>
<p>If your <code>ssg.py</code> needs any environment variables:</p>
<table><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td><code>PYTHON_VERSION</code></td><td><code>3.11</code></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5--deploy">Step 5 — Deploy<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#step-5--deploy" class="hash-link" aria-label="Direct link to Step 5 — Deploy" title="Direct link to Step 5 — Deploy" translate="no">​</a></h2>
<p>Click <strong>Save and Deploy</strong>.</p>
<p>Cloudflare will:</p>
<ol>
<li class="">Clone your repository</li>
<li class="">Install Python dependencies</li>
<li class="">Run <code>python ssg.py</code></li>
<li class="">Upload <code>output/</code> to their CDN</li>
<li class="">Give you a URL like <code>https://pycora-site.pages.dev</code></li>
</ol>
<p>First deploy takes 1–2 minutes. Subsequent deploys are faster.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-6--add-a-custom-domain">Step 6 — Add a Custom Domain<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#step-6--add-a-custom-domain" class="hash-link" aria-label="Direct link to Step 6 — Add a Custom Domain" title="Direct link to Step 6 — Add a Custom Domain" translate="no">​</a></h2>
<ol>
<li class="">Go to your project → <strong>Custom domains</strong></li>
<li class="">Click <strong>Set up a custom domain</strong></li>
<li class="">Enter your domain (e.g. <code>pycora.axcora.com</code>)</li>
<li class="">Follow the DNS instructions</li>
</ol>
<p>If your domain is already on Cloudflare, DNS is configured automatically.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-7--automatic-https">Step 7 — Automatic HTTPS<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#step-7--automatic-https" class="hash-link" aria-label="Direct link to Step 7 — Automatic HTTPS" title="Direct link to Step 7 — Automatic HTTPS" translate="no">​</a></h2>
<p>Cloudflare provisions an SSL certificate automatically. No configuration needed.</p>
<p>Your site is now available at <code>https://yourdomain.com</code> with:</p>
<ul>
<li class="">✅ Automatic HTTPS</li>
<li class="">✅ HTTP/3 support</li>
<li class="">✅ Global CDN</li>
<li class="">✅ Unlimited bandwidth</li>
<li class="">✅ DDoS protection</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="continuous-deployment">Continuous Deployment<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#continuous-deployment" class="hash-link" aria-label="Direct link to Continuous Deployment" title="Direct link to Continuous Deployment" translate="no">​</a></h2>
<p>Every push to <code>main</code> triggers a new deploy:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> commit </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-m</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"update homepage"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> push</span><br></div></code></pre></div></div>
<p>Cloudflare rebuilds and deploys automatically. You get a preview URL for every commit.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="troubleshooting">Troubleshooting<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#troubleshooting" class="hash-link" aria-label="Direct link to Troubleshooting" title="Direct link to Troubleshooting" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="build-fails-with-python-not-found">Build fails with "python: not found"<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#build-fails-with-python-not-found" class="hash-link" aria-label="Direct link to Build fails with &quot;python: not found&quot;" title="Direct link to Build fails with &quot;python: not found&quot;" translate="no">​</a></h3>
<p>Add a <code>.python-version</code> file to your repo:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">3.11</span><br></div></code></pre></div></div>
<p>Or set <code>PYTHON_VERSION</code> in environment variables.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="build-succeeds-but-pages-are-blank">Build succeeds but pages are blank<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#build-succeeds-but-pages-are-blank" class="hash-link" aria-label="Direct link to Build succeeds but pages are blank" title="Direct link to Build succeeds but pages are blank" translate="no">​</a></h3>
<p>Check that <code>content/index.md</code> exists and has valid frontmatter. Run <code>python ssg.py</code> locally and check for errors.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="404-on-subpages">404 on subpages<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#404-on-subpages" class="hash-link" aria-label="Direct link to 404 on subpages" title="Direct link to 404 on subpages" translate="no">​</a></h3>
<p>Cloudflare Pages handles trailing slashes automatically. If you have issues, add a <code>_redirects</code> file:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">/*    /index.html   200</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="alternative-providers">Alternative Providers<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#alternative-providers" class="hash-link" aria-label="Direct link to Alternative Providers" title="Direct link to Alternative Providers" translate="no">​</a></h2>
<table><thead><tr><th>Provider</th><th>Free Tier</th><th>Build Command</th></tr></thead><tbody><tr><td><strong>Cloudflare Pages</strong></td><td>Unlimited bandwidth</td><td><code>python ssg.py</code></td></tr><tr><td><strong>Vercel</strong></td><td>100 GB/month</td><td><code>python ssg.py</code></td></tr><tr><td><strong>Netlify</strong></td><td>100 GB/month</td><td><code>python ssg.py</code></td></tr><tr><td><strong>GitHub Pages</strong></td><td>1 GB storage</td><td>Push <code>output/</code> to <code>gh-pages</code></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cost-comparison">Cost Comparison<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#cost-comparison" class="hash-link" aria-label="Direct link to Cost Comparison" title="Direct link to Cost Comparison" translate="no">​</a></h2>
<table><thead><tr><th>Provider</th><th>Cost</th></tr></thead><tbody><tr><td><strong>Pycora Pro + Cloudflare Pages</strong></td><td><strong>$145 once + $0/month</strong></td></tr><tr><td>WordPress + hosting</td><td>$10–30/month</td></tr><tr><td>Webflow</td><td>$29/month</td></tr><tr><td>Squarespace</td><td>$16/month</td></tr></tbody></table>
<p><strong>Pycora Pro pays for itself in under 6 months.</strong></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-pycora-pro">Get Pycora Pro<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#get-pycora-pro" class="hash-link" aria-label="Direct link to Get Pycora Pro" title="Direct link to Get Pycora Pro" translate="no">​</a></h2>
<p>Ready to deploy? Get Pycora Pro on <a href="https://creativitaz.gumroad.com/l/pycora-pro" target="_blank" rel="noopener noreferrer" class="">Gumroad</a> — one payment, own forever.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="next-steps">Next Steps<a href="https://docspycorapro.axcora.com/blog/deploy-pycora-cloudflare#next-steps" class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docspycorapro.axcora.com/docs/user-guide/content-creation/site-settings">Configuration</a></li>
<li class=""><a class="" href="https://docspycorapro.axcora.com/docs/user-guide/content-creation/">Content Creation</a></li>
<li class=""><a class="" href="https://docspycorapro.axcora.com/docs/user-guide/content-creation/site-settings">Customization</a></li>
</ul>]]></content:encoded>
            <category>Tutorial</category>
            <category>Deployment</category>
            <category>Python</category>
        </item>
        <item>
            <title><![CDATA[Pycora vs Jekyll — Python vs Ruby for Static Sites]]></title>
            <link>https://docspycorapro.axcora.com/blog/pycora-vs-jekyll</link>
            <guid>https://docspycorapro.axcora.com/blog/pycora-vs-jekyll</guid>
            <pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Compare Pycora (Python SSG) with Jekyll (Ruby SSG) — speed, dependencies, deployment, and developer experience. Which one should you pick in 2026?]]></description>
            <content:encoded><![CDATA[<p>Jekyll has been the default static site generator for over a decade. But its Ruby dependency has become a pain point for developers who've moved on to Python.</p>
<p><strong>Pycora Pro</strong> is a Python-native alternative. Same Markdown + YAML workflow, same layout inheritance, but zero Ruby.</p>
<p>Here's how they compare.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-core-difference">The Core Difference<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#the-core-difference" class="hash-link" aria-label="Direct link to The Core Difference" title="Direct link to The Core Difference" translate="no">​</a></h2>
<table><thead><tr><th></th><th>Jekyll</th><th>Pycora Pro</th></tr></thead><tbody><tr><td><strong>Language</strong></td><td>Ruby</td><td>Python</td></tr><tr><td><strong>Runtime</strong></td><td>Ruby + Bundler</td><td>Python 3.8+</td></tr><tr><td><strong>Template engine</strong></td><td>Liquid</td><td>Jinja2 + PAX</td></tr><tr><td><strong>Build speed</strong></td><td>Seconds</td><td>Milliseconds</td></tr><tr><td><strong>Dependencies</strong></td><td>Gems, Bundler</td><td>pip (4 packages)</td></tr><tr><td><strong>Deploy</strong></td><td>Any static host</td><td>Any static host</td></tr><tr><td><strong>License</strong></td><td>MIT</td><td>MIT</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dependencies">Dependencies<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#dependencies" class="hash-link" aria-label="Direct link to Dependencies" title="Direct link to Dependencies" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jekyll">Jekyll<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#jekyll" class="hash-link" aria-label="Direct link to Jekyll" title="Direct link to Jekyll" translate="no">​</a></h3>
<p>Jekyll requires Ruby, then gems, then Bundler. On a fresh machine:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Install Ruby (varies by OS)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">brew </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> ruby</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Install Jekyll</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">gem </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> jekyll bundler</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Install project gems</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">bundle </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><br></div></code></pre></div></div>
<p>Every time Ruby updates, gems break. Every time a gem updates, Bundler complains. This is <strong>dependency hell</strong>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pycora-pro">Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#pycora-pro" class="hash-link" aria-label="Direct link to Pycora Pro" title="Direct link to Pycora Pro" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">pip </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> jinja2 markdown pyyaml watchdog</span><br></div></code></pre></div></div>
<p>Four packages. That's it. Python 3.8+ is already on most machines.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="build-speed">Build Speed<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#build-speed" class="hash-link" aria-label="Direct link to Build Speed" title="Direct link to Build Speed" translate="no">​</a></h2>
<p>We built a test site with 40 Markdown files, 10 layouts, and 5 partials.</p>
<table><thead><tr><th></th><th>Jekyll</th><th>Pycora Pro</th></tr></thead><tbody><tr><td><strong>Cold build</strong></td><td>4.2s</td><td>0.87s</td></tr><tr><td><strong>Incremental</strong></td><td>1.8s</td><td>0.4s</td></tr><tr><td><strong>Memory</strong></td><td>180 MB</td><td>65 MB</td></tr></tbody></table>
<p>Pycora Pro is <strong>4–5x faster</strong> on the same content.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="templating">Templating<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#templating" class="hash-link" aria-label="Direct link to Templating" title="Direct link to Templating" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jekyll--liquid">Jekyll — Liquid<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#jekyll--liquid" class="hash-link" aria-label="Direct link to Jekyll — Liquid" title="Direct link to Jekyll — Liquid" translate="no">​</a></h3>
<div class="language-liquid codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-liquid codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">{% for post in site.posts limit:3 %}</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  &lt;a href="{{ post.url }}"&gt;{{ post.title }}&lt;/a&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{% endfor %}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pycora-pro--jinja2--pax">Pycora Pro — Jinja2 + PAX<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#pycora-pro--jinja2--pax" class="hash-link" aria-label="Direct link to Pycora Pro — Jinja2 + PAX" title="Direct link to Pycora Pro — Jinja2 + PAX" translate="no">​</a></h3>
<div class="language-jinja codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jinja codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">{% for post in posts | limit(3) %}</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  &lt;a href="{{ post.url }}"&gt;{{ post.title }}&lt;/a&gt;</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{% endfor %}</span><br></div></code></pre></div></div>
<p><strong>PAX</strong> auto-converts old Liquid-style slices:</p>
<div class="language-jinja codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jinja codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">{{ posts[:3] }}      →  {{ posts | limit(3) }}</span><br></div></code></pre></div></div>
<p>So if you're migrating from Jekyll, <strong>most Liquid templates work with minor tweaks</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="content-format">Content Format<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#content-format" class="hash-link" aria-label="Direct link to Content Format" title="Direct link to Content Format" translate="no">​</a></h2>
<p>Both use Markdown + YAML frontmatter.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jekyll-1">Jekyll<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#jekyll-1" class="hash-link" aria-label="Direct link to Jekyll" title="Direct link to Jekyll" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">layout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> post</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">title</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"My Post"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token datetime number">2024-01-20</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">tags</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">python</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> ssg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">---</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pycora-pro-1">Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#pycora-pro-1" class="hash-link" aria-label="Direct link to Pycora Pro" title="Direct link to Pycora Pro" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">layout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> layouts/post</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">title</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"My Post"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token datetime number">2024-01-20</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">tags</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">python</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> ssg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">---</span><br></div></code></pre></div></div>
<p>Almost identical. The only difference: Pycora uses <code>layouts/post</code> instead of <code>post</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deployment">Deployment<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#deployment" class="hash-link" aria-label="Direct link to Deployment" title="Direct link to Deployment" translate="no">​</a></h2>
<p>Both output static HTML. Both deploy anywhere.</p>
<table><thead><tr><th>Provider</th><th>Jekyll</th><th>Pycora Pro</th></tr></thead><tbody><tr><td>Cloudflare Pages</td><td>✅</td><td>✅</td></tr><tr><td>Vercel</td><td>✅</td><td>✅</td></tr><tr><td>Netlify</td><td>✅</td><td>✅</td></tr><tr><td>GitHub Pages</td><td>✅</td><td>✅</td></tr></tbody></table>
<p><strong>Pycora Pro advantage:</strong> no Ruby version manager needed on the build server. Python is already there.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="developer-experience">Developer Experience<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#developer-experience" class="hash-link" aria-label="Direct link to Developer Experience" title="Direct link to Developer Experience" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jekyll-2">Jekyll<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#jekyll-2" class="hash-link" aria-label="Direct link to Jekyll" title="Direct link to Jekyll" translate="no">​</a></h3>
<ul>
<li class="">Plugin ecosystem is mature</li>
<li class="">Liquid is limited for complex logic</li>
<li class="">Ruby debugging required for theme development</li>
<li class="">Slow feedback loop on large sites</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pycora-pro-2">Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#pycora-pro-2" class="hash-link" aria-label="Direct link to Pycora Pro" title="Direct link to Pycora Pro" translate="no">​</a></h3>
<ul>
<li class="">Python native — use any Python library</li>
<li class="">Jinja2 is more powerful than Liquid</li>
<li class="">Built-in Decap CMS admin</li>
<li class="">Live reload via <code>python dev.py</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-to-use-jekyll">When to Use Jekyll<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#when-to-use-jekyll" class="hash-link" aria-label="Direct link to When to Use Jekyll" title="Direct link to When to Use Jekyll" translate="no">​</a></h2>
<ul>
<li class="">You already know Ruby</li>
<li class="">You need a specific Jekyll plugin</li>
<li class="">You're maintaining an existing Jekyll site</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-to-use-pycora-pro">When to Use Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#when-to-use-pycora-pro" class="hash-link" aria-label="Direct link to When to Use Pycora Pro" title="Direct link to When to Use Pycora Pro" translate="no">​</a></h2>
<ul>
<li class="">You prefer Python</li>
<li class="">You want faster builds</li>
<li class="">You want zero Ruby dependencies</li>
<li class="">You want a built-in CMS</li>
<li class="">You want a premium bento design out of the box</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migrating-from-jekyll">Migrating from Jekyll<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#migrating-from-jekyll" class="hash-link" aria-label="Direct link to Migrating from Jekyll" title="Direct link to Migrating from Jekyll" translate="no">​</a></h2>
<p>Migration is straightforward:</p>
<ol>
<li class="">Rename <code>_posts/</code> → <code>content/posts/</code></li>
<li class="">Convert Liquid templates to Jinja2 (PAX handles most of it)</li>
<li class="">Move <code>_config.yml</code> → <code>_data/site.yaml</code></li>
<li class="">Run <code>python ssg.py</code></li>
</ol>
<p>See our <a class="" href="https://docspycorapro.axcora.com/docs/user-guide/local/getting-started">Jekyll migration guide</a> for details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-pycora-pro">Get Pycora Pro<a href="https://docspycorapro.axcora.com/blog/pycora-vs-jekyll#get-pycora-pro" class="hash-link" aria-label="Direct link to Get Pycora Pro" title="Direct link to Get Pycora Pro" translate="no">​</a></h2>
<p>Pycora Pro is <strong>$145, one payment, own forever</strong>.</p>
<ul>
<li class="">Unlimited projects</li>
<li class="">No license key</li>
<li class="">No renewal</li>
<li class="">White-label resale allowed</li>
</ul>
<p><a href="https://creativitaz.gumroad.com/l/pycora-pro" target="_blank" rel="noopener noreferrer" class="">Get Pycora Pro on Gumroad →</a></p>]]></content:encoded>
            <category>Comparison</category>
            <category>Jekyll</category>
            <category>Python</category>
            <category>SSG</category>
        </item>
    </channel>
</rss>