filebase 0.2.1

Query a directory of Slipcase containers by their flyleaf and look at what comes back
Documentation
# The copy both store listings are filled in from.
#
# Every line of this is a claim about the code, and a claim like that goes
# stale silently in a web form nobody diffs. So it lives here, is reviewed and
# committed like anything else, and `ship` pushes it to both stores on every
# release. Edit here; do not edit a listing in a browser.
#
# The fields both stores take sit at the top of a language. The rest sit under
# the store that takes them, because the two do not take the same fields and do
# not count them the same way. The name is under each store because the two can
# disagree about it — and here they do not: Apple accepted the bare word
# Filebase, where it refused Slipcase.
#
# Limits, which ship checks before the tag and counts in characters rather than
# bytes: apple.name and apple.subtitle 30, apple.promotional-text 170,
# apple.keywords 100 including the commas, description 4,000 — the Microsoft
# Store allows 10,000 and this is written to Apple's — microsoft.short-description
# 500, microsoft.features 20 of 200, microsoft.keywords 7 of 30.
#
# What is *not* here is what changed in this release. That is
# release-notes.toml, which is rewritten every time; this changes when the
# product does.
#
# No URLs reach the Microsoft Store from here. Its submission document has no
# field for them: Partner Center keeps the website, the privacy policy and the
# support contact against the product.
#
# **Both languages, and the German takes its terminology from `po/de.po`.** A
# listing that taught a reader a word the window has no use for would be worse
# than an English one: an Inhaltsdatei is what the window calls a content file,
# and so it is what the listing calls one. The German is not a translation of the English
# line for line — German runs about a third longer, and the short description
# has a hard limit of 500 — so it says the same things in its own length.
#
# `store_locales` in ship.conf gains `de-de` when the store targets land.

[locales."en-us"]
website = "https://excelano.com/filebase/"
support = "https://excelano.com/filebase/#support"
privacy = "https://excelano.com/legal/#filebase"
description = """
A Slipcase container is a file with its description attached: a document of any kind, packed with a small text file that says what it is. The description travels with the document, so it is still there after the file has been copied, renamed, mailed and filed.

Once a folder holds a few hundred of them, the question stops being what is in this file and becomes which of these files say this. A file manager cannot answer that. To a file manager they are all archives with the same icon.

Filebase answers it.

WHAT YOU DO

Point it at a folder and ask a question:

select @path, title, governance.owner where status = "draft" or tags contains "legal"

What answered comes back as rows: one row per container, one column per flyleaf key. Tick recursive and it descends; leave it and it does not.

Select a row and that container is beside the table — what its content file is called, how large it is, and its whole description as a tree you can read. Press Open content file and the document goes to whatever your system opens that kind of file with.

WHAT THE LANGUAGE IS

SlipQL, which borrows its clauses from SQL and its literals from TOML, so anyone who can write a description can query one without learning a second way to write a date or quote a string. The chosen folder supplies the from clause, so a query can leave it out. select * gives every key across the containers that answered, which is the quickest way to learn what a folder has to ask about.

A key a container does not have comes back as an empty cell rather than failing the query, because these descriptions are written by people and no two folders agree about what goes in them.

WHAT IT TELLS YOU THAT IT DID NOT DO

A file it could not read is skipped and said so, under the rows. A comparison that crossed types is counted and said so — asking for pages over ten, where one container's pages is the word "many", is neither true nor false, and the row's absence is otherwise the only evidence. A short answer that does not say it is short is a wrong answer.

WHAT IT DOES NOT DO

It does not write. There is no Save in it and no path through it that changes a container; the descriptions are shown and not edited. Slipcase Desktop is the editor.

It keeps no index and no library. Every query is a fresh scan, so the answer is what is on disk now, and there is nothing to import, nothing to rebuild and nothing to go stale.

It makes no network connection of any kind. There is no server behind it, no account to create, no analytics, no telemetry and no crash reporting. It stores nothing: no settings file, no recent-folders list, no cache.

OPEN SOURCE

Written in Rust, free, and open source under the MIT licence, at github.com/excelano/filebase. The query engine is a separate crate anyone can build on, and the format is a published specification that any ZIP tool can read.
"""

[locales."en-us".apple]
name = "Filebase"
subtitle = "Query a folder of documents"
promotional-text = "Point it at a folder of Slipcase containers, ask which of them say what you are looking for, and read the answer as rows."
keywords = "Slipcase,slpc,flyleaf,query,search,documents,folder,container,SlipQL,TOML"

