<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: perber</title>
    <description>The latest articles on DEV Community by perber (@perber).</description>
    <link>https://dev.to/perber</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1040630%2F828fec19-6ad6-479e-ba0f-abfd5efe509d.jpeg</url>
      <title>DEV Community: perber</title>
      <link>https://dev.to/perber</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/perber"/>
    <language>en</language>
    <item>
      <title>LeafWiki Devlog #9: v0.8.2 – Tree Improvements &amp; Reverse Proxy Support</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Sun, 08 Mar 2026 18:27:16 +0000</pubDate>
      <link>https://dev.to/perber/leafwiki-devlog-9-v082-tree-improvements-reverse-proxy-support-3o7h</link>
      <guid>https://dev.to/perber/leafwiki-devlog-9-v082-tree-improvements-reverse-proxy-support-3o7h</guid>
      <description>&lt;p&gt;Hi!&lt;/p&gt;

&lt;p&gt;Time for another small update on LeafWiki.&lt;/p&gt;

&lt;p&gt;Version &lt;strong&gt;v0.8.2&lt;/strong&gt; focuses on usability improvements in the Tree View and a small but very useful deployment feature for self-hosted setups.&lt;/p&gt;

&lt;p&gt;If you're new here:&lt;/p&gt;

&lt;p&gt;LeafWiki is a lightweight, self-hosted Markdown wiki built as a &lt;strong&gt;single Go binary&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Markdown files stored directly on disk
&lt;/li&gt;
&lt;li&gt;No external database service required
&lt;/li&gt;
&lt;li&gt;Designed for people who &lt;strong&gt;think in folders, not feeds&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If LeafWiki disappears tomorrow, your content is still yours.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;https://github.com/perber/leafwiki&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A quick recap: the 0.8 series
&lt;/h2&gt;

&lt;p&gt;With &lt;strong&gt;v0.8.0&lt;/strong&gt;, LeafWiki introduced one of the biggest structural changes so far: &lt;strong&gt;Sections&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sections allow the wiki tree to behave more like a real folder structure.&lt;/p&gt;

&lt;p&gt;Instead of every node being a page, a node can now simply act as a &lt;strong&gt;container for other pages&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This enables things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cleaner hierarchical structures&lt;/li&gt;
&lt;li&gt;better organization for larger documentation sets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;v0.8 also introduced &lt;strong&gt;import and recovery tools&lt;/strong&gt;, making it much easier to bring existing documentation into LeafWiki or rebuild the wiki structure from files on disk.&lt;/p&gt;

