# Supported file formats

URL: /collect/formats

The file formats Foxborne reads, what each one holds and how Foxborne recognizes, times and parses it, plus the formats file import takes by upload, drop folder or removable media.



Foxborne reads six formats, from the flight log and the companion computer to the ground station and the range. Each original is hashed with SHA-256 on arrival and stored unmodified.

## Formats Foxborne reads [#formats-foxborne-reads]

| Format                                        | Extension       | What it holds                                                                                                                        |
| --------------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| [PX4 ULog](/collect/formats/px4-ulog)         | `.ulg`          | Completed flight logs: vehicle status, position, battery, GPS, telemetry, logged messages and dropouts.                              |
| [journalctl JSON](/collect/formats/journald)  | `.json`         | systemd journal exports from the companion computer, with realtime and monotonic timestamps and the boot ID.                         |
| [Collector JSONL](/reference/collector-jsonl) | `.jsonl`        | Process samples from the Foxborne collector: CPU, resident memory and restart count, with clock status on every sample.              |
| [Receiver JSONL](/reference/receiver-jsonl)   | `.jsonl`        | Ground station receive records: which MAVLink message arrived, from which system, and when it arrived.                               |
| IRIG 106 Chapter 10                           | `.ch10`         | Flight test recordings: time packets, PCM, MIL-STD-1553 and ARINC 429 channels, decoded with the recording’s own TMATS setup record. |
| Range records                                 | `.csv`, `.json` | Radar TSPI, telemetry receiver and flight termination console logs on range time, mapped once per range.                             |

## How Foxborne recognizes a file [#how-foxborne-recognizes-a-file]

Foxborne identifies the flight log, journal, collector and receiver formats by content, not by name. It checks the file size first, then tests the first 4,096 bytes in the order below, and the first match decides.

| Order | Format          | Foxborne looks for                                                                  | The file's row then reads                               |
| ----- | --------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------- |
| 1     | PX4 ULog        | The first seven bytes `55 4C 6F 67 01 12 35`, which is "ULog" then `0x01 0x12 0x35` | **PX4 ULog, version 1** and **Magic bytes verified**    |
| 2     | journalctl JSON | `__REALTIME_TIMESTAMP`                                                              | **journalctl JSON export** and **Journal fields found** |
| 3     | Receiver JSONL  | `"recv_utc"`                                                                        | **Receiver JSONL** and **Receive records found**        |
| 4     | Collector JSONL | `"boot_id"` or `"rss_kib"`                                                          | **Collector JSONL** and **Process samples found**       |

A file named `.ulg` without the magic bytes is quarantined. [Import files in the console](/collect/import-files#how-foxborne-recognizes-a-file) gives each message.

## Parsers [#parsers]

The run page names the parser and its version beside each file. The same files and parser versions always give the same event IDs.

| Format          | Parser in the example dataset |
| --------------- | ----------------------------- |
| PX4 ULog        | `ulog 0.9.2`                  |
| journalctl JSON | `journal 0.6.0`               |
| Collector JSONL | `agent 0.8.1`                 |
| Receiver JSONL  | `receive 0.4.1`               |

In the example dataset, samples from a vehicle on collector 0.7.3 read `agent 0.7.3`.

## Clocks and anchors [#clocks-and-anchors]

Each of these four formats keeps time its own way, and Foxborne records the clock, the anchor and the error bound for each file.

| Format          | Clock                                                     | Anchor                                         | Bound in the example dataset |
| --------------- | --------------------------------------------------------- | ---------------------------------------------- | ---------------------------- |
| PX4 ULog        | Microseconds since the flight controller booted           | GPS time from `sensor_gps`                     | ±40 ms                       |
| journalctl JSON | The companion computer's wall clock                       | chrony, while it reports a synchronized source | ±6 ms                        |
| Collector JSONL | The companion's monotonic clock, same boot as the journal | The boot ID it shares with the journal         | ±6 ms                        |
| Receiver JSONL  | The range control receiver's clock                        | NTP                                            | ±15 ms, plus link latency    |

The bounds in the last column come from the example dataset. Yours follow from your hardware and your time sources, and [Clocks, anchors and error bounds](/concepts/clocks) explains each one.

## Limits [#limits]

| Setting                 | Value             | Notes                                                                                                 |
| ----------------------- | ----------------- | ----------------------------------------------------------------------------------------------------- |
| **Largest file**        | 250 MB by default | An admin can choose 250 MB, 1 GB or 4 GB. Oversized files are refused with a reason, never truncated. |
| **Decompression limit** | 2 GB per bundle   | Shown under **Settings**, **Import**                                                                  |

Parsing streams each file, so memory does not grow with the file's size.

## File import [#file-import]

**File import** is the ingest path for files people bring in. The **Ingest** tab of **Integrations** lists it as "Upload, drop folder or removable media", authenticated by "User login plus sender SHA-256 manifest". It works air-gapped, and "Every file is hashed with SHA-256 at receipt and checked against the sender's manifest before it is parsed."

The catalog lists these formats for file import:

| Format                   | Files                           | More                                                                   |
| ------------------------ | ------------------------------- | ---------------------------------------------------------------------- |
| PX4 ULog                 | `.ulg`                          | [PX4 ULog](/collect/formats/px4-ulog)                                  |
| ArduPilot DataFlash logs | `.bin`                          |                                                                        |
| MAVLink telemetry logs   | `.tlog`                         | [MAVLink telemetry logs and receive records](/collect/formats/mavlink) |
| MCAP and ROS 2 bags      | MCAP files and ROS 2 bags       |                                                                        |
| CAN logs                 | candump, ASC, BLF and MF4       |                                                                        |
| IRIG 106 Chapter 10      | `.ch10`                         | [IRIG 106 Chapter 10 recordings](/collect/formats/irig-106-chapter-10) |
| TSPI files               | Time-space-position information | [Range records](/collect/formats/range-records)                        |

The **File import** row states how many formats your deployment has on, and its drawer lists them under **Formats on**. In the example dataset the row reads **On, 4 formats**: PX4 ULog, journalctl JSON, collector JSONL and receiver JSONL. "The other formats in the catalog are off on this deployment."

**Settings**, under **Import**, shows the same list as **Formats**. The **Used by** row links **Import files**, where investigators upload by hand; see [Import files in the console](/collect/import-files).

## Related [#related]

* [PX4 ULog](/collect/formats/px4-ulog) covers the file structure, topics, parameters and GPS anchor.
* [journalctl JSON exports](/collect/formats/journald) covers the export command and the fields Foxborne uses.
* [Collector JSONL records](/reference/collector-jsonl) and [Receiver JSONL records](/reference/receiver-jsonl) give the field-level schemas.
* [Limits and defaults](/reference/limits) lists every limit in one place.
