A comprehensive registry of all aircraft registered in Switzerland. This serves as a single source of truth for multiple projects requiring aircraft data.
This registry contains essential information for each aircraft:
- Registration: Swiss aircraft registration code (e.g., HB-1234)
- ICAO Aircraft Type: ICAO aircraft type designator
- Aircraft Type: Aircraft type description
- MTOM: Maximum Take-Off Mass in kg
The registry uses JSON format for maximum compatibility and ease of integration:
{
"version": "1.0.0",
"last_updated": "2025-10-21T17:31:59+02:00",
"total_count": 4,
"aircraft": [
{
"registration": "HB-1000",
"icao_aircraft_type": "GLID",
"aircraft_type": "Glider",
"mtom": 340
}
]
}aircraft.json- Main registry file containing all aircraft dataschema.json- JSON Schema for data validationREADME.md- This documentation file
curl -s https://raw.githubusercontent.com/odch/aircraft-list/main/aircraft.json | jq '.aircraft'Validate your aircraft data against our schema:
pip install jsonschema
python3 -c "import json, jsonschema; jsonschema.validate(json.load(open('aircraft.json')), json.load(open('schema.json')))"Swiss Federal Office of Civil Aviation (BAZL)
- License: Public data
- Usage: Aircraft registrations, types, and technical specifications
- API:
https://app02.bazl.admin.ch/web/bazl-backend/lfr/csv
- Aircraft data is sourced from the BAZL aircraft registry
- Only active aircraft (Registered, Reserved, Reservation Expired, Registration in Progress) are included
- Data is filtered to include only essential fields: Registration, ICAO Type, Aircraft Type, and MTOM
- Custom overrides can be applied for additional aircraft or corrections
This registry uses a GitOps workflow with automated data synchronization and manual review/release process.
Every Monday at 6:00 AM UTC (or manually triggered), GitHub Actions automatically:
- Downloads fresh data from BAZL API
- Processes data using
sync_aircraft.py - Creates
aircraft-staging.jsonwith latest information - Compares staging vs production data
- If changes detected:
- Commits staging file to repository
- Generates detailed change summary
- Creates GitHub Issue for manual review
When automation detects changes, you receive a GitHub Issue with:
- Detailed change summary and statistics
- Instructions for next steps
- Automatic labels for easy tracking
π€ Automated Release (Recommended)
Simply comment on the GitHub Issue with one of these commands:
To approve and release:
!release patch- For data updates, new aircraft, corrections!release minor- For new fields, backward-compatible changes!release major- For breaking changes, schema updates!release patch Fixed aircraft data- Add optional description
To reject:
!rejector!reject Reason for rejection
What happens automatically:
- β Validates staging data
- β Creates production backup
- β Bumps version (patch/minor/major)
- β Releases to production
- β Commits & creates Git tag
- β Closes issue with summary
π₯οΈ Manual Release (Legacy)
For local development or when automation fails:
- Review: Run
python3 review_changes.pyto see detailed changes - Approve: Run
python3 release.pyto promote staging β production - Reject: Do nothing, changes remain in staging only
aircraft.json- π’ PRODUCTION (what applications consume)aircraft-staging.json- π‘ STAGING (automated updates)sync_aircraft.py- Downloads and processes source datareview_changes.py- Shows differences between staging and productionrelease.py- Promotes staging to production with backups
- Production never touched by automation - Always requires manual approval
- Automatic backups created before each release
- Rollback capability if issues arise
- Data validation before promotion using JSON schema
- Clear audit trail through Git commits and Issues
The project includes two main workflows:
- Sync Workflow (
.github/workflows/sync.yml) - Daily automated data sync (6:00 AM UTC) - Release Workflow (
.github/workflows/release.yml) - Issue-based release management with!releaseand!rejectcommands
You can add custom aircraft or override existing data using aircraft-overrides.json:
{
"HB-CUST": {
"icao_aircraft_type": "B738",
"aircraft_type": "Aeroplane",
"mtom": 79000
}
}To use custom overrides:
python3 sync_aircraft.py --overrides aircraft-overrides.jsonFor emergency additions only. Prefer the automated sync process for data quality.
- Ensure the aircraft has a valid registration code
- Add entry to the
aircraftarray inaircraft.json - Update
total_countfield - Update
last_updatedtimestamp - Validate against schema
- Commit changes
- Patch (x.x.X): Data updates, corrections, new aircraft
- Minor (x.X.x): New fields, backward-compatible schema changes
- Major (X.x.x): Breaking changes, incompatible schema updates
pip install -r requirements.txt# Sync data from BAZL
python3 sync_aircraft.py
# Review what changed
python3 review_changes.py
# Release to production
python3 release.py- Fork the repository
- Create a feature branch
- Make your changes
- Test with schema validation
- Submit a pull request
This project (excluding data) is licensed under the MIT License.
The aircraft data is sourced from:
- Swiss Federal Office of Civil Aviation (BAZL): Public data
When using this registry:
- Verify data freshness for critical applications
- Understand that aircraft registration data can change frequently
- Consider the data processing pipeline when interpreting results
This registry is provided "as is" without warranty. While we strive for accuracy, always verify critical information with official sources.
- Issues: Report bugs and request features via GitHub Issues
- Documentation: This README and inline code documentation
- Community: Contribute via Pull Requests
Aircraft Registry - Comprehensive Swiss aircraft database
- License: MIT (code), Public Domain (data attribution to BAZL)
- Maintainer: ODCH (Online Drone Control Hub)
- Data Source: Swiss Federal Office of Civil Aviation (BAZL)