&lt;p&gt;With that structural foundation in place, the following releases in the &lt;strong&gt;0.8.x series focus on refinement&lt;/strong&gt; — improving usability, performance, and deployment flexibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reverse Proxy Support (&lt;code&gt;--base-path&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;One improvement in &lt;strong&gt;v0.8.2&lt;/strong&gt; makes LeafWiki easier to run behind reverse proxies.&lt;/p&gt;

&lt;p&gt;LeafWiki now supports a &lt;code&gt;--base-path&lt;/code&gt; flag, which allows the application to be served from a &lt;strong&gt;subpath instead of the domain root&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This enables setups like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com/wiki
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of requiring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://wiki.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;p&gt;Many self-hosted environments run multiple services behind a single domain using tools like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nginx&lt;/li&gt;
&lt;li&gt;Traefik&lt;/li&gt;
&lt;li&gt;Caddy&lt;/li&gt;
&lt;li&gt;corporate reverse proxies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Supporting a base path makes LeafWiki much easier to integrate into these environments without requiring a dedicated subdomain.&lt;/p&gt;

&lt;p&gt;For self-hosters, this makes deployments a lot more flexible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tree View usability improvements
&lt;/h2&gt;

&lt;p&gt;As wikis grow, navigation becomes increasingly important.&lt;/p&gt;

&lt;p&gt;v0.8.2 adds &lt;strong&gt;Expand All&lt;/strong&gt; and &lt;strong&gt;Collapse All&lt;/strong&gt; actions to the Tree View.&lt;/p&gt;

&lt;p&gt;This makes it much easier to quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explore the full structure of a wiki&lt;/li&gt;
&lt;li&gt;collapse everything to focus on a specific section&lt;/li&gt;
&lt;li&gt;navigate large documentation trees&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a small feature, but it becomes very useful once a wiki contains many nested pages and sections.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;With the structural work introduced in &lt;strong&gt;v0.8.0&lt;/strong&gt;, the current focus is on polishing the experience around the new tree model.&lt;/p&gt;

&lt;p&gt;The goal is to keep LeafWiki simple, fast, and predictable — while gradually improving the everyday experience of using it.&lt;/p&gt;




&lt;p&gt;Thanks to everyone who reports issues, suggests improvements, or contributes to the project.&lt;/p&gt;

&lt;p&gt;Your feedback continues to shape the direction of LeafWiki 🌿&lt;/p&gt;

&lt;p&gt;If you'd like to try it out or follow development:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;https://github.com/perber/leafwiki&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>go</category>
      <category>markdown</category>
      <category>documentation</category>
    </item>
    <item>
      <title>LeafWiki Devlog #8: v0.7.3 - Secure by Default: Authentication, Roles &amp; Safer Self-Hosting</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Sun, 01 Feb 2026 12:59:52 +0000</pubDate>
      <link>https://dev.to/perber/leafwiki-devlog-8-v073-secure-by-default-authentication-roles-safer-self-hosting-154e</link>
      <guid>https://dev.to/perber/leafwiki-devlog-8-v073-secure-by-default-authentication-roles-safer-self-hosting-154e</guid>
      <description>&lt;p&gt;Hi,&lt;/p&gt;

&lt;p&gt;This release marks an important step for LeafWiki.&lt;/p&gt;

&lt;p&gt;With recent versions, LeafWiki has moved beyond a purely personal wiki running on &lt;code&gt;localhost&lt;/code&gt;.&lt;br&gt;
People are now running it on servers, exposing it to internal networks — and sometimes to the public internet.&lt;/p&gt;

&lt;p&gt;That shift comes with new responsibilities.&lt;/p&gt;

&lt;p&gt;So v0.7.x focuses on something less flashy than backlinks or editors — but far more important in the long run:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security, authentication, and safer defaults for self-hosted setups.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A quick reminder: what LeafWiki is
&lt;/h2&gt;

&lt;p&gt;If you're new here:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;LeafWiki is a lightweight, self-hosted Markdown wiki built as a single Go binary.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Markdown files on disk
&lt;/li&gt;
&lt;li&gt;No external database service
&lt;/li&gt;
&lt;li&gt;Designed for people who think in folders, not feeds
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If LeafWiki disappears tomorrow, your content is still yours.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;https://github.com/perber/leafwiki&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why security became a priority now
&lt;/h2&gt;

&lt;p&gt;Security was always considered in LeafWiki — but v0.7.x is where it becomes &lt;strong&gt;intentional and explicit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Two things triggered this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LeafWiki started to be used for &lt;strong&gt;real internal documentation&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Instances were being &lt;strong&gt;exposed beyond localhost&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, authentication and access control stop being &lt;em&gt;nice to have&lt;/em&gt; and start being &lt;strong&gt;table stakes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But there was one constraint I didn’t want to break:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Adding security must not turn LeafWiki into an operational project.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No extra services.&lt;br&gt;&lt;br&gt;
No complex setup.&lt;br&gt;&lt;br&gt;
No surprise defaults.&lt;/p&gt;




&lt;h2&gt;
  
  
  Secure by default, flexible by design
&lt;/h2&gt;

&lt;p&gt;The guiding principle for this release was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Secure by default — but explicit when you want to opt out.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That principle led to a few foundational changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Authentication &amp;amp; session handling
&lt;/h2&gt;

&lt;p&gt;LeafWiki now uses &lt;strong&gt;session-based authentication backed by a local database&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this enables
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Secure, HttpOnly cookies enabled by default
&lt;/li&gt;
&lt;li&gt;CSRF protection on all state-changing requests
&lt;/li&gt;
&lt;li&gt;Rate limiting on authentication-related endpoints
&lt;/li&gt;
&lt;li&gt;Configurable access and refresh token timeouts
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are boring features — and that’s a good thing.&lt;br&gt;&lt;br&gt;
They are meant to quietly do their job without being noticed.&lt;/p&gt;

&lt;p&gt;All of this works without introducing external dependencies or services.&lt;/p&gt;




&lt;h2&gt;
  
  
  Roles &amp;amp; access control
&lt;/h2&gt;

&lt;p&gt;LeafWiki now supports &lt;strong&gt;explicit roles&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Admin&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Editor&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Viewer&lt;/strong&gt; (read-only)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes a big difference for common setups like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public documentation with authenticated editing
&lt;/li&gt;
&lt;li&gt;Internal runbooks where most users only read
&lt;/li&gt;
&lt;li&gt;Small teams with a single maintainer
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If authentication is disabled, editing without login is still possible — but it is now an &lt;strong&gt;explicit choice&lt;/strong&gt;, not an implicit side effect.&lt;/p&gt;




&lt;h2&gt;
  
  
  Escape hatches (and why they exist)
&lt;/h2&gt;

&lt;p&gt;Two new flags were added in v0.7.0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--allow-insecure&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--disable-auth&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are &lt;strong&gt;not shortcuts&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
They are deliberate escape hatches.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;--allow-insecure&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Required for HTTP-only setups where Secure/HttpOnly cookies would otherwise break local development.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;--disable-auth&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Completely disables authentication and authorization.&lt;/p&gt;

&lt;p&gt;This flag is intended &lt;strong&gt;only&lt;/strong&gt; for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local development
&lt;/li&gt;
&lt;li&gt;Trusted internal networks
&lt;/li&gt;
&lt;li&gt;VPN- or firewall-protected environments
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using it on a public instance is unsafe — and the documentation is intentionally explicit about that.&lt;/p&gt;

&lt;p&gt;Security should be strong by default, but never magical.&lt;/p&gt;




&lt;h2&gt;
  
  
  Branding &amp;amp; UX improvements
&lt;/h2&gt;

&lt;p&gt;While security was the main theme, a few smaller — but very practical — improvements landed as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Branding settings
&lt;/h3&gt;

&lt;p&gt;LeafWiki now supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom site name
&lt;/li&gt;
&lt;li&gt;Logo
&lt;/li&gt;
&lt;li&gt;Favicon
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This sounds small, but it matters a lot for internal tools.&lt;br&gt;
Branding helps with adoption and trust — especially when LeafWiki becomes part of daily workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Under the hood: safer foundations
&lt;/h2&gt;

&lt;p&gt;Some less visible changes shipped in the background as well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Atomic writes for critical files
&lt;/li&gt;
&lt;li&gt;Schema versioning and migrations
&lt;/li&gt;
&lt;li&gt;Improved SQLite FTS5 tokenization (e.g. &lt;code&gt;C++&lt;/code&gt;, filenames)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are headline features — but together they make upgrades safer and behavior more predictable.&lt;/p&gt;




&lt;h2&gt;
  
  
  About 2FA / TOTP (and why it’s not in yet)
&lt;/h2&gt;

&lt;p&gt;A recent feature request asked about &lt;strong&gt;TOTP-based 2FA support&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Short answer:&lt;br&gt;&lt;br&gt;
Yes — it makes sense, especially for internet-exposed instances.&lt;/p&gt;

&lt;p&gt;Longer answer:&lt;br&gt;&lt;br&gt;
LeafWiki still lacks a few core building blocks, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content versioning
&lt;/li&gt;
&lt;li&gt;Import / export
&lt;/li&gt;
&lt;li&gt;Conflict handling
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those come first.&lt;/p&gt;

&lt;p&gt;Security is not a checkbox you tick once — it is an ongoing process.&lt;br&gt;&lt;br&gt;
The goal of v0.7.x was to lay a solid foundation before stacking more features on top.&lt;/p&gt;

&lt;p&gt;The issue is open and tracked, and I’ll revisit it once the basics are in place.&lt;/p&gt;




&lt;h2&gt;
  
  
  Thanks
&lt;/h2&gt;

&lt;p&gt;This release was shaped heavily by feedback and contributions from the community.&lt;/p&gt;

&lt;p&gt;Thanks to everyone who uses LeafWiki, reports issues, and shares ideas — your feedback directly influences the direction of the project.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>security</category>
      <category>documentation</category>
      <category>go</category>
    </item>
    <item>
      <title>LeafWiki Devlog #7: v0.6.1 - Introducing Backlinks + Better Search (SQLite FTS5) 🌿</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Sat, 17 Jan 2026 18:47:59 +0000</pubDate>
      <link>https://dev.to/perber/leafwiki-devlog-7-v061-introducing-backlinks-better-search-sqlite-fts5-1llo</link>
      <guid>https://dev.to/perber/leafwiki-devlog-7-v061-introducing-backlinks-better-search-sqlite-fts5-1llo</guid>
      <description>&lt;p&gt;Hi! &lt;/p&gt;

&lt;p&gt;It’s time for another update on &lt;strong&gt;LeafWiki&lt;/strong&gt; 🌿&lt;/p&gt;

&lt;p&gt;The new version &lt;strong&gt;v0.6.1&lt;/strong&gt; focuses on two things you use &lt;em&gt;constantly&lt;/em&gt; in a wiki:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt; — fuzzy search &amp;amp; improved ranking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backlinks / link UX&lt;/strong&gt; — introducing backlinks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re new here: LeafWiki is a lightweight, self-hosted Markdown wiki built as a &lt;strong&gt;single Go binary&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
It’s for people who think in &lt;strong&gt;folders&lt;/strong&gt;, not feeds.&lt;/p&gt;

&lt;p&gt;LeafWiki stores everything locally — Markdown files on disk, plus a small tree file for structure and metadata.&lt;/p&gt;

&lt;p&gt;If LeafWiki disappears tomorrow, &lt;strong&gt;your content is still yours&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉 GitHub: &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;https://github.com/perber/leafwiki&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Backlinks
&lt;/h2&gt;

&lt;p&gt;Backlinks are one of those features that turn a wiki into a &lt;strong&gt;knowledge base&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They also enable something important: showing the &lt;strong&gt;impact of moves and renames&lt;/strong&gt; - because in a real wiki, pages don’t stay static forever.&lt;/p&gt;

&lt;p&gt;LeafWiki follows an explicit approach here (similar to working in an IDE):&lt;br&gt;
when you rename or move a page, you can decide whether links inside Markdown should be updated as well.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Automatic link updates are planned for a future release.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Backlinks answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Where is this page referenced?”&lt;/li&gt;
&lt;li&gt;“Which docs depend on this decision?”&lt;/li&gt;
&lt;li&gt;“What’s connected to this topic?”&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  What’s included in v0.6.1 (Backlinks &amp;amp; Links)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Incoming &lt;strong&gt;backlinks&lt;/strong&gt; per page&lt;/li&gt;
&lt;li&gt;Outgoing link list&lt;/li&gt;
&lt;li&gt;Broken links are tracked (so you can see what needs fixing)
&lt;em&gt;(A dashboard / overview for broken links is planned for a future release.)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The link section was intentionally made &lt;strong&gt;less visually dominant&lt;/strong&gt;, so your page content stays the focus&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My goal is to make link navigation feel useful without turning LeafWiki into a graph tool.  &lt;/p&gt;

&lt;p&gt;This is the first release where I’m properly introducing &lt;strong&gt;backlinks&lt;/strong&gt; — and I’d love feedback on how you use them.&lt;/p&gt;


&lt;h2&gt;
  
  
  Search improvements for a Markdown based wiki
&lt;/h2&gt;

&lt;p&gt;Search is a daily driver feature — if search feels unreliable, a wiki slowly turns into a graveyard.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;v0.6.1&lt;/strong&gt;, I focused on making search feel more reliable and practical during day-to-day use.&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ Under the hood: local SQLite FTS5 (no external services)
&lt;/h2&gt;

&lt;p&gt;LeafWiki is file-based, so search needs to be fast &lt;strong&gt;without requiring a separate DB server&lt;/strong&gt; or Elasticsearch.&lt;/p&gt;

&lt;p&gt;LeafWiki uses a local &lt;strong&gt;SQLite FTS5&lt;/strong&gt; index (&lt;code&gt;search.db&lt;/code&gt;) and keeps it up to date.&lt;/p&gt;

&lt;p&gt;A few implementation details for devs &amp;amp; self-hosters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parallel indexing&lt;/strong&gt;: Markdown files are indexed using a small worker pool&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown-aware indexing&lt;/strong&gt;: headings are extracted and indexed separately so important sections rank well&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relevance ranking&lt;/strong&gt;: results are ordered with &lt;strong&gt;BM25&lt;/strong&gt; weighting (title &amp;gt; headings &amp;gt; content)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better UX&lt;/strong&gt;: highlighted titles and snippets/excerpts generated directly by FTS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fuzzy-by-default&lt;/strong&gt;: normal queries get &lt;code&gt;*&lt;/code&gt; wildcards automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Optional: tiny schema snippet)&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;VIRTUAL&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="k"&gt;USING&lt;/span&gt; &lt;span class="n"&gt;fts5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;headings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;tokenize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;"unicode61 tokenchars '-_/+#.'"&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Feedback welcome
&lt;/h2&gt;

