<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Search on sagenhaft</title>
    <link>https://sagenhaft.space/tags/search/</link>
    <description>Recent content in Search on sagenhaft</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    
    <lastBuildDate>Sun, 04 Oct 2026 13:00:00 -0700</lastBuildDate><atom:link href="https://sagenhaft.space/tags/search/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Videostack</title>
      <link>https://sagenhaft.space/videostack/</link>
      <pubDate>Sun, 04 Oct 2026 13:00:00 -0700</pubDate>
      
      <guid>https://sagenhaft.space/videostack/</guid>
      <description>&lt;p class=&#34;text-lg text-neutral-600 dark:text-neutral-300 -mt-2 mb-6&#34;&gt;&#xA;  A fast, native library and player for your video collection — search what was said, and jump straight to that moment.&#xA;&lt;/p&gt;&#xA;&lt;div class=&#34;not-prose my-8 flex flex-col sm:flex-row items-center gap-8 sm:gap-10&#34;&gt;&#xA;  &lt;img src=&#34;icon.png&#34; alt=&#34;Videostack App Icon&#34; class=&#34;w-28 h-28 rounded-2xl shadow-lg ring-1 ring-black/5 dark:ring-white/10 flex-shrink-0&#34; /&gt;&#xA;  &lt;div class=&#34;p-6 rounded-2xl bg-gradient-to-br from-primary-500/10 via-primary-500/5 to-transparent border border-primary-500/20 shadow-sm backdrop-blur-sm flex flex-col items-center sm:items-start text-center sm:text-left&#34;&gt;&#xA;    &lt;div class=&#34;flex items-center gap-3 mb-3&#34;&gt;&#xA;      &lt;span class=&#34;text-xs font-medium px-3 py-1 rounded-md bg-primary-100 text-primary-800 dark:bg-primary-900/60 dark:text-primary-300&#34;&gt;macOS 27+&lt;/span&gt;&#xA;      &lt;span class=&#34;text-xs text-neutral-500 dark:text-neutral-400&#34;&gt;Version 1.0.0 &amp;bull; 23.1 MB &amp;bull; Apple Silicon&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;flex flex-col sm:flex-row sm:items-center gap-3&#34;&gt;&#xA;      &lt;a href=&#34;Videostack.dmg&#34; class=&#34;inline-flex items-center gap-3 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow transition hover:bg-primary-500 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap&#34;&gt;&#xA;        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;w-5 h-5 flex-shrink-0&#34; viewBox=&#34;0 0 512 512&#34; fill=&#34;currentColor&#34;&gt;&lt;path d=&#34;M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z&#34;/&gt;&lt;/svg&gt;&#xA;        &lt;span&gt;Download Videostack for Mac (DMG)&lt;/span&gt;&#xA;      &lt;/a&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;p class=&#34;text-xs text-neutral-500 dark:text-neutral-400 mt-4 sm:mt-5&#34;&gt;&#xA;      By downloading, you accept that Videostack is provided &amp;ldquo;as is&amp;rdquo; without warranty (see &lt;a href=&#34;#disclaimer&#34; class=&#34;underline hover:text-primary-600 dark:hover:text-primary-400&#34;&gt;disclaimer&lt;/a&gt;).&#xA;    &lt;/p&gt;</description>
      <content:encoded><![CDATA[<p class="text-lg text-neutral-600 dark:text-neutral-300 -mt-2 mb-6">
  A fast, native library and player for your video collection — search what was said, and jump straight to that moment.
</p>
<div class="not-prose my-8 flex flex-col sm:flex-row items-center gap-8 sm:gap-10">
  <img src="icon.png" alt="Videostack App Icon" class="w-28 h-28 rounded-2xl shadow-lg ring-1 ring-black/5 dark:ring-white/10 flex-shrink-0" />
  <div class="p-6 rounded-2xl bg-gradient-to-br from-primary-500/10 via-primary-500/5 to-transparent border border-primary-500/20 shadow-sm backdrop-blur-sm flex flex-col items-center sm:items-start text-center sm:text-left">
    <div class="flex items-center gap-3 mb-3">
      <span class="text-xs font-medium px-3 py-1 rounded-md bg-primary-100 text-primary-800 dark:bg-primary-900/60 dark:text-primary-300">macOS 27+</span>
      <span class="text-xs text-neutral-500 dark:text-neutral-400">Version 1.0.0 &bull; 23.1 MB &bull; Apple Silicon</span>
    </div>
    <div class="flex flex-col sm:flex-row sm:items-center gap-3">
      <a href="Videostack.dmg" class="inline-flex items-center gap-3 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow transition hover:bg-primary-500 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap">
        <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 flex-shrink-0" viewBox="0 0 512 512" fill="currentColor"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
        <span>Download Videostack for Mac (DMG)</span>
      </a>
    </div>
    <p class="text-xs text-neutral-500 dark:text-neutral-400 mt-4 sm:mt-5">
      By downloading, you accept that Videostack is provided &ldquo;as is&rdquo; without warranty (see <a href="#disclaimer" class="underline hover:text-primary-600 dark:hover:text-primary-400">disclaimer</a>).
    </p>
  </div>
</div>
<div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl">
  Videostack is a native macOS app for the videos that collect on your disk: cooking lessons, lectures, talks, music performances, and downloaded YouTube clips. Point it at a folder and it builds a browsable library with thumbnails, indexes the subtitles so you can search what was <em>said</em>, and plays every format in its own player — opening a search result at the exact second the words were spoken. Your videos stay where they are; nothing leaves your Mac.
</div>

<hr>

<h2 class="relative group">Highlights at a Glance
    <div id="highlights-at-a-glance" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#highlights-at-a-glance" aria-label="Anchor">#</a>
    </span>
    
</h2>

<div class="not-prose my-8 grid gap-4 sm:grid-cols-2 grid-balance lg:grid-cols-3 grid-balance-3">
  







<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Search What Was Said</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Subtitles next to your videos are indexed with SQLite FTS5. Results show the matching lines with timestamps and update as you type.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
<path fill="currentColor" d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Plays Every Format</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">A built-in player powered by libVLC handles mp4, mov, webm, mkv, avi and more, with frame previews while scrubbing, playback speed, and full screen.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">YouTube, Kept Locally</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Paste a link to save a video with its English subtitles via yt-dlp, and fill in channel, description, and upload date for clips you already have.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M287.9 0C297.1 0 305.5 5.25 309.5 13.52L378.1 154.8L531.4 177.5C540.4 178.8 547.8 185.1 550.7 193.7C553.5 202.4 551.2 211.9 544.8 218.2L433.6 328.4L459.9 483.9C461.4 492.9 457.7 502.1 450.2 507.4C442.8 512.7 432.1 513.4 424.9 509.1L287.9 435.9L150.1 509.1C142.9 513.4 133.1 512.7 125.6 507.4C118.2 502.1 114.5 492.9 115.1 483.9L142.2 328.4L31.11 218.2C24.65 211.9 22.36 202.4 25.2 193.7C28.03 185.1 35.5 178.8 44.49 177.5L197.7 154.8L266.3 13.52C270.4 5.249 278.7 0 287.9 0L287.9 0zM287.9 78.95L235.4 187.2C231.9 194.3 225.1 199.3 217.3 200.5L98.98 217.9L184.9 303C190.4 308.5 192.9 316.4 191.6 324.1L171.4 443.7L276.6 387.5C283.7 383.7 292.2 383.7 299.2 387.5L404.4 443.7L384.2 324.1C382.9 316.4 385.5 308.5 391 303L476.9 217.9L358.6 200.5C350.7 199.3 343.9 194.3 340.5 187.2L287.9 78.95z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Pick Up Where You Left Off</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Playback position is saved automatically, so half-watched videos appear in Continue Watching. Bookmark any moment and jump back with a double-click.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M48 32H197.5C214.5 32 230.7 38.74 242.7 50.75L418.7 226.7C443.7 251.7 443.7 292.3 418.7 317.3L285.3 450.7C260.3 475.7 219.7 475.7 194.7 450.7L18.75 274.7C6.743 262.7 0 246.5 0 229.5V80C0 53.49 21.49 32 48 32L48 32zM112 176C129.7 176 144 161.7 144 144C144 126.3 129.7 112 112 112C94.33 112 80 126.3 80 144C80 161.7 94.33 176 112 176z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Organized by Folder &amp; Tag</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Each video is tagged with the folder it lives in. Add your own tags, drag videos onto them, and filter by title, file name, or category.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor" d="M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Local, No Accounts</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">No sign-up, no cloud library, no tracking. The index lives in a single database on your Mac, and your videos are read in place, never copied or uploaded.</div>
  
</article>


</div>

<hr>

<h2 class="relative group">Why Videostack?
    <div id="why-videostack" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-videostack" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Saved videos pile up in folders by topic, and Finder only shows file names. Finding <em>the clip where the chef explained the folding technique</em> or <em>the lecture where that theorem came up</em> means opening videos one by one and scrubbing through them.</p>
<p>The usual alternatives each miss something:</p>
<ul>
<li><strong>Finder &amp; QuickLook:</strong> Find a file by name, but know nothing about what&rsquo;s inside — and QuickTime won&rsquo;t open webm or mkv.</li>
<li><strong>Media Servers:</strong> Built for streaming movies to a TV. They want a server, a scanner that renames things, and an account.</li>
<li><strong>YouTube Watch Later:</strong> Only works while the video is still online, and searches titles rather than what was said.</li>
</ul>
<p>Videostack was built to be <strong>⌘F for your video collection</strong>: one search box across every word in every subtitle, a grid you can browse at a glance, and a player that starts at the moment you were looking for.</p>
<hr>

<h2 class="relative group">How It Works
    <div id="how-it-works" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-it-works" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">1. Add Videos
    <div id="1-add-videos" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-add-videos" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Choose <strong>File ▸ Scan Videos Folder</strong> to index the folder set in Settings, or click <strong>+</strong> to add any folder or files. For each video, Videostack reads its duration, renders a thumbnail, indexes any subtitle file next to it (<code>video.srt</code> or <code>video.en.srt</code>), and tags it with the folder it sits in, so <code>videos/cooking/…</code> lands in <strong>cooking</strong>. Titles are cleaned up from yt-dlp-style file names.</p>
<p>Your videos are never copied or modified. Removing a video from the library deletes only its index entry; the file itself stays where it is.</p>

<h3 class="relative group">2. Search
    <div id="2-search" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-search" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The search field at the top does two things at once:</p>
<ul>
<li><strong>Free text</strong> searches the subtitles (and fetched YouTube descriptions) of every video, with search-as-you-type prefix matching.</li>
<li><strong>Scoped filters</strong> narrow the library by metadata: <code>title:</code>, <code>filename:</code> (or <code>file:</code>), and <code>category:</code> (or <code>folder:</code>). Quote values with spaces, e.g. <code>title:&quot;sourdough starter&quot;</code>.</li>
</ul>
<p>Combine them freely, for example <code>lamination category:baking</code>. Double-click a result to start playing at that line.</p>

<h3 class="relative group">3. Watch
    <div id="3-watch" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-watch" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The player keeps its controls out of the way until you move the mouse. Press <strong>Space</strong> to play or pause, <strong>←</strong>/<strong>→</strong> to skip 10 seconds, and <strong>F</strong> for full screen. Drag the scrubber to see frame previews, change the playback speed, or bookmark the current moment with an optional label. Open player windows are restored the next time you launch.</p>

<h3 class="relative group">4. Bring In YouTube Videos
    <div id="4-bring-in-youtube-videos" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-bring-in-youtube-videos" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>With <a href="https://github.com/yt-dlp/yt-dlp"  target="_blank" rel="noreferrer">yt-dlp</a> installed (<code>brew install yt-dlp ffmpeg</code>), <strong>File ▸ Download from YouTube…</strong> saves a video into a category subfolder of your Videos Folder together with its English subtitles, then indexes it right away. If the video is already in your library, Videostack takes you to it instead of downloading a second copy. <strong>File ▸ Fetch YouTube Metadata</strong> adds the channel, description, and upload date to videos whose file names carry a YouTube id.</p>
<hr>

<h2 class="relative group">Search Syntax
    <div id="search-syntax" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#search-syntax" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Full-text search uses SQLite FTS5 and supports:</p>
<ul>
<li><strong>All words:</strong> <code>fold butter</code> finds passages containing both words.</li>
<li><strong>Boolean operators:</strong> <code>bread AND rye NOT sourdough</code>, and <code>OR</code> for alternatives.</li>
<li><strong>Prefixes:</strong> <code>ferment*</code> matches ferment, fermentation, fermented… Bare words get a <code>*</code> automatically, for search-as-you-type.</li>
<li><strong>Exact phrases:</strong> <code>&quot;autolyse the dough&quot;</code> matches the words in that order.</li>
</ul>
<hr>

<h2 class="relative group">Security &amp; Distribution
    <div id="security--distribution" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#security--distribution" aria-label="Anchor">#</a>
    </span>
    
</h2>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.7 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8V444.8C394 378 431.1 230.1 432 141.4L256 66.8l0 0z"/></svg></span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><strong>Signed, Notarized, Verified Updates:</strong> Every release is checked by Apple before you download it, and every update is checked by Videostack before it installs.</span>
</div>

<ul>
<li><strong>Gatekeeper &amp; Notarization:</strong> Distributed as a Developer ID–signed, notarized, and stapled disk image (<code>Videostack.dmg</code>), built with the hardened runtime.</li>
<li><strong>Signed Updates:</strong> Updates are delivered with <a href="https://sparkle-project.org/"  target="_blank" rel="noreferrer">Sparkle</a> over HTTPS. Each update carries an EdDSA signature that the installed app verifies against a public key built into it; an update that fails verification is refused.</li>
<li><strong>Reads Videos Where They Live:</strong> Videostack indexes files in place rather than copying them into a container, and runs yt-dlp from your Homebrew installation when you ask it to, so it runs outside the App Sandbox. It only reads the files and folders you add, and it never modifies them.</li>
</ul>
<hr>

<h2 class="relative group">Privacy: Your Library Stays on Your Mac
    <div id="privacy-your-library-stays-on-your-mac" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#privacy-your-library-stays-on-your-mac" aria-label="Anchor">#</a>
    </span>
    
</h2>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor" d="M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"/></svg></span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><strong>Your Data Stays Yours:</strong> Videostack does not collect, track, or share any personal information, usage metrics, or telemetry.</span>
</div>

<ul>
<li><strong>Zero Analytics or Telemetry:</strong> There are no analytics libraries, tracking pixels, crash reporters, or third-party telemetry SDKs inside Videostack.</li>
<li><strong>No Accounts:</strong> You never create an account, enter an email, or register with any service.</li>
<li><strong>Strictly Local Index:</strong> The search index, tags, bookmarks, watch positions, and thumbnails live in <code>~/Library/Application Support/Videostack/</code> on your Mac. Your videos and their subtitles are never uploaded anywhere.</li>
<li><strong>Spotlight Stays On-Device:</strong> Titles, channels, and tags are added to the macOS Spotlight index, which is local to your Mac.</li>
<li><strong>Network Requests, Only These:</strong>
<ul>
<li><strong>YouTube (only when you ask):</strong> Downloading a video or fetching metadata runs yt-dlp, which contacts YouTube for that video. If yt-dlp isn&rsquo;t installed, metadata falls back to YouTube&rsquo;s public oEmbed endpoint, which receives only the video&rsquo;s URL. Nothing about your library is sent.</li>
<li><strong>Update check:</strong> About once a day, Videostack downloads a small update feed from <code>sagenhaft.space</code>. The request identifies the app version so a newer release can be offered; Sparkle&rsquo;s optional system-profile reporting is turned off, so no hardware or usage details are sent.</li>
</ul>
</li>
</ul>
<hr>

<h2 class="relative group">Technology Stack
    <div id="technology-stack" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#technology-stack" aria-label="Anchor">#</a>
    </span>
    
</h2>
<ul>
<li><strong>Language &amp; Toolchain:</strong> Swift 6.4 (strict concurrency, actor isolation), Xcode 27</li>
<li><strong>User Interface:</strong> SwiftUI and AppKit</li>
<li><strong>Playback &amp; Thumbnails:</strong> <a href="https://www.videolan.org/vlc/libvlc.html"  target="_blank" rel="noreferrer">libVLC</a> via <a href="https://github.com/harflabs/SwiftVLC"  target="_blank" rel="noreferrer">SwiftVLC</a></li>
<li><strong>Search &amp; Storage:</strong> SQLite FTS5 (BM25 ranking), via the system SQLite library</li>
<li><strong>System Integration:</strong> Core Spotlight</li>
<li><strong>YouTube (optional):</strong> <a href="https://github.com/yt-dlp/yt-dlp"  target="_blank" rel="noreferrer">yt-dlp</a> and ffmpeg, installed separately</li>
<li><strong>Updates:</strong> <a href="https://sparkle-project.org/"  target="_blank" rel="noreferrer">Sparkle 2</a></li>
<li><strong>Target:</strong> macOS 27+ (Apple Silicon)</li>
</ul>
<hr>

<h2 class="relative group">Third-Party Software &amp; Licensing
    <div id="third-party-software--licensing" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#third-party-software--licensing" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Videostack integrates and relies on several open-source projects:</p>

<h3 class="relative group">libVLC &amp; VideoLAN (LGPL v2.1)
    <div id="libvlc--videolan-lgpl-v21" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#libvlc--videolan-lgpl-v21" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Videostack uses <strong><a href="https://www.videolan.org/vlc/libvlc.html"  target="_blank" rel="noreferrer">libVLC</a></strong> (via <a href="https://github.com/harflabs/SwiftVLC"  target="_blank" rel="noreferrer">SwiftVLC</a>) for media decoding, video playback, and thumbnail extraction.</p>
<ul>
<li><strong>License:</strong> libVLC is copyright © <a href="https://www.videolan.org/"  target="_blank" rel="noreferrer">VideoLAN</a> and its contributors. It is free software distributed under the terms of the <strong><a href="https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html"  target="_blank" rel="noreferrer">GNU Lesser General Public License (LGPL) v2.1</a></strong> (or later).</li>
<li><strong>Source Code:</strong> You can obtain the complete, unmodified source code for libVLC directly from VideoLAN&rsquo;s repository at <a href="https://code.videolan.org/videolan/vlc"  target="_blank" rel="noreferrer">code.videolan.org/videolan/vlc</a> or via their <a href="https://www.videolan.org/vlc/download-sources.html"  target="_blank" rel="noreferrer">source archives</a>.</li>
<li><strong>Dynamic Linking &amp; Relinking:</strong> In compliance with the LGPL v2.1, libVLC is dynamically linked as an embedded framework (<code>VLCKit.framework</code> / <code>libvlc.dylib</code>). Users may inspect, modify, or replace the libVLC binaries within the application bundle.</li>
<li><strong>Trademark:</strong> <em>VLC</em> and <em>VideoLAN</em> are registered trademarks of the VideoLAN non-profit organization. Videostack is an independent software project and is not affiliated with, endorsed by, or sponsored by VideoLAN.</li>
</ul>

<h3 class="relative group">yt-dlp &amp; FFmpeg Integration
    <div id="yt-dlp--ffmpeg-integration" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#yt-dlp--ffmpeg-integration" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Videostack provides an optional helper to save videos and subtitles into your local library.</p>
<ul>
<li><strong>External Installation:</strong> Videostack <strong>does not bundle, package, or distribute</strong> <a href="https://github.com/yt-dlp/yt-dlp"  target="_blank" rel="noreferrer">yt-dlp</a> or <a href="https://ffmpeg.org/"  target="_blank" rel="noreferrer">FFmpeg</a>. It is designed to invoke the user&rsquo;s independently installed binaries (e.g., installed via <code>brew install yt-dlp ffmpeg</code>).</li>
<li><strong>License:</strong> <a href="https://github.com/yt-dlp/yt-dlp"  target="_blank" rel="noreferrer">yt-dlp</a> is released under <a href="https://unlicense.org/"  target="_blank" rel="noreferrer">The Unlicense</a> (public domain software). <a href="https://ffmpeg.org/"  target="_blank" rel="noreferrer">FFmpeg</a> is licensed under the LGPL v2.1+ / GPL v2+.</li>
<li><strong>Compliance &amp; Copyright:</strong> Videostack does not host, mirror, or redistribute third-party video content. Users are solely responsible for complying with applicable copyright laws, fair use provisions, and the terms of service of any third-party website or platform they choose to download from.</li>
<li><strong>Non-Affiliation:</strong> Videostack is independent and has no official relationship, sponsorship, or affiliation with yt-dlp, YouTube, or Google LLC.</li>
</ul>
<hr>

<h2 class="relative group">Download &amp; Installation
    <div id="download--installation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#download--installation" aria-label="Anchor">#</a>
    </span>
    
</h2>
<div class="not-prose my-6 p-6 rounded-2xl border border-primary-500/30 bg-primary-500/5">
  <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-4 border-b border-neutral-200/70 dark:border-neutral-800">
    <div>
      <h3 class="text-xl font-bold text-neutral-900 dark:text-white mb-1">Videostack for macOS</h3>
      <p class="text-sm text-neutral-600 dark:text-neutral-300">
        macOS 27+ &bull; Apple Silicon &bull; Signed &amp; Notarized
      </p>
    </div>
    <div class="flex-shrink-0">
      <a href="Videostack.dmg" class="inline-flex items-center justify-center gap-3 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow-md transition hover:bg-primary-500 hover:shadow-lg focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap">
        <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 flex-shrink-0" viewBox="0 0 512 512" fill="currentColor"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
        <span>Download (23.1 MB)</span>
      </a>
    </div>
  </div>
  <div class="pt-3 text-xs text-neutral-500 dark:text-neutral-400 font-mono break-all">
    <span class="font-sans font-semibold text-neutral-700 dark:text-neutral-300">SHA-256:</span> fbe8b42643db6fee97ccb112c316f7296c7b7891977dac243b7f8395c4fc36a4
  </div>
</div>
<p class="text-sm text-neutral-600 dark:text-neutral-300 -mt-2 mb-6 italic">
  By downloading, installing, or running Videostack, you acknowledge and agree to the disclaimer and limitation of liability below.
</p>
<p>To install, mount <code>Videostack.dmg</code> and drag <strong>Videostack</strong> to your <code>/Applications</code> folder. On first launch, choose your Videos Folder in <strong>Videostack ▸ Settings…</strong> (it defaults to <code>~/Movies</code>), then <strong>File ▸ Scan Videos Folder</strong>. For YouTube downloads, install yt-dlp and ffmpeg with <code>brew install yt-dlp ffmpeg</code>. Videostack checks for updates automatically; you can also choose <strong>Videostack ▸ Check for Updates…</strong> at any time.</p>
<div id="disclaimer"></div>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><p><strong>Disclaimer &amp; Limitation of Liability</strong></p>
<p>By downloading, installing, or using Videostack, you expressly agree that this software is provided free of charge on an <strong>&ldquo;as is&rdquo;</strong> and <strong>&ldquo;as available&rdquo;</strong> basis, without warranty, representation, or guarantee of any kind, whether express, implied, statutory, or otherwise, including but not limited to any warranties of merchantability, fitness for a particular purpose, non-infringement, quiet enjoyment, data accuracy, or error-free operation.</p>
<p>You are solely responsible for the content you download and for complying with the terms of service of any site you download from, as well as applicable copyright law. Videostack does not include yt-dlp; it runs your own installation when you ask it to.</p>
<p>The author and contributors shall not be held liable for any direct, indirect, incidental, special, consequential, exemplary, or punitive damages, or for any loss of data, incomplete or inaccurate search results, incorrect metadata or tags, corrupted libraries, hardware issues, or other claims arising out of or in connection with the software, its download, installation, performance, or use. You download, install, and use this software entirely at your own risk.</p>
</span>
</div>

]]></content:encoded>
      
    </item>
    
    <item>
      <title>Paperstack</title>
      <link>https://sagenhaft.space/paperstack/</link>
      <pubDate>Sun, 04 Oct 2026 11:00:00 -0700</pubDate>
      
      <guid>https://sagenhaft.space/paperstack/</guid>
      <description>&lt;p class=&#34;text-lg text-neutral-600 dark:text-neutral-300 -mt-2 mb-6&#34;&gt;&#xA;  A fast, native PDF library and reader for researchers — full-text search across every page, entirely on your Mac.&#xA;&lt;/p&gt;&#xA;&lt;div class=&#34;not-prose my-8 flex flex-col sm:flex-row items-center gap-8 sm:gap-10&#34;&gt;&#xA;  &lt;img src=&#34;icon.png&#34; alt=&#34;Paperstack App Icon&#34; class=&#34;w-28 h-28 rounded-2xl shadow-lg ring-1 ring-black/5 dark:ring-white/10 flex-shrink-0&#34; /&gt;&#xA;  &lt;div class=&#34;p-6 rounded-2xl bg-gradient-to-br from-primary-500/10 via-primary-500/5 to-transparent border border-primary-500/20 shadow-sm backdrop-blur-sm flex flex-col items-center sm:items-start text-center sm:text-left&#34;&gt;&#xA;    &lt;div class=&#34;flex items-center gap-3 mb-3&#34;&gt;&#xA;      &lt;span class=&#34;text-xs font-medium px-3 py-1 rounded-md bg-primary-100 text-primary-800 dark:bg-primary-900/60 dark:text-primary-300&#34;&gt;macOS 27+&lt;/span&gt;&#xA;      &lt;span class=&#34;text-xs text-neutral-500 dark:text-neutral-400&#34;&gt;Version 1.0.1 &amp;bull; 4.7 MB &amp;bull; Apple Silicon&lt;/span&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;flex flex-col sm:flex-row sm:items-center gap-3&#34;&gt;&#xA;      &lt;a href=&#34;Paperstack.dmg&#34; class=&#34;inline-flex items-center gap-3 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow transition hover:bg-primary-500 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap&#34;&gt;&#xA;        &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; class=&#34;w-5 h-5 flex-shrink-0&#34; viewBox=&#34;0 0 512 512&#34; fill=&#34;currentColor&#34;&gt;&lt;path d=&#34;M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z&#34;/&gt;&lt;/svg&gt;&#xA;        &lt;span&gt;Download Paperstack for Mac (DMG)&lt;/span&gt;&#xA;      &lt;/a&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;p class=&#34;text-xs text-neutral-500 dark:text-neutral-400 mt-4 sm:mt-5&#34;&gt;&#xA;      By downloading, you accept that Paperstack is provided &amp;ldquo;as is&amp;rdquo; without warranty (see &lt;a href=&#34;#disclaimer&#34; class=&#34;underline hover:text-primary-600 dark:hover:text-primary-400&#34;&gt;disclaimer&lt;/a&gt;).&#xA;    &lt;/p&gt;</description>
      <content:encoded><![CDATA[<p class="text-lg text-neutral-600 dark:text-neutral-300 -mt-2 mb-6">
  A fast, native PDF library and reader for researchers — full-text search across every page, entirely on your Mac.
</p>
<div class="not-prose my-8 flex flex-col sm:flex-row items-center gap-8 sm:gap-10">
  <img src="icon.png" alt="Paperstack App Icon" class="w-28 h-28 rounded-2xl shadow-lg ring-1 ring-black/5 dark:ring-white/10 flex-shrink-0" />
  <div class="p-6 rounded-2xl bg-gradient-to-br from-primary-500/10 via-primary-500/5 to-transparent border border-primary-500/20 shadow-sm backdrop-blur-sm flex flex-col items-center sm:items-start text-center sm:text-left">
    <div class="flex items-center gap-3 mb-3">
      <span class="text-xs font-medium px-3 py-1 rounded-md bg-primary-100 text-primary-800 dark:bg-primary-900/60 dark:text-primary-300">macOS 27+</span>
      <span class="text-xs text-neutral-500 dark:text-neutral-400">Version 1.0.1 &bull; 4.7 MB &bull; Apple Silicon</span>
    </div>
    <div class="flex flex-col sm:flex-row sm:items-center gap-3">
      <a href="Paperstack.dmg" class="inline-flex items-center gap-3 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow transition hover:bg-primary-500 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap">
        <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 flex-shrink-0" viewBox="0 0 512 512" fill="currentColor"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
        <span>Download Paperstack for Mac (DMG)</span>
      </a>
    </div>
    <p class="text-xs text-neutral-500 dark:text-neutral-400 mt-4 sm:mt-5">
      By downloading, you accept that Paperstack is provided &ldquo;as is&rdquo; without warranty (see <a href="#disclaimer" class="underline hover:text-primary-600 dark:hover:text-primary-400">disclaimer</a>).
    </p>
  </div>
</div>
<div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl">
  Paperstack is a native macOS app for the PDFs that pile up during research: papers, books, and lecture notes. Point it at a folder and it indexes the text of every page, tags each paper by topic, and lets you search the whole collection the way you search one document — then opens the result at the exact page, with the passage highlighted. Your PDFs stay where they are; nothing leaves your Mac.
</div>

<hr>

<h2 class="relative group">Highlights at a Glance
    <div id="highlights-at-a-glance" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#highlights-at-a-glance" aria-label="Anchor">#</a>
    </span>
    
</h2>

<div class="not-prose my-8 grid gap-4 sm:grid-cols-2 grid-balance lg:grid-cols-3 grid-balance-3">
  







<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Full-Text Search, Every Page</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">SQLite FTS5 indexes the text of every page. Results show the matching passages with page numbers, ranked by relevance, and update as you type.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
  <path fill="currentColor" d="M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM112 256H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16zm0 64H272c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16s7.2-16 16-16z"/>
</svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Opens at the Right Page</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Double-click a search hit and the reader opens on that page with the passage highlighted. The reader has an outline, page thumbnails, and its own in-document search.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M48 32H197.5C214.5 32 230.7 38.74 242.7 50.75L418.7 226.7C443.7 251.7 443.7 292.3 418.7 317.3L285.3 450.7C260.3 475.7 219.7 475.7 194.7 450.7L18.75 274.7C6.743 262.7 0 246.5 0 229.5V80C0 53.49 21.49 32 48 32L48 32zM112 176C129.7 176 144 161.7 144 144C144 126.3 129.7 112 112 112C94.33 112 80 126.3 80 144C80 161.7 94.33 176 112 176z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Automatic Topic Tags</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Papers are tagged on import from a built-in taxonomy of mathematics, computer science, and machine-learning topics. Add your own tags, drag papers onto them, or retag the whole library.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
<path fill="currentColor" d="M234.7 42.7L197 56.8c-3 1.1-5 4-5 7.2s2 6.1 5 7.2l37.7 14.1L248.8 123c1.1 3 4 5 7.2 5s6.1-2 7.2-5l14.1-37.7L315 71.2c3-1.1 5-4 5-7.2s-2-6.1-5-7.2L277.3 42.7 263.2 5c-1.1-3-4-5-7.2-5s-6.1 2-7.2 5L234.7 42.7zM46.1 395.4c-18.7 18.7-18.7 49.1 0 67.9l34.6 34.6c18.7 18.7 49.1 18.7 67.9 0L529.9 116.5c18.7-18.7 18.7-49.1 0-67.9L495.3 14.1c-18.7-18.7-49.1-18.7-67.9 0L46.1 395.4zM484.6 82.6l-105 105-23.3-23.3 105-105 23.3 23.3zM7.5 117.2C3 118.9 0 123.2 0 128s3 9.1 7.5 10.8L64 160l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L128 160l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L128 96 106.8 39.5C105.1 35 100.8 32 96 32s-9.1 3-10.8 7.5L64 96 7.5 117.2zm352 256c-4.5 1.7-7.5 6-7.5 10.8s3 9.1 7.5 10.8L416 416l21.2 56.5c1.7 4.5 6 7.5 10.8 7.5s9.1-3 10.8-7.5L480 416l56.5-21.2c4.5-1.7 7.5-6 7.5-10.8s-3-9.1-7.5-10.8L480 352l-21.2-56.5c-1.7-4.5-6-7.5-10.8-7.5s-9.1 3-10.8 7.5L416 352l-56.5 21.2z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Metadata from ISBNs</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">When a document contains an ISBN, Paperstack can fill in its title, authors, and year from Open Library. Edit anything by hand in the detail panel.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/></svg>
</span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Native &amp; Integrated</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">Built in SwiftUI and PDFKit. Papers appear in macOS Spotlight, reader windows reopen where you left them, and you can bookmark any selected passage.</div>
  
</article>








<article class="group rounded-2xl border border-neutral-200/80 bg-white/60 p-6 shadow-sm backdrop-blur-xl transition duration-200 hover:-translate-y-1 hover:border-primary-300 hover:shadow-xl hover:shadow-primary-500/10 dark:border-neutral-800 dark:bg-neutral-900/50 dark:hover:border-primary-700">
  <span class="mb-5 inline-flex rounded-xl bg-primary-100 p-3 text-primary-600 dark:bg-primary-950 dark:text-primary-400">
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor" d="M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"/></svg></span>
  </span>
  <h2 class="text-lg font-bold text-neutral-900 dark:text-white">Local, No Accounts</h2>
  <div class="mt-2 text-sm leading-6 text-neutral-600 dark:text-neutral-400">No sign-up, no cloud library, no tracking. The index lives in a single database on your Mac, and your PDFs are read in place, never copied or uploaded.</div>
  
</article>


</div>

<hr>

<h2 class="relative group">Why Paperstack?
    <div id="why-paperstack" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-paperstack" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>A research collection grows into hundreds of PDFs spread across Downloads, course folders, and project directories. Finding <em>the paper that proved that lemma</em> or <em>the lecture where that definition appeared</em> usually means opening files one at a time in Preview and pressing ⌘F in each.</p>
<p>The usual alternatives each miss something:</p>
<ul>
<li><strong>Finder &amp; Spotlight:</strong> Good at finding a file by name, but they tell you <em>which</em> file matched — not where in it, and not which passage.</li>
<li><strong>Reference Managers:</strong> Built for citations and bibliographies. Many want an account, a sync service, or to move your files into their own storage.</li>
<li><strong>Preview:</strong> Searches one open document at a time.</li>
</ul>
<p>Paperstack was built to be <strong>⌘F for your whole library</strong>: one search box across every page you&rsquo;ve collected, results you can read at a glance, and a reader that drops you on the exact passage.</p>
<hr>

<h2 class="relative group">How It Works
    <div id="how-it-works" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#how-it-works" aria-label="Anchor">#</a>
    </span>
    
</h2>

<h3 class="relative group">1. Import
    <div id="1-import" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-import" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Click <strong>+</strong> (or press ⌘I) and choose PDFs or whole folders. Paperstack discovers every PDF inside, lets you review the list, and indexes them in parallel with a progress estimate. For each paper it extracts the text page by page, renders a cover thumbnail, infers topic tags, and records a content fingerprint, so the same file imported twice isn&rsquo;t duplicated and a file you moved on disk is re-linked instead of re-imported.</p>
<p>Your PDFs are never copied or modified. Removing a paper from the library deletes only its index entry; the file itself stays where it is.</p>

<h3 class="relative group">2. Search
    <div id="2-search" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-search" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>The search field at the top does two things at once:</p>
<ul>
<li><strong>Free text</strong> runs a full-text search across every page, with search-as-you-type prefix matching.</li>
<li><strong>Scoped filters</strong> narrow the library by metadata: <code>title:</code>, <code>author:</code>, <code>filename:</code>, and <code>year:</code>. Quote values with spaces, e.g. <code>author:&quot;joe smith&quot;</code>.</li>
</ul>
<p>Combine them freely, for example <code>transformer author:vaswani year:2017</code>.</p>

<h3 class="relative group">3. Read
    <div id="3-read" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-read" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Reader windows have a sidebar with the document&rsquo;s outline, page thumbnails, a full-text search scoped to that paper, and your bookmarks. Select any passage and bookmark it with an optional label; bookmarks also appear in the library&rsquo;s detail panel. Open reader windows are restored the next time you launch.</p>

<h3 class="relative group">4. Organize
    <div id="4-organize" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-organize" aria-label="Anchor">#</a>
    </span>
    
</h3>
<p>Tags appear in the sidebar. Drag a paper onto a tag to apply it, rename or delete tags from their context menu, or apply a tag to every paper matching the current search. Two smart tags are always there: <strong>Currently Reading</strong> and <strong>Recently Imported</strong>.</p>
<hr>

<h2 class="relative group">Search Syntax
    <div id="search-syntax" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#search-syntax" aria-label="Anchor">#</a>
    </span>
    
</h2>
<p>Full-text search uses SQLite FTS5 and supports:</p>
<ul>
<li><strong>All words:</strong> <code>attention transformer</code> finds pages containing both words.</li>
<li><strong>Boolean operators:</strong> <code>logic AND foundations NOT topology</code>, and <code>OR</code> for alternatives.</li>
<li><strong>Prefixes:</strong> <code>comput*</code> matches computer, computation, computable… Bare words get a <code>*</code> automatically, for search-as-you-type.</li>
<li><strong>Exact phrases (in the reader):</strong> the reader&rsquo;s own search accepts quoted phrases such as <code>&quot;attention is all you need&quot;</code>.</li>
</ul>
<hr>

<h2 class="relative group">Security &amp; Distribution
    <div id="security--distribution" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#security--distribution" aria-label="Anchor">#</a>
    </span>
    
</h2>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.7 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8V444.8C394 378 431.1 230.1 432 141.4L256 66.8l0 0z"/></svg></span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><strong>Signed, Notarized, Verified Updates:</strong> Every release is checked by Apple before you download it, and every update is checked by Paperstack before it installs.</span>
</div>

<ul>
<li><strong>Gatekeeper &amp; Notarization:</strong> Distributed as a Developer ID–signed, notarized, and stapled disk image (<code>Paperstack.dmg</code>), built with the hardened runtime.</li>
<li><strong>Signed Updates:</strong> Updates are delivered with <a href="https://sparkle-project.org/"  target="_blank" rel="noreferrer">Sparkle</a> over HTTPS. Each update carries an EdDSA signature that the installed app verifies against a public key built into it; an update that fails verification is refused.</li>
<li><strong>Reads PDFs Where They Live:</strong> Paperstack indexes files in place rather than copying them into a container, so it runs outside the App Sandbox. It only reads the files and folders you import, and it never modifies them.</li>
</ul>
<hr>

<h2 class="relative group">Privacy: Your Library Stays on Your Mac
    <div id="privacy-your-library-stays-on-your-mac" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#privacy-your-library-stays-on-your-mac" aria-label="Anchor">#</a>
    </span>
    
</h2>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512">
<path fill="currentColor" d="M144 144v48H304V144c0-44.2-35.8-80-80-80s-80 35.8-80 80zM80 192V144C80 64.5 144.5 0 224 0s144 64.5 144 144v48h16c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V256c0-35.3 28.7-64 64-64H80z"/></svg></span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><strong>Your Data Stays Yours:</strong> Paperstack does not collect, track, or share any personal information, usage metrics, or telemetry.</span>
</div>

<ul>
<li><strong>Zero Analytics or Telemetry:</strong> There are no analytics libraries, tracking pixels, crash reporters, or third-party telemetry SDKs inside Paperstack.</li>
<li><strong>No Accounts:</strong> You never create an account, enter an email, or register with any service.</li>
<li><strong>Strictly Local Index:</strong> The search index, tags, bookmarks, and cover thumbnails live in <code>~/Library/Application Support/Paperstack/</code> on your Mac. Your PDFs and their text are never uploaded anywhere.</li>
<li><strong>Spotlight Stays On-Device:</strong> Titles, authors, and tags are added to the macOS Spotlight index, which is local to your Mac.</li>
<li><strong>Exactly Two Kinds of Network Request:</strong>
<ul>
<li><strong>Book metadata (optional by nature):</strong> If a document contains an ISBN, Paperstack sends <strong>only that ISBN number</strong> to <a href="https://openlibrary.org/"  target="_blank" rel="noreferrer">Open Library</a> to look up its title, authors, year, and subjects. This happens when you import or retag. No document text, file names, or other identifiers are sent.</li>
<li><strong>Update check:</strong> About once a day, Paperstack downloads a small update feed from <code>sagenhaft.space</code>. The request identifies the app version so a newer release can be offered; Sparkle&rsquo;s optional system-profile reporting is turned off, so no hardware or usage details are sent.</li>
</ul>
</li>
</ul>
<hr>

<h2 class="relative group">Technology Stack
    <div id="technology-stack" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#technology-stack" aria-label="Anchor">#</a>
    </span>
    
</h2>
<ul>
<li><strong>Language &amp; Toolchain:</strong> Swift 6.4 (strict concurrency, actor isolation), Xcode 27</li>
<li><strong>User Interface:</strong> SwiftUI, AppKit, and PDFKit</li>
<li><strong>Search &amp; Storage:</strong> SQLite FTS5 (BM25 ranking), via the system SQLite library</li>
<li><strong>System Integration:</strong> Core Spotlight</li>
<li><strong>Updates:</strong> <a href="https://sparkle-project.org/"  target="_blank" rel="noreferrer">Sparkle 2</a></li>
<li><strong>Target:</strong> macOS 27+ (Apple Silicon)</li>
</ul>
<hr>

<h2 class="relative group">Download &amp; Installation
    <div id="download--installation" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#download--installation" aria-label="Anchor">#</a>
    </span>
    
</h2>
<div class="not-prose my-6 p-6 rounded-2xl border border-primary-500/30 bg-primary-500/5">
  <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-4 border-b border-neutral-200/70 dark:border-neutral-800">
    <div>
      <h3 class="text-xl font-bold text-neutral-900 dark:text-white mb-1">Paperstack for macOS</h3>
      <p class="text-sm text-neutral-600 dark:text-neutral-300">
        macOS 27+ &bull; Apple Silicon &bull; Signed &amp; Notarized
      </p>
    </div>
    <div class="flex-shrink-0">
      <a href="Paperstack.dmg" class="inline-flex items-center justify-center gap-3 rounded-xl bg-primary-600 px-6 py-3 text-base font-bold text-white shadow-md transition hover:bg-primary-500 hover:shadow-lg focus:outline-none focus:ring-2 focus:ring-primary-500 dark:bg-primary-500 dark:hover:bg-primary-400 !no-underline whitespace-nowrap">
        <svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 flex-shrink-0" viewBox="0 0 512 512" fill="currentColor"><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z"/></svg>
        <span>Download (4.7 MB)</span>
      </a>
    </div>
  </div>
  <div class="pt-3 text-xs text-neutral-500 dark:text-neutral-400 font-mono break-all">
    <span class="font-sans font-semibold text-neutral-700 dark:text-neutral-300">SHA-256:</span> 1ceee27af84213809fd79608232d34c3fadf5bc81906b27dcc5183efd23c4cc8
  </div>
</div>
<p class="text-sm text-neutral-600 dark:text-neutral-300 -mt-2 mb-6 italic">
  By downloading, installing, or running Paperstack, you acknowledge and agree to the disclaimer and limitation of liability below.
</p>
<p>To install, mount <code>Paperstack.dmg</code> and drag <strong>Paperstack</strong> to your <code>/Applications</code> folder. On first launch, click <strong>+</strong> to import a folder of PDFs. Paperstack checks for updates automatically; you can also choose <strong>Paperstack ▸ Check for Updates…</strong> at any time.</p>
<div id="disclaimer"></div>

  
  
  
  



<div
  
    class="flex px-4 py-3 rounded-md shadow bg-primary-100 dark:bg-primary-900"
  
  >
  <span
    
      class="text-primary-400 pe-3 flex items-center"
    
    >
    <span class="relative block icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
</span>
  </span>

  <span
    
      class="dark:text-neutral-300"
    
    ><p><strong>Disclaimer &amp; Limitation of Liability</strong></p>
<p>By downloading, installing, or using Paperstack, you expressly agree that this software is provided free of charge on an <strong>&ldquo;as is&rdquo;</strong> and <strong>&ldquo;as available&rdquo;</strong> basis, without warranty, representation, or guarantee of any kind, whether express, implied, statutory, or otherwise, including but not limited to any warranties of merchantability, fitness for a particular purpose, non-infringement, quiet enjoyment, data accuracy, or error-free operation.</p>
<p>The author and contributors shall not be held liable for any direct, indirect, incidental, special, consequential, exemplary, or punitive damages, or for any loss of data, incomplete or inaccurate search results, incorrect metadata or tags, corrupted libraries, hardware issues, or other claims arising out of or in connection with the software, its download, installation, performance, or use. You download, install, and use this software entirely at your own risk.</p>
</span>
</div>

]]></content:encoded>
      
    </item>
    
  </channel>
</rss>
