AirBridge uses a .airbridge package as the backup artifact.
Foundation implemented. The package writer, reader, and validator are tested with synthetic data. Live record export is not yet connected — the UI does not create backup files. The format is stable at V0.1.
A .airbridge file is a standard ZIP archive with a documented internal layout. It can be inspected with any ZIP tool.
- Portable — no platform-specific paths or encodings.
- Inspectable — standard ZIP, JSON, and JSONL.
- Versioned —
format_versioninmanifest.json. - Stream-friendly — JSONL records are streamed line-by-line.
- Suitable for validation — SHA-256 checksums for all entries.
- Suitable for best-effort restore — manifest carries source metadata without tokens.
example.airbridge
├── manifest.json ← required
├── base.json ← required
├── schema.json ← required
├── tables/
│ └── <table_id>/
│ └── records.jsonl
├── links/
│ └── linked-records.jsonl
├── attachments/
│ └── metadata.jsonl
├── reports/
│ ├── backup-report.json ← required
│ ├── compatibility-report.json
│ └── validation-report.json
└── checksums/
└── sha256.json ← required
Required entries (package is invalid without these): manifest.json, base.json, schema.json, reports/backup-report.json, checksums/sha256.json.
Identifies the package, source, format version, counts, and security metadata. Contains no tokens, no local filesystem paths, and no real user credentials.
{
"format": "airbridge",
"formatVersion": "0.1.0",
"appVersion": "0.1.0",
"createdAt": "2026-06-11T00:00:00Z",
"source": {
"provider": "airtable",
"baseId": "appXXXXXXXXXXXXXX",
"baseName": "Marketing Ops",
"workspaceId": "wspXXXXXXXXXXXXXX"
},
"contents": {
"tables": 8,
"fields": 126,
"records": 24392,
"linkedRecordRelationships": 18,
"attachments": 320
},
"security": {
"containsRecordData": true,
"containsAttachmentUrls": false,
"encrypted": false,
"redactionsApplied": ["emails", "collaborators"]
},
"package": {
"generatedByApp": "airbridge",
"packageId": "<uuid-v4>"
}
}Each line is one record. JSONL is used because it streams and validates better than a large JSON array.
{"id":"recOld123","createdTime":"2026-06-01T10:00:00.000Z","fields":{"Campaign Name":"Summer Sale","Status":"Live"}}A JSON object mapping archive entry path → SHA-256 hex digest. Computed at write time. The checksum file itself is written last and is not checksummed. Validation fails if any checksummed entry has a mismatched hash.
{
"attachments/metadata.jsonl": "abc123...",
"base.json": "def456...",
"manifest.json": "ghi789...",
"reports/backup-report.json": "jkl012...",
"schema.json": "mno345..."
}Attachment fields are captured as metadata only. File content is not exported. security.containsAttachmentUrls is false by default in V0.1.
Linked record fields capture the source record IDs. Restore will require remapping IDs to the destination base.
- No API tokens appear inside the package.
- No local filesystem paths appear inside the archive entries.
encryptedis alwaysfalsein V0.1. Encryption is reserved for a future version.
The backup format is versioned independently from the app version via formatVersion in manifest.json. Pre-1.0 format changes may be breaking and will be documented in the changelog.
When the record export engine is complete, it will feed data into the package writer. At that point the UI will expose a file path selector and a "Start Backup" button that creates a real .airbridge file.