&lt;p&gt;Backlinks can be a deep rabbit hole (graphs, tags, multi-references, etc.).&lt;br&gt;&lt;br&gt;
LeafWiki tries to keep it simple — but useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So I’d love to hear:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you use backlinks in your &lt;strong&gt;documentation&lt;/strong&gt; or more for &lt;strong&gt;knowledge management&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;Should the link section be more prominent, or is the subtle approach better?&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Thanks for following along 🌿&lt;/p&gt;

&lt;p&gt;Try it out: &lt;strong&gt;&lt;a href="https://demo.leafwiki.com" rel="noopener noreferrer"&gt;https://demo.leafwiki.com&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you like the project, check it out on GitHub: &lt;strong&gt;&lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;https://github.com/perber/leafwiki&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>go</category>
      <category>markdown</category>
      <category>documentation</category>
    </item>
    <item>
      <title>LeafWiki Devlog #6: v0.5.2 - is out - dark mode and Markdown improvements</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Sun, 21 Dec 2025 14:48:36 +0000</pubDate>
      <link>https://dev.to/perber/leafwiki-v052-is-out-dark-mode-and-markdown-improvements-2l87</link>
      <guid>https://dev.to/perber/leafwiki-v052-is-out-dark-mode-and-markdown-improvements-2l87</guid>
      <description>&lt;p&gt;I'm happy to announce that &lt;strong&gt;Leafwiki v0.5.2&lt;/strong&gt; is out.&lt;br&gt;&lt;br&gt;
This release introduces dark mode support.&lt;/p&gt;

&lt;p&gt;With support for Mermaid diagrams, images, and HTML inside Markdown, Leafwiki can be used for project documentation, technical notes, and internal documentation for personal use and small dev teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Leafwiki
&lt;/h2&gt;

&lt;p&gt;Leafwiki is a lightweight, self-hosted wiki engine built for developers who want a simple and reliable way to manage documentation.&lt;/p&gt;

&lt;p&gt;It is a &lt;strong&gt;markdown-powered wiki&lt;/strong&gt;: content is stored as plain Markdown, while Leafwiki itself takes care of structure, navigation, and rendering. The goal is to behave like a real wiki, just without unnecessary complexity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90gf6bia85r2fn27vh49.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90gf6bia85r2fn27vh49.png" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;At a high level, Leafwiki keeps things intentionally simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content is stored as Markdown files (no vendor lock-in).&lt;/li&gt;
&lt;li&gt;Page hierarchy and ordering are stored in &lt;code&gt;tree.json&lt;/code&gt; (loaded into memory). Leafwiki can reorder and move pages, and updates the on-disk layout accordingly.&lt;/li&gt;
&lt;li&gt;SQLite is used for search indexing and user management, so no external database is required.&lt;/li&gt;
&lt;li&gt;Leafwiki is implemented as a single-page application (SPA). This allows fast navigation between pages and a smoother editing experience, without full page reloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who Leafwiki is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Leafwiki already works well as a &lt;strong&gt;personal wiki&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's planned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;v0.6.0&lt;/strong&gt;, Leafwiki will get backlinks, which will improve navigation and content discovery.&lt;/li&gt;
&lt;li&gt;Team-related features, such as versioning, are planned for future releases, moving it closer to an internal documentation tool for small dev teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What's new in v0.5.2&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dark mode support&lt;/li&gt;
&lt;li&gt;HTML support in Markdown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think the dark mode is already looking good.&lt;br&gt;
From a code perspective, I previously had many inline styles inside components. In this version, those styles were moved into &lt;code&gt;index.css&lt;/code&gt;, and configuration is overridden there.&lt;/p&gt;

&lt;p&gt;This makes it easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;adjust styles for dark mode&lt;/li&gt;
&lt;li&gt;introduce new colors&lt;/li&gt;
&lt;li&gt;override Tailwind tokens in a single place&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, this simplifies theming and makes the codebase easier to maintain.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project status
&lt;/h2&gt;

