{
    "version": "https://jsonfeed.org/version/1",
    "title": "Publii Blog",
    "description": "",
    "home_page_url": "https://getpublii.com/blog",
    "feed_url": "https://getpublii.com/blog/feed.json",
    "user_comment": "",
    "icon": "https://getpublii.com/blog/media/website/publii_amp_logo.png",
    "author": {
        "name": "Bob Mitro"
    },
    "items": [
        {
            "id": "https://getpublii.com/blog/llms-txt-complete-guide.html",
            "url": "https://getpublii.com/blog/llms-txt-complete-guide.html",
            "title": "The Complete Guide to llms.txt: Should You Care About This AI Standard?",
            "summary": "There's a new file causing arguments across tech Twitter, SEO communities, and developer forums. It's called llms.txt, and depending on who you ask, it's either the future of how AI systems discover your content — or a complete waste of&hellip;",
            "content_html": "<p>There's a new file causing arguments across tech Twitter, SEO communities, and developer forums. It's called llms.txt, and depending on who you ask, it's either the future of how AI systems discover your content — or a complete waste of time.</p>\n<figure class=\"post__image post__image--wide\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/91/llms-txt-statistic.webp\" alt=\"llms.txt adoption has exploded: 844,473 live websites (October 25, 2025)\" width=\"2816\" height=\"1536\"></figure>\n<p>Here's what makes this weird: <strong>over 844,000 websites have already implemented it</strong> — according to <a href=\"https://trends.builtwith.com/robots/LLMS-Text\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">BuiltWith's</a> tracking as of October 25, 2025. Major companies like Anthropic (Claude docs), Cloudflare, and Stripe are using it. Yet not a single major AI platform has officially said they actually read these files.</p>\n<p>Yeah. Think about that for a second.</p>\n<p>So what's going on?</p>\n<h2>The Problem This Tries to Solve</h2>\n<p>Picture this: someone asks ChatGPT or Claude a question about your product. The AI needs to fetch information from your website <em>right now</em>, while answering.</p>\n<p>But there's a problem.</p>\n<p>Your website has navigation menus, cookie banners, footers, sidebars, JavaScript-heavy layouts, and marketing copy scattered everywhere. The actual useful information? Buried somewhere in all that noise. And <strong>the AI only has seconds to find it</strong>, plus limited \"context window\" space to work with.</p>\n<p>This is fundamentally different from how Google works. Google crawls your site over days or weeks, indexes everything, serves cached results. AI systems need to grab content in real-time during conversations with users. It's messy. Resource-intensive. Often inaccurate.</p>\n<p>Enter llms.txt — a simple text file you place at <em>yourdomain.com/llms.txt</em> that essentially says: \"Hey AI, skip all the clutter. Here are my 10 most important pages, already in clean Markdown format.\"</p>\n<p>Jeremy Howard from Answer.AI proposed this back in <strong>September 2024</strong>. The idea spread fast. But whether it actually works? That's where things get messy.</p>\n<h2>What It Actually Looks Like</h2>\n<p>The format is deliberately simple — just Markdown. You start with your site name as an H1 header. Add a short description in a blockquote. Then organize your key pages under H2 headers like \"Documentation,\" \"Getting Started,\" or \"API Reference.\"</p>\n<p>Each link follows this pattern: <code>[Page Title](URL): Brief description of what's here</code>.</p>\n<p>That's it. <strong>No complex syntax, no XML schemas, no configuration files.</strong> A developer can write one by hand in 20 minutes.</p>\n<p>There's also llms-full.txt — a comprehensive version with all your documentation in one massive file instead of links. Cloudflare's version? <strong>3.7 million tokens</strong>. Vercel's has been called \"a 400,000-word novel.\" The logic? Why make the AI follow links when you can give it everything upfront?</p>\n<p>Real example from Stripe.com llms.txt:</p>\n<pre class=\"language-markdown\"><code># Stripe\n\n&gt; Stripe is a technology company that provides financial infrastructure for businesses. Businesses of every size—from new startups to established public companies—use Stripe to accept payments online and in person, embed financial services, and create custom revenue models. For complete documentation in a single file, see [Full Documentation](https://stripe.com/llms-full.txt).\n\n## Payments\n\n- [Stripe Payments](https://stripe.com/payments): Accept payments online and in person globally with a payments solution built for any business—from scaling startups to global enterprises.\n- [Stripe Payments features](https://stripe.com/payments/features): Learn more about Stripe Payments features.\n- [Payment methods](https://stripe.com/payments/payment-methods): Acquire more customers and improve conversion by offering the most popular local payment methods around the world. Join millions of global businesses that launch and manage payment methods through Stripe.</code></pre>\n<p>or Anthropic Claude Docs llms.txt:</p>\n<pre class=\"language-markdown\"><code># Claude Docs\n\n## Docs\n\n- [Kosten und Nutzung verfolgen](https://docs.claude.com/de/api/agent-sdk/cost-tracking.md): Token-Nutzung für die Abrechnung im Claude Agent SDK verstehen und verfolgen\n- [Benutzerdefinierte Tools](https://docs.claude.com/de/api/agent-sdk/custom-tools.md): Erstellen und integrieren Sie benutzerdefinierte Tools, um die Funktionalität des Claude Agent SDK zu erweitern\n- [Hosting des Agent SDK](https://docs.claude.com/de/api/agent-sdk/hosting.md): Bereitstellung und Hosting des Claude Agent SDK in Produktionsumgebungen</code></pre>\n<p>Clean. Curated. Focused on the pages that matter most.</p>\n<p>The standard also suggests offering Markdown versions of your pages by adding .md to URLs (page.html.md). This gives AI systems pure text without HTML parsing headaches.</p>\n<h2>Who's Actually Using This</h2>\n<p>The adoption list tells a story. It's not random small sites — it's developer tools, documentation platforms, and technical companies where AI coding assistants are critical.</p>\n<p><strong>Mintlify</strong> made the biggest impact. In <strong>November 2024</strong>, they enabled automatic llms.txt generation for every documentation site they host. Thousands of technical docs — including <a href=\"https://platform.claude.com/llms.txt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Anthropic</a>, <a href=\"https://cursor.com/llms.txt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Cursor</a>, <a href=\"https://docs.pinecone.io/llms.txt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Pinecone</a>, and <a href=\"https://docs.windsurf.com/llms.txt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Windsurf</a> — got llms.txt files instantly. This adoption suggests the industry sees value in structured AI-readable documentation.</p>\n<p><strong>Major tech companies</strong> show interesting implementation patterns. Anthropic has both llms.txt (<strong>8364 tokens</strong>) and llms-full.txt (<strong>481,349 tokens</strong>) covering their entire API documentation. Cloudflare organizes theirs by product, letting AI fetch only relevant context per service. NVIDIA split implementation between technical docs (1,259 tokens) and their main site (252,607 tokens). Stripe structures by product categories, using an \"Optional\" section for specialized tools like Stripe Climate.</p>\n<p><strong>Developer tools dominate</strong>. <a href=\"https://supabase.com/llms.txt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Supabase</a>, <a href=\"https://docs.zapier.com/llms-full.txt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Zapier</a>, <a href=\"https://modal.com/llms.txt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Modal</a>, and dozens of others have adopted it. Makes sense — their users rely heavily on AI coding assistants, and accurate llms.txt files could improve the quality of AI-generated code suggestions about their platforms.</p>\n<p>Three community directories actively track implementations: <a href=\"https://www.llms-text.com/directory\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">llms-text.com/directory</a> lists <strong>788+ verified sites</strong>, llmstxt.site shows hundreds with token counts, and directory.llmstxt.cloud categorizes by industry. These resources let you see real examples — valuable if you're considering implementation.</p>\n<p>But here's where it gets weird.</p>\n<h2>The Uncomfortable Truth About AI Support</h2>\n<p>Not one major AI platform has officially committed to using llms.txt.</p>\n<p><strong>Zero. Zilch. Nada.</strong></p>\n<p>Google's John Mueller explicitly stated on Reddit and Bluesky: <strong>\"No AI system currently uses llms.txt.\"</strong> OpenAI hasn't announced ChatGPT or GPTBot parse these files. Anthropic — despite publishing their own llms.txt — hasn't confirmed Claude's systems reference it during conversations. Google, Microsoft, Perplexity, and Meta? Radio silence.</p>\n<p>Think about that. Websites are implementing a standard to help AI systems find their content, but the AI systems haven't confirmed they're looking for it.</p>\n<p>Some SEO practitioners see OpenAI crawlers pinging llms.txt files every 15 minutes in their logs. But crawling a file doesn't mean using it for anything meaningful. Profound's GEO tracking shows Microsoft and OpenAI bots actively fetching both llms.txt and llms-full.txt, but this could just be exploratory crawling.</p>\n<p>Could be nothing.</p>\n<p>The optimistic interpretation? Platforms are quietly testing before making commitments. The skeptical view? They're never going to adopt it because better solutions already exist or will soon emerge.</p>\n<h2>Why Some Experts Call This a Waste of Time</h2>\n<p>The skeptics aren't holding back.</p>\n<p>The skeptical argument comes down to this: There's no proven evidence that llms.txt improves AI retrieval, boosts traffic, or enhances model accuracy. And no provider has officially committed to parsing it.</p>\n<p>Beyond that, there's a trust problem. Separate files enable manipulation. You could put different content in llms.txt than what humans see on your actual pages. This breaks the fundamental compact of trustworthy indexing.</p>\n<p>Why would AI platforms trust it?</p>\n<p>Research backs up the gaming concern. A paper called \"Adversarial Search Engine Optimization for Large Language Models\" demonstrated that carefully crafted content-level prompts can make LLMs <strong>2.5× more likely</strong> to recommend targeted content. If websites can put special instructions in llms.txt that don't appear in visible HTML, abuse potential is massive.</p>\n<p>Google's John Mueller has advised SEOs to \"question everything\" and catch misleading information before investing time in unnecessary work. The implication? Don't chase shiny objects without evidence.</p>\n<p>The case rests on concrete realities:</p>\n<ul>\n<li><strong>Zero official platform adoption</strong> 18 months after the proposal</li>\n<li>No confirmed cases of LLMs using llms.txt to improve responses</li>\n<li>No peer-reviewed studies showing effectiveness</li>\n<li>Documented potential for gaming and manipulation</li>\n</ul>\n<p>Critics also point to what they call \"misinformation loops.\" SEO tools like Rank Math and SEMrush flag missing llms.txt as site issues. This creates pressure to implement without evidence of value. Business owners anxious about AI visibility adopt it, reinforcing the perception that it matters — even though it might not.</p>\n<p>It's a self-fulfilling cycle built on hope, not data.</p>\n<h2>Why Supporters Think You Should Implement Anyway</h2>\n<p>The counter-arguments focus on logical positioning and anecdotal signals.</p>\n<p>Carolyn Shelby from Yoast frames it as future-proofing: <strong>\"Ranking is no longer the prize — inclusion is.\"</strong> Her logic? AI systems need clarity and structure. Even if platforms haven't committed yet, providing that structure positions you for when they do.</p>\n<p>Fair point.</p>\n<p>The strongest supporting evidence comes from direct conversations. Windsurf highlighted that llms.txt saves time and tokens when AI agents parse documentation — a concrete technical benefit. Anthropic specifically requested llms.txt and llms-full.txt for their documentation on Mintlify, demonstrating clear interest from a leading AI company (even if not for their inference systems).</p>\n<p>Google included llms.txt in their <strong>Agents to Agents (A2A) protocol</strong>, signaling at least experimental interest. The low-risk, potential-reward calculation appeals to early adopters: <strong>implementation takes 1-4 hours</strong> with no demonstrated downside if platforms eventually adopt the standard.</p>\n<p>Jeremy Howard's vision extends beyond current reality. In March 2025, he stated: <strong>\"It's 2025 and most content is still written for humans instead of LLMs. 99.9% of attention is about to be LLM attention, not human attention.\"</strong></p>\n<p>Bold claim. Maybe prescient, maybe premature.</p>\n<p>This framing suggests llms.txt is less about immediate SEO gains and more about philosophical alignment with an AI-mediated future. Whether this vision materializes or proves premature is the billion-dollar question.</p>\n<p>One case study from Springs Apps reported <strong>20% increase</strong> in search engine visibility and <strong>15% improvement</strong> in accurate AI query answers after implementation — though such data points remain rare and unverified by independent sources.</p>\n<h2>How It Compares to Standards That Actually Worked</h2>\n<p>Robots.txt succeeded because it solved a mutual problem with minimal cost. Websites needed crawl control. Search engines wanted respectful access. Everyone benefited. Major platforms (Google, Bing, OpenAI, Anthropic) officially honor it. It emerged from consensus and evolved through <strong>RFC 9309</strong>.</p>\n<p>Schema.org succeeded because Google, Microsoft, Yahoo, and Yandex jointly developed it. Search engines demonstrably use it for rich results. Benefits are measurable — rich snippets increase click-through rates by documented percentages.</p>\n<p>Sitemap.xml followed similar patterns — broad platform support preceded widespread adoption.</p>\n<p>llms.txt? <strong>Has none of these characteristics yet.</strong></p>\n<p>It's a single-party proposal without W3C involvement or consortium backing. No major LLM provider has announced support. Gaming potential is significant. Most concerning, there's no demonstrated value: traffic improvements, ranking benefits, or accuracy enhancements remain theoretical.</p>\n<p>The comparison reveals what typically makes web standards succeed: multi-stakeholder buy-in, clear and enforceable benefits, low gaming potential, integration with existing infrastructure, and explicit platform commitments.</p>\n<p>llms.txt has... hope.</p>\n<p>Where llms.txt does fit naturally is in the broader evolution toward AI-readable content. Just as websites adapted to mobile, social sharing, and voice search, they'll adapt to AI systems. The specific mechanism — whether llms.txt or something else — matters less than the underlying principle: <strong>content must be structured for machine understanding while remaining valuable for humans.</strong></p>\n<h2>What Actually Works Today for AI Visibility</h2>\n<p>Regardless of llms.txt, certain tactics demonstrably improve how AI systems understand and cite your content.</p>\n<p>Write <strong>direct answers to questions in the first paragraph</strong>. Use conversational language matching natural queries. Create strong heading hierarchies (H2, H3, H4) that make content scannable. Employ bulleted lists and comparison tables. Provide concrete examples with data and citations. Implement schema markup. Build internal linking that connects related concepts. Keep information up-to-date with clear timestamps. Demonstrate authoritative expertise backed by experience.</p>\n<p>These aren't AI-specific tricks — they're good content strategy that happens to serve AI comprehension exceptionally well.</p>\n<p>The convergence of human UX and AI optimization is the real insight.</p>\n<p>Research into Generative Engine Optimization (GEO) shows that certain tactics improve AI visibility: adding authoritative citations, using clear statistics, including relevant quotes, structuring content with crisp headings, and writing in natural language.</p>\n<p>Companies like Vercel report <strong>10% of signups now come from ChatGPT</strong> due to GEO efforts, not traditional SEO. The shift is from \"ranking\" to \"being referenced\" — success means appearing in AI-generated answers, not just organic results.</p>\n<p>Tools like SEMrush's Enterprise AIO, Profound's GEO tracking, and Ahrefs Brand Radar now monitor AI visibility — tracking brand mentions in AI responses, citation frequency, and sentiment. This data remains imperfect but improves monthly.</p>\n<p>You know what matters? Being cited. Being referenced. Being trusted enough that AI systems pull your content when answering questions.</p>\n<h2>If You're Using Publii CMS: We've Got a Plugin for That</h2>\n<p>Good news — we've built a dedicated <strong><a href=\"https://marketplace.getpublii.com/plugins/llms-txt-generator/\">llms.txt Generator plugin</a></strong> specifically for Publii CMS that handles all of this automatically.</p>\n<p>Here's what it does:</p>\n<p><strong>Automatic content selection.</strong> The plugin identifies your most valuable content based on featured posts, main tags, and recent updates. No manual curation needed (though you can override if you want).</p>\n<p><strong>Smart organization.</strong> It groups posts by their main tags to show your site's core topics, adds featured articles automatically, and includes recent posts that weren't captured elsewhere. Everything follows the official llms.txt specification.</p>\n<p><strong>Zero maintenance.</strong> The file generates during your normal Publii rendering process. Publish a new post? The llms.txt updates automatically. Mark something as featured? It gets added. No scripts, no manual updates, no forgetting.</p>\n<p><strong>Full control when you want it.</strong> Through a simple repeater interface, you can manually curate \"Key Resources\" — select specific posts or pages to highlight. Add optional notes for AI systems. Customize sections. Or just let the plugin do its thing.</p>\n<p>Configuration takes <strong>under 10 minutes</strong>. After that, you never think about it again.</p>\n<p>The plugin will be available soon through the <a href=\"https://marketplace.getpublii.com/plugins/llms-txt-generator/\">Publii marketplace</a>.</p>\n<h2>Add It. Here's Why.</h2>\n<p>Here's the truth: <strong>you should add llms.txt to your site.</strong> All sites. Small blogs, local businesses, niche content communities, everything in between.</p>\n<p>The calculation is straightforward. There's literally no downside. The Publii plugin generates it automatically once, then maintains itself. It takes 10 minutes to enable. If AI platforms never adopt llms.txt, your site loses nothing — the file just sits there harmlessly. If they do, you're already there.</p>\n<p>But there's a bigger reason.</p>\n<p>Right now, traffic is fragmenting. Your small business blog isn't just competing for Google visibility anymore. People are asking ChatGPT questions that could lead them to your content. Perplexity is summarizing information with citations. Claude is answering questions while pulling from your pages. These platforms handle hundreds of millions of searches monthly, and the number keeps growing.</p>\n<p>You're already visible to these systems. Google indexes your site, so AI platforms can crawl it. The question isn't whether they see you — it's whether they can <em>find your best stuff quickly.</em> An llms.txt file is basically a highlight reel. It says, \"Here's what I'm actually good at. Start here.\"</p>\n<p>Even if llms.txt never becomes official protocol, you're training AI systems to understand your site better. You're curating how machines read you. That's valuable regardless of what comes next.</p>\n<p>The setup is genuinely painless with Publii. You're not writing complex XML or managing metadata spreadsheets. The plugin figures out your best content, organizes it, and handles updates. Add one line to your config file. Done. Move on with your actual work.</p>\n<p>Why wait for evidence when you can hedge your bets for free?</p>\n<h2>Your Next Step</h2>\n<p>If you're running Publii, the answer is obvious: install the plugin and enable it. Configuration takes less time than your morning coffee. You'll spend more effort worrying about whether to do it than actually doing it.</p>\n<p>For other platforms, evaluate your options. Some CMS systems already support llms.txt generation. Others let you upload it manually. The effort scales with your site's complexity, but it shouldn't be more than an hour of work for most sites.</p>\n<p>Then continue doing what actually matters: write better content, improve your information architecture, maintain fresh material, build legitimate expertise. These fundamentals drive visibility in both human search and AI systems. llms.txt is an amplifier for content that already works.</p>\n<p>The AI platforms will figure out their own adoption timelines. Your job is to make your content as accessible and well-organized as possible. llms.txt is one tool for that. But it's a tool that costs nothing to implement and might matter a lot.</p>\n<p>So implement it.</p>\n<h2>The Bigger Picture</h2>\n<p>llms.txt sits at the intersection of hope and pragmatism. It addresses a real problem — how AI systems efficiently find your best content — but may or may not become the actual solution.</p>\n<p>What's undeniable? Content discovery is increasingly AI-mediated.</p>\n<p>ChatGPT, Perplexity, Claude, and Microsoft Copilot now receive enormous amounts of traffic from users worldwide. Google has launched AI Mode. Industry analysts forecast that AI-powered search could capture significant market share in coming years. These aren't distant possibilities — they're current realities reshaping how people discover information.</p>\n<p>The llms.txt debate crystallizes a larger question facing content creators in 2025: How do you prepare for a future that's simultaneously inevitable in direction but uncertain in specifics?</p>\n<p>The answer likely involves maintaining strong fundamentals while selectively experimenting with emerging standards, measuring everything possible, and staying flexible as the landscape evolves.</p>\n<p>For now, llms.txt remains a proposed standard seeking adoption — promising in concept, uncertain in execution, and controversial in value. <strong>The next 12-24 months</strong> will determine whether it joins robots.txt and sitemap.xml as essential web infrastructure or fades as an interesting experiment that addressed a problem AI systems solved differently.</p>\n<p>Either way, the attention it's generating reveals how seriously the industry takes AI-readable content optimization.</p>\n<p>And that seriousness? Entirely justified.</p>",
            "image": "https://getpublii.com/blog/media/posts/91/llms-txt-statistic-4.webp",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Publishing"
            ],
            "date_published": "2025-10-23T16:01:19+02:00",
            "date_modified": "2026-01-10T11:09:01+01:00"
        },
        {
            "id": "https://getpublii.com/blog/publii-make-your-website-better-than-ever.html",
            "url": "https://getpublii.com/blog/publii-make-your-website-better-than-ever.html",
            "title": "Why Publii CMS Might Be the Website Tool You&#x27;ve Been Looking For",
            "summary": "Building a website today feels different than it did a few years ago. You're not just competing with other blogs anymore — you're trying to get noticed by AI models, satisfy increasingly picky search algorithms, and keep your visitors' data&hellip;",
            "content_html": "<p>Building a website today feels different than it did a few years ago. You're not just competing with other blogs anymore — you're trying to get noticed by AI models, satisfy increasingly picky search algorithms, and keep your visitors' data safe while still delivering a fast, beautiful experience.</p>\n<figure class=\"post__image post__image--wide\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/18/publii-make-website-better-than-ever.webp\" alt=\"Alt text\" width=\"2688\" height=\"1580\"></figure>\n<p>That's a lot to juggle, especially if you're an independent creator who just wants to write and publish without wrestling with servers, databases, or security patches.</p>\n<p>Publii solves this. It's evolved into something pretty remarkable since its early days.</p>\n<p>I'll show you what makes it different — not with marketing hype, but with the actual features that solve real problems you're probably facing right now.</p>\n<h2>The Big Picture: What Makes Publii Different</h2>\n<p>Before we dive into specifics, here's the core idea: Publii generates static websites locally on your computer, then sends them directly to your server. No database. No WordPress backend sitting there vulnerable to attacks. No constant updates breaking your site at 3 AM.</p>\n<p>Everything happens on your machine first. You write, customize, preview — all offline. Then when you're ready, you sync it to your hosting. The result is a website that loads instantly, stays secure, and costs almost nothing to run.</p>\n<p>But that's just the foundation. The real value comes from how Publii handles the details.</p>\n<h2>Write the Way You Actually Think</h2>\n<p>You know what's annoying? Being forced to write in a specific editor that doesn't match your brain. Some people think in formatted paragraphs. Others live in Markdown. Some need semantic structure handled automatically.</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://getpublii.com/blog/media/posts/18/three-editors-wysiwyg-markdown-block-copy.webp\" alt=\"WYSIWYG for formatting, Block for structure, Markdown for speed\" width=\"2688\" height=\"1580\">\n<figcaption>Write your way: WYSIWYG for formatting, Block for structure, Markdown for speed</figcaption>\n</figure>\n<p>Publii gives you three different editors, and you can switch between them on a per-post basis:</p>\n<p><strong>Block Editor</strong> — This one treats each content type (text, image, video, code) as its own clean section. You can reorder things smoothly without cluttering up your interface with a million buttons.</p>\n<p><strong>WYSIWYG Editor</strong> — The classic approach. If you're comfortable with a regular word processor, this works exactly how you'd expect. It includes a live stats panel that tracks your word count, reading time, and sentence structure as you write. Small detail, but it keeps you aware of pacing without needing external tools.</p>\n<p><strong>Markdown Editor</strong> — For speed-typists who hate lifting their hands off the keyboard. Type, format with symbols, keep your flow uninterrupted. If you've ever used Bear, Obsidian, you'll feel right at home.</p>\n<p>The point isn't just variety — it's that your content, your tools, your rules. You're not adapting to how some platform wants you to work.</p>\n<h2>Images That Don't Kill Your Load Speed</h2>\n<p>Let's talk about a problem nobody enjoys fixing: image optimization.</p>\n<p>High-resolution photos from modern phones are huge. If you upload them directly to a site, mobile users suffer. But manually resizing images for different screen sizes? That's tedious busywork.</p>\n<p>Publii handles this automatically with responsive images. It creates multiple versions of each photo and serves the right one based on the visitor's device. Someone on a 4K monitor gets the full-resolution version. Someone on a phone gets a lighter file that still looks crisp on their smaller screen.</p>\n<p>On top of that, Publii automatically converts JPG and PNG images to WebP format — Google's newer, more efficient image standard. Smaller files, same quality. Your site loads faster without you doing anything.</p>\n<p>What's useful for developers and designers: you can configure image handling separately for different parts of your site. Featured images in hero sections can have different sizes than featured images in post listings. Gallery images, content images, author backgrounds — each can be optimized independently. If you're building custom themes or need precise control, <a href=\"https://getpublii.com/dev/how-images-work-in-publii/\">the documentation</a> covers the details.</p>\n<p>This matters more now because page speed is a direct ranking factor. Google doesn't just prefer fast sites — it actively penalizes slow ones. And in the age of AI-powered search, where models like ChatGPT or Perplexity pull content to answer queries, technical performance signals trust and authority.</p>\n<h2>Built for Privacy, Not Surveillance</h2>\n<p>Privacy regulations have changed since the early days.</p>\n<p>GDPR in Europe. CCPA in California. Increasing user awareness about tracking. If you're running a site today, you need to handle this properly — not just for legal compliance, but because your visitors actually care.</p>\n<p>Publii sites are private by default. Static sites don't collect user data, don't store credentials, don't send information to third parties. There's no database tracking visitor behavior. You're clean from the start.</p>\n<p>But most people do want <em>some</em> third-party tools. Analytics, maybe. Comments. A newsletter signup. Publii lets you add those, but with full privacy controls.</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://getpublii.com/blog/media/posts/18/publii-static-cms-cookies.webp\" alt=\"Cookie banner in Static Websites\" width=\"2688\" height=\"1580\">\n<figcaption>Handle cookies your way - choose what you share, block what you don't</figcaption>\n</figure>\n<p>The <strong>cookie banner</strong> system is more sophisticated than you'd expect. You can create a simple notice, or go deeper with granular consent options — letting visitors accept or reject specific cookie groups. Each third-party plugin can be tied to a consent category, so YouTube embeds only load after approval, Google Analytics respects user choices, and everything stays GDPR-compliant.</p>\n<p>There's also <strong>Google Consent Mode v2</strong> integration built in. If you use Google Analytics 4 or Google Ads, this is crucial for maintaining data collection while respecting regulations.</p>\n<p>What makes this different: the Publii app itself runs entirely offline on your computer. No cloud sync. No telemetry. No usage tracking. You're not feeding your content and habits back to some company's servers. It's your work, staying on your machine, until you decide to publish it.</p>\n<h2>Themes That Are Fast, Not Bloated</h2>\n<p>Publii themes are hand-coded with plain HTML, CSS, and vanilla JavaScript. No React. No Vue. No heavy frameworks that load hundreds of kilobytes before your content even appears.</p>\n<p>This sounds old-school, but it's actually the smartest approach for static sites. Frameworks are great for dynamic apps. For content websites? They're overkill. They slow down load times, complicate the code, and make your site harder for search engines and AI models to interpret.</p>\n<p>Publii's themes load fast because they're lightweight by design. And they're built with fluid typography — text that scales smoothly with screen size, not just at breakpoints. Even if someone resizes their browser window slightly, the layout adjusts to stay readable. Small touch, but it makes the experience feel polished.</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://getpublii.com/blog/media/posts/18/themes-rwd.webp\" alt=\"Typographic precision meets design — every detail matters\" width=\"2688\" height=\"1580\">\n<figcaption>Precision meets design — every detail matters</figcaption>\n</figure>\n<p>Publii goes deeper than most platforms: <strong>typographic precision</strong>.</p>\n<p>The themes use a <strong>modular scale</strong> for font sizing. Instead of randomly picking 16px for body text, 24px for an H3, and 32px for an H2, everything follows a mathematical ratio. Usually something like 1.25 (major third) or 1.333 (perfect fourth). This creates visual harmony — headings relate to each other and to body text in a way that just <em>feels</em> right, even if visitors can't articulate why.</p>\n<p>There's also careful attention to <strong>vertical rhythm</strong>. Each element aligns to a baseline grid, so line heights, margins, and spacing all follow consistent intervals. This isn't just aesthetic perfectionism — it makes long-form content significantly easier to read. Your eyes don't have to constantly adjust to irregular spacing as they move down the page.</p>\n<p>And typography doesn't stop at sizing. Publii themes use <strong>variable fonts</strong> loaded locally from your server. No Google Fonts CDN calls. No external requests that slow down your first paint or leak visitor data to third parties.</p>\n<p>Variable fonts are a relatively recent web standard that packs multiple font weights and styles into a single file. Instead of loading separate files for regular, bold, italic, and bold-italic (which means 4+ HTTP requests), you get one file with continuous control over weight, width, and sometimes even slant. Smaller total file size, more typographic flexibility, better performance.</p>\n<p>It's the kind of detail most people won't consciously notice, but it compounds with everything else to create a reading experience that feels professional and polished.</p>\n<p>Themes also include lazy loading by default. Images, videos, even comments load only when the visitor scrolls to them. The initial page load is lightning-fast, which keeps bounce rates low and keeps visitors engaged.</p>\n<h2>SEO and AI Visibility Done Right</h2>\n<p>This has changed the most in recent years: what it means to be \"findable\" online.\"</p>\n<p>Traditional SEO still matters — title tags, meta descriptions, clean URLs, XML sitemaps. Publii generates all of that automatically. But now there's a new layer: AI discoverability.</p>\n<p>ChatGPT, Perplexity, Google's SGE (Search Generative Experience) — these systems analyze websites differently than traditional search engines. They need semantic clarity. Clean structure. Metadata that helps them understand context and trustworthiness.</p>\n<p>Publii generates <strong>semantic HTML5</strong> by default. That means proper heading hierarchy, meaningful tag structure, and microdata markup for full post pages. This isn't just \"nice to have\" — it's how AI models determine whether your content is credible enough to cite or include in answers.</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://getpublii.com/blog/media/posts/18/open-graph-protocol.webp\" alt=\"Automatic Open Graph tags, semantic HTML, and AI-ready structure — findable everywhere\" width=\"2688\" height=\"1580\">\n<figcaption>Automatic Open Graph tags, semantic HTML, and AI-ready structure — findable everywhere</figcaption>\n</figure>\n<p>You also get <strong>Open Graph</strong> tags automatically. When someone shares your post on social media, it looks professional with the right image, title, and description. But beyond appearances, AI models also parse these tags to understand your content's context and authority.</p>\n<p>And URLs? By default, Publii creates clean, readable links. Turn on \"<strong>Pretty URLs</strong>\" and extensions disappear entirely — just clear, semantic paths that make sense to humans and machines.</p>\n<p>The <strong>XML sitemap</strong> is auto-generated and kept current. Search engines and AI crawlers use this to explore your site efficiently, discover new content, and build a complete picture of what you offer.</p>\n<p>This stuff matters because visibility isn't just about Google ranking anymore. It's about whether an AI model considers your content trustworthy enough to reference when answering a user's question.</p>\n<h2>Pages, Not Just Posts</h2>\n<p>For years, Publii focused exclusively on blog posts. That was fine for many users, but limiting for others who wanted static landing pages, about sections, or service descriptions.</p>\n<p>Version 0.46 changed that by introducing <strong>Pages</strong> — dedicated content types separate from your blog. Now you can build a complete website structure: blog posts for timely content, pages for evergreen information.</p>\n<p>This opens up Publii for more than just personal blogs. Small business sites, portfolios, documentation hubs — anything that needs both static pages and \"dynamic\" content.</p>\n<h2>Plugins and Extensibility</h2>\n<p>Early versions of Publii were fairly locked down. You got what you got. But starting with version 0.39, the plugin system opened things up.</p>\n<p>The <a href=\"https://marketplace.getpublii.com/plugins/\">Publii Marketplace</a> now offers plugins for everything you'd actually need — analytics, search, comments, social sharing, galleries, syntax highlighting, and various developer tools. Both free and premium options available.</p>\n<p>What's smart about this is the privacy integration. Each plugin can be tied to specific cookie consent groups. Add YouTube embeds or analytics? Visitor consent gets handled automatically through the cookie banner. No code editing needed.</p>\n<p>Everything installs through the app interface. Just download, enable, configure. The ecosystem keeps growing, but the foundation works.</p>\n<h2>Switching from WordPress? It's Easier Than You Think</h2>\n<p>If you're already running a WordPress site and feeling exhausted by constant updates, security worries, or slow load times, Publii includes a <strong>WordPress importer</strong>.</p>\n<p>It pulls your posts, pages, and categories over in minutes. You're not starting from scratch — you're moving your existing content to a faster, more secure platform without losing your audience.</p>\n<h2>The Performance Stack: Everything Working Together</h2>\n<p>Let me bring this all together. Publii's advantage isn't one killer feature — it's how everything compounds:</p>\n<ul>\n<li><strong>Static generation</strong> eliminates database overhead</li>\n<li><strong>Responsive images</strong> serve optimal sizes automatically</li>\n<li><strong>WebP conversion</strong> shrinks file sizes without quality loss</li>\n<li><strong>Lazy loading</strong> prioritizes above-the-fold content</li>\n<li><strong>Clean, semantic code</strong> loads fast and ranks well</li>\n<li><strong>Minification and compression</strong> squeeze out extra performance</li>\n<li><strong>Local generation</strong> means no server processing time</li>\n</ul>\n<p>The result? Sites that load in under a second, even on slower connections. That's not just \"nice for users\" — it's a ranking signal, a trust signal, and a conversion factor.</p>\n<p>Fast sites keep visitors engaged. Slow sites lose them before the content even appears.</p>\n<h2>Who Is This Really For?</h2>\n<p>Publii works best for <a href=\"https://getpublii.com/blog/why-you-should-own-your-content-not-rent-it.html\">independent creators</a>, small businesses, and anyone who values control over their content.</p>\n<p>If you're a blogger, writer, or consultant who wants a professional web presence without technical headaches — this is it.</p>\n<p>If you're building a small business site and need fast performance without paying for expensive hosting — this handles that.</p>\n<p>If you care about privacy, both yours and your visitors', and you're tired of platforms treating your content as data to harvest — Publii respects that boundary.</p>\n<p>What it's <em>not</em> great for: complex web apps, e-commerce with hundreds of products, or sites that need real-time user interaction. Static sites have limits. But for content-driven websites, those limits rarely matter.</p>\n<h2>The Bottom Line</h2>\n<p>Publii has changed a lot since 2016. It's no longer just a simple static site generator — it's a complete content management system designed for the realities of 2026.</p>\n<p>You get speed, security, privacy, and AI-readiness out of the box. You control your workflow with multiple editors and plugin options. You own your content completely, with no platform lock-in.</p>\n<p>It just works. No surprises at 3 AM. No security patches breaking your site. No performance degradation as your traffic grows.</p>\n<p>If you've been thinking about simplifying your web presence — or if you're just tired of fighting with WordPress — Publii is worth trying. <a href=\"https://getpublii.com/download/\">Download it</a>, build a test site, and see how it feels to work with a tool designed around your needs instead of around ads, tracking, and vendor lock-in.</p>\n<p>Your website doesn't need to be complicated to be good. Sometimes simpler is exactly what wins.</p>",
            "image": "https://getpublii.com/blog/media/posts/18/publii-make-website-better-than-ever-copy.webp",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Publishing",
                   "How it works?"
            ],
            "date_published": "2025-10-13T09:29:00+02:00",
            "date_modified": "2025-10-14T17:48:39+02:00"
        },
        {
            "id": "https://getpublii.com/blog/why-you-should-own-your-content-not-rent-it.html",
            "url": "https://getpublii.com/blog/why-you-should-own-your-content-not-rent-it.html",
            "title": "Why You Should Own Your Content (Not Rent It)",
            "summary": "Look, I get it. WordPress.com is easy. Medium has that clean interface. Substack handles everything for you. It's tempting to just sign up and start writing. But here's the thing nobody talks about: you're building your house on someone else's&hellip;",
            "content_html": "<p>Look, I get it. WordPress.com is easy. Medium has that clean interface. Substack handles everything for you. It's tempting to just sign up and start writing. But here's the thing nobody talks about: you're building your house on someone else's land. And that land? It comes with rules you didn't write, costs you didn't plan for, and an exit door that might be harder to find than you think.</p>\n<figure class=\"post__image post__image--wide\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/90/own-your-content-2.png\" alt=\"Why You Should Own Your Content\" width=\"2688\" height=\"1580\"></figure>\n<h2>The Real Cost of \"Free\" Platforms</h2>\n<p>When Medium says it's free, what they really mean is: free until we change our minds. Free until we decide your content belongs behind a paywall. Free until we pivot our business model. Again.</p>\n<p>I've watched this happen. Writers who spent years building audiences woke up one day to find their traffic cut in half because of algorithm changes. Or their articles locked behind paywalls they didn't choose. Or worse – their accounts suspended with no real explanation.</p>\n<p>WordPress.com isn't much better. Sure, the basic tier is free. But want a custom domain? That'll cost you. Want to remove their branding? More money. Want plugins? Even more. Before you know it, you're paying $25 a month for features you could have for free elsewhere.</p>\n<p>And Substack? They take 10% of everything you make. Forever. That might not sound like much when you're starting out, but imagine having 10,000 subscribers paying $5 a month. That's $5,000 going to Substack. Every. Single. Month. For what, exactly?</p>\n<h2>What Platform Dependence Actually Means</h2>\n<p>Here's what happens when you depend on a platform: They change their terms of service – you agree or you leave. They increase prices – you pay or you leave. They shut down a feature you rely on – you adapt or you leave. They get acquired by a company you don't trust – you... well, you get it.</p>\n<p>You're not really in control. You're a tenant, not an owner. And tenants can be evicted.</p>\n<h2>So What's the Alternative? Static Sites. Real Ownership.</h2>\n<p>This is where something like <a href=\"https://getpublii.com/\">Publii</a> makes sense. It's not sexy. It won't go viral on Twitter. But it gives you something those platforms can't: actual ownership.</p>\n<p>Publii is a static site generator – but unlike command-line tools like Hugo or Jekyll, it's a desktop application with a clean graphical interface. What does that mean in practical terms? Your website is just files. HTML, CSS, images. No database constantly running in the background. No server processing requests. Just... files.</p>\n<p>Think of it like the difference between renting an apartment and owning a small, portable house. Your Publii site? You can pick it up and move it anywhere. Host it on Netlify today, GitHub Pages tomorrow, your own server next month. Doesn't matter. The files are yours.</p>\n<p>And here's something clever: Publii has <a href=\"https://marketplace.getpublii.com/plugins/\">plugins</a> and <a href=\"https://marketplace.getpublii.com/themes/\">themes</a>, but they work differently than WordPress. Instead of running on your server (creating security risks), they operate locally on your computer during the build process. By the time your site hits the server, it's just clean, static HTML. All the functionality has already been baked in. No server-side code means no server-side vulnerabilities.</p>\n<p>Want to dive deeper into the differences? Check out this <a href=\"https://getpublii.com/static-vs-dynamic-comparison/\">comprehensive comparison between static and dynamic websites</a>.</p>\n<h2>The Speed Thing (And Why It Actually Matters)</h2>\n<p>Static sites are fast. Really fast. WordPress sites typically load in 2-4 seconds. That's if they're well-optimized. A poorly configured WordPress site? We're talking 6-10 seconds. Maybe more.</p>\n<p>Publii sites? Under two seconds. Often way under.</p>\n<p>Why does this matter? Because people are impatient. Google is impatient. That slow-loading blog post? Most people will leave before it finishes loading. And Google will rank you lower for it.</p>\n<p>But speed isn't just about numbers. It's about respect. When your site loads instantly, you're respecting your readers' time. You're not making them wait while your database queries run and your plugins load and your tracking scripts phone home.</p>\n<p>Discover more about <a href=\"https://getpublii.com/seo-performance/\">Publii's SEO and performance optimization features</a>.</p>\n<h2>The Privacy Angle (And Why GDPR Isn't Going Away)</h2>\n<p>Speaking of tracking scripts... Every major platform tracks your readers. They have to. That's how they make money. They build profiles, serve ads, collect data, sell insights.</p>\n<p>With Publii, there's none of that by default. No tracking. No cookies that need consent banners. No data collection. No third-party scripts running in the background. This isn't just nice for privacy-conscious readers. It's legally significant.</p>\n<p>GDPR in Europe. CCPA in California. Privacy laws are spreading. And they're getting stricter. Running a site on major platforms with all their default tracking? You're probably violating several of them without even knowing it.</p>\n<p>A static Publii site with no tracking? You're compliant by default. Right out of the box.</p>\n<p>Of course, full GDPR compliance also depends on the content you embed – if you add a YouTube video or Google Maps, those bring their own tracking. But Publii gives you the tools to handle this properly. With <a href=\"https://getpublii.com/privacy-focused/\">built-in privacy features</a> like consent management, lazy loading for embeds, and privacy-friendly alternatives for common services, you can maintain compliance while still having the functionality you need.</p>\n<p>You can add analytics later if you want. Privacy-respecting ones like Plausible or Fathom. But you're starting from a clean slate, not trying to untangle a mess of third-party scripts.</p>\n<h2>The Security Question Nobody Asks</h2>\n<p>Here's a truth about websites: the more complex they are, the more vulnerabilities they have.</p>\n<p>WordPress powers about 40% of the web. That makes it a massive target. Every plugin is a potential security hole. Every theme update is a risk. Every database query is an opportunity for SQL injection. The WordPress security team does good work. But they're always playing defense. New vulnerabilities are found constantly.</p>\n<p>Static sites? There's almost nothing to hack. No database to inject SQL into. No admin panel to brute force. No server-side code to exploit. Just static files sitting on a server.</p>\n<p>Can someone hack your hosting account? Sure, if you use a terrible password. But they can't exploit your website itself because there's no website to exploit – just HTML files.</p>\n<h2>Let Me Be Honest About Downsides</h2>\n<p>Publii isn't perfect. Nothing is.</p>\n<p>You need to think about hosting. Most platforms handle this for you. With Publii, you're choosing where to host. Though honestly, this takes about 10 minutes to set up on Netlify or Vercel, and then you never think about it again.</p>\n<p>Comments aren't built directly into the core app, but you can easily add them through plugins like Commento, Cusdis, Hyvor Talk, or others from the marketplace. Or just skip them entirely and direct people to social media.</p>\n<p>And if you want complex functionality – user accounts, e-commerce, interactive features – you'll need to integrate external services. A pure static site can't do database-driven features.</p>\n<p>But here's the thing: most people don't need that stuff. Most people just need to publish articles. Maybe show some images. Link to their social media. That's it. And for that use case, Publii is actually better than the alternatives.</p>\n<h2>The \"But WordPress Has Plugins!\" Argument</h2>\n<p>Yes. WordPress has 60,000+ plugins.</p>\n<p>You know what else comes with 60,000+ plugins? 60,000 potential security vulnerabilities. 60,000 different ways for your site to break when something updates. 60,000 pieces of code that might conflict with each other.</p>\n<p>I've spent hours debugging WordPress sites where two plugins just... didn't like each other. Nothing in the documentation said they'd conflict. But they did. And the site went down.</p>\n<p>Or worse – plugins that aren't actively maintained become incompatible with new WordPress versions over time, leaving your site vulnerable or broken. Just look at <a href=\"https://www.wordfence.com/blog/\" target=\"_blank\" rel=\"noopener\">Wordfence's weekly security reports</a>: \"40,000 WordPress Sites Affected by Arbitrary File Read Vulnerability\", \"88 Vulnerabilities in This Week's Report\", \"200,000 Sites Affected by File Deletion Vulnerability\". This isn't occasional. It's constant.</p>\n<p>With Publii, there's just less stuff that can go wrong. Fewer moving parts. Fewer things to update. That's not a limitation — that's the point.</p>\n<h2>What About Moving Your Content?</h2>\n<p>This is where platform dependence really hurts.</p>\n<p>Try exporting your content from Medium. You get a messy ZIP file with HTML fragments. Your images? They're still hosted on Medium's servers. Your formatting? Probably broken. Your URLs? All changed.</p>\n<p>Moving from WordPress.com to self-hosted WordPress? Easier, but you're still tied to WordPress. And you lose features you might have been paying for.</p>\n<p>Moving from Substack? Your subscriber list comes with you (if they let you export it), but you're starting over with distribution.</p>\n<p>With Publii, everything is just files. Your entire website is HTML files on your computer – that's what Publii generates as output. You can copy them anywhere. Back them up to Dropbox. Push them to GitHub. Host them in twelve different places at once if you want.</p>\n<p>And here's something that really sets Publii apart: even in the unlikely event that the project ever stopped being maintained (which seems improbable given its growing popularity and active community), you'd still be fine. The app would continue working on your computer, generating your sites exactly as it does today. No server-side dependencies. No subscription that expires.</p>\n<p>Plus, those HTML files? You can edit them directly in any code editor if you ever need to. Your content isn't locked in a proprietary format or trapped in someone's database.</p>\n<p>Everything is yours. The files. The URLs. The images. All of it. Not licensed to you. Not stored on their servers. Yours.</p>\n<h2>The Cost Breakdown (Because Math Matters)</h2>\n<p>Let's be realistic about costs:</p>\n<ul>\n<li><strong>Medium</strong>: Free to write, but they take a cut of earnings and control monetization.</li>\n<li><strong>WordPress.com Personal</strong>: $48/year (when billed annually) or $9/month ($108/year) for basic features.</li>\n<li><strong>Substack</strong>: 10% of all revenue, forever.</li>\n<li><strong>Ghost Pro</strong>: $15/month for starter package.</li>\n<li><strong>Publii + Netlify</strong>: $0. Actually $0. Not \"free tier that'll expire.\" Just free.</li>\n</ul>\n<p>You can upgrade to paid hosting later if you need it. But most blogs will never outgrow free tier hosting on Netlify, Vercel, or Cloudflare Pages. So you're comparing $0 to $96-300+ per year. And with the free option, you own everything.</p>\n<p>Here's why Publii hosting costs nothing: static sites don't need expensive infrastructure. No PHP processing. No MySQL databases. No server-side computing. Just files served straight from a CDN.</p>\n<h2>When Publii Makes Sense (And When It Doesn't)</h2>\n<p>Like any tool, Publii isn't for everyone. It's designed with a specific use case in mind – and it excels at that. But it's important to understand whether your needs align with what Publii does best.</p>\n<p>Publii makes sense if you're writing articles, running a portfolio, or just want a fast business site without the drama. It's for people who care about owning their platform, not renting it. People who value speed, privacy, and security. People who don't want ongoing costs eating into their budget every month.</p>\n<p>But if you need user accounts, real-time team editing, or built-in e-commerce? You'll need something else. If you're building a community platform with forums or complex interactive features, Publii isn't the right tool.</p>\n<p>Most creators fall into the first category. They just want to write and publish without drama.</p>\n<h2>It Comes Down to One Question: Independent, or Dependent?</h2>\n<p>Platforms want you dependent. That's their business model. Get you in, get you comfortable, get you invested. Then slowly turn the screws. Increase prices. Change features. Add restrictions.</p>\n<p>It's not evil. It's just business. But you don't have to play that game.</p>\n<p>With Publii, you're choosing independence. You're choosing to own your platform. You're choosing to control your costs. You're choosing to decide what tracking and analytics you use, if any. You're choosing to build on land you own. And when the next platform melts down – and there will be a next one, there always is – you'll be watching from a distance, grateful you made the choice to be independent.</p>\n<h2>Getting Started (Without the Overwhelm)</h2>\n<p>If this resonates with you, here's how to start:</p>\n<ol>\n<li><strong><a href=\"https://getpublii.com/download/\">Download Publii</a></strong>. It works on Windows, Mac, and Linux. The interface is simpler than you'd think.</li>\n<li><strong>Write a post</strong>. Choose from WYSIWYG, Markdown, or Block Editor — whatever fits your workflow.</li>\n<li><strong>Choose hosting</strong>. Netlify is probably easiest. Connect it once, forget about it.</li>\n<li><strong>Hit publish</strong>. Your site is live.</li>\n</ol>\n<p>That's it. No database to configure. No security hardening. Just write and publish.</p>\n<h2>The Long Game</h2>\n<p>Platforms come and go. Remember Google+? Vine? Posterous? All gone. Taking thousands of creators' content with them.</p>\n<p>The creators who owned their platforms? They migrated and kept going.</p>\n<p>This isn't about being paranoid. It's about being realistic. Companies change. Priorities shift. What's free today might not be tomorrow. Building on Publii means you're not making a bet on a company.</p>\n<p>You're making a bet on yourself. Your content stays yours. Your audience stays yours. Your control stays yours. That's not just better for business. It's better for peace of mind. And honestly? With everything going on in the tech world heading into 2026, a little peace of mind is worth a lot.</p>\n<hr>\n<p>So yeah. Platforms are convenient. But convenience has a price. Sometimes that price is money. Sometimes it's control. Sometimes it's both.</p>\n<p>Publii is a bit less convenient upfront. But over time? It's liberating. You publish what you want, when you want, how you want. No algorithm to appease. No terms of service to worry about. No surprise price increases.</p>\n<p>Just you, your content, and your readers. The way it should be.</p>\n<p><small>* All pricing and features mentioned in this article were accurate as of October 11, 2025.</small></p>",
            "image": "https://getpublii.com/blog/media/posts/90/own-your-content.png",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Publishing"
            ],
            "date_published": "2025-10-11T10:55:05+02:00",
            "date_modified": "2025-10-11T17:28:22+02:00"
        },
        {
            "id": "https://getpublii.com/blog/release-047.html",
            "url": "https://getpublii.com/blog/release-047.html",
            "title": "Publii CMS v0.47.x: Introducing the Notification Center, Many Fixes and Improvements",
            "summary": "Welcome back after the summer break! We're excited to announce the release of Publii CMS v0.47. This latest update is primarily focused on introducing a long-awaited feature: the Notification Center. Alongside this new addition, this version also includes a significant&hellip;",
            "content_html": "<p>Welcome back after the summer break! We're excited to announce the release of Publii CMS v0.47. This latest update is primarily focused on introducing a long-awaited feature: the <strong>Notification Center</strong>. Alongside this new addition, this version also includes a significant number of patches and improvements, addressing many of the bugs and suggestions reported by our community.</p>\n<h2>The Notification Center: A Central Hub for All Publii Updates</h2>\n<p>Staying on top of the latest updates for Publii, its themes, and plugins is now easier than ever with the introduction of the much-requested <strong>Notification Center</strong>. This new feature provides a centralized hub for all important communications, ensuring you're always in the loop.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/89/notification-center-publii.webp\" alt=\"Publii Static CMS Notification Center\" width=\"2160\" height=\"2145\"></figure>\n<p>The Center is organized into clear sections, displaying several types of alerts:</p>\n<ul>\n<li><strong>Application Updates:</strong> Be the first to know when a new version of Publii is available.</li>\n<li><strong>Theme &amp; Plugin Updates:</strong> Get notifications for your installed themes and plugins.</li>\n<li><strong>News &amp; Announcements:</strong> Occasionally, we may send special messages or news from the Publii blog directly to the app.</li>\n</ul>\n<p>Each update notification provides all the necessary details at a glance, including your current version, the new version number or a link to view update details. Crucially, it also contains a direct link to the Publii site to download the new package. This puts you firmly in control; <strong>you decide if and when you want to update.</strong></p>\n<p>To make notifications more relevant, they can be targeted to specific platforms. For instance, if we release a hotfix that only applies to the Windows version of Publii, only Windows users will be alerted.</p>\n<p>We also understand that you may not want to act on an update immediately. If a notification alert becomes distracting, you can simply <strong>mark it as read.</strong> This will dismiss the prompt, but the information will remain available in the Notification Center for you to review later. Furthermore, you can delete notifications at any time, or if you prefer, you can disable the feature entirely in the application settings by withdrawing your consent.</p>\n<h2>Additional Features &amp; Enhancements</h2>\n<p>In this release, we've also included several smaller, but highly useful, features that will definitely improve your day-to-day experience with Publii. These include:</p>\n<h3>New Link Options in Editors</h3>\n<p>We've enhanced link management across Publii's editors to give you more styling and accessibility control. In the standard WYSIWYG editor, you can now directly specify a <strong>CSS class</strong> for your links. This is perfect for applying custom styles, like creating buttons or visually distinct links, without leaving the editor.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/89/block-editor-title-class-atributes.png\" alt=\"Class and Title link attributes\" width=\"2160\" height=\"1320\"></figure>\n<p>The Block Editor receives an even bigger upgrade. In addition to assigning a <strong>CSS class</strong>, you can now also define the <strong>title</strong> attribute for your links. This addition is excellent for improving your site's accessibility and providing extra context to your visitors.</p>\n<h3>File Manager in the Sidebar</h3>\n<p>For users who frequently work with files, we're testing a new workflow enhancement that brings the File Manager right to your fingertips. This provides instant, one-click access, saving you a few steps every time you need to manage your site's files.</p>\n<p>To try it out, click the three-dots menu in the top-right corner and select <strong>App Settings</strong> from the dropdown. In the window that appears, scroll to the bottom to find the <strong>Experimental Features</strong> section, where you can enable this option.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/89/show-file-manager-in-sidebar-option.png\" alt=\"File manager in sidebar \" width=\"2160\" height=\"1065\"></figure>\n<p class=\"msg info\"><strong>Note:</strong> As this is an experimental feature, its behavior or placement may change in future updates based on community feedback. </p>\n<p>Finally, this update also bundles in several other handy improvements:</p>\n<ul>\n<li>\n<p><strong>Small Upload in Repeater:</strong> For theme and plugin developers, we've added support for the <code>smallupload</code> control within the Repeater field. Previously, only the large image uploader was available. Now, for more compact layouts, you can use the much smaller upload UI.</p>\n</li>\n<li>\n<p><strong>Custom S3 Cache-Control Headers:</strong> Based on valuable community feedback (ref, <a href=\"https://github.com/GetPublii/Publii/issues/2254\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a>), we’ve added more control over HTTP headers for S3-compatible deployments. Previously, Publii could set a restrictive <code>Cache-Control: no-cache</code> header on HTML files, which prevented some third-party CDNs from caching pages and impacting performance. You can now define custom <code>cache-control</code> headers directly in the S3 deployment settings. This provides greater flexibility and ensures better compatibility with a wider range of storage providers and CDN configurations.</p>\n</li>\n<li>\n<p><strong>New Global Variable:</strong> A new global variable, <code>@website.description</code>, has been added. Theme developers can now easily output the site's internal description (from the Site Settings) anywhere in their theme files.</p>\n</li>\n</ul>\n<h2>Improvements</h2>\n<p>We've made several improvements to enhance user experience and website functionality:</p>\n<ul>\n<li>Added a <strong>more descriptive error message</strong> that appears when a theme's JSON configuration file is invalid, making it easier to diagnose theme-related issues.</li>\n<li>The list of available <strong>AWS regions for S3 deployment has been updated</strong> to include the latest additions.</li>\n<li>To <strong>improve stability on Linux systems</strong>, the 'sharp' image processing library has been limited to a single thread to prevent potential memory-related issues during image generation.</li>\n<li>We have <strong>updated several core dependencies</strong>, including the Electron framework that Publii is built on. This brings the latest security patches, performance improvements, and bug fixes from the underlying technologies.</li>\n</ul>\n<h2>Bug Fixes</h2>\n<p>We've also addressed several bugs to improve stability and performance:</p>\n<ul>\n<li>Fixed a critical rendering issue related to file descriptors that could occur on sites with a very large number of files. (<a href=\"https://github.com/GetPublii/Publii/issues/2172\" target=\"_blank\" rel=\"noopener\">ref. GitHub Issue</a>)</li>\n<li>Corrected an issue where links to Tags pages could be generated incorrectly in certain scenarios.</li>\n<li>Resolved a bug that caused incorrect <code>og:url</code> meta tags to be generated for nested pages, which could impact social media sharing. (<a href=\"https://github.com/GetPublii/Publii/discussions/2195\" target=\"_blank\" rel=\"noopener\">ref. GitHub Discussion</a>)</li>\n<li>Addressed a problem where custom author avatars were not being saved correctly. (<a href=\"https://github.com/GetPublii/Publii/issues/2221\" target=\"_blank\" rel=\"noopener\">ref. GitHub Issue</a>)</li>\n<li>Fixed an issue that could occur when converting multiple posts to pages in bulk.</li>\n<li>Corrected the format of local file paths used in the preview server to resolve potential asset loading issues. (<a href=\"https://github.com/GetPublii/Publii/issues/2224\" target=\"_blank\" rel=\"noopener\">ref. GitHub Issue</a>)</li>\n<li>Fixed a minor issue with an incorrect label in the SEO settings section. (<a href=\"https://github.com/GetPublii/Publii/issues/2194\" target=\"_blank\" rel=\"noopener\">ref. GitHub Issue</a>)</li>\n</ul>\n<h2 id=\"hotfix-0-47-1\">Publii Bugfix 0.47.1</h2>\n<p>This update also brings a range of important fixes that improve stability, consistency, and reliability across the platform.</p>\n<ul>\n<li><strong>Block editor gallery upload issue</strong>: Fixed a bug where uploading images via the file picker in the gallery block could fail. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2342\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2342</a>)</li>\n<li><strong>Avatar URL prefix on Windows</strong>: Corrected an issue where the author avatar URL on Windows incorrectly included the <code>./</code> prefix. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2345\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2345</a>)</li>\n<li><strong>Improved input field handling in WYSIWYG editor</strong>: Enhanced support for input attributes and added stricter sanitization for <code>input[*]</code> fields to prevent inconsistencies. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2352#discussioncomment-14560041\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2352</a>)</li>\n<li><strong>Update data fetch improvements</strong>: Fixed errors when retrieving notification data if the update file was not yet available. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2337#discussioncomment-14511832\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2337</a>)</li>\n<li><strong>WebP orientation compensation</strong>: Added handling for cases where images contain conflicting EXIF orientation metadata, ensuring correct display after conversion to WebP, which does not preserve EXIF orientation. This adjustment compensates for discrepancies commonly found in images from mobile devices. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2322\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2337</a>)</li>\n<li><strong>Improved EN-GB translation file</strong>: Updated and corrected English (UK) locale strings to ensure better consistency in the interface. (ref. <a href=\"https://github.com/GetPublii/Publii-ui-locales/pull/92/files\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub PR #92</a>)</li>\n</ul>\n<h2 id=\"hotfix-0-47-2\">Publii Bugfix 0.47.2</h2>\n<p>This update brings essential fixes that improve rendering stability, editor functionality, and overall user experience across the platform.</p>\n<ul>\n<li><strong>WYSIWYG editor image handling</strong>: Improved handling of image options in the WYSIWYG editor.</li>\n<li><strong>New <code>{{#isNot}}</code> Handlebars helper</strong>: Introduced the <code>{{#isNot}}</code> helper as the logical opposite of the existing <code>{{#is}}</code> helper, allowing theme developers to check when a page context does NOT match specified types.</li>\n<li><strong>Draft page preview rendering</strong>: Resolved a bug that prevented page previews from rendering correctly when the page was saved as a draft, which previously caused an \"undefined reading 'url' error. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2365\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2365</a>)</li>\n<li><strong>RSS feed HTML content display</strong>: Fixed an issue where RSS feeds would not display HTML content properly in RSS readers when the \"Show full text\" option was disabled. The feed now includes the correct content type attribute. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2377\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2377</a>)</li>\n<li><strong>Mouse back/forward button blocking</strong>: Added blocking for custom back/forward mouse buttons to prevent unintended navigation when using mice with additional buttons. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1246#issuecomment-3216910129\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #1246</a>)</li>\n<li><strong>Posts-Dropdown control improvements</strong>: Enhanced the Posts-Dropdown control by extending <code>allowedPostStatus</code> functionality to properly support <code>featured</code>, <code>hidden</code>, and <code>excluded</code> statuses, and added filtering for trashed posts. Previously, only <code>any</code>, <code>published</code>, and <code>draft</code> worked correctly.</li>\n<li><strong>Rendering error handling improvements</strong>: Enhanced error display by adding missing translations and preventing error messages from extending beyond the error dialog boundaries.</li>\n<li><strong>Page hierarchy update after post-to-page conversion</strong>: Fixed page hierarchy updates when converting posts to pages. </li>\n<li><strong>Preview error with missing post templates</strong>: Fixed an issue where attempting to preview a post or page using a non-existent template (e.g., post-alternative.hbs) would cause a rendering error. The preview now handles missing templates gracefully. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2347\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2347</a>)</li>\n<li><strong>PowerShell syntax highlighting</strong>: Added PowerShell as a supported language for code blocks in the editors, enabling proper syntax highlighting for PowerShell scripts and commands. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2398\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2398</a>)</li>\n<li><strong>Minor UI improvements</strong>: Applied various small user interface refinements for better visual consistency and usability.</li>\n</ul>\n<h2 id=\"hotfix-0-47-3\">Publii Bugfix 0.47.3</h2>\n<p>This update delivers several important improvements focused on performance, editor capabilities, API flexibility, and UI polish across the application.</p>\n<ul>\n<li><strong>Plugin list loading on large sites</strong>: Fixed an issue where the list of installed plugins was being reloaded multiple times on large websites, causing unnecessary delays and increased resource usage. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2368#issuecomment-3399911204\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2368</a>)</li>\n<li><strong>XML syntax highlighting</strong>: Added XML as a supported language for syntax highlighting within the editors. This improvement does <strong>not</strong> require updating the Syntax Highlighter plugin. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2402\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2402</a>)</li>\n<li><strong>Formatted text in plugin messages</strong>: Enabled proper support for text formatting within plugin-generated messages, giving plugin developers greater flexibility in communicating information to users. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2391\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2391</a>)</li>\n<li><strong>New page creation loader fix</strong>: Fixed an animation glitch affecting the loader displayed when creating a new page. The spinner no longer shifts sideways or animates irregularly. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2396\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2396</a>)</li>\n<li><strong>Connection test settings not being saved</strong>: Fixed an issue where connection settings would not be saved when performing a connection test in the server configuration panel. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2355\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2355</a>)</li>\n<li><strong>Extended Publii CMS API for content element editing</strong>: Expanded the internal CMS API to support deeper editing capabilities for content elements. This enhancement was introduced as part of ongoing core improvements and does not reference a specific issue.</li>\n</ul>\n<h2 id=\"hotfix-0-47-3-build-17367\">Publii Hotfix 0.47.3 (Build 17367)</h2>\n<p>This maintenance update resolves a startup issue affecting new installations and users restoring a site from a backup.</p>\n<ul>\n<li><strong>Startup screen freeze fix</strong>: Fixed a bug where the initial \"Create your first website / Install from backup\" screen could become stuck with an infinite loading spinner, preventing users from creating a new site or restoring a <code>.tar</code> backup file. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2420\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2420</a>)</li>\n</ul>\n<h2 id=\"hotfix-0-47-4\">Publii Bugfix 0.47.4</h2>\n<p>This update introduces several refinements across Notification Center behavior, menu handling, rendering logic, the block editor, UI robustness, and the WordPress importer.</p>\n<ul>\n<li><strong>Menu - label helper for posts and pages</strong>: Added a manual helper icon that allows filling an empty menu label with the selected post or page title. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2441\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2441</a>)</li>\n<li><strong>Notification center - fresh updates pinned to the top</strong>: Newly detected updates are now displayed at the top of the relevant section (Themes or Plugins). After updating an item or marking the notification as read, the original sorting order is restored.</li>\n<li><strong>Rendering - skip tag pages without a slug</strong>: Tag archive pages are no longer rendered when a tag has no slug assigned, preventing invalid or “undefined” URLs from being generated. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2346\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #2346</a>)</li>\n<li><strong>Block editor - internal code hardening</strong>: Two minor, non-critical cleanups improving code resilience and long-term maintainability by handling edge cases and removing legacy patterns. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2366\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2366</a>, <a href=\"https://github.com/GetPublii/Publii/issues/2367\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2367</a>)</li>\n<li><strong>UI - improved handling of very long error messages</strong>: Error dialogs now correctly constrain their height to the viewport, ensuring long messages remain readable without breaking the layout. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2357#issuecomment-3485600455\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2357</a>)</li>\n<li><strong>WP importer - auto &lt;p&gt;/&lt;br&gt; insertion disabled by default</strong>: Automatic paragraph and line break insertion is now disabled by default, as it caused issues when importing content from Gutenberg, such as wrapping block comments in HTML tags. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2384\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2384</a>)</li>\n<li><strong>WP importer - single item import fix</strong>: Fixed a crash that could occur when importing a single post or a single page instead of a larger batch.</li>\n</ul>\n<h2 id=\"hotfix-0-47-5\">Publii Bugfix 0.47.5</h2>\n<p>This update focuses on editor stability, media handling reliability, structured data generation, UI usability improvements, and bundled theme maintenance.</p>\n<ul>\n<li><strong>Markdown editor - image insertion issue fixed</strong>: Fixed a problem where selecting an image in the Markdown editor could fail silently in certain environments (e.g. on-demand synced folders), preventing the image from being inserted despite a successful file selection. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1969#discussioncomment-15438314\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion #1969</a>)</li>\n<li><strong>Media processing - Jimp library upgraded</strong>: Updated the Jimp image processing library to the latest available version. This upgrade may resolve various issues related to thumbnail regeneration.</li>\n<li><strong>JSON-LD - author URL when author pages are disabled</strong>: Fixed JSON-LD output still linking to author pages even when <code>\"createAuthorPages\": false</code> was set, preventing schema URLs pointing to non-existent pages. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2464\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2464</a>)</li>\n<li><strong>UI - selectable text in error alerts</strong>: Error alert dialogs now allow text selection, making it easier to copy error messages for debugging, reporting issues, or sharing logs.</li>\n<li><strong>Theme update - Simple theme 3.2.1.0</strong>: Updated the bundled Simple theme to version 3.2.1.0, including internal fixes and refinements aligned with the latest Publii core changes.</li>\n</ul>\n<h2 id=\"hotfix-0-47-6\">Publii Bugfix 0.47.6</h2>\n<p>This update focuses on security hardening, GitHub API stability, sitemap reliability, slug handling improvements, developer experience enhancements, and core dependency upgrades.</p>\n<ul>\n<li><strong>Security - IPC input validation hardening</strong>: Improved security of inter-process communication by introducing stricter path validation helpers and argument validation across IPC handlers to reduce potential attack vectors.</li>\n<li><strong>GitHub API - large payload and 502 error fix</strong>: Fixed an issue where GitHub API requests could fail with <code>502 Bad Gateway</code> when uploading a large number of files at once. The issue was caused by changes in GitHub API behavior affecting <code>createTree</code> requests with large payloads, which required improved batching and request handling to maintain stability. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2465\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2465</a> or <a href=\"https://github.com/GetPublii/Publii/issues/2567\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2567</a>)</li>\n<li><strong>Sitemap generation - posts prefix fix</strong>: Fixed an issue where sitemap generation could fail or produce incorrect output when a custom posts prefix was configured. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2556\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2556</a>)</li>\n<li><strong>Handlebars - parent field in page context</strong>: Added a new <code>parent</code> field in page context, improving hierarchical data handling in themes. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2522\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2522</a>)</li>\n<li><strong>Global variable - @website.postsUrl</strong>: Introduced a new global Handlebars variable <code>@website.postsUrl</code> for easier access to the posts listing URL.</li>\n<li><strong>Dependencies - Electron and DOMPurify upgrade</strong>: Updated Electron and DOMPurify to the latest versions, improving security, stability, and performance.</li>\n<li><strong>DevTools - window position option</strong>: Added the ability to configure DevTools window position for improved developer workflow.</li>\n<li><strong>Slug handling improvements</strong>: Improved slug generation and normalization for more consistent and predictable URLs across edge cases.</li>\n<li><strong>UI - Cmd+H shortcut support</strong>: Added support for hiding the application using <code>Cmd+H</code> on macOS.(ref. <a href=\"https://github.com/GetPublii/Publii/issues/2492\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2492</a>)</li>\n<li><strong>DevTools warning for untrusted code</strong>: Added an additional warning in DevTools console before execution of untrusted code.</li>\n<li><strong>Translations - site settings fix</strong>: Fixed a typo in translation keys under site settings.</li>\n</ul>\n<h2>Final Thoughts</h2>\n<p>The release of Publii v0.47 reinforces our commitment to building a more intuitive and powerful platform, guided directly by the needs of our users. The new Notification Center is a major step towards better communication, while the host of enhancements and community-reported fixes demonstrates our ongoing dedication to quality and stability. Every update aims to refine your workflow and make managing your website a more seamless experience.</p>\n<p>Publii's evolution is a collaborative process, and your voice is the most critical part of it. We invite you to continue sharing your ideas, suggestions, and bug reports on our <a href=\"https://github.com/GetPublii/Publii/discussions\" target=\"_blank\" rel=\"noopener\">community forum</a>. Your active participation is what pushes the project forward.</p>\n<p><a class=\"btn with-icon white\" href=\"https://getpublii.com/download/\">Download Publii</a></p>",
            "image": "https://getpublii.com/blog/media/posts/89/publii_047.webp",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Releases"
            ],
            "date_published": "2025-09-23T09:27:56+02:00",
            "date_modified": "2026-04-24T14:50:19+02:00"
        },
        {
            "id": "https://getpublii.com/blog/release-046-5.html",
            "url": "https://getpublii.com/blog/release-046-5.html",
            "title": "Publii 0.46.5 Released: Smarter Post Prefix Handling, Plugin Asset Improvements, and More",
            "summary": "Publii continues its evolution, bringing sharper tools and smarter workflows to static site creation. Version 0.46.5 introduces expanded post prefix support, improved asset management for plugins, or significant refinements to metadata handling. This release also delivers a wide range of&hellip;",
            "content_html": "<p>Publii continues its evolution, bringing sharper tools and smarter workflows to static site creation. Version <strong>0.46.5</strong> introduces expanded post prefix support, improved asset management for plugins, or significant refinements to metadata handling. This release also delivers a wide range of stability improvements and bug fixes that enhance both the user experience and development flexibility. Whether you are building complex sites or simple blogs, Publii now provides an even stronger foundation for your projects.</p>\n<h2>Improvements</h2>\n<p>Several improvements have been introduced to enhance site flexibility, simplify development workflows, and improve overall performance.</p>\n<ul>\n<li><strong>Added post prefix page support to the Simple theme</strong>: The base Simple theme now includes a dedicated <code>posts.hbs</code> template. When a post prefix path (e.g., <code>/blog/</code>) is used, Publii will display a separate listing page using <code>posts.hbs</code> instead of falling back to the homepage <code>index.hbs</code>. This improves theme consistency and separation between homepage and post prefix listings.</li>\n<li><strong>Improved post prefix handling</strong>: When a post prefix (e.g., <code>/blog/</code>) is used, Publii now automatically renders the prefix path using the <code>posts.hbs</code> template if available, or falls back to <code>index.hbs</code>. There is no longer a requirement to set a page as the homepage to display content at the prefix URL. This makes prefix handling more flexible and eliminates empty folders at post prefixes.</li>\n<li><strong>Subfolder support for plugin assets</strong>: Publii now allows plugin developers to organize their assets within subdirectories. During rendering, files located in nested folders are correctly copied, enabling better asset organization and plugin structure.</li>\n<li><strong>Removed trailing slashes in meta tags</strong>: The meta tag generation logic for canonical and Open Graph URLs has been updated to remove redundant trailing slashes, resulting in cleaner and more SEO-friendly metadata. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2071\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>)</li>\n</ul>\n<h2>Bug fixes</h2>\n<p>This update also brings a range of important fixes that improve stability, consistency, and reliability across the platform.</p>\n<ul>\n<li><strong>Fixed saving of custom images for tags and authors</strong>: Resolved an issue where the custom image control for tags and authors did not save images correctly. Previously, saving changes could fail or canceling edits could unintentionally remove images. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2150\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2150</a>)</li>\n<li><strong>Fixed Sharp library issues on Linux</strong>: Resolved problems related to the Sharp image processing library on Linux systems, which previously caused errors during site generation or image optimization. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2128\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2128</a>)</li>\n<li><strong>Fixed Jimp library issues with enabled crop option</strong>: Resolved a problem where using the crop option in the theme images configuration caused errors or incorrect image processing due to issues with the Jimp library. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2128#issuecomment-2798809600\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Comment</a>)</li>\n<li><strong>Fixed cookie banner JavaScript errors without stored state</strong>: Resolved an issue where the cookie banner would throw JavaScript errors if no prior consent state was saved in localStorage. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1854#issuecomment-2727320327\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Comment</a>)</li>\n<li><strong>Fixed cache buster parameter timing issue during rendering</strong>: Resolved a major issue where the cache buster parameter (<code>?v=X</code>) for CSS and JS files was not updated correctly during the first site generation after changes. Previously, HTML files were generated before the updated CSS/JS assets were available, causing the {{ css }} and {{ js }} helpers to load outdated checksums. This could result in browsers serving cached versions of styles and scripts even after synchronization. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2030#discussioncomment-12799546\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>)</li>\n<li><strong>Fixed S3 synchronization issues when files are missing in the bucket</strong>: Resolved a problem where synchronization to S3 storage could fail if some expected files were missing from the target bucket. The sync process is now more robust and can handle incomplete bucket states without errors. (ref. <a href=\"https://github.com/GetPublii/Publii/pull/2144\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Pull Request #2144</a>)</li>\n<li><strong>Fixed GitLab repository synchronization issues</strong>: Resolved problems with synchronizing sites to GitLab repositories. Previous issues caused errors during the sync process, especially when working with private repositories or specific GitLab configurations. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1693#issuecomment-2655266054\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue</a>, <a href=\"https://github.com/GetPublii/Publii/discussions/1689#discussioncomment-11697541\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>)</li>\n<li><strong>Fixed WordPress WXR import issues with featured images</strong>: Resolved a problem where importing pages from a WordPress WXR export file failed if a featured image was attached. The import process has been updated to correctly handle and assign featured images for pages during migration. (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/2167\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>)</li>\n<li><strong>Fixed invalid canonical URL for post prefix page</strong>: Resolved an issue where the canonical tag for post prefix page (e.g., <code>/blog/</code>) incorrectly pointed to the root URL (<code>/</code>) instead of the correct prefix URL. </li>\n<li><strong>Blocked duplication of repeater elements after reaching maximum limit</strong>: Resolved an issue where users could duplicate existing repeater items even after reaching the configured <code>maxCount</code> limit. Duplication is now correctly blocked once the maximum number of entries is reached. Additionally, the duplicate button is visually disabled when the limit is exceeded. (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2085\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue #2085</a>)</li>\n<li><strong>Fixed disabled state handling for text inputs and textareas under tabbed settings</strong>: Resolved an issue where the disabled state for <code>text</code> inputs and <code>textarea</code> fields did not apply correctly when displayed inside tabbed plugin settings. </li>\n<li><strong>Various minor improvements</strong>: Introduced small refinements across the application, such as correcting typos in language files and improving overall text consistency.</li>\n</ul>\n<h2>Final Thoughts</h2>\n<p>With every update, Publii advances further in making static site management easier, faster, and more reliable. The improvements and fixes introduced in this release focus on flexibility, stability, and better user experience, building a stronger foundation for future developments.</p>\n<p>We encourage you to join the <a href=\"https://github.com/GetPublii/Publii/discussions\" target=\"_blank\" rel=\"noopener noreferrer\">Publii Community</a> to share your ideas, feedback, and suggestions. Your input plays a vital role in shaping Publii into the most powerful and intuitive static CMS available.</p>\n<p>Ready to explore the latest features? Download the newest version and take your site to the next level.</p>\n<p><a class=\"btn with-icon white\" href=\"https://getpublii.com/download/\">Download Publii</a></p>",
            "image": "https://getpublii.com/blog/media/posts/87/publii-0.46.png",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Releases"
            ],
            "date_published": "2025-04-26T07:44:41+02:00",
            "date_modified": "2025-04-26T19:57:54+02:00"
        },
        {
            "id": "https://getpublii.com/blog/release-046-4.html",
            "url": "https://getpublii.com/blog/release-046-4.html",
            "title": "Publii CMS v0.46.4 Released - New Homepage Context, Improvements, and Bug Fixes",
            "summary": "With each update, Publii evolves, refining its capabilities to make managing static sites more seamless and intuitive. Version 0.46.4 introduces a new homepage context, several usability improvements, and a collection of bug fixes that enhance stability and content organization. This&hellip;",
            "content_html": "<p>With each update, Publii evolves, refining its capabilities to make managing static sites more seamless and intuitive. Version <strong>0.46.4</strong> introduces a <strong>new homepage context</strong>, several usability improvements, and a collection of bug fixes that enhance stability and content organization.</p>\n<h2>New Feature: Homepage Context in Renderer</h2>\n<p>This release's main addition is the introduction of a dedicated homepage context for rendering. This feature streamlines the handling of homepage content and ensures better customization options across themes.</p>\n<p>The <strong>homepage context</strong> will now apply when:</p>\n<ul>\n<li>The page is set as the homepage.  </li>\n<li>The index is displayed on the homepage (default Publii behavior).  </li>\n<li>The index is displayed on the homepage even though a <a href=\"https://getpublii.com/docs/website-settings.html#urls\">post prefix</a> has been set.</li>\n</ul>\n<p>With this change, Publii now uses a unified context for any type of homepage - whether it’s a<em> page</em> or a <em>listing of posts</em>. This makes theming and customization more straightforward.</p>\n<p class=\"msg info\"><strong>Please note</strong> that the existing <code data-start=\"99\" data-end=\"106\">index</code> context remains unchanged and is still assigned exclusively to homepage only. </p>\n<h2>Improvements</h2>\n<p>Several refinements have been introduced to make site management more efficient:</p>\n<ul>\n<li><strong>Alphabetical Sorting in Dropdowns</strong>: Authors, pages, posts, and tags now appear alphabetically for more straightforward navigation (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1975\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Improved Handling of Quotes in Gallery Image Alts</strong>: This feature ensures the correct encoding and display of quotation marks in image descriptions (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2026#issuecomment-2661586846\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Title Attribute for JSON/RSS Feeds</strong>: Titles are now included in JSON and RSS feeds for better metadata clarity (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1915\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Improved Feed Title Translations</strong>: Translated feed titles now display correctly in line with the selected site language (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1914#discussioncomment-11744690\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n</ul>\n<h2>Bug Fixes (Updated)</h2>\n<p>This update also resolves several issues affecting site generation, rendering, and linking:</p>\n<ul>\n<li><strong>Fixed Blog Link Generation Issues</strong>: Resolved incorrect URL generation under specific configurations</li>\n<li><strong>Fixed Selection of <code>index.hbs</code> for Rendering</strong>: Ensures the correct template is used</li>\n<li><strong>Improved Backup Date Accuracy</strong>: File metadata now provides more precise timestamps for backups (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1916\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Fixed Saving of Custom HTML Options</strong>: Certain Custom HTML fields that previously failed to save now function properly (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1930\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Fixed <code>og:url</code> Generation</strong>: When the post prefix is disabled, URLs in the <code>og:url</code> meta tag are now correct (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1863\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Prevented Duplicate Tags in Post Editor</strong>: Users can no longer assign the same tag multiple times (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1998\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Corrected Typo in Author Dropdown Code</strong>: Minor fix ensuring dropdown functionality remains accurate</li>\n<li><strong>Fixed Reversed Slashes in Windows Sitemaps</strong>: Sitemaps now generate with proper forward slashes</li>\n<li><strong>Fixed Non-Working Page Links in Excerpts</strong>: Links to pages now function properly within post excerpts (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1907\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Fixed Issue with Multiple Author Links in WYSIWYG Content:</strong> Only the first author link was rendered correctly, while others retained <code data-start=\"135\" data-end=\"152\">#INTERNAL_LINK#</code>. All author links now resolve correctly (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1957\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Fixed Subpage URL Generation Issues</strong>: Corrects problems affecting URL generation for subpages (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1953\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n<li><strong>Fixed Repeater Field with <code>maxCount</code> Option</strong>: Resolved an issue where repeaters did not respect the maximum count setting (ref. <a href=\"https://github.com/GetPublii/Publii/issues/2021\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub</a>)</li>\n</ul>\n<h3 id=\"hotfixes\">Hotfixes</h3>\n<p>In addition to the previously listed fixes, we’ve also addressed some issues:</p>\n<ul>\n<li><strong>Fixed Infinite Component Update Loop in Dropdown Sorting:</strong> Under specific configurations, a bug in the alphabetical sorting of tags, authors, and pages caused an infinite loop. The sorting logic has been adjusted to prevent this issue and ensure smooth performance.</li>\n<li><strong>Fixed Internal Link Syntax Issue:</strong> Internal links using the <code>#INTERNAL_LINK#</code> syntax incorrectly appended a comma at the end of the domain, leading to broken links (404 errors).</li>\n</ul>\n<p class=\"msg info\">These fixes require updating to the latest available version of Publii, which retains the same version number but comes with a new build number <strong>17047</strong>.</p>\n<h2>Final Thoughts</h2>\n<p>With each release, Publii becomes more refined, adaptable, and powerful. The new homepage context, along with a set of enhancements and fixes, makes this version one of the most stable and feature-rich yet.</p>\n<p>As always, we invite you to join the <a href=\"https://github.com/GetPublii/Publii/discussions\" target=\"_blank\" rel=\"noopener noreferrer\">Publii Community</a> and share your thoughts. Your feedback helps shape the future of Publii, ensuring it remains the best static CMS for modern site-building.</p>\n<p>Ready to upgrade? Download the latest version and explore the new features!</p>\n<p><a class=\"btn with-icon white\" href=\"https://getpublii.com/download/\">Download Publii</a></p>",
            "image": "https://getpublii.com/blog/media/posts/86/publii-0.46.png",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Releases"
            ],
            "date_published": "2025-02-28T08:21:42+01:00",
            "date_modified": "2025-03-31T08:45:20+02:00"
        },
        {
            "id": "https://getpublii.com/blog/release-046-3.html",
            "url": "https://getpublii.com/blog/release-046-3.html",
            "title": "Publii CMS v0.46.3: New Features, Enhancements, and Bug Fixes",
            "summary": "We’re excited to announce the release of Publii CMS version 0.46.3 (build 17008), which includes a range of new features, improvements, and bug fixes to further enhance user experience and site functionality. This update builds upon the changes introduced in&hellip;",
            "content_html": "<p>We’re excited to announce the release of Publii CMS version 0.46.3 (build 17008), which includes a range of new features, improvements, and bug fixes to further enhance user experience and site functionality. This update builds upon the changes introduced in version 0.46.2 and addresses key user feedback, making Publii an even more efficient and versatile platform for static site generation.</p>\n<h2>Internal Site Description</h2>\n<p>To enhance organization and usability within the Publii app, we’ve introduced a new <strong>Site Description (Internal)</strong> field in the site settings. This additional textarea allows users to input a site description for internal reference only.</p>\n<p>The entered description will appear in the Publii interface on the site selection screen beneath the site’s name. This makes it easier to identify and manage multiple sites within the app, especially when working on numerous projects.</p>\n<p>This feature is particularly useful for users managing multiple sites. It provides a quick way to differentiate projects without affecting the site’s public-facing metadata.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/85/internal-site-description.webp\" alt=\"Internal Site Decription Field\" width=\"2160\" height=\"1299\"></figure>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/85/site-description-page-listing.webp\" alt=\"Internal site descriptin on sites selection page\" width=\"2160\" height=\"1266\"></figure>\n<p>This feature was added in response to a user request on GitHub (<a rel=\"noopener\" target=\"_new\" href=\"https://github.com/GetPublii/Publii/issues/1831\">Issue #1831</a>), highlighting the need to organize sites within Publii’s interface better.</p>\n<h2>Display Slugs Across All Listing Views</h2>\n<p>We’ve expanded the functionality of the slug display option to provide better transparency and control over URL structures in the Publii app. Previously, users could enable slugs on post and page listings by toggling the <strong>Show slugs on the post/page listings</strong> option in the App Settings.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/85/tag-author-slugs.webp\" alt=\"Slugs on the author and tags listing views\" width=\"2160\" height=\"1248\"></figure>\n<p>With this update, the option Show slugs across all listing views has been renamed and now includes slugs for tags, author listing pages, and posts and pages. This enhancement ensures consistent visibility of slugs across all relevant listing views, making site management more intuitive and organized.</p>\n<h2>Support for Partials in Subdirectories</h2>\n<p>This update introduces support for Handlebars partials located in subdirectories. This enables developers to better organize their templates and maintain cleaner project structures.</p>\n<p>Example:</p>\n<pre class=\"language-batch\"><code>theme/\n|\n├── assets/\n|\n├── partials/\n│   ├── header/\n│   │   ├── logo.hbs\n│   │   ├── navigation.hbs\n│   │   └── search.hbs\n│   ├── footer/\n│   │   ├── copyright.hbs\n│   │   ├── links.hbs\n│   │   └── social.hbs\n│   ├── blog/\n│   │   ├── post-meta.hbs\n│   │   ├── post-excerpt.hbs\n│   │   └── post-tags.hbs\n│   └── shared/\n│       ├── pagination.hbs\n│       └── notifications.hbs\n│\n└── index.hbs\n└── config.json\n└── post.hbs\n└── page.hbs\n</code></pre>\n<p>In your templates, you can reference partials using their subdirectory paths: </p>\n<pre class=\"language-handlebars\"><code>{{&gt; header/logo }}\n{{&gt; shared/breadcrumbs }}\n{{&gt; footer/social }}\n</code></pre>\n<p>This improvement was implemented in response to community feedback, as requested in a GitHub Discussion <a rel=\"noopener\" target=\"_new\" href=\"https://github.com/GetPublii/Publii/discussions/1785\">(#1785)</a>. </p>\n<h2>App Notifications in Iframe Plugins</h2>\n<p>Iframe plugins now support app notifications, making it easier for users to stay informed about changes and updates while working within iframe-enabled plugins. This improvement applies to plugins like the <strong>Language File Editor</strong>, where real-time notifications can streamline workflows by providing immediate feedback on actions or changes.</p>\n<p>Additionally, iframe plugins now better detect system color scheme changes. Previously, switching between dark and light modes required restarting the Publii app for the changes to take effect. With this update, color scheme adjustments are applied in real time.</p>\n<h2>Bug Fixes</h2>\n<p>We've also addressed several bugs to improve stability and performance:</p>\n<ul>\n<li><strong>Fixed Bulk Actions on Listing Views</strong>: Resolved an issue where bulk actions did not function correctly on listing views.</li>\n<li><strong>Fixed Detection of Internal Links</strong>: Improved the handling of internal links by adding support for single quotes (<code>'</code>) in URLs containing <code>#INTERNAL_LINK#</code>. This ensures proper parsing, even when used within JavaScript. The update also resolves issues with links such as <code>file/author</code>, which previously required specific handling due to their non-numeric nature. It eliminates the need to search for the attribute's closing quotation or apostrophe (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1830\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>).</li>\n<li><strong>Fixed og:url and Canonical Generation</strong>: Resolved an issue where the <code>og:url</code> meta tag and canonical links included an extra slash (<code>//</code>) in the URL under specific configurations.  (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1863\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>).</li>\n<li><strong>Fixed Upload Control in Repeater with Tabs Display</strong>: Resolved an issue where images uploaded via the Repeater field with <code>settingsDisplay: \"tabs\"</code> were saved in the wrong directory, and the preview remained empty. The upload and preview now work correctly regardless of the display setting (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1816\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue</a>).</li>\n<li><strong>Fixed Issues with Missing Directories</strong>: Implemented recursive directory creation in <code>fs.mkdirSync</code> where appropriate, resolving an issue where adding featured images failed if the <code>/input/media/posts</code> folder did not exist. The folder is now created automatically, ensuring seamless functionality even when cloning the project from a repository (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1810\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue</a>).</li>\n<li><strong>Fixed Issues with Uploading .htpasswd Files</strong>: Resolved an issue where <code>.htpasswd</code> files placed in the <code>Tools/File Manager/root directory</code> were not uploaded during FTP deployment. These files are now included in the deployment process alongside <code>.htaccess</code> (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1798#discussioncomment-11639570\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue</a>).</li>\n</ul>\n<h2>Final Thoughts</h2>\n<p>Publii CMS v0.46.3 represents another step forward in our commitment to improving functionality, addressing user concerns, and introducing features that make managing static sites more intuitive and flexible.</p>\n<p>As always, we welcome your feedback in the <a href=\"https://github.com/GetPublii/Publii/discussions\" target=\"_blank\" rel=\"noopener noreferrer\">community forum</a> to help us shape the future of Publii. Stay tuned for more updates and enhancements, and thank you for being a part of the Publii journey!</p>\n<p>We look forward to seeing the fantastic static websites you create with this latest release.</p>\n<p><a class=\"btn with-icon white\" href=\"https://getpublii.com/download/\">Download Publii</a></p>",
            "image": "https://getpublii.com/blog/media/posts/85/publii-0.46.png",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Releases"
            ],
            "date_published": "2024-12-23T05:52:59+01:00",
            "date_modified": "2025-02-28T08:55:45+01:00"
        },
        {
            "id": "https://getpublii.com/blog/publii-gallery-plugins.html",
            "url": "https://getpublii.com/blog/publii-gallery-plugins.html",
            "title": "Introducing Publii&#x27;s New Gallery Plugins: A Better Way to Manage Image Galleries",
            "summary": "We are pleased to announce the release of the Core Lightbox Gallery and Simple Lightbox Gallery plugins, which introduce a new and improved way to manage and display image galleries in Publii. Below, we explain why gallery functionality is separated&hellip;",
            "content_html": "<p>We are pleased to announce the release of the <strong>Core Lightbox Gallery</strong> and <strong>Simple Lightbox Gallery</strong> plugins, which introduce a new and improved way to manage and display image galleries in Publii. Below, we explain why gallery functionality is separated from themes and how this change benefits our users.</p>\n<p class=\"msg info\"><strong>Please note:</strong> This change is optional and not obligatory. Your theme's built-in gallery functionality will continue to work as it has in the past. However, if you want to use the new gallery plugins, you must update your theme or apply the changes described later in this article to your custom theme.</p>\n<h3>The Need for Change: Moving Beyond Built-in Galleries</h3>\n<p>Until now, galleries were built-in and managed directly within themes using <strong>PhotoSwipe v4</strong>. While this solution served its purpose for a long time, it had begun to show its age. Though reliable, PhotoSwipe v4 lacked many modern features, performance improvements, and customization options that newer libraries provide. As a result, many users expressed interest in upgrading to the latest version of PhotoSwipe or integrating alternative gallery libraries to meet their needs better.</p>\n<p>Another significant limitation was the built-in gallery's lack of flexibility. Each theme was restricted to the same gallery implementation, leaving no room for switching to alternatives or introducing customizations beyond the default settings. This was a frustrating constraint for users who wanted more control or unique site functionality.</p>\n<p>Maintaining the built-in gallery also became increasingly challenging. Updating the gallery code required simultaneous updates to all themes, a process that was not only time-consuming but also inefficient. This approach tied gallery improvements to theme updates, often leading to delays in delivering new features and optimizations to users.</p>\n<p>To address these challenges, we decided to move the gallery functionality out of themes and into plugins. By decoupling galleries from themes, we can now provide users with multiple options for gallery libraries, each tailored to specific needs and preferences. This shift eliminates the reliance on theme updates for gallery improvements and ensures that new features and fixes can be delivered more quickly and efficiently.</p>\n<h3>Introducing Gallery Plugins</h3>\n<p>To kick off this new approach, we’ve introduced two plugins:</p>\n<ul>\n<li>\n<p><strong>Core Lightbox Gallery</strong>: Powered by the latest version of <strong>PhotoSwipe (v5)</strong>, this plugin offers modern features, including dynamic zoom controls, smooth animations, and advanced customization options. It's designed to deliver a sleek and high-performance gallery experience. A detailed description of its capabilities can be found on its <a href=\"https://marketplace.getpublii.com/plugins/core-lightbox-gallery/\" target=\"_new\">marketplace page</a>.</p>\n</li>\n<li>\n<p><strong>Simple Lightbox Gallery</strong>: Based on <strong>VenoBox 2</strong>, this plugin is perfect for users who value simplicity and elegance. It includes essential features like touch swipe navigation, keyboard accessibility, and customizable preloader animations, all in a lightweight package. Visit its <a href=\"https://marketplace.getpublii.com/plugins/simple-lightbox-gallery/\" target=\"_new\">marketplace page</a> for more details and features.</p>\n</li>\n</ul>\n<h2>The Benefits of Plugin-Based Galleries</h2>\n<p>By transitioning to a plugin-based model, we’ve created a more versatile and efficient solution for managing image galleries. Users now have the freedom to choose the gallery experience that best suits their site, whether they prefer the modern capabilities of Core Lightbox Gallery or the streamlined simplicity of Simple Lightbox Gallery.</p>\n<p>With this approach, gallery plugins can deliver cutting-edge features without being tied to theme updates. This means faster feature releases, reduced maintenance overhead, and a cleaner, more efficient setup for both themes and plugins. It’s a win-win for users: improved performance, greater flexibility, and access to the best tools for managing and displaying image galleries.</p>\n<p>This modular approach also opens the door for introducing additional gallery plugins in the future, offering users even more options to suit their needs.</p>\n<h3 class=\"h5\">Summing Up:</h3>\n<ul>\n<li><strong>Improved Performance</strong>: Both plugins load assets dynamically, reducing unnecessary resource usage on pages without galleries.</li>\n<li><strong>Futureproofing</strong>: The plugins can be independently updated with the latest features, ensuring your galleries stay modern.</li>\n<li><strong>Customization</strong>: By separating galleries into plugins, you gain greater control over their appearance and behavior.</li>\n<li><strong>Cleaner Themes</strong>: Themes no longer include gallery-related assets or code, making them more lightweight and focused.</li>\n<li><strong>More Options in the Future</strong>: This modular approach paves the way for introducing additional gallery plugins, offering users even more variety and innovative features over time.</li>\n</ul>\n<h2>Upgrading to Gallery Plugins</h2>\n<p>To fully take advantage of the new gallery plugins, updating your themes to the latest versions is essential, released on <strong>December 10, 2024</strong>. These updates ensure seamless integration with the plugins.</p>\n<p>In most cases, these will be versions <strong>2.1.0.0</strong> or <strong>3.1.0.0</strong>.</p>\n<p class=\"msg info\"><strong>Please note:</strong> If you prefer not to update your theme, its built-in gallery functionality will continue to work as it has in the past. However, if you want to use the new plugins but choose not to update your theme or are using a custom theme, you must make the manual adjustments described below.</p>\n<h2>Steps to Enable Gallery Plugins for Custom or Old Themes</h2>\n<p>Locate and remove the code responsible for loading the built-in gallery in the following theme files: <code>/partials/head.hbs</code> and <code>/partials/footer.hbs</code> This includes the main gallery initialization code and any conditional logic tied to gallery styles or assets.<br><br>Locate the <strong>head.hbs</strong> file (<code>/Documents/Publii/sites/YOUR_SITE/input/themes/YOUR_THEME/</code> ) in your theme or its override and remove blocks of code like the examples below: </p>\n<pre class=\"language-handlebars\"><code>{{#is \"post\"}}\n   {{#post}}\n      {{#if hasGallery}}\n         &lt;link rel=\"stylesheet\" href=\"{{css \"photoswipe.css\" }}\"&gt;\n      {{/if}}\n   {{/post}}\n{{/is}}\n{{#checkIf @config.custom.frontSource '==' \"post\"}}\n   {{#checkIf @config.custom.frontGallery '==' true}}\n      {{#is \"index\"}}\n         &lt;link rel=\"stylesheet\" href=\"{{css \"photoswipe.css\" }}\"&gt;\n      {{/is}}\n   {{/checkIf}}\n{{/checkIf}}\n</code></pre>\n<p>In older theme versions, also remove code related to inline styles for PhotoSwipe icons: </p>\n<pre class=\"language-handlebars\"><code>{{#is \"post\"}}\n   {{#post}}\n      {{#if hasGallery}}\n         &lt;style&gt;\n            {{#checkIf @config.custom.galleryLightboxStyle '==' \"pswp--dark\"}}\n               .pswp--svg .pswp__button,\n               .pswp--svg .pswp__button--arrow--left:before,\n               .pswp--svg .pswp__button--arrow--right:before {\n                  background-image: url({{@website.assetsUrl}}/svg/gallery-icons-light.svg);\n               }\n            {{else}}\n               .pswp--svg .pswp__button,\n               .pswp--svg .pswp__button--arrow--left:before,\n               .pswp--svg .pswp__button--arrow--right:before {\n                  background-image: url({{@website.assetsUrl}}/svg/gallery-icons-dark.svg);\n               }\n            {{/checkIf}}\n         &lt;/style&gt;\n      {{/if}}\n   {{/post}}\n{{/is}}\n{{#checkIf @config.custom.frontSource '==' \"post\"}}\n   {{#checkIf @config.custom.frontGallery '==' true}}\n      {{#is \"index\"}}\n         &lt;style&gt;\n            {{#checkIf @config.custom.galleryLightboxStyle '==' \"pswp--dark\"}}\n               .pswp--svg .pswp__button,\n               .pswp--svg .pswp__button--arrow--left:before,\n               .pswp--svg .pswp__button--arrow--right:before {\n                  background-image: url({{@website.assetsUrl}}/svg/gallery-icons-light.svg);\n               }\n            {{else}}\n               .pswp--svg .pswp__button,\n               .pswp--svg .pswp__button--arrow--left:before,\n               .pswp--svg .pswp__button--arrow--right:before {\n                  background-image: url({{@website.assetsUrl}}/svg/gallery-icons-dark.svg);\n               }\n            {{/checkIf}}\n         &lt;/style&gt;\n      {{/is}}\n   {{/checkIf}}\n{{/checkIf}}\n</code></pre>\n<p>Next, locate the <strong>footer.hbs</strong> file and remove the following pieces of code:</p>\n<pre class=\"language-handlebars\"><code>{{#checkIfAny post.hasGallery page.hasGallery}}\n    {{&gt; photoswipe}}\n{{/checkIfAny}}\n\n{{#checkIf @config.custom.frontSource '==' \"post\"}}\n   {{#checkIf @config.custom.frontGallery '==' true}}\n      {{#is \"index\"}}\n          {{&gt; photoswipe}}\n      {{/is}}\n   {{/checkIf}}\n{{/checkIf}}\n</code></pre>\n<p>For older implementations: </p>\n<pre class=\"language-handlebars\"><code>{{#is \"post\"}}\n   {{#post}}\n      {{#if hasGallery}}\n          {{&gt; photoswipe}}\n      {{/if}}\n   {{/post}}\n{{/is}}\n\n{{#checkIf @config.custom.frontSource '==' \"post\"}}\n   {{#checkIf @config.custom.frontGallery '==' true}}\n      {{#is \"index\"}}\n          {{&gt; photoswipe}}\n      {{/is}}\n   {{/checkIf}}\n{{/checkIf}}\n</code></pre>\n<p>You can also remove unused assets, such as CSS, JS, or SVG icons related to the built-in gallery and the <code>/partials/photoswipe.hbs</code> file.</p>\n<p>That's it.</p>\n<h2>Final Thoughts</h2>\n<p>The shift to plugin-based galleries represents a significant milestone for Publii. Whether you opt for the advanced <strong>Core Lightbox Gallery</strong> or the elegant <strong>Simple Lightbox Gallery</strong>, you can look forward to a modern, customizable, and seamless gallery experience.</p>\n<p>If you have any questions or need help transitioning your galleries, please don’t hesitate to contact our support team via the <a href=\"https://github.com/GetPublii/Publii/discussions/1869\">community forum</a>.</p>",
            "image": "https://getpublii.com/blog/media/posts/84/core-lightbox-gallery.png",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Releases"
            ],
            "date_published": "2024-12-10T18:28:44+01:00",
            "date_modified": "2024-12-11T07:39:16+01:00"
        },
        {
            "id": "https://getpublii.com/blog/release-046-2.html",
            "url": "https://getpublii.com/blog/release-046-2.html",
            "title": "Publii CMS v0.46.2: Content Conversion, New Blog Listing Options, Global UI Enhancements and more...",
            "summary": "We’re pleased to introduce Publii CMS version 0.46.2 (build 16967), bringing a range of updates that enhance flexibility in content management and improve site functionality. This release includes new options for creating custom blog post listings, tools for content conversion,&hellip;",
            "content_html": "<p><span style=\"color: var(--text-primary-color); font-family: var(--editor-font-family); font-size: inherit; font-weight: var(--font-weight-normal);\">We’re pleased to introduce Publii CMS version 0.46.2 (build 16967), bringing a range of updates that enhance flexibility in content management and improve site functionality. This release includes new options for creating custom blog post listings, tools for content conversion, expanded organizational options across the interface, and support for the Elixir programming language, among many other refinements. Each update aims to improve user experience, making Publii an even more powerful tool for creating and managing static websites.</span></p>\n<h2>Convert Posts to Pages and Pages to Posts</h2>\n<p>To further enhance flexibility in content management, we’ve introduced the ability to convert posts to pages and pages to posts. This feature allows users to adapt the structure of their website content more efficiently to meet changing needs.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/83/post-to-page-conversion.webp\" alt=\"Post to Page Conversion\" width=\"2160\" height=\"1106\"></figure>\n<p>In the Publii interface, this can be done by selecting one or more posts or pages in the list view. Once selected, click on the “More” dropdown menu at the top and choose the \"Convert to page\" or \"Convert to post\" option as needed.</p>\n<p>During the conversion process, all metadata for the post or page will be preserved except for specific post/page options. This is because the options available for posts and pages may differ significantly. However, if you decide to convert the content back to its original type later, the original configuration settings will be restored, ensuring a seamless experience.</p>\n<h2>Creating a custom <strong>post listing with posts.hbs </strong></h2>\n<p>When we set the <em>Posts Prefix</em> in the SEO settings, for example, to \"blog,\" our posts will be displayed in the <code>/blog/</code> directory, such as <code>/blog/our-post/</code>. By default, the <code>/blog/</code> page will be built using the <code>index.hbs</code> file. This setup works well if we display a \"page\" as the homepage. But what if we want the <code>/blog/</code> page to have a custom layout different from the homepage? In that case, we should use the <code>posts.hbs</code> file.</p>\n<p>Simply place <code>posts.hbs</code> in the theme's root directory, and Publii will automatically skip <code>index.hbs</code> and display the contents of <code>posts.hbs</code> on the page specified by the posts prefix, e.g., <code>/blog/</code>. This gives users complete control over the appearance and layout of the blog page, independent of the design set for the homepage.</p>\n<p>Additionally, ensure you include the appropriate feature flag in the <em>Supported Features</em> section in the theme’s <code>config.json</code> file. Add <code>\"postsPage\": true</code> to enable support for this custom layout functionality, as outlined in the <a rel=\"noopener\" href=\"https://getpublii.com/dev/theme-supported-features/\">Publii Supported Features documentation</a>.</p>\n<h2>Nested Tabs in Theme Settings</h2>\n<p>The theme settings have been enhanced with support for nested tabs, allowing for better organization of configuration options within the settings panel. This feature enables theme developers to create a more structured and user-friendly layout, especially useful when a specific section requires multiple settings that need to be grouped logically. By assigning a <code>parentgroup</code> to an option, you can nest it under a designated parent group, creating a clear hierarchy in the settings.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/83/theme-nested-options.webp\" alt=\"Nested options in the theme settings\" width=\"2160\" height=\"1080\"></figure>\n<p>For instance, let’s say you have settings related to the homepage and want to group specific hero section options within it. By using the <code>parentgroup</code> attribute, you can define these relationships in the theme configuration file as follows:</p>\n<pre class=\"language-json\"><code>{\n    \"name\": \"heroText\",\n    \"label\": \"Hero Section Text\",\n    \"group\": \"Hero\",\n    \"parentgroup\": \"Homepage\",\n    \"value\": \"\",\n    \"type\": \"wysiwyg\"\n}\n</code></pre>\n<p>In this example, \"Hero Section Text\" is part of the \"Hero\" group, nested under the main \"Homepage\" settings. This approach organizes options more effectively and improves usability by helping users locate related settings quickly.</p>\n<p>Currently, this feature is supported by <a href=\"https://marketplace.getpublii.com/themes/bespoke/\">Bespoke theme</a> in version 1.1.0.0.</p>\n<h2>Support for Elixir in Syntax Highlighting</h2>\n<p>We have expanded the range of supported languages in syntax highlighting to include Elixir, addressing the needs of developers who use this language in their posts or documentation.</p>\n<p>To ensure Elixir syntax is displayed correctly on your website, you must enable the latest version of the <a rel=\"noopener\" target=\"_new\" href=\"https://marketplace.getpublii.com/plugins/syntax-highlighter/\">Syntax Highlighter plugin</a>, version 2.0.0, which adds support for Elixir. Make sure your plugin is up to date to take advantage of this new language support.</p>\n<h2>Interface Updates in Publii</h2>\n<p>We’ve made several adjustments to the interface to enhance usability and visual consistency across the app.</p>\n<p>Firstly, we’ve reduced the base font size to 14px throughout the app, aligning it with standard application font sizing. Of course, users who prefer a larger font size can increase it in the <a href=\"https://getpublii.com/docs/publii-global-settings.html\">app settings</a>.</p>\n<p>We've also updated the right sidebar for posts, pages, tags, and authors. Section headers now have background colors to make them more easily identifiable.</p>\n<p>We’ve also refined various other elements, like icons and other small details, to create a cleaner, more cohesive look across the app.</p>\n<h2>Improvements</h2>\n<ul>\n<li><strong>Default Fallback Language Set to English</strong>: English is now the default fallback language to prevent localization strings from accidentally appearing in the user interface, ensuring a consistent and professional look across all locations (ref. <a href=\"https://github.com/GetPublii/Publii-ui-locales/issues/6#issuecomment-2322903283\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue</a>)</li>\n<li><strong>Timezone Included in Article Schema</strong>: The article schema has been enhanced to include timezone information, improving SEO and providing search engines with more accurate data (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1701\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussions</a>)</li>\n<li><strong>Improved Page Hierarchy Management</strong>: A new mechanism automatically removes duplicate entries within page hierarchies, resulting in cleaner, more organized site structures without requiring manual adjustments (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1760\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>)</li>\n</ul>\n<h2>Bug Fixes</h2>\n<p>We've also addressed several bugs to improve stability and performance:</p>\n<ul>\n<li><strong>Removed Hidden Tags from RSS</strong>: Tags marked as hidden are now excluded from the RSS feed (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1765#discussioncomment-11062915\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>)</li>\n<li><strong>Excluded Posts from RSS</strong>: Posts marked as excluded from the homepage are also removed from the RSS feed (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1765\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>)</li>\n<li><strong>Removed Warning Icon for GitLab/GitHub Deployment</strong>: The warning icon no longer appears when GitLab or GitHub is selected as the deployment method  (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1651\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>)</li>\n<li><strong>Internal Links to Homepage Pages</strong>: Fixed an issue with generating correct internal links for pages set as the homepage  (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1676\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue</a>)</li>\n<li><strong>og:url Value Generation</strong>: Resolved an issue with the correct generation of values in <code>og:url</code> and canonical tags for SEO  (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1767\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue</a>)</li>\n<li><strong>WXR Image Path Fix</strong>: Addressed an issue in WXR where images were loading with paths instead of URLs in the <code>src</code> attribute  (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1725\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue</a>)</li>\n<li><strong>WXR Author Name Conflict</strong>: Fixed an issue with WXR import when the imported file contains an author with the same name as the main Publii author  (ref. <a href=\"https://github.com/GetPublii/Publii/issues/1726\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Issue</a>)</li>\n<li><strong>Empty Directory Removal</strong>: Resolved an issue where empty directories were not correctly removed during website rendering  (ref. <a href=\"https://github.com/GetPublii/Publii/discussions/1579#discussioncomment-10773165\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Discussion</a>)</li>\n</ul>\n<h2>Final Thoughts</h2>\n<p>Publii CMS v0.46.2 was initially planned as a simple hotfix, but we decided to go beyond quick fixes and add a few new features and modifications that enhance both functionality and user experience. </p>\n<p>These updates are a testament to our commitment to continually improve Publii based on user feedback and evolving web standards. While this release provides vital fixes, it also adds new tools to give our users more control and flexibility in managing their sites.</p>\n<p>As always, your feedback is invaluable in shaping Publii's direction. We encourage you to share your thoughts, ideas, and any issues you encounter in our <a href=\"https://github.com/GetPublii/Publii/discussions\" target=\"_blank\" rel=\"noopener noreferrer\">community forum</a>. Together, we can continue refining Publii to make it the best platform for static site generation.</p>\n<p>We’re looking forward to seeing what you create with this update and appreciate your ongoing support and collaboration.</p>\n<p><a class=\"btn with-icon white\" href=\"https://getpublii.com/download/\">Download Publii</a></p>",
            "image": "https://getpublii.com/blog/media/posts/83/publii-0.46.png",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Releases"
            ],
            "date_published": "2024-11-01T12:14:05+01:00",
            "date_modified": "2025-02-28T08:55:50+01:00"
        },
        {
            "id": "https://getpublii.com/blog/release-046.html",
            "url": "https://getpublii.com/blog/release-046.html",
            "title": "Publii CMS v0.46.x: Introducing Pages, Enhanced Sync Mechanism, New Image Config Options and Simple Theme v.3",
            "summary": "We're excited to announce the release of Publii CMS version 0.46, which brings a highly requested feature from our community: Pages. Until now, Publii exclusively supported posts, but with this update, we've expanded the platform's capabilities to include dedicated pages,&hellip;",
            "content_html": "<p>We're excited to announce the release of Publii CMS version 0.46, which brings a highly requested feature from our community: <strong>Pages</strong>. Until now, Publii exclusively supported posts, but with this update, we've expanded the platform's capabilities to include dedicated pages, offering a whole new way to manage your content.</p>\n<h2>Introducing the Pages Feature: A Long-Awaited Addition</h2>\n<p>For quite some time, our community has been requesting a feature that allows for creating pages separate from posts, and we've listened. The new <strong>Pages</strong> tab in Publii v.46 allows users to create and manage pages with the same ease and flexibility as posts but with crucial differences catering to more complex site structures.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/82/publii-pages-3.webp\" alt=\"Introducing the Pages Feature\" width=\"2160\" height=\"1211\"></figure>\n<p>While the page creation process is similar to posts—choose one of the three available editors and start writing—the main distinction lies in how pages are treated within the site. Pages exist independently of the post loop, meaning they are separate entities that do not mix with your site's regular blog posts (listings).</p>\n<p>Like with posts, Pages come with various options in the <code>pageConfig</code> settings. This means you can enable or disable features such as comments, display of the date, or author information. By default, these options are turned off for Pages, giving you a clean slate to work with. However, it's important to note that you won't find options like related pages or navigation between pages, as is available for posts. This is by design, reflecting the nature of Pages as standalone content rather than part of a sequential or related series.</p>\n<h3>Nested Pages: Creating Hierarchical Content</h3>\n<p>One of the standout features of Pages is the ability to nest them, allowing for hierarchical structures. You can designate a page as a parent, with other pages acting as its children, and so on. This nesting can be managed directly within the page editor or in bulk using the <strong>Edit Hierarchy</strong> button available on the Pages listing.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/82/nested-urls-3.webp\" alt=\"Nested URLs\" width=\"2160\" height=\"318\"></figure>\n<h3>Nested URLs and Custom Homepages</h3>\n<p>Another highly requested feature that comes with the Pages is support for nested URLs, providing more organized and user-friendly web addresses. Additionally, you can now natively set any Page as the homepage of your site. This means that the content of the selected Page, along with its individual settings like SEO, will be displayed as your site's main page. </p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/82/set-page-as-homepage-2.webp\" alt=\"Set page as homepage\" width=\"2160\" height=\"1893\"></figure>\n<p>If desired, you can move the previous index page with the post listing<strong> to a different directory</strong>, such as \"blog,\" by adjusting the settings in the \"Pretty URLs\" section of your site settings.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/82/post-prefix.webp\" alt=\"Post prefix\" width=\"2160\" height=\"1121\"></figure>\n<p>You must update your themes and plugins to the latest versions to take full advantage of the new Pages feature. </p>\n<p>Pages have been designed based on the existing post structures so that you may find additional page templates in your theme. This includes the standard templates and an \"empty container\" template, providing a blank canvas for adding your custom code. This flexibility ensures that Pages can be easily integrated into your site design.</p>\n<p class=\"msg warning\"><strong>Important:</strong> If you have overridden theme files, we strongly advise against updating to the new versions without proper preparation, as it may cause your customizations to stop working correctly. Before proceeding with an update, carefully compare and merge your files, or consider renaming or removing the override folder.</p>\n<p>For those using custom themes or making significant modifications to official Publii themes, we have also published a detailed article in our dev documentation that guides you through manually adding Page support. This resource is invaluable for users who need to integrate Pages into their unique theme setups.</p>\n<p>Remember to update your plugins to support the new Pages feature. This will help maintain full functionality and compatibility with Publii v.46.</p>\n<h2>Enhanced Image Support: New Configuration Options for Posts, Tags, Authors, and Pages</h2>\n<p>Another exciting enhancement is the addition of image support within the configuration options for various content types, including posts, tags, authors, and pages. Publii offers a range of customization fields, as detailed in our <a href=\"https://getpublii.com/dev/theme-settings-api/\">Theme Settings API</a> documentation. With this update, you can configure images for these elements, providing even greater flexibility and creative options.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/82/image-field.webp\" alt=\"Enhanced Image Support: New Configuration Options for Posts, Tags, Authors, and Pages\" width=\"2160\" height=\"1232\"></figure>\n<p>This new feature is handy if you want, for example, to have multiple featured images. You can now configure a different featured image in your post teasers than the one displayed on the actual post page. The same applies to tags and author profiles, allowing you to present a more personalized and visually engaging experience across your site.</p>\n<h2>Enhanced Repeater Field Capabilities: New Image and File-Dropdown Support</h2>\n<p>In Publii v.46, we've further expanded the capabilities of the <strong>Repeater Field</strong>, which was first introduced in version <a href=\"https://getpublii.com/blog/release-043.html\">0.43</a> as a powerful tool for theme and plugin development. The Repeater Field allows for the dynamic addition of multiple instances of a particular set of fields within the Publii backend, offering a more granular level of customization and flexibility.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/82/image-support-in-repeater-field.webp\" alt=\"Image in repeater field\" width=\"2160\" height=\"1168\"></figure>\n<p>With this update, we've added support for two new field types within the Repeater control:</p>\n<ul>\n<li>\n<p><strong>Image Field Support:</strong> You can now add image fields within a Repeater, allowing for the dynamic inclusion of images as part of your content configurations. This is particularly useful for scenarios where multiple images need to be managed dynamically, such as in sliders, where you can now create a slider from pictures and descriptions alone without needing post content.</p>\n</li>\n<li>\n<p><strong>File-Dropdown Field Support:</strong> Additionally, we've introduced support for a file-dropdown field within the Repeater control. This field allows users to select files from the <a href=\"https://getpublii.com/docs/tools.html#filemanager\">File Manager</a>, offering a streamlined way to manage and incorporate various file types into your repeater-controlled content.</p>\n</li>\n</ul>\n<p>These enhancements make the Repeater Field an even more powerful tool for developers and users, providing more options for customizing and managing content in Publii. Whether you're building complex layouts or need more control over your content's structure, the updated Repeater Field is designed to meet your needs more efficiently and quickly.</p>\n<h2>Improved Sync Mechanism: Enhanced File Change Detection</h2>\n<p>In response to feedback from our users, <strong>we've significantly improved how Publii detects changes in synced files</strong>. Previously, Publii generated a single MD5 checksum for the entire site, which was stored in the <code>files.publii.json</code> file. This approach often led to issues where, despite only one file being edited, the sync process would mistakenly re-upload many files due to mismatched checksums.</p>\n<p>With the new method, the <code>files.publii.json</code> file now contains a list of all files in your site, each with its own individual checksum. This change allows Publii to detect which files have been modified more accurately and ensure that only those specific files are uploaded during synchronization. Here's how it works:</p>\n<ol>\n<li><strong>Individual File Checksums</strong>: The <code>files.publii.json</code> now includes a detailed list of every file on your site, each accompanied by its own MD5 checksum. This allows Publii to precisely determine which files have been altered since the last sync.</li>\n<li><strong>More Efficient Syncing</strong>: During synchronization, Publii compares the local <code>files.publii.json</code> with the list on the server. If differences in checksums are found, only those files that have changed will be uploaded, reducing the risk of unnecessary bulk uploads and speeding up the deployment process.</li>\n<li><strong>Improved Reliability</strong>: Moving away from a single checksum for the entire site to individual file checksums, this new method significantly reduces the chances of sync issues, ensuring a more reliable and efficient update process.</li>\n</ol>\n<p class=\"msg info\"><strong>Note:</strong> After this change, your site may re-upload all files during the first synchronization, but this will only occur once. Subsequent syncs will only upload modified files.</p>\n<p class=\"msg info\"><strong>Note: </strong>It's important to note that if, for any reason, you prefer to restrict access to the file list,  you can create a redirect from the <code>files.publii.json</code> to your homepage or block access to the file using, for example,<code>.htaccess</code> rules.</p>\n<p>This update should significantly improve the sync process, making it more accurate and efficient while providing better control over your site's deployment.</p>\n<h2>Redesigned and Rewritten: Simple Theme v.3</h2>\n<p>With the release of Publii v.46, we're also excited to introduce the completely redesigned and rewritten <strong>Simple Theme v.3</strong>. This latest version features an enhanced appearance and a refined codebase, ensuring better performance and compatibility with the newest features in Publii, including full support for Pages.</p>\n<p>The redesign brings a fresh, modern look to the Simple theme while optimizing its underlying code for improved speed and flexibility. Whether you're creating a blog, portfolio, or business site, the updated Simple theme provides a sleek, responsive design that takes full advantage of Publii's latest capabilities.</p>\n<p><a href=\"https://demo.getpublii.eu/themes/simple/v3/\" rel=\"nofollow\">See it in action</a></p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/82/simple-theme-v3-2.webp\" alt=\"Simple theme v.3\" width=\"2160\" height=\"2906\"></figure>\n<p class=\"msg info\"><strong>Note:</strong> If you prefer to continue using the Simple theme in its previous form (v.2), we recommend <strong>not</strong> updating to v.3. The file for version 2 will still be available for download on the theme's page under the \"Changelog\" section.</p>\n<h2>Widespread Theme Updates: Expanded Support for Pages and Typography Enhancements</h2>\n<p>In addition to the Simple theme, nearly all Publii themes have been updated to support the new Pages feature. But that’s not all—these updates also enhance typography, making achieving the perfect look for your site easier.</p>\n<figure class=\"post__image post__image--wide shadow\"><img loading=\"lazy\"  src=\"https://getpublii.com/blog/media/posts/82/italic-fonts.webp\" alt=\"Italic fonts\" width=\"2160\" height=\"1557\"></figure>\n<p>We've added <strong>support for dedicated italic versions </strong>of variable fonts already existing within Publii themes. These are not just slanted versions of regular text but specifically designed italic fonts that offer a more polished and authentic appearance. These fonts are automatically detected and loaded, though you can turn off this feature if desired.</p>\n<p>Moreover, the typography options in the Theme Settings have been expanded with several new controls under the <strong>FONTS</strong> tab. These include:</p>\n<ul>\n<li><strong>Letter Spacing</strong>: Now adjustable for the entire site, allowing for finer control over text appearance.</li>\n<li><strong>Headings (H1-H6) Customization</strong>: You can now configure the <strong>font style</strong>, <strong>letter spacing</strong>, and <strong>line height</strong> for headings, providing more flexibility in how your content is displayed.</li>\n</ul>\n<p>These enhancements ensure you can fully customize your site's typography, aligning it perfectly with your design vision.</p>\n<h2>Improvements</h2>\n<p>We've made several improvements to enhance user experience and website functionality:</p>\n<ul>\n<li>Added support for <strong>parsing internal links</strong> in mini-WYSIWYG fields. Previously, internal links like <code>&lt;a href=\"# INTERNAL_LINK#/post/29\"&gt;link&lt;/a&gt;</code> were only functional within the WYSIWYG editor. Now, this functionality has been extended to include theme config options, as well as tag and author settings, providing more flexibility in linking content throughout your site.</li>\n<li>Removed trailing spaces from Site ID in Netlify configuration to avoid unexpected sync issues.</li>\n<li>Added more detailed logs when rendering issues occur. In addition to the error message, the full error stack is now displayed, providing deeper insights into what went wrong and helping developers diagnose and resolve issues more effectively.</li>\n<li>Added <code>isMainTag</code> flag in tags data for easier differentiation between regular tags and main tags.</li>\n<li>Added a message indicating that the updated theme contains custom overrides.</li>\n<li>Added support for the Rust programming language in the code syntax highlighter, expanding the range of languages that can be accurately highlighted in the editor.</li>\n</ul>\n<h2>Bug Fixes</h2>\n<p>We've also addressed several bugs to improve stability and performance:</p>\n<ul>\n<li>Fixed issues with <code>responsiveImageAttributes</code>, <code>responsiveSizes</code>, and <code>responsiveSrcSet</code> helpers.</li>\n<li>Fixed issue with saving site settings using the bottom Save button.</li>\n<li>Fixed the issue when saving an author when theme settings were not saved initially.</li>\n<li>Fixed issues with invalid handling of default parameter values under post/tag/author config.</li>\n<li>Fixed issues with WYSIWYG editors in repeater control.</li>\n</ul>\n<h2 id=\"hotfixes\">Hotfixes</h2>\n<h3 class=\"h5\"><span style=\"text-decoration: underline;\">Publii Hotfix 0.46.1</span></h3>\n<ol>\n<li><strong>Posts Index Link:</strong> Introduced a new option to add a \"Posts Index\" link to the link dropdown menu when a \"Post Prefix\" is set.</li>\n<li><strong>Page Selection for Privacy Link:</strong> In Site Settings, you can select a specific page for the Privacy Link. This supports external and internal links, with internal links now available for both posts and pages.</li>\n<li><strong>Featured Image ID Bug:</strong> Addressed an issue where the <code>featured_image_id</code> was causing problems. (<a href=\"https://github.com/GetPublii/Publii/issues/1611\" target=\"_blank\" rel=\"noopener\">GitHub</a>)</li>\n<li><strong>Broken Internal Links to Author Pages:</strong> Fixed broken internal links that pointed to author pages. (<a href=\"https://github.com/GetPublii/Publii/issues/1614\" target=\"_blank\" rel=\"noopener\">GitHub</a>)</li>\n<li><strong>Nested Pages Issue:</strong> Resolved a problem related to nesting pages. (<a href=\"https://github.com/GetPublii/Publii/discussions/1618\" target=\"_blank\" rel=\"noopener\">GitHub</a>)</li>\n<li><strong>Incorrect Image Paths for Pages:</strong> Fixed issues with image paths for pages. (<a href=\"https://github.com/GetPublii/Publii/issues/1621\" target=\"_blank\" rel=\"noopener\">GitHub</a>)</li>\n<li><strong>Author Saving Problem:</strong> Fixed a bug preventing correct author saving. (<a href=\"https://github.com/GetPublii/Publii/discussions/1626\" target=\"_blank\" rel=\"noopener\">GitHub</a>)</li>\n<li><strong>Initial Page Upload Issue:</strong> Addressed a problem with the initial upload of pages. (<a href=\"https://github.com/GetPublii/Publii/discussions/1625\" target=\"_blank\" rel=\"noopener\">GitHub</a>)</li>\n<li><strong>Corrected Links to Frontpage and Posts Index:</strong> Fixed links to the homepage and posts index to ensure they include index.html when necessary.</li>\n<li><strong>Improved Error Display During Synchronization:</strong> Enhanced the display of errors during synchronization. (<a href=\"https://github.com/GetPublii/Publii/issues/1600\" target=\"_blank\" rel=\"noopener\">GitHub</a>)</li>\n</ol>\n<h3 class=\"h5\"><span style=\"text-decoration: underline;\">Publii Hotfix 0.46.2</span></h3>\n<p>Due to the extensive changes in version 0.46.2, including additional features and fixes, we’ve dedicated a separate post to detail all updates. For a complete overview of hotfix 0.46.2, you can read the full release article <a href=\"https://getpublii.com/blog/release-046-2.html\">here</a>.</p>\n<h2>Final Thoughts</h2>\n<p>Publii CMS v0.46 is a significant step forward in our mission to create a more versatile and user-friendly platform. With the introduction of the Pages feature, enhanced synchronization methods, expanded image configuration options, and numerous other improvements, we continue to respond to the needs and feedback of our vibrant community. These updates not only increase the functionality and flexibility of Publii but also ensure that our users have the tools they need to create and manage their websites more efficiently.</p>\n<p>As always, your feedback plays a vital role in shaping Publii's future. We encourage you to share your thoughts, suggestions, and any issues you encounter on our <a href=\"https://github.com/GetPublii/Publii/discussions/1608\">community forum</a>. Together, we can make Publii even better.</p>\n<p>We’re excited to see what you create with the latest version and look forward to your continued support and collaboration.</p>\n<p><a class=\"btn with-icon white\" href=\"https://getpublii.com/download/\">Download Publii</a></p>",
            "image": "https://getpublii.com/blog/media/posts/82/publii-0.46.png",
            "author": {
                "name": "Bob Mitro"
            },
            "tags": [
                   "Releases"
            ],
            "date_published": "2024-08-14T10:20:51+02:00",
            "date_modified": "2025-02-28T08:55:56+01:00"
        }
    ]
}