[locales."en-us".microsoft]
name = "Filebase"
short-description = """
A Slipcase container is a file with its description attached, and the description travels with it. Once a folder holds a few hundred, the question is which of them say this, and a file manager cannot answer it.

Point Filebase at the folder and ask. What answered comes back as rows, one per container, one column per key. Select a row to read its whole description, and hand the document to whatever opens it.

It never writes a container, keeps no index, and makes no network connection.
"""
features = [
  "Ask a folder of Slipcase containers a question and read the answer as rows: one row per container, one column per flyleaf key.",
  "SlipQL takes its clauses from SQL and its literals from TOML, so anyone who can write a description can query one.",
  "Rows arrive as the scan finds them, so a large folder starts answering at once rather than when it finishes.",
  "Descend into subfolders, or do not: recursive is a tick box and off by default.",
  "Select a row to see what the content file is called, how large it is, and the container's whole description as a tree.",
  "Open the content file in whatever your system has registered for that kind of file.",
  "A key a container does not have is an empty cell, not a failed query, because these descriptions are written by people.",
  "A file it could not read is skipped and reported, and so is a comparison that crossed types.",
  "It never writes a container. There is no Save, and no path through it that changes one.",
  "No index and no library: every query is a fresh scan, so the answer is what is on disk now.",
  "No network connection of any kind. No account, no analytics, no telemetry, no crash reporting.",
  "Stores nothing on your disk: no settings file, no recent-folders list, no cache.",
  "Written in Rust and open source under the MIT licence, and so is the format it reads.",
]
keywords = [
  "Slipcase",
  "slpc",
  "flyleaf",
  "document search",
  "query",
  "file manager",
  "TOML",
]

[locales."de-de"]
website = "https://excelano.com/filebase/"
support = "https://excelano.com/filebase/#support"
privacy = "https://excelano.com/legal/#filebase"
description = """
Ein Slipcase-Container ist eine Datei mit ihrer Beschreibung darin: ein Dokument beliebiger Art, gepackt mit einer kleinen Textdatei, die sagt, was es ist. Die Beschreibung reist mit dem Dokument und ist noch da, nachdem die Datei kopiert, umbenannt, verschickt und abgelegt wurde.

Sobald ein Ordner ein paar Hundert davon enthält, lautet die Frage nicht mehr, was in dieser Datei steht, sondern welche dieser Dateien dies sagen. Ein Dateimanager kann das nicht beantworten. Für ihn sind es alles Archive mit demselben Symbol.

Filebase beantwortet sie.

WAS SIE TUN

Auf einen Ordner zeigen und eine Frage stellen:

select @path, title, governance.owner where status = "draft" or tags contains "legal"

Was geantwortet hat, kommt als Zeilen zurück: eine Zeile je Container, eine Spalte je Flyleaf-Schlüssel. Setzen Sie den Haken bei rekursiv, und es steigt in Unterordner ab; lassen Sie ihn weg, und es tut es nicht.

Wählen Sie eine Zeile, und dieser Container steht neben der Tabelle: wie seine Inhaltsdatei heißt, wie groß sie ist, und seine ganze Beschreibung als lesbarer Baum. Ein Druck auf Inhaltsdatei öffnen gibt das Dokument an das Programm weiter, das Ihr System für diese Art von Datei vorgesehen hat.

WAS DIE SPRACHE IST

SlipQL entlehnt seine Klauseln von SQL und seine Literale von TOML. Wer eine Beschreibung schreiben kann, kann sie also abfragen, ohne eine zweite Art zu lernen, ein Datum zu schreiben oder eine Zeichenkette zu setzen. Der gewählte Ordner liefert die from-Klausel, eine Abfrage kann sie also weglassen. select * gibt jeden Schlüssel über alle Container zurück, die geantwortet haben, und ist damit der schnellste Weg zu erfahren, wonach sich in einem Ordner überhaupt fragen lässt.

Ein Schlüssel, den ein Container nicht hat, kommt als leere Zelle zurück, statt die Abfrage scheitern zu lassen: diese Beschreibungen schreiben Menschen, und keine zwei Ordner sind sich einig, was hineingehört.

WAS ES SAGT, DASS ES NICHT GETAN HAT

Eine Datei, die es nicht lesen konnte, wird übersprungen und unter den Zeilen genannt. Ein Vergleich über Typgrenzen wird gezählt und genannt: nach Seiten über zehn zu fragen, wo bei einem Container pages das Wort „many“ ist, ist weder wahr noch falsch, und sonst wäre das Fehlen der Zeile der einzige Hinweis darauf. Eine kurze Antwort, die nicht sagt, dass sie kurz ist, ist eine falsche Antwort.

WAS ES NICHT TUT

Es schreibt nicht. Es gibt kein Speichern darin und keinen Weg hindurch, der einen Container verändert; die Beschreibungen werden gezeigt und nicht bearbeitet. Slipcase Desktop ist der Editor.

Es führt keinen Index und keine Bibliothek. Jede Abfrage ist ein frischer Durchlauf, die Antwort ist also das, was jetzt auf der Festplatte steht: nichts zu importieren, nichts neu aufzubauen, nichts, das veralten kann.

Es baut keinerlei Netzwerkverbindung auf. Kein Server dahinter, kein Konto anzulegen, keine Analyse, keine Telemetrie, keine Absturzberichte. Es speichert nichts: keine Einstellungsdatei, keine Liste zuletzt geöffneter Ordner, keinen Zwischenspeicher.

QUELLOFFEN

In Rust geschrieben, kostenlos und quelloffen unter der MIT-Lizenz, auf github.com/excelano/filebase. Die Abfrage-Engine ist ein eigenes Crate, auf dem jeder aufbauen kann, und das Format ist eine veröffentlichte Spezifikation, die sich mit jedem ZIP-Werkzeug lesen lässt.
"""