&lt;p&gt;Leafwiki has reached 32 GitHub stars, which I’m genuinely happy about.&lt;br&gt;
I’ve also received some early feedback from users, for example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I use it for personal use, I find it attractive because the LeafWiki is light and fast.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Demo and source
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Demo: &lt;a href="https://demo.leafwiki.com" rel="noopener noreferrer"&gt;https://demo.leafwiki.com&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;https://github.com/perber/leafwiki&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
Feedback and issues are always welcome&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>markdown</category>
      <category>documentation</category>
      <category>devtools</category>
    </item>
    <item>
      <title>The 3 small Wiki UX frustrations that pushed me to build LeafWiki</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Mon, 24 Nov 2025 20:50:52 +0000</pubDate>
      <link>https://dev.to/perber/the-3-small-wiki-ux-frustrations-that-pushed-me-to-build-leafwiki-47hk</link>
      <guid>https://dev.to/perber/the-3-small-wiki-ux-frustrations-that-pushed-me-to-build-leafwiki-47hk</guid>
      <description>&lt;p&gt;This post is not meant as criticism of any existing tool.&lt;br&gt;&lt;br&gt;
LeafWiki itself is still in active development, and I’m sure I’ll eventually run into UX issues in my own project too — that’s normal.&lt;/p&gt;

&lt;p&gt;But I want to describe the &lt;em&gt;real workflow pains&lt;/em&gt; I experienced while using other wiki tools like Wiki.js, Confluence, and similar systems.&lt;br&gt;&lt;br&gt;
These small frictions kept interrupting my writing flow, and over time they motivated me to build &lt;strong&gt;LeafWiki&lt;/strong&gt; as a simpler alternative for developers and teams.&lt;/p&gt;

&lt;p&gt;I’m actively improving the UI and UX, and there are still things I want to polish — but the core philosophy stays the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple to run&lt;/strong&gt;: No container, no database, just Go&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple to host&lt;/strong&gt;: You know where your data is&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple to trust&lt;/strong&gt;: Markdown is portable &amp;amp; future-proof&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I chose Go specifically to keep LeafWiki a single, fast binary with no external dependencies.&lt;br&gt;&lt;br&gt;
Your knowledge shouldn’t belong to a database you maintain — it should belong to &lt;em&gt;you&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. I wanted to paste screenshots directly into the editor (Ctrl+V)
&lt;/h2&gt;

&lt;p&gt;In the wikis I used before, adding a screenshot felt like a mini project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Take screenshot
&lt;/li&gt;
&lt;li&gt;Open upload dialog
&lt;/li&gt;
&lt;li&gt;Choose the correct folder
&lt;/li&gt;
&lt;li&gt;Upload the file
&lt;/li&gt;
&lt;li&gt;Click the uploaded item to insert it into the page
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every time I tried to quickly document something, this tiny workflow broke my flow.&lt;/p&gt;

&lt;p&gt;What I really wanted was the natural workflow developers use everywhere else:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshot → Ctrl+V → done.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So in &lt;strong&gt;LeafWiki&lt;/strong&gt;, pasting images directly into the Markdown editor automatically uploads them and inserts the correct Markdown link — with no dialogs and no mental friction.&lt;/p&gt;

&lt;p&gt;Just write.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldbgqwzgpg86bkuaxsuw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldbgqwzgpg86bkuaxsuw.gif" alt="CTRL+V Demo" width="1915" height="952"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. I kept having to choose folders just to upload the right file
&lt;/h2&gt;

&lt;p&gt;Another small thing that slowed me down:&lt;/p&gt;

&lt;p&gt;Before I could upload a file, I had to select a folder.&lt;/p&gt;

&lt;p&gt;Yes, technically that makes sense - but on the user level, it felt unnatural.&lt;br&gt;&lt;br&gt;
My brain doesn’t think in terms of asset location. I write documentation and the asset should be part of the page. I think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;This file belongs to this page.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Let me browse to the correct folder for this file…&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So &lt;strong&gt;LeafWiki&lt;/strong&gt; stores assets &lt;em&gt;per page&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you upload an image while writing, it’s automatically attached to that page.&lt;br&gt;&lt;br&gt;
No folder selecting. No searching. No extra decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. I wanted to create pages directly in the tree where I’m thinking
&lt;/h2&gt;

&lt;p&gt;This one bothered me more than it should:&lt;/p&gt;

&lt;p&gt;I’d see exactly where a new page belongs in the structure - but to create it, I had to go somewhere else, usually a top-level menu.&lt;/p&gt;

&lt;p&gt;That disconnect always broke my flow.&lt;/p&gt;

&lt;p&gt;I also didn’t want to think about slugs during the creative flow.&lt;br&gt;&lt;br&gt;
Yes, I sometimes need to adjust slugs later, but that’s not the usual writing moment. (Of course changing slug is possible in LeafWiki.)&lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;LeafWiki&lt;/strong&gt; lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create pages directly in the tree
&lt;/li&gt;
&lt;li&gt;create pages from non-existing links
&lt;/li&gt;
&lt;li&gt;create pages from the 404 view
&lt;/li&gt;
&lt;li&gt;insert structure &lt;em&gt;while thinking in structure&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The wiki should adapt to how you think, not the other way around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why these small things matter
&lt;/h2&gt;

&lt;p&gt;None of these issues are “big”.&lt;br&gt;&lt;br&gt;
They’re small, almost invisible UX friction points.&lt;/p&gt;

&lt;p&gt;But they add up.&lt;/p&gt;

&lt;p&gt;If you document things all day, these little interruptions make the tool feel heavy, slow, and mentally expensive.&lt;/p&gt;

&lt;p&gt;LeafWiki tries to remove these tiny friction points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Paste-to-upload&lt;/strong&gt; (no dialogs)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Per-page assets&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structure where you think&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown editor&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A single Go binary&lt;/strong&gt; — easy to host, easy to trust&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If that sounds interesting, you can try it here:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Demo:&lt;/strong&gt; &lt;a href="https://demo.leafwiki.com" rel="noopener noreferrer"&gt;https://demo.leafwiki.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;https://github.com/perber/leafwiki&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, ideas, and discussions are always welcome&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>ux</category>
    </item>
    <item>
      <title>Self-Hosting a lightweight Wiki on Raspberry PI with Cloudflare Tunnel</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Sat, 08 Nov 2025 15:58:47 +0000</pubDate>
      <link>https://dev.to/perber/self-hosting-a-lightweight-wiki-on-raspberry-pi-with-cloudflare-tunnel-226p</link>
      <guid>https://dev.to/perber/self-hosting-a-lightweight-wiki-on-raspberry-pi-with-cloudflare-tunnel-226p</guid>
      <description>&lt;p&gt;I’m the developer behind LeafWiki, a lightweight, Markdown-based Wiki that doesn’t require a database.&lt;br&gt;
One of our users recently set it up on a Raspberry Pi, connected it to the Internet through Cloudflare Tunnel, and the setup was so clean that I decided to write a short guide about it.&lt;/p&gt;

