> ## Documentation Index
> Fetch the complete documentation index at: https://snapr.seshuk.im/llms.txt
> Use this file to discover all available pages before exploring further.

# Scheduled backups for files and databases

> Self-hosted backup service for files and databases — scheduled jobs, encryption, many storage targets, a web UI, and a REST API.

<div className="sn-home">
  <div className="sn-topbar">
    <div className="sn-topbar-brand">
      <svg viewBox="0 0 32 32" fill="none" aria-hidden="true">
        <rect x="1" y="1" width="22" height="22" rx="4" strokeWidth="2" opacity="0.4" />

        <rect x="5" y="5" width="22" height="22" rx="4" strokeWidth="2" opacity="0.7" />

        <rect x="9" y="9" width="22" height="22" rx="4" className="sn-mark-solid" strokeWidth="2" />
      </svg>

      <span>snapr</span>
    </div>

    <div className="sn-topbar-meta">
      <a className="sn-topbar-link" href="https://github.com/maximseshuk/snapr">
        <svg width="15" height="15" viewBox="0 0 16 16" aria-hidden="true">
          <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z" />
        </svg>

        GitHub
      </a>
    </div>
  </div>

  <div className="sn-hero">
    <div className="sn-hero-inner">
      <div className="sn-hero-copy">
        <h1 className="sn-hero-title">
          Back up <span className="sn-hero-grad">everything</span> on a schedule
        </h1>

        <p className="sn-hero-sub">
          One job reads your files and databases, packs them into an archive, encrypts it, and ships it to every
          storage you list. Watch it happen in the web UI, or drive it from the REST API.
        </p>

        <div className="sn-hero-actions">
          <a className="sn-btn sn-btn-primary" href="/quick-start">
            <span>Get started</span>

            <svg width="15" height="10" viewBox="0 0 30 20" fill="none" aria-hidden="true">
              <path stroke="currentColor" strokeWidth="3" d="m18.485 1.531 8.453 8.453-8.485 8.485M8.485 1.531l8.453 8.453-8.485 8.485" />
            </svg>
          </a>

          <a className="sn-btn sn-btn-ghost" href="/configuration/overview">
            Read the docs
          </a>
        </div>

        <code
          className="sn-cmd"
          role="button"
          tabIndex={0}
          title="Click to copy"
          onClick={(e) => {
        navigator.clipboard?.writeText('docker run -p 8080:8080 ghcr.io/maximseshuk/snapr:latest')
        const el = e.currentTarget
        el.setAttribute('data-copied', '')
        setTimeout(() => el.removeAttribute('data-copied'), 1400)
      }}
        >
          <span className="sn-cmd-text">
            <span className="sn-cmd-prompt">\$ </span>docker run -p 8080:8080{' '}
            <span className="sn-cmd-image">ghcr.io/maximseshuk/snapr:latest</span>
          </span>

          <span className="sn-cmd-copied" aria-live="polite">
            Copied to clipboard
          </span>
        </code>
      </div>

      <div className="sn-hero-mark">
        <div className="sn-hero-glow" />

        <div className="sn-hero-float">
          <svg viewBox="0 0 32 32" fill="none" aria-label="snapr">
            <rect x="1" y="1" width="22" height="22" rx="4" strokeWidth="2" opacity="0.4" />

            <rect x="5" y="5" width="22" height="22" rx="4" strokeWidth="2" opacity="0.7" />

            <rect x="9" y="9" width="22" height="22" rx="4" className="sn-mark-echo" fill="none" strokeWidth="1.6" />

            <rect x="9" y="9" width="22" height="22" rx="4" className="sn-mark-solid sn-mark-snap" strokeWidth="2" />
          </svg>
        </div>
      </div>
    </div>
  </div>

  <div className="sn-strip">
    <div className="sn-ticks">
      {Array.from({ length: 49 }, (_, i) => (
                  <span
                    key={i}
                    className={i === 30 ? 'sn-tick sn-tick-now' : i % 8 === 0 ? 'sn-tick sn-tick-major' : 'sn-tick'}
                  />
                ))}
    </div>

    <div className="sn-features">
      <a className="sn-feature" href="/configuration/sources/overview">
        <span className="sn-feature-num">01</span>
        <span className="sn-feature-title">Files and databases</span>
        <span className="sn-feature-text">Local files, PostgreSQL, MySQL, MariaDB, MongoDB, Redis, SQLite, S3.</span>
      </a>

      <a className="sn-feature" href="/configuration/storages/overview">
        <span className="sn-feature-num">02</span>
        <span className="sn-feature-title">Many targets at once</span>
        <span className="sn-feature-text">One archive, shipped to disk, S3, SFTP, WebDAV, and bunny.net.</span>
      </a>

      <a className="sn-feature" href="/configuration/encryption">
        <span className="sn-feature-num">03</span>
        <span className="sn-feature-title">Compressed and encrypted</span>
        <span className="sn-feature-text">Packed into one archive, optionally encrypted and split into parts.</span>
      </a>

      <a className="sn-feature" href="/api-reference/overview">
        <span className="sn-feature-num">04</span>
        <span className="sn-feature-title">UI, API, and alerts</span>
        <span className="sn-feature-text">Live logs and manual runs in the browser, or over REST.</span>
      </a>
    </div>
  </div>
</div>
