AkurAI Build
Menu

AkurAI-Build

public

Latest change 87c082b9d13e2d34914b81b0c28108076df49f06 - site: enrich health and dynamic route demo by Olafur Bui

{% extends "docs.html" %}
{% block title %}CLI and operations ยท Bunfork docs{% endblock %}
{% block description %}Use the single Bunfork CLI to build, admit, diagnose, serve, migrate, test, back up, restore, manage vectors, and deploy.{% endblock %}
{% block breadcrumb %}CLI & operations{% endblock %}
{% block docs_title %}CLI & operations{% endblock %}
{% block docs_summary %}Every supported lifecycle operation is an explicit subcommand. Global data scope comes first; command-specific paths and behavior follow.{% endblock %}
{% block docs_content %}
<section class="doc-section" aria-labelledby="global-options">
  <h2 id="global-options">Global data scope</h2>
  <div class="table-wrap">
    <table>
      <thead><tr><th>Option</th><th>Environment</th><th>Default</th></tr></thead>
      <tbody>
        <tr><td><code>--database</code></td><td><code>BUNFORK_DB</code></td><td><code>data/bunfork.db</code></td></tr>
        <tr><td><code>--key-file</code></td><td><code>BUNFORK_KEY_FILE</code></td><td><code>.bunfork.key</code></td></tr>
        <tr><td><code>--tenant</code></td><td><code>BUNFORK_TENANT</code></td><td><code>default</code></td></tr>
        <tr><td><code>--model</code></td><td><code>BUNFORK_MODEL</code></td><td><code>default</code></td></tr>
      </tbody>
    </table>
  </div>
  <p>Secret files take precedence over <code>BUNFORK_DB_KEY</code> and <code>BUNFORK_API_TOKEN</code>.</p>
</section>

<section class="doc-section" aria-labelledby="command-reference">
  <h2 id="command-reference">Command reference</h2>
  <div class="table-wrap command-table">
    <table>
      <thead><tr><th>Command</th><th>Purpose</th></tr></thead>
      <tbody>
        <tr><td><code>keygen</code></td><td>Create a private 256-bit key or token file.</td></tr>
        <tr><td><code>build</code></td><td>Run one explicit frontend command with a reduced environment, then admit its output.</td></tr>
        <tr><td><code>admit</code></td><td>Inventory a completed browser directory and atomically write its deterministic manifest.</td></tr>
        <tr><td><code>doctor</code></td><td>Verify every admitted file, digest, length, and manifest invariant without listening.</td></tr>
        <tr><td><code>dev</code></td><td>Serve native pages with request-time route rescans, or a frozen static artifact.</td></tr>
        <tr><td><code>serve</code></td><td>Run the production native or static server. <code>start</code> is an alias.</td></tr>
        <tr><td><code>migrate</code></td><td>Apply embedded migrations transactionally and verify the exact schema.</td></tr>
        <tr><td><code>backup</code></td><td>Create and verify an encrypted, atomic, no-overwrite backup.</td></tr>
        <tr><td><code>restore</code></td><td>Verify and restore a backup while preserving the previous live database.</td></tr>
        <tr><td><code>vector</code></td><td>Put, search, or delete tenant/model-scoped vector records.</td></tr>
        <tr><td><code>test</code></td><td>Run locked Rust tests plus native route, migration, vector, and backup smoke checks.</td></tr>
        <tr><td><code>deploy</code></td><td>Test, release-build, and atomically install a digest-owned local bundle.</td></tr>
      </tbody>
    </table>
  </div>
</section>

<section class="doc-section" aria-labelledby="operational-loop">
  <h2 id="operational-loop">A small operational loop</h2>
  <pre><code># before a release
./target/release/bunfork test
./target/release/bunfork backup --out backups/pre-release.db

# create a verified local release directory
./target/release/bunfork deploy

# production probes
curl --fail http://localhost:3100/_bunfork/health
curl --fail http://localhost:3100/_bunfork/ready</code></pre>
  <p>Health reports <code>status</code>, <code>service</code>, <code>version</code>, and <code>uptime_seconds</code>. Readiness returns <code>{"message":"ok"}</code>; native mode answers HTTP 503 with <code>{"message":"unavailable"}</code> if its encrypted database check fails.</p>
  <p><code>deploy</code> runs its own checks and release build. It creates a local bundle; it does not upload, provision, configure DNS/TLS, or delete old releases.</p>
</section>

<section class="doc-section" aria-labelledby="server-options">
  <h2 id="server-options">Server controls</h2>
  <dl class="reference-list">
    <div><dt><code>--address</code></dt><dd>Defaults to <code>0.0.0.0:3100</code>; environment: <code>BUNFORK_ADDRESS</code>.</dd></div>
    <div><dt><code>--pages</code></dt><dd>Native page root; defaults to <code>app/pages</code>.</dd></div>
    <div><dt><code>--public</code></dt><dd>Native asset root served below <code>/assets</code>; defaults to <code>public</code>.</dd></div>
    <div><dt><code>--token-file</code></dt><dd>Bearer token source; defaults to <code>.bunfork.token</code>.</dd></div>
    <div><dt><code>--public-origin</code></dt><dd>Canonical HTTP(S) origin allowed for browser mutations; environment: <code>BUNFORK_PUBLIC_ORIGIN</code>.</dd></div>
    <div><dt><code>--static</code> + <code>--manifest</code></dt><dd>Enter data-free static mode. The two options are required together.</dd></div>
  </dl>
</section>

<nav class="docs-pagination" aria-label="Documentation pagination">
  <a href="/docs/frameworks"><small>Previous</small><span aria-hidden="true">โ†</span> Framework exports</a>
  <a href="/docs/data"><small>Next</small>SQLite &amp; vectors <span aria-hidden="true">โ†’</span></a>
</nav>
{% endblock %}