&lt;p&gt;He also published the documentation in the project repository:&lt;br&gt;
&lt;a href="https://github.com/perber/leafwiki/edit/main/docs/install/raspberry.md" rel="noopener noreferrer"&gt;Install LeafWiki on Raspberry PI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re into &lt;strong&gt;self-hosted tools&lt;/strong&gt;, this might be interesting to you.&lt;/p&gt;
&lt;h2&gt;
  
  
  Project Installation
&lt;/h2&gt;

&lt;p&gt;To begin, you need to install &lt;code&gt;LeafWiki&lt;/code&gt;. &lt;br&gt;
Here is the quick install command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sL&lt;/span&gt; https://raw.githubusercontent.com/perber/leafwiki/main/install.sh &lt;span class="nt"&gt;-o&lt;/span&gt; install.sh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;chmod&lt;/span&gt; +x ./install.sh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo&lt;/span&gt; ./install.sh &lt;span class="nt"&gt;--arch&lt;/span&gt; arm64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;During installation, you’ll be asked for an &lt;strong&gt;admin password&lt;/strong&gt; and a &lt;strong&gt;JWT secret&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That’s it 🎉&lt;br&gt;
LeafWiki should now be running locally at:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="http://localhost:8080/" rel="noopener noreferrer"&gt;http://localhost:8080/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can open that in your browser to confirm the installation.&lt;/p&gt;
&lt;h2&gt;
  
  
  Exposing LeafWiki to the Internet with Cloudflare Tunnel
&lt;/h2&gt;

&lt;p&gt;At this point, LeafWiki is only accessible &lt;strong&gt;within your local network&lt;/strong&gt;.&lt;br&gt;
You could open ports on your router — but that’s risky and not ideal for security.  &lt;/p&gt;

&lt;p&gt;Instead, we’ll use &lt;strong&gt;Cloudflare Tunnel&lt;/strong&gt;, a secure, zero-trust connection that lets you expose your local service to the Internet &lt;strong&gt;without opening any ports&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Cloudflare acts as a &lt;strong&gt;CDN (Content Delivery Network)&lt;/strong&gt; sitting between the user and your server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqp5z5c6lozdvatbwsam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqp5z5c6lozdvatbwsam.png" alt=" " width="683" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Traffic goes through &lt;strong&gt;Cloudflare&lt;/strong&gt;, which then routes it safely to your local machine.&lt;br&gt;
This way your &lt;strong&gt;IP stays hidden&lt;/strong&gt;, and your &lt;strong&gt;connection stays encrypted&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In our case, the Cloudflare &lt;strong&gt;tunnel&lt;/strong&gt; forwards traffic to LeafWiki running on your Pi — and exposes it as a &lt;strong&gt;subdomain&lt;/strong&gt; of your domain, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wiki.mysite.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rzlfxn1q12ekblcakqd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rzlfxn1q12ekblcakqd.png" alt=" " width="617" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Domain Setup
&lt;/h2&gt;

&lt;p&gt;You’ll need a domain name.&lt;br&gt;
It can be managed through Cloudflare or any other registrar —&lt;br&gt;
if your DNS is elsewhere, you’ll just need to point it to Cloudflare.&lt;/p&gt;

&lt;p&gt;Sign up or log in to your &lt;a href="https://dash.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare dashboard&lt;/a&gt; before continuing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a tunnel
&lt;/h2&gt;

&lt;p&gt;Once your domain is ready:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the Cloudflare dashboard.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Zero Trust&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Network&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Tunnels&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create a tunnel&lt;/strong&gt; and choose &lt;strong&gt;Cloudflared&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Give your tunnel a name.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffmrxappyk8oet9lhnxrf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffmrxappyk8oet9lhnxrf.png" alt=" " width="257" height="889"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll then reach the configuration page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fri0t3zjcxhxpijrdphoa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fri0t3zjcxhxpijrdphoa.png" alt=" " width="251" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure the server (your Raspberry Pi)
&lt;/h2&gt;

&lt;p&gt;After creating the tunnel, Cloudflare shows setup instructions for your device.&lt;br&gt;
Connect to your Raspberry Pi via SSH and copy/paste the provided commands.  &lt;/p&gt;

&lt;p&gt;This will install &lt;strong&gt;Cloudflared&lt;/strong&gt;, authenticate it, and connect your Pi to your Cloudflare account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8gygm971d0nbfcl2j0yc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8gygm971d0nbfcl2j0yc.png" alt=" " width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Expose your LeafWiki instance
&lt;/h2&gt;

&lt;p&gt;Now that the tunnel is live, register your local app — in our case, LeafWiki&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protocol: HTTP&lt;/li&gt;
&lt;li&gt;URL: localhost:8080&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Save the configurtion&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1i7fb59e42phonpene1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1i7fb59e42phonpene1.png" alt=" " width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cloudflare will now route external traffic (e.g. wiki.mydomain.com) directly to your LeafWiki instance — securely and without exposing your local IP. 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;You now have: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LeafWiki running on your Raspberry PI&lt;/li&gt;
&lt;li&gt;A secure Cloudflare Tunnle exposing it to the internet&lt;/li&gt;
&lt;li&gt;Your own self-hosted lightweight wiki - accessible anywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to try ityourself or checkout the project: &lt;br&gt;
👉 &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;br&gt;
👉 &lt;a href="https://demo.leafwiki.com" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like the project and the idea,&lt;br&gt;
⭐ drop a star on GitHub&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>opensource</category>
      <category>tutorial</category>
      <category>wiki</category>
    </item>
    <item>
      <title>LeafWiki Devlog #5: v0.4.9 - Mermaid Diagrams, Page Copy &amp; Easier Setup 🚀</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Fri, 07 Nov 2025 18:17:02 +0000</pubDate>
      <link>https://dev.to/perber/leafwiki-v049-mermaid-diagrams-page-copy-easier-setup-47ai</link>
      <guid>https://dev.to/perber/leafwiki-v049-mermaid-diagrams-page-copy-easier-setup-47ai</guid>
      <description>&lt;p&gt;Hey everyone 👋  &lt;/p&gt;

&lt;p&gt;After a few weeks of feedback and polishing, &lt;strong&gt;LeafWiki v0.4.9&lt;/strong&gt; is out!&lt;br&gt;&lt;br&gt;
This update focuses on making LeafWiki easier to start, smoother to use, and just a little more powerful.&lt;/p&gt;
&lt;h2&gt;
  
  
  🌿 What is LeafWiki?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LeafWiki&lt;/strong&gt; is a lightweight, tree-based wiki that keeps your content in plain Markdown — fast, clean, and self-hosted.&lt;br&gt;&lt;br&gt;
It’s a single Go binary with no database or dependencies, designed for teams and individuals who want a structured, file-backed knowledge base they can fully own.&lt;/p&gt;

&lt;p&gt;Run your knowledge base in 5 minutes.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://demo.leafwiki.com" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt; &lt;em&gt;(resets hourly)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  ✨ What’s New in v0.4.9
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🧭 Copy Pages (with Assets)
&lt;/h3&gt;

&lt;p&gt;You can now &lt;strong&gt;duplicate entire pages&lt;/strong&gt;, including all uploaded images and files.&lt;br&gt;&lt;br&gt;
Perfect for templates or similar documents.&lt;/p&gt;
&lt;h3&gt;
  
  
  🪄 Mermaid.js Diagram Support
