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

# Testing the Local Backend

> The first thing to try: init, serve, ingest, query, verify against the local filesystem, no Sia account needed.

This is the tutorial to start with if you're new to ObsidianLog. It uses
the local backend, so there's nothing to set up beyond downloading a
binary. If it works here, you know the core pipeline (encrypt, compress,
hash-chain, query, verify) is solid before you touch Sia at all.

Takes about five minutes.

## 1. Get the binary

If you haven't already, download and extract the release binary for your
system. [Installing a release binary](/get-started/quickstart#installing-a-release-binary)
in the Quickstart has the full walkthrough for macOS, Windows, and Linux.
Not sure which file to grab in the first place? See the
[FAQ](/get-started/faq).

The rest of this tutorial writes commands as `./obsidianlog` (macOS/Linux).
On Windows, that's `.\obsidianlog.exe` instead.

## 2. Run init

```sh theme={null}
./obsidianlog init
```

You'll be asked a handful of questions: storage bucket name, which
backend (choose **local**), where to store data on disk, the ingest
server's bind address, and the chunk time window. The defaults are fine
for testing, just press Enter through each one.

On macOS, you should see **at most one** keychain authorization prompt
during this step. That's the main thing worth confirming here, so
please note how many prompts you actually saw when you report back.
Click **Always Allow** rather than just Allow, so later commands don't
ask again.

When it finishes, you'll see something like:

```text theme={null}
obsidianlog initialized.
  config:      /Users/you/.config/obsidianlog/config.toml
  credentials: the OS keychain
```

## 3. Start the server

```sh theme={null}
./obsidianlog serve
```

This blocks and waits for log batches. Leave it running and open a new
terminal for the rest of this tutorial.

## 4. Send it a test log

```sh theme={null}
curl -s -X POST http://localhost:7080/ingest \
  -H 'content-type: application/json' \
  -d '[{"timestamp":"2026-09-18T10:00:00Z","service":"tutorial","level":"info","msg":"hello from the local backend"}]'
```

A successful ingest returns an empty `200 OK`, so no output here is
actually the expected result, not a sign anything's wrong. If you want
to double check, add `-w "%{http_code}\n"` to the `curl` command and
look for `200`.

## 5. Query it back

```sh theme={null}
./obsidianlog query --service tutorial --format human
```

You should see the log line you just sent, decrypted and printed back
to you.

## 6. Verify the chain

```sh theme={null}
./obsidianlog verify
```

This walks the hash chain and confirms nothing archived has been
tampered with. It should print `OK` for the `tutorial` service.

## Tell us how it went

That's the whole loop. Whether it went smoothly or you got stuck
somewhere, we'd genuinely like to know. Please open a
[feedback report](https://github.com/emmaglorypraise/ObsidianLog/issues/new?template=feedback.yml)
and if you happened to notice roughly how long `init` took, or how long
it took between sending the log and being able to query it back, those
numbers are useful too (there's a spot for them in the form, no need to
go back and measure on purpose).

## What's next

If this worked, try [Testing the Sia Backend](/tutorials/sia-backend) to
see it archive to the real Sia network instead of your local disk, or
[Testing with Vector](/tutorials/vector-integration) to see a real log
shipper feed it instead of a single `curl` request.

Once you're done testing and want a real, ongoing setup rather than a
scratch folder, see the [Quickstart](/get-started/quickstart).

When you finish the tutorial, return to the terminal running `serve` and
press `Ctrl-C` to stop it.
