AkurAI Build
Menu

AkurAI-Build

public

Latest change 0cf28150faedd8c150474a4f16be4c9922c04f56 - feat: add Ponytail UI design system by Olafur Bui

{% extends "layouts/base.html" %} {% block description %}Bunfork is one Rust CLI
for verified Svelte, SvelteKit, Next.js, Vue, Nuxt, and Vite exports, native
MiniJinja pages, encrypted SQLite, vectors, tests, backups, and deploys.{%
endblock %} {% block body_class %}home-page{% endblock %} {% block body %}
<main id="main-content" tabindex="-1">
  <section class="shell home-hero" aria-labelledby="hero-title">
    <div class="hero-copy">
      <p class="hero-kicker">A small Rust runtime, deliberately.</p>
      <h1 id="hero-title">One CLI from build to backup.</h1>
      <p class="hero-lede">
        Serve native MiniJinja pages or verified exports from Svelte, SvelteKit,
        Next.js, Vue, Nuxt, and Vite—then keep migrations, vectors, tests,
        backups, and deploys behind the same CLI.
      </p>
      <div class="hero-actions">
        <a class="button" href="/docs/getting-started"
          >Get started <span aria-hidden="true">→</span></a
        >
        <a class="text-link" href="/docs/security">Read the security model</a>
      </div>
      <ul class="hero-facts" aria-label="Runtime facts">
        <li>Linux-first</li>
        <li>MIT licensed</li>
        <li>No server-side JavaScript runtime</li>
      </ul>
    </div>

    <figure class="command-window">
      <div class="command-window-bar">
        <span>release check</span>
        <span class="live-indicator"
          ><span aria-hidden="true"></span> ready</span
        >
      </div>
      <pre><code><span class="prompt">$</span> bunfork doctor \
  --static frontend/out \
  --manifest bunfork-static.json
<span class="success">ok: artifact matches manifest</span>

<span class="prompt">$</span> bunfork serve \
  --static frontend/out \
  --manifest bunfork-static.json
<span class="muted-code">listening on 0.0.0.0:3100</span></code></pre>
      <figcaption>
        Browser code is served byte-for-byte. Node, Deno, Bun, RSC, and Nitro
        stay out of the production process.
      </figcaption>
    </figure>
  </section>

  <section class="signal-band" aria-label="Core capabilities">
    <div class="shell signal-list">
      <span>Verified artifacts</span>
      <span>SQLCipher at rest</span>
      <span>Bounded vector search</span>
      <span>Digest-owned deploys</span>
    </div>
  </section>

  <section
    class="shell home-section framework-section"
    aria-labelledby="framework-title"
  >
    <div class="section-heading">
      <h2 id="framework-title">Your frontend stays yours.</h2>
      <p>
        Bunfork accepts completed browser output. It does not pretend to be the
        framework compiler or its server runtime.
      </p>
    </div>
    <div
      class="framework-rail"
      role="list"
      aria-label="Verified framework exports"
    >
      <span role="listitem">Svelte</span>
      <span role="listitem">SvelteKit</span>
      <span role="listitem">Next.js</span>
      <span role="listitem">Vue</span>
      <span role="listitem">Nuxt</span>
      <span role="listitem">Vite</span>
    </div>
    <div class="runtime-map" aria-label="Static artifact workflow">
      <div>
        <span class="map-command">build</span>
        <strong>Run an explicit command</strong>
        <p>
          Bunfork invokes exactly the program and arguments you provide with a
          reduced environment.
        </p>
      </div>
      <div>
        <span class="map-command">admit</span>
        <strong>Freeze the artifact</strong>
        <p>
          Every regular file receives a byte count and SHA-256 digest in a
          strict manifest.
        </p>
      </div>
      <div>
        <span class="map-command">serve</span>
        <strong>Verify before bind</strong>
        <p>
          Files are re-hashed, preloaded, and served with framework-aware routes
          and caching.
        </p>
      </div>
    </div>
    <a class="section-link" href="/docs/frameworks"
      >See framework-specific export settings
      <span aria-hidden="true">→</span></a
    >
  </section>

  <section class="home-split-section">
    <div class="shell home-split">
      <div class="split-copy">
        <h2>Native pages when JavaScript is unnecessary.</h2>
        <p>
          File routes and MiniJinja inheritance cover static, dynamic, grouped,
          catch-all, error, and server-rendered pages. Development rescans on
          each request; production compiles routes before listening.
        </p>
        <a class="text-link" href="/notes/hello-rust"
          >Open the live dynamic route demo <span aria-hidden="true">→</span></a
        >
      </div>
      <div class="file-tree" aria-label="Example native page tree">
        <p><span>app/</span></p>
        <p><span aria-hidden="true">├─ </span>templates/base.html</p>
        <p><span aria-hidden="true">└─ </span>pages/</p>
        <p class="tree-indent">
          <span aria-hidden="true">├─ </span>index.html <em>/</em>
        </p>
        <p class="tree-indent">
          <span aria-hidden="true">├─ </span>notes/[slug].html
          <em>/notes/:slug</em>
        </p>
        <p class="tree-indent">
          <span aria-hidden="true">└─ </span>docs/index.html <em>/docs</em>
        </p>
      </div>
    </div>
  </section>

  <section class="shell home-section" aria-labelledby="operations-title">
    <div class="section-heading wide-heading">
      <h2 id="operations-title">Operations are product features.</h2>
      <p>
        The same binary that serves the app also owns the checks that make a
        release recoverable.
      </p>
    </div>
    <div class="capability-list">
      <article>
        <h3>Encrypted data</h3>
        <p>
          Bundled SQLCipher, exact embedded migrations, tenant/model-scoped
          vectors, and no loadable SQLite extensions.
        </p>
        <a href="/docs/data">SQLite &amp; vectors</a>
      </article>
      <article>
        <h3>Tests that cross boundaries</h3>
        <p>
          <code>bunfork test</code> runs locked Rust tests plus route,
          migration, vector, backup, and restore smoke checks.
        </p>
        <a href="/docs/cli">CLI &amp; operations</a>
      </article>
      <article>
        <h3>Verified recovery</h3>
        <p>
          Backups are encrypted, no-overwrite, and validated. Restore preserves
          the previous live database.
        </p>
        <a href="/docs/deployment">Deploy &amp; recover</a>
      </article>
      <article>
        <h3>Owned deployments</h3>
        <p>
          Release bundles carry a complete digest inventory, hardened user
          units, and a preserved prior release.
        </p>
        <a href="/docs/deployment">Deployment workflow</a>
      </article>
    </div>
  </section>

  <section class="shell boundary-section" aria-labelledby="boundary-title">
    <div>
      <h2 id="boundary-title">Security starts with an honest boundary.</h2>
      <p>
        Bunfork encrypts data at rest, validates inputs and artifacts, and fails
        closed on suspicious files. It does not provide TLS, user accounts,
        remote backup transport, host provisioning, or protection from a
        compromised live process.
      </p>
    </div>
    <a class="button secondary" href="/docs/security"
      >Understand the boundary</a
    >
    <img
      class="boundary-forkbird"
      src="/assets/forkbird.png"
      width="1254"
      height="1254"
      alt=""
      aria-hidden="true"
      loading="lazy"
    />
  </section>

  <section class="shell final-cta" aria-labelledby="cta-title">
    <p>Keep the browser expressive. Keep production explainable.</p>
    <h2 id="cta-title">Start with one release build.</h2>
    <a class="button" href="/docs/getting-started"
      >Read the five-minute setup <span aria-hidden="true">→</span></a
    >
  </section>
</main>
{% endblock %}