&lt;/h3&gt;

&lt;p&gt;You can now embed &lt;strong&gt;Mermaid.js diagrams&lt;/strong&gt; directly inside Markdown pages using fenced code blocks:&lt;/p&gt;

&lt;pre&gt;


```mermaid
graph TD
  A[Start] --&amp;gt; B[Write Markdown]
  B --&amp;gt; C[Render Mermaid Diagram]
  C --&amp;gt; D[Enjoy!]
```


&lt;/pre&gt;

&lt;p&gt;LeafWiki automatically renders these diagrams in the page preview.&lt;/p&gt;
&lt;h3&gt;
  
  
  Improved Installer
&lt;/h3&gt;

&lt;p&gt;A installation script was added to make it even simpler to set up LeafWiki on Linux or Raspberry Pi.  &lt;/p&gt;

&lt;p&gt;Try it in one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sL&lt;/span&gt; https://raw.githubusercontent.com/perber/leafwiki/main/install.sh &lt;span class="nt"&gt;-o&lt;/span&gt; install.sh &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;chmod&lt;/span&gt; +x ./install.sh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo&lt;/span&gt; ./install.sh &lt;span class="nt"&gt;--arch&lt;/span&gt; amd64 &lt;span class="nt"&gt;--jwt-secret&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yoursecret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or checkout the documentation &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/perber/leafwiki/blob/main/docs/install/nginx.md" rel="noopener noreferrer"&gt;Run LeafWiki behind nginx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/perber/leafwiki/blob/main/docs/install/raspberry.md" rel="noopener noreferrer"&gt;Run Leafwiki on a raspberry pi with CloudFlare tunnels&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🌐 Live Demo Added
&lt;/h3&gt;

&lt;p&gt;You can now explore LeafWiki without installing anything.&lt;br&gt;&lt;br&gt;
The &lt;a href="https://demo.leafwiki.com" rel="noopener noreferrer"&gt;public demo&lt;/a&gt; resets hourly — so feel free to experiment!&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 A Few Words of Thanks
&lt;/h2&gt;

&lt;p&gt;Big thanks to:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;@Hugo-Galley&lt;/strong&gt; for documentation and onboarding improvements
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@magnus-madsen&lt;/strong&gt; for feedback on hosting and UX
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@schewara&lt;/strong&gt; for the hint on Alpine Docker images
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Community feedback has been a big part of shaping this release 💚&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Why LeafWiki Exists
&lt;/h2&gt;

&lt;p&gt;I wanted something between a static Markdown site and a full database wiki:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File-based and transparent
&lt;/li&gt;
&lt;li&gt;Still editable and searchable
&lt;/li&gt;
&lt;li&gt;Easy to host and maintain
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built LeafWiki — a small Go application that manages Markdown pages in a true tree structure, supports uploads, and provides a built-in editor with live preview.&lt;/p&gt;

&lt;p&gt;It’s not trying to be everything — just &lt;strong&gt;a fast, minimal wiki that values clarity over complexity.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Try It Yourself
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://demo.leafwiki.com" rel="noopener noreferrer"&gt;demo.leafwiki.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🐙 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;github.com/perber/leafwiki&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Your knowledge should live in files you own — not in a database you maintain.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>go</category>
      <category>opensource</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>LeafWiki - Finding Clarity in Open Source</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Sun, 26 Oct 2025 17:48:21 +0000</pubDate>
      <link>https://dev.to/perber/leafwiki-finding-clarity-in-open-source-39pc</link>
      <guid>https://dev.to/perber/leafwiki-finding-clarity-in-open-source-39pc</guid>
      <description>&lt;p&gt;I’ve been working for a few months now on my vision of a developer-friendly Markdown wiki.&lt;br&gt;&lt;br&gt;
Maybe you’ve already seen one of my earlier posts about it.&lt;/p&gt;

&lt;p&gt;At the beginning of an open-source project, the energy is wild.&lt;br&gt;&lt;br&gt;
You have big ambitions: replace Wiki.js, replace Confluence, build a simpler, cleaner alternative.&lt;/p&gt;

&lt;p&gt;The idea for LeafWiki was straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to self-host
&lt;/li&gt;
&lt;li&gt;Markdown-based content
&lt;/li&gt;
&lt;li&gt;No database
&lt;/li&gt;
&lt;li&gt;A lightweight tool for internal knowledge sharing
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just download the binary, run it, start writing.&lt;br&gt;&lt;br&gt;
That’s still the heart of it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The early phase: feature, feature, feature
&lt;/h2&gt;

&lt;p&gt;During the first months I built one feature after another:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public pages sounded cool
&lt;/li&gt;
&lt;li&gt;Full Markdown file sync from disk sounded powerful
&lt;/li&gt;
&lt;li&gt;More features would make more people happy… right?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well. I can’t achieve everything and keep the focus on the goal:&lt;br&gt;&lt;br&gt;
A wiki for developers &lt;strong&gt;without ops pain&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So for me it became clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public pages aren’t necessary for an internal wiki
&lt;/li&gt;
&lt;li&gt;The internal structure should still be determined by &lt;code&gt;tree.json&lt;/code&gt;, not the filesystem — which offers some benefits&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A break and a new direction
&lt;/h2&gt;

&lt;p&gt;In August, I took a small break.&lt;br&gt;
While I wasn’t coding, something great happened:&lt;/p&gt;

&lt;p&gt;⭐️ LeafWiki reached 16 GitHub stars&lt;br&gt;&lt;br&gt;
🐛 The first user-submitted issue arrived&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My first real user, besides myself.&lt;br&gt;&lt;br&gt;
That felt unexpectedly amazing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Their feature request was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When clicking an internal link, automatically create the page if it doesn’t exist.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Absolutely logical. Very helpful.&lt;br&gt;&lt;br&gt;
I implemented it — and it felt great.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That interaction helped me clarify LeafWiki’s purpose:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This is a wiki for developers and internal teams — not a public website generator.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The closer LeafWiki gets to real developer workflows, the better it becomes.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What I decided to remove
&lt;/h2&gt;

&lt;p&gt;I decided to remove these features from the roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static public pages
&lt;/li&gt;
&lt;li&gt;Reading all content directly from Markdown files on disk&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's coming next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Copy Page — duplicate pages and assets
&lt;/li&gt;
&lt;li&gt;Mermaid support
&lt;/li&gt;
&lt;li&gt;Auto page creation (already done)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think these are the right features to work on at the current state.&lt;/p&gt;




&lt;h2&gt;
  
  
  Do you want to help shape LeafWiki?
&lt;/h2&gt;

&lt;p&gt;LeafWiki is still a young project — which means your feedback will help shape a developer-friendly wiki.&lt;/p&gt;

