Files

2.1 KiB

Your archive

An archive is a folder of Markdown files, schemas and attachments. The files are yours. SQLite is a rebuildable index, not the only copy of your notes.

Each piece uses name.TYPE.md, with a matching .luzzle/schemas/TYPE.json. Types are yours to invent: books, spare parts, suspicious garden gnomes.

Start small

Install the CLI, then make a folder:

mkdir -p my-archive/.luzzle/schemas my-archive/.assets
cd my-archive

Create .luzzle/schemas/notes.json:

{
	"title": "notes",
	"type": "object",
	"properties": {
		"title": { "type": "string", "default": "Untitled" },
		"date_published": { "type": "string", "format": "date" },
		"attachment": { "type": "string", "format": "asset" }
	},
	"required": ["title"]
}

Create hello.notes.md:

---
title: Hello
date_published: 2026-01-15
---

A first note. Nothing to migrate out of a proprietary app. A pleasant change.

Create cli.yaml beside it:

storage:
  type: filesystem
database:
  type: sqlite

Now validate and index:

luzzle -c ./cli.yaml validate ./hello.notes.md
luzzle -c ./cli.yaml sync --verbose

Sync creates luzzle.sqlite beside the config. Run it again after editing; it is not a watcher. Schema filename, schema title, and piece suffix must agree. Put schemas directly in .luzzle/schemas/; pieces can live in subfolders.

Attach a file

luzzle -c ./cli.yaml attach ./hello.notes.md /path/to/manual.pdf

This copies the file into .assets/ and prints its path. Add that path to the piece's attachment field, then validate and sync. attach does not edit the note. A schema field with format: asset makes the reference trackable.

Back up before using sync --prune. It deletes unreferenced assets; a Markdown link alone is not a tracked attachment reference.

Add schema properties for metadata you want indexed. Extra YAML fields can stay in the file without appearing in SQLite. Custom string formats include asset, date, comma-separated, paragraph and markdown.

Next: CLI commands, editor support, or web setup.