What is a UFO case?
In UFO@home, a case gathers everything that is known about one event: what was seen, by whom, how it can be explained, what the witnesses said when asked. A case is what an investigation is about: a night, a place, a title. It does not describe the event itself. It lists what happened around it, as events, each of which is a document of its own. Nobody has to write them all: a case can be one observation, and grow.
The events of a case#
A case holds three kinds of event.
- Observations. Usually at least one: the account of a witness, which UFO@home replays. A case may hold others, other witnesses of the same event, each with their own account, which can disagree.
- Interpretations. An alternative explanation of what was seen: a kite, a planet, an aircraft, a hoax. It is itself an observation, replayed beside the witness's, so that the two can be compared.
- Interviews. A conversation held with a witness, which fixes what they said when asked. It is not replayed.
The events of a case can be linked#
An event is rarely alone: an interpretation is an interpretation of something, an interview is held with someone. These references are what a reader follows from one to the other.
| From → To | How |
|---|---|
| An interpretation → an observation | An interpretation names the primary observation it explains: the witness's account it is another interpretation of. The interpretation cannot be understood without it. |
| An interview → an observation | An interview names the observation of the witness it was held with, or of each witness when there were several. |
| An observation → an interview | The other way round: a passage of an interview can say which moment of the observation it tells of. The observation then lists, at that moment, the passages that tell of it, each a link back to the interview. |
An event is referred to by an id that is its own within the case and nowhere else. Only an event that is referred to needs one.
In the case editor#


The editor opens a case as a picker of its events (“Observation of Q. B.”, “Interview of Q. B.”), the chosen one open below. The + adds an event of the kind you choose, and the File group shows the case as text.
- Opening a case. Load a
case.jsonfrom a file or an address, or start from one recording and choose “Add to a case”. - The picker lists the events (“Observation of Q. B.”, an interpretation, “Interview of Q. B.”). The one you choose opens below, in its own editor: the observation editor for an observation or an interpretation, the interview editor for an interview. What you changed in the others is kept.
- The identifier beside the picker is the event's
id, which the other events refer to it by. Give one to an event you want to refer to; the editor proposes one, and gives it to an observation an interview is held with. - + adds an event: an observation (blank, from a file or from an address), an interpretation of an observation, or an interview (whom it was held with, a title, who held it, through what medium). The bin removes the event on show.
- The two groups of the case: Events, the picker and the event on show, and File, the
case.jsonas text, completed from its own schema, to edit, load and save. The two say the same: what is changed in one is changed in the other. - Saving downloads the case with its files (a zip when there are several). Until then the case is changed in the page only, and the editor warns before what would be lost.
Technical part: the case file#
A case is a case.json, case.schema.json being its schema: a title, a date, and its events. Each event has an eventType (sighting, interpretation or interview), and a url when it has a file of its own, relative to the case. The references are interpretationOf and interviewOf, each an id or a list of them.
Every excerpt below is read-only, and each knows the format: put the caret inside an object and press Ctrl+Space (⌥+I on a Mac) to list every key that could go there, with what the model says of each.
An example#
{
"id": "SaintLo2026",
"title": "Saint-Lô",
"time": "2026-08-11 02:30",
"events": [
{ "type": "event", "eventType": "sighting", "id": "qb", "time": "2026-08-11 02:30", "title": "Q. B.", "url": "observer-saint-lo.json" },
{ "type": "event", "eventType": "sighting", "id": "kite", "interpretationOf": "qb", "title": "A kite", "url": "interpretation-kite.json" },
{ "type": "event", "eventType": "interview", "id": "interview-qb-1", "interviewOf": "qb", "time": "2026-10-13 21:27",
"medium": "video", "by": [{ "people": "BeauJerome" }], "url": "interview-qb-1.json" }
]
}
The case#
| Field | Meaning |
|---|---|
id | The case's identifier. On rr0.org it is the dossier's directory name |
title | What the case is called |
summary | A sentence or two, in as many languages as you like: what a link to the case says of it where it is shared |
image | A picture standing for the case where it is only linked to |
time | When it happened, as RR0 writes a time ("1948-07-24 02:45", "1954") |
events | What happened around it, in order (see below) |
The events#
| Field | Meaning |
|---|---|
type, eventType | "event", and the kind: sighting (an observation, or an interpretation of one), interview. A case may have kinds of its own (article, image, book…), which UFO@home leaves alone |
id | What other events refer to it by, unique among the case's events. Only an event that is referred to needs one |
url | The event's own file (an observation's recording, an interview's transcript), relative to the case |
time, place, title, summary, by | When, where, what it is called, what it established, who did it ({ "people": "…" } or { "org": "…" }) |
interpretationOf | An interpretation's: the id, or ids, of the primary observations it is an interpretation of |
interviewOf | An interview's: the id, or ids, of the observations of the witnesses it was held with |
medium | An interview's: in-person, phone, video, chat, email, letter or other |
Everything else a case holds (its classification, its place, its sources) is RR0's to define and passes through UFO@home unread. What UFO@home replays of a case is its observations; it shows its interpretations beside them, and keeps its interviews.
<rr0-case-editor>
The editor of a case: the picker of its events, each opened in the editor of its kind, and the case file as text.
<script type="module" src="https://ufoathome.org/lib/rr0-sighting-editor.mjs"></script>
<rr0-case-editor src="/cases/saint-lo/case.json"></rr0-case-editor>
The module of the recording's editor registers it, with the <rr0-sighting-editor> it holds. The editor of an interview is fetched the first time an interview is shown.
| Member | Kind | What it does |
|---|---|---|
src | attribute | The address of a case (case.json), or of one recording, which it then offers to add to a case. |
track | attribute | The address of the recording to open first, relative to the case; by default the first observer's. |
sightingData | property | The recording on show, as a plain object. |
sightingEditor | property | The <rr0-sighting-editor> that holds it, for whoever needs more of it than this element offers. |
caseSession | property | The case being edited, when one is open. |
dirty | property | True when the case, or any recording of it, has changes not saved. |