&lt;p&gt;I’d love to hear from you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What’s missing?
&lt;/li&gt;
&lt;li&gt;What feels unnecessary?
&lt;/li&gt;
&lt;li&gt;What is the one feature you think a developer wiki should have?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop a comment, open an issue — and maybe leave a ⭐️.&lt;br&gt;&lt;br&gt;
Every star motivates me more. 🙌&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;https://github.com/perber/leafwiki&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>markdown</category>
      <category>devjournal</category>
      <category>opensource</category>
    </item>
    <item>
      <title>🐶 Dogfooding LeafWiki – Why Using Your Own Tool Matters</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Tue, 24 Jun 2025 21:20:19 +0000</pubDate>
      <link>https://dev.to/perber/-dogfooding-leafwiki-why-using-your-own-tool-matters-3ka</link>
      <guid>https://dev.to/perber/-dogfooding-leafwiki-why-using-your-own-tool-matters-3ka</guid>
      <description>&lt;p&gt;&lt;strong&gt;"Eat your own dog food."&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
In other words: Use your own product.&lt;/p&gt;

&lt;p&gt;That’s exactly what I did with &lt;strong&gt;LeafWiki&lt;/strong&gt; – the Markdown-based wiki I’m building. I started writing its own public documentation &lt;em&gt;using LeafWiki itself&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And as expected, a few things broke along the way. Which is great – because that's exactly the point of dogfooding.&lt;br&gt;&lt;br&gt;
You think your tool works – until you actually rely on it.&lt;br&gt;&lt;br&gt;
Real usage surfaces issues you'd never catch while just developing.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 What is LeafWiki?
&lt;/h2&gt;

&lt;p&gt;Quick version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Markdown-based wiki with a tree structure
&lt;/li&gt;
&lt;li&gt;Content lives as &lt;code&gt;.md&lt;/code&gt; files in folders
&lt;/li&gt;
&lt;li&gt;No database, no cloud, no lock-in
&lt;/li&gt;
&lt;li&gt;Just a single Go binary you can run anywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea is to give devs and small teams a &lt;strong&gt;simple, self-hosted alternative&lt;/strong&gt; to tools like &lt;strong&gt;Confluence or Wiki.js&lt;/strong&gt;, without all the setup overhead.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧑‍💻 Why I built it
&lt;/h2&gt;

&lt;p&gt;I’ve used a lot of wikis – and honestly, most of them felt like too much.&lt;br&gt;&lt;br&gt;
Complex setup, clunky UI, full DB stack – or just... slow.&lt;/p&gt;

&lt;p&gt;I wanted something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;looks clean
&lt;/li&gt;
&lt;li&gt;runs fast
&lt;/li&gt;
&lt;li&gt;stores everything in plain Markdown
&lt;/li&gt;
&lt;li&gt;doesn’t tie me to a platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not trying to replace Confluence or Wiki.js completely – but for &lt;strong&gt;small teams, dev environments, or side projects&lt;/strong&gt;, LeafWiki might be all you need.&lt;/p&gt;

&lt;p&gt;So I built it in Go, made it a single binary, and made sure it works on everything from servers to Raspberry Pis.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ What LeafWiki can do (v0.4.3)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Public Pages
&lt;/li&gt;
&lt;li&gt;🔍 Full-Text Search (via SQLite)
&lt;/li&gt;
&lt;li&gt;📂 Tree Navigation
&lt;/li&gt;
&lt;li&gt;✍️ Markdown Editing with CodeMirror (Split View, auto-scroll)
&lt;/li&gt;
&lt;li&gt;🎨 Syntax Highlighting
&lt;/li&gt;
&lt;li&gt;📱 Mobile-Optimized UI
&lt;/li&gt;
&lt;li&gt;👥 Simple Role System (Admin / Editor)
&lt;/li&gt;
&lt;li&gt;📤 Asset Upload &amp;amp; File Management
&lt;/li&gt;
&lt;li&gt;🧱 No external db service&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 What I found while dogfooding
&lt;/h2&gt;