[locales."de-de".apple]
name = "Filebase"
subtitle = "Dokumentordner abfragen"
promotional-text = "Auf einen Ordner voller Slipcase-Container zeigen, fragen, welche davon sagen, was Sie suchen, und die Antwort als Zeilen lesen."
keywords = "Slipcase,slpc,Flyleaf,Abfrage,Suche,Dokumente,Ordner,Container,SlipQL,TOML"

[locales."de-de".microsoft]
name = "Filebase"
short-description = """
Ein Slipcase-Container ist eine Datei mit ihrer Beschreibung darin, und die Beschreibung reist mit. Sobald ein Ordner ein paar Hundert enthält, lautet die Frage, welche davon dies sagen, und ein Dateimanager kann sie nicht beantworten.

Zeigen Sie Filebase auf den Ordner und fragen Sie. Was antwortet, kommt als Zeilen zurück, eine je Container, eine Spalte je Schlüssel.

Es schreibt nie einen Container, führt keinen Index und baut keine Netzwerkverbindung auf.
"""
features = [
  "Stellen Sie einem Ordner voller Slipcase-Container eine Frage und lesen Sie die Antwort als Zeilen: eine Zeile je Container, eine Spalte je Flyleaf-Schlüssel.",
  "SlipQL entlehnt seine Klauseln von SQL und seine Literale von TOML: Wer eine Beschreibung schreiben kann, kann sie auch abfragen.",
  "Zeilen erscheinen, sobald der Durchlauf sie findet, ein großer Ordner beginnt also sofort zu antworten und nicht erst am Ende.",
  "In Unterordner absteigen oder nicht: rekursiv ist ein Häkchen und standardmäßig aus.",
  "Wählen Sie eine Zeile, um zu sehen, wie die Inhaltsdatei heißt, wie groß sie ist und wie die ganze Beschreibung des Containers als Baum aussieht.",
  "Öffnen Sie die Inhaltsdatei mit dem Programm, das Ihr System für diese Art von Datei vorgesehen hat.",
  "Ein Schlüssel, den ein Container nicht hat, ist eine leere Zelle und keine gescheiterte Abfrage, denn diese Beschreibungen schreiben Menschen.",
  "Eine Datei, die nicht gelesen werden konnte, wird übersprungen und gemeldet, ebenso ein Vergleich über Typgrenzen.",
  "Es schreibt nie einen Container. Es gibt kein Speichern und keinen Weg hindurch, der einen verändert.",
  "Kein Index und keine Bibliothek: Jede Abfrage ist ein frischer Durchlauf, die Antwort ist also das, was jetzt auf der Festplatte steht.",
  "Keinerlei Netzwerkverbindung. Kein Konto, keine Analyse, keine Telemetrie, keine Absturzberichte.",
  "Speichert nichts auf Ihrer Festplatte: keine Einstellungsdatei, keine Liste zuletzt geöffneter Ordner, keinen Zwischenspeicher.",
  "In Rust geschrieben und quelloffen unter der MIT-Lizenz, ebenso wie das Format, das es liest.",
]
keywords = ["Slipcase", "slpc", "Flyleaf", "Dokumentsuche", "Abfrage", "Dateimanager", "TOML"]