{"id":50957572,"url":"https://github.com/xoolive/datalink","last_synced_at":"2026-06-18T09:03:34.418Z","repository":{"id":363598692,"uuid":"1202277811","full_name":"xoolive/datalink","owner":"xoolive","description":"A Rust-first aviation datalink suite including ACARS decoding and VHF, VDL2, HFDL demodulation","archived":false,"fork":false,"pushed_at":"2026-06-09T15:20:31.000Z","size":442,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-09T16:18:30.609Z","etag":null,"topics":["acars","adsc","airspy","arinc622","cpdlc","hfdl","rtlsdr","soapy","vdl2"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xoolive.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-05T20:43:55.000Z","updated_at":"2026-06-09T15:37:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/xoolive/datalink","commit_stats":null,"previous_names":["xoolive/datalink"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/xoolive/datalink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xoolive%2Fdatalink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xoolive%2Fdatalink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xoolive%2Fdatalink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xoolive%2Fdatalink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xoolive","download_url":"https://codeload.github.com/xoolive/datalink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xoolive%2Fdatalink/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34483285,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acars","adsc","airspy","arinc622","cpdlc","hfdl","rtlsdr","soapy","vdl2"],"created_at":"2026-06-18T09:03:33.561Z","updated_at":"2026-06-18T09:03:34.412Z","avatar_url":"https://github.com/xoolive.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"logo.png\" alt=\"datalink Logo\" width=\"200\"/\u003e\n\u003c/div\u003e\n\n# datalink\n\n`datalink` is a Rust aviation datalink workspace with a reusable decode library and a\nsingle CLI for demodulating and decoding aviation datalink traffic.\n\n- `crates/acars` — core library for ACARS, VDL2 AVLC, ADS-C, CPDLC-related payloads,\n  HFDL PDU parsing, and optional demodulators.\n- `crates/datalink` — CLI application for bearer frontends, standalone frame decoding, Airframes.io input, Redis/JSONL output, and merged receiver configurations.\n\n`datalink` can decode standalone frames, demodulate VDL2 / VHF ACARS / HFDL I/Q sources,\nconsume Airframes.io websocket events, run merged TOML receiver configurations, and emit\nJSONL or Redis pub/sub output.\n\n## CLI overview\n\n```text\ndatalink [--config datalink.toml] [COMMAND]\n```\n\nCommands:\n\n```text\nvdl2          VDL Mode 2 frontend for I/Q and SDR inputs\nvhf           Classic VHF ACARS frontend\nairframes.io  Airframes.io websocket feed\nhfdl          HF Data Link frontend\ndecode        Decode standalone payloads or frames\n```\n\nWhen no subcommand is provided, `datalink` runs merged receiver mode and expects\n`--config \u003cFILE\u003e`.\n\n### Standalone decode examples\n\n```sh\n# Decode an ACARS frame from hex\ndatalink decode acars --direction downlink '\u003chex\u003e'\n\n# Decode an AVLC frame including FCS bytes\ndatalink decode avlc '\u003chex\u003e'\n\n# Decode an ADS-C app payload\ndatalink decode adsc '/ATSU.ADS....'\n```\n\n### VDL2 frontend\n\n```sh\ndatalink vdl2 --format cu8 --sample-rate 1050000 --center-freq 136850000 \\\n  --channel 136875000 136975000 file://capture.cu8\n```\n\nUseful options:\n\n- `--output \u003cfile\u003e` — write decoded JSONL in addition to stdout.\n- `--stats` — print demod/decode counters.\n- `--redis-url \u003curl\u003e` — publish decoded records to application-specific Redis topics.\n\n### Classic VHF ACARS frontend\n\n```sh\ndatalink vhf --format cu8 --sample-rate 1050000 --center-freq 131700000 \\\n  --channel 131525000 131725000 file://capture.cu8\n```\n\nUseful options:\n\n- `--output \u003cfile\u003e` — write decoded JSONL in addition to stdout.\n- `--stats` — print demod/decode counters.\n- `--redis-url \u003curl\u003e` — publish decoded messages to application-specific Redis topics.\n\n### HFDL frontend\n\n```sh\ndatalink hfdl --format cf32 --center-freq 10000000 --sample-rate 8000000 \\\n  --max-seconds 20 file://capture.cf32\n```\n\nUseful options:\n\n- `--stats` — print demod/decode counters.\n- `--redis-url \u003curl\u003e` — publish decoded PDUs to application-specific Redis topics.\n\nFor SDRUno-style 16-bit stereo WAV I/Q files, `.wav` input is auto-detected when\n`--format` is omitted:\n\n```sh\ndatalink hfdl --max-seconds 60 file://HFDL_10081kHz.wav\n```\n\nRedis publishing uses application-specific topics across all bearers, for example\n`datalink-sq`, `datalink-acars`, `datalink-cpdlc`, and `datalink-other`.\n\n### Source URLs\n\nVDL2, VHF, and HFDL share the same source direction: WAV I/Q recordings, raw I/Q recordings,\nand live SDR sources.\n\nVDL2 and VHF currently accept:\n\n- `file://...` or a bare file path\n- `-` for stdin\n- `rtlsdr://...` when built with `rtlsdr`\n- `airspy://...` when built with `airspy`\n- `hackrf://...` when built with `hackrf`\n- `soapy://...` when built with `soapy`\n\nCommon source query parameters include `format`, `center_freq`/`freq`,\n`sample_rate`/`rate`, `channel`/`channels`, `gain`, `bias_tee`, and device-specific gain\nsettings. If `gain` is omitted, datalink applies its per-device default; `gain=auto`\nexplicitly requests device automatic gain control where supported. HackRF accepts\n`amp_enable`/`rf_amp` for its 14 dB RF amplifier plus `lna_gain`/`if_gain` and\n`vga_gain`/`bb_gain` for stage gains.\n\nFor file captures, `datalink` can infer center frequency, sample rate, and `cf32` format\nfrom Gqrx-style filenames such as `gqrx_20260518_114025_136500000_1800000_fc.raw`. It can\nalso infer center frequency from SDRUno-style names containing a trailing `kHz` frequency.\n\n## Library notes\n\nThe `acars` crate is the reusable decode library. Its demodulators are behind the optional\n`demod` feature so pure parser users do not need to pull in SDR/DSP dependencies.\n\n- Default `acars` build: decode/parsing only.\n- `acars` with `features = [\"demod\"]`: adds VDL2, VHF ACARS, and HFDL demod support.\n\nThe `datalink` CLI enables `acars/demod` because it includes demodulating frontends. See\n`crates/acars/readme.md` for the library API overview until the crate is published on docs.rs.\n\n## Cargo features\n\n`datalink` defaults to SDR and websocket support:\n\n```text\ndefault = [\"rtlsdr\", \"airspy\", \"hackrf\", \"websocket\"]\n```\n\nIndividual SDR features can be disabled or selected with normal Cargo feature flags.\n\n## Project direction\n\nThe project is Rust-native rather than a direct port of an existing decoder. The goal is a\nshared Rust library plus a consistent JSON-facing CLI across VDL2, VHF ACARS, HFDL, and\nexternal event sources, following the relevant datalink standards and preserving unknown\nor vendor-specific payloads for later analysis.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxoolive%2Fdatalink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxoolive%2Fdatalink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxoolive%2Fdatalink/lists"}