&lt;p&gt;While writing LeafWiki’s docs inside LeafWiki, I ran into a few rough spots – most of which are already fixed for the upcoming &lt;code&gt;v0.4.4&lt;/code&gt; (dropping June 29):&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Bugs I ran into:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Slugs saved too early&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
→ If you typed fast and hit Enter, the slug wasn’t ready (&lt;code&gt;roadma&lt;/code&gt; instead of &lt;code&gt;roadmap&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Editor jumped to top after save&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
→ Classic React remount issue – annoying, but fixed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scroll position lost when navigating back&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
→ React router + scrollable divs = not friends by default.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Edits lost after token refresh&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
→ Access token expired silently; the refreshed token didn’t apply to the save.&lt;br&gt;&lt;br&gt;
Losing edits like that was especially frustrating – and definitely something I needed to fix.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ What dogfooding really taught me
&lt;/h2&gt;

&lt;p&gt;Dogfooding is more than just testing – it forces you to experience the product like a real user.&lt;/p&gt;

&lt;p&gt;Things that seemed fine during development became frustrating during actual writing.&lt;br&gt;&lt;br&gt;
Suddenly, a scroll jump broke focus.&lt;br&gt;&lt;br&gt;
Suddenly, saving wasn’t just a button – it had consequences.&lt;/p&gt;

&lt;p&gt;Dogfooding gave me honest, immediate feedback.&lt;br&gt;&lt;br&gt;
It highlighted weak spots and helped me prioritize what really matters.&lt;/p&gt;

&lt;p&gt;If you’re building a dev tool and haven’t used it for actual work yet: &lt;strong&gt;Do it.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It’s uncomfortable, but it makes everything better.&lt;/p&gt;




&lt;h2&gt;
  
  
  📣 What’s next?
&lt;/h2&gt;

&lt;p&gt;I’m putting the finishing touches on the &lt;strong&gt;public docs&lt;/strong&gt;, which will go live soon.&lt;/p&gt;

&lt;p&gt;In the meantime:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;github.com/perber/leafwiki&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Try it out. It’s free, open source, and zero-setup.
&lt;/li&gt;
&lt;li&gt;Bug reports, feedback, or just saying hi – all welcome.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Heads up:&lt;/strong&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;LeafWiki is still very much in active development.&lt;br&gt;&lt;br&gt;
It works, and I use it daily – but if you're planning to use it in &amp;gt; production, be aware that things may still shift a bit over the &amp;gt; next few releases.&lt;br&gt;&lt;br&gt;
That said, early feedback is incredibly helpful right now.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Let me know what you think – or better yet:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Try writing your own docs with it. That’s how it gets better.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>LeafWiki Devlog #4: v0.4.0 - A Markdown Wiki is now ready for Dogfooding</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Fri, 20 Jun 2025 17:37:07 +0000</pubDate>
      <link>https://dev.to/perber/leafwiki-a-markdown-wiki-is-now-ready-for-dogfooding-v040-4e8d</link>
      <guid>https://dev.to/perber/leafwiki-a-markdown-wiki-is-now-ready-for-dogfooding-v040-4e8d</guid>
      <description>&lt;p&gt;Hey 👋&lt;br&gt;&lt;br&gt;
just wanted to share a quick update on my side project – &lt;strong&gt;LeafWiki&lt;/strong&gt;, a Markdown-based wiki built with developers in mind.&lt;/p&gt;

&lt;p&gt;🌿 &lt;strong&gt;What is LeafWiki?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
LeafWiki aims to be a &lt;strong&gt;lightweight Markdown wiki&lt;/strong&gt; for developer teams. No cloud lock-in, no database, no unnecessary overhead.&lt;br&gt;&lt;br&gt;
Just a single binary that lets you create, search, and edit Markdown files — all stored directly on your local disk.&lt;/p&gt;




&lt;p&gt;📸 Here’s a quick screenshot while writing this post inside LeafWiki itself:  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwox2x6kf1ojay0oth6pf.png" alt="asset-manager" width="800" height="399"&gt;
&lt;/h2&gt;

&lt;p&gt;🗂️ And a glimpse of the built-in asset manager:  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F763tdxgdvopl06qxcuhn.png" alt="overview" width="800" height="399"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  ✅ What’s new in v0.4.0?
&lt;/h2&gt;

&lt;p&gt;With this release, the project is now &lt;strong&gt;ready for real dogfooding&lt;/strong&gt; – meaning I’ve started using it internally for my own documentation needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 📱 Mobile-optimized UI
&lt;/h3&gt;

&lt;p&gt;The interface now works on smartphones and tablets.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 🔍 Full-text search (SQLite-based)
&lt;/h3&gt;

&lt;p&gt;A custom module scans all Markdown files and builds a fast local search index.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. ✍️ Editor improvements
&lt;/h3&gt;

&lt;p&gt;The editor now supports hotkeys for &lt;strong&gt;bold&lt;/strong&gt;, &lt;em&gt;italic&lt;/em&gt;, ## headings, and more — no bloated WYSIWYG needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Feedback &amp;amp; Chat
&lt;/h2&gt;

&lt;p&gt;I’d love to hear your feedback, ideas, or suggestions!&lt;br&gt;&lt;br&gt;
→ Project: &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;github.com/perber/leafwiki&lt;/a&gt;&lt;br&gt;&lt;br&gt;
→ Chat: &lt;a href="https://discord.gg/NcX9AEgp" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading&lt;br&gt;
&lt;strong&gt;– Patrick&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>opensource</category>
    </item>
    <item>
      <title>LeafWiki now supports ARM64 – run your Markdown wiki on Raspberry Pi</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Tue, 10 Jun 2025 19:58:27 +0000</pubDate>
      <link>https://dev.to/perber/leafwiki-now-supports-arm64-run-your-markdown-wiki-on-raspberry-pi-l23</link>
      <guid>https://dev.to/perber/leafwiki-now-supports-arm64-run-your-markdown-wiki-on-raspberry-pi-l23</guid>
      <description>&lt;p&gt;LeafWiki is a lightweight, self-hosted Markdown wiki — tree-based, database-free, and easy to run as a single Go binary.&lt;br&gt;&lt;br&gt;
With version &lt;code&gt;v0.3.4&lt;/code&gt;, we're excited to announce &lt;strong&gt;native ARM64 support&lt;/strong&gt;!&lt;/p&gt;


&lt;h2&gt;
  
  
  🌿 What is LeafWiki?
&lt;/h2&gt;

&lt;p&gt;LeafWiki is designed for developers and teams who want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean Markdown files organized in folders&lt;/li&gt;
&lt;li&gt;A real tree structure (not a flat list of pages)&lt;/li&gt;
&lt;li&gt;No database – just files on disk&lt;/li&gt;
&lt;li&gt;A modern UI with live preview&lt;/li&gt;
&lt;li&gt;Easy to self-host&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/perber/leafwiki/releases/tag/v0.3.4" rel="noopener noreferrer"&gt;Latest Release&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ What’s new in v0.3.4?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LeafWiki now builds and runs natively on:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Raspberry Pi 4/5 with 64-bit OS&lt;/li&gt;
&lt;li&gt;✅ Linux amd64&lt;/li&gt;
&lt;li&gt;✅ Windows x86_64 (via &lt;code&gt;.exe&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No emulation or QEMU needed — just download the binary and run!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://github.com/perber/leafwiki/releases/download/v0.3.4/leafwiki-v0.3.4-linux-arm64
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x leafwiki
./leafwiki &lt;span class="nt"&gt;--jwt-secret&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-secret &lt;span class="nt"&gt;--admin-password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-password &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Real-World Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🏡 &lt;strong&gt;Personal knowledge base on Raspberry Pi&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🌍 &lt;strong&gt;Offline docs on embedded/field devices&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔄 Still in Development — Feedback Wanted!
&lt;/h2&gt;

&lt;p&gt;LeafWiki is still under active development. We're currently working on &lt;code&gt;v0.4.0&lt;/code&gt;, which will include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full-text search&lt;/li&gt;
&lt;li&gt;Table of Contents&lt;/li&gt;
&lt;li&gt;Public Pages&lt;/li&gt;
&lt;li&gt;Better mobile layout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your feedback, use cases, and questions are &lt;strong&gt;very welcome&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Open an &lt;a href="https://github.com/perber/leafwiki/issues" rel="noopener noreferrer"&gt;issue on GitHub&lt;/a&gt;, or comment here 🙌&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>devops</category>
      <category>raspberrypi</category>
      <category>opensource</category>
    </item>
    <item>
      <title>LeafWiki Devlog #3: v0.3.0 - Multi-File Uploads, Asset Renaming &amp; Syntax Highlighting</title>
      <dc:creator>perber</dc:creator>
      <pubDate>Mon, 02 Jun 2025 17:10:22 +0000</pubDate>
      <link>https://dev.to/perber/leafwiki-v030-small-update-big-usability-wins-54fn</link>
      <guid>https://dev.to/perber/leafwiki-v030-small-update-big-usability-wins-54fn</guid>
      <description>&lt;p&gt;It hasn't been that long since I released &lt;strong&gt;LeafWiki v0.2.0&lt;/strong&gt;, but I’ve already pushed out a small but useful update: &lt;strong&gt;v0.3.0&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌿 What is LeafWiki?
&lt;/h2&gt;

&lt;p&gt;LeafWiki is a simple, file-based wiki system.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No database required
&lt;/li&gt;
&lt;li&gt;Single static Go binary
&lt;/li&gt;
&lt;li&gt;Everything stored as plain Markdown files – no vendor lock-in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Main features include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight role management (editor/admin)&lt;/li&gt;
&lt;li&gt;Tree-based page structure&lt;/li&gt;
&lt;li&gt;Markdown editing with CodeMirror (live preview + toolbar)&lt;/li&gt;
&lt;li&gt;Asset management (upload images, files, etc.)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✨ What’s new in v0.3.0?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Multi-file upload&lt;/strong&gt; in the Asset Manager – finally!&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Renaming assets&lt;/strong&gt; (completely forgot that in the last release 😅)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Syntax Highlighting in Code Block&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;No more HTML caching issues&lt;/strong&gt; – changes now show up instantly in edit and view mode&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Coming in v0.4.0:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔍 Full-text &lt;strong&gt;search&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;You can find the project on GitHub here:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/perber/leafwiki" rel="noopener noreferrer"&gt;https://github.com/perber/leafwiki&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have feedback, ideas, or just want to say hi – I’d love to hear from you.&lt;br&gt;&lt;br&gt;
Thanks for following along on the journey!&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>markdown</category>
      <category>opensource</category>
      <category>leafwiki</category>
    </item>
  </channel>
</rss>
