{"id":50977113,"url":"https://github.com/tanagraspace/ccsds124","last_synced_at":"2026-06-19T09:31:01.270Z","repository":{"id":328091630,"uuid":"1108640871","full_name":"tanagraspace/ccsds124","owner":"tanagraspace","description":"Multi-language implementations of CCSDS 124.0-B-1 in C, C++, Python, Go, Rust, and Java. The lossless compression standard for fixed-length spacecraft housekeeping telemetry, based on ESA's patented POCKET+ algorithm and built from low-level OR/XOR/AND operations to run on low-power spacecraft processors under tight real-time constraints.","archived":false,"fork":false,"pushed_at":"2026-06-12T01:56:54.000Z","size":14515,"stargazers_count":1,"open_issues_count":14,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T03:14:45.898Z","etag":null,"topics":["aerospace","ccsds","ccsds-124","ccsds-standards","ccsds124","data-compression","embedded","esa","flight-software","housekeeping","lossless-compression","ops-sat","pocket-plus","satellite","spacecraft","telemetry"],"latest_commit_sha":null,"homepage":"https://tanagraspace.com/ccsds124/","language":"C","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/tanagraspace.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-02T18:06:53.000Z","updated_at":"2026-06-12T02:01:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tanagraspace/ccsds124","commit_stats":null,"previous_names":["tanagraspace/pocket-plus","tanagraspace/ccsds124"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/tanagraspace/ccsds124","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanagraspace%2Fccsds124","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanagraspace%2Fccsds124/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanagraspace%2Fccsds124/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanagraspace%2Fccsds124/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tanagraspace","download_url":"https://codeload.github.com/tanagraspace/ccsds124/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanagraspace%2Fccsds124/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34526065,"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-19T02:00:06.005Z","response_time":61,"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":["aerospace","ccsds","ccsds-124","ccsds-standards","ccsds124","data-compression","embedded","esa","flight-software","housekeeping","lossless-compression","ops-sat","pocket-plus","satellite","spacecraft","telemetry"],"created_at":"2026-06-19T09:31:00.696Z","updated_at":"2026-06-19T09:31:01.259Z","avatar_url":"https://github.com/tanagraspace.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CCSDS 124.0-B-1\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Paper: SmallSat 2022](https://img.shields.io/badge/SmallSat_2022-CCSDS_124.0--B--1-blue)](https://digitalcommons.usu.edu/smallsat/2022/all2022/133/)\n\nThe definitive implementation of the [CCSDS 124.0-B-1](https://ccsds.org/Pubs/124x0b1.pdf) lossless compression algorithm of fixed-length housekeeping data.\n\n## Citation\n\nIf CCSDS 124.0-B-1 contributes to your research, please cite:\n\n\u003e D. Evans, G. Labrèche, D. Marszk, S. Bammens, M. Hernandez-Cabronero, V. Zelenevskiy, V. Shiradhonkar, M. Starcik, and M. Henkel. 2022. \"Implementing the New CCSDS Housekeeping Data Compression Standard 124.0-B-1 (based on POCKET+) on OPS-SAT-1,\" *Proceedings of the Small Satellite Conference*, Communications, SSC22-XII-03. https://digitalcommons.usu.edu/smallsat/2022/all2022/133/\n\n\u003cdetails\u003e\n\u003csummary\u003eBibTeX\u003c/summary\u003e\n\n```bibtex\n@inproceedings{evans2022ccsds124,\n  author    = {Evans, David and Labrèche, Georges and Marszk, Dominik and Bammens, Samuel and Hernandez-Cabronero, Miguel and Zelenevskiy, Vladimir and Shiradhonkar, Vasundhara and Starcik, Mario and Henkel, Maximilian},\n  title     = {Implementing the New CCSDS Housekeeping Data Compression Standard 124.0-B-1 (based on POCKET+) on OPS-SAT-1},\n  booktitle = {Proceedings of the Small Satellite Conference},\n  year      = {2022},\n  note      = {SSC22-XII-03},\n  url       = {https://digitalcommons.usu.edu/smallsat/2022/all2022/133/}\n}\n```\n\n\u003c/details\u003e\n\n## About\n\nCCSDS 124.0-B-1 is the CCSDS standard for lossless compression of fixed-length spacecraft housekeeping data. It standardizes **POCKET+**, an European Space Agency (ESA) patented algorithm implemented using very low-level instructions such as OR, XOR, AND, etc., designed to run on spacecraft command and control processors with low CPU power available and tight real-time constraints.\n\nAn earlier version of POCKET+ was flight-proven onboard both the Nanomind 3200 flight computer and SEPP payload computer of ESA's OPS-SAT-1 spacecraft.\n\n## Conformance\n\nConforms to **CCSDS 124.0-B-1** (Blue Book, February 2023), demonstrated two ways: **byte-identical output to the ESA reference implementation** on all shared reference vectors, and validation against the **UAB/CNES cross-validation suite** — the standard's own 24,900-vector test bench. Full results, the standard issue conformed to, per-implementation status, and documented gaps are in **[CONFORMANCE.md](docs/CONFORMANCE.md)**.\n\n## Documentation\n\n- **[Implementer's Guide](docs/GOTCHAS.md)** — if you are implementing CCSDS 124.0-B-1 yourself, start here. It documents the 21 byte-level pitfalls (each tagged as spec-mandated or a reference-conformance detail, with section/equation citations) that you must get right to produce byte-identical output.\n- **[Algorithm Reference](docs/ALGORITHM.md)** — the encoding/decoding steps, equations, and worked examples.\n- **[Conformance](docs/CONFORMANCE.md)** — what the project conforms to and the evidence: byte-identical-to-reference plus the UAB/CNES cross-validation results and documented gaps.\n- **[Test Report](docs/TESTING.md)** — the engineering test suite: unit, malformed-input, robustness, packet-loss, fuzzing, and reference-vector tests.\n- **[Porting \u0026 Build Notes](docs/GUIDELINES.md)** — per-language build, test, and style notes.\n\n## Implementations\n\n| Language | Version | Validated¹ | Cross-Validated² | Target | Location |\n|----------|---------|------------|------------------|--------|----------|\n| C | 1.0.0 | Yes | Yes | Bare-metal Embedded / Embedded Linux / Desktop / Server | [`implementations/c/`](implementations/c/) |\n| C++ | 1.0.0 | Yes | No | Bare-metal Embedded / Embedded Linux / Desktop / Server | [`implementations/cpp/`](implementations/cpp/) |\n| Python | 1.0.0 | Yes | No | Embedded Linux / Desktop / Server | [`implementations/python/`](implementations/python/) |\n| Go | 1.0.0 | Yes | No | Embedded Linux / Desktop / Server | [`implementations/go/`](implementations/go/) |\n| Rust | 1.0.0 | Yes | No | Embedded Linux / Desktop / Server | [`implementations/rust/`](implementations/rust/) |\n| Java | 1.0.0 | Yes | No | Embedded Linux / Desktop / Server | [`implementations/java/`](implementations/java/) |\n\n¹ Byte-for-byte validated against the ESA reference implementation via the shared [test vectors](test-vectors/).\n² Validated against the UAB/CNES CCSDS 124.0-B-1 cross-validation suite (24,900 vectors); see [CONFORMANCE.md](docs/CONFORMANCE.md) for results and documented gaps. Harnesses for the other implementations are tracked in [#93](https://github.com/tanagraspace/ccsds124/issues/93).\n\n### Which implementation should I use?\n\n**For bare-metal embedded systems**: Use the **C** or **C++** implementation. Both are suitable for resource-constrained systems. The C++ implementation is header-only with template-based size optimization and works with `-fno-exceptions -fno-rtti`. The C implementation is optimized for 32-bit microcontrollers (e.g., GomSpace Nanomind 3200 / AVR32 MCU).\n\n**For payload computers**: All implementations run on embedded Linux systems such as payload processors (e.g., SEPP on OPS-SAT-1). Choose based on your runtime environment and preference — C/C++ for the smallest footprint, Python/Go/Rust/Java for ecosystem convenience.\n\n**For ground systems and prototyping**: All implementations produce identical compression output. Use whichever language fits your toolchain.\n\n## Repository Structure\n\n```\nccsds124/\n├── implementations/\n│   ├── c/              # C implementation\n│   ├── cpp/            # C++ implementation\n│   ├── python/         # Python implementation\n│   ├── go/             # Go implementation\n│   ├── rust/           # Rust implementation\n│   └── java/           # Java implementation\n├── docs/               # Shared documentation\n├── test-vectors/       # Shared test data for validation\n├── LICENSE\n└── README.md\n```\n\n## Quick Start\n\n### Docker (recommended)\n\nBuild, test, and generate coverage for any implementation:\n\n```bash\ndocker-compose run --rm c          # C implementation\ndocker-compose run --rm cpp        # C++ implementation\ndocker-compose run --rm python     # Python implementation\ndocker-compose run --rm go         # Go implementation\ndocker-compose run --rm rust       # Rust implementation\ndocker-compose run --rm java       # Java implementation\n```\n\nArtifacts are written to `implementations/\u003clang\u003e/build/`.\n\n### Local Build\n\n#### C\n\n```bash\ncd implementations/c\nmake          # Build library and CLI\nmake test     # Run tests\nmake coverage # Run tests with coverage report\n```\n\n#### C++\n\n```bash\ncd implementations/cpp\nmake build    # Build library, CLI, and tests\nmake test     # Run unit tests\nmake coverage # Run tests with coverage report\n```\n\n#### Python\n\n```bash\ncd implementations/python\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\npip install -e \".[dev]\"\npytest\n```\n\n#### Go\n\n```bash\ncd implementations/go\nmake build    # Build library\nmake test     # Run tests\nmake coverage # Run tests with coverage\nmake docs     # Generate documentation\n```\n\n#### Rust\n\n```bash\ncd implementations/rust\ncargo build --release  # Build library and CLI\ncargo test             # Run tests\ncargo doc --open       # Generate and view documentation\n```\n\n#### Java\n\n```bash\ncd implementations/java\nmvn package            # Build library and CLI\nmvn test               # Run tests\nmvn javadoc:javadoc    # Generate documentation\n```\n\n## Performance\n\n**Key findings** (venus-express dataset, 151K packets, 13.6 MB):\n- **C++** is the fastest implementation (~143 MB/s compression, ~146 MB/s decompression), also suitable for embedded systems\n- **Java** offers strong performance (~86 MB/s compression) with JVM convenience\n- **C** delivers reliable embedded-friendly performance (~59 MB/s compression, ~80 MB/s decompression)\n- **Rust** provides good performance (~64 MB/s compression)\n- **Go** trades some speed (~49 MB/s compression) for simplicity and fast compilation\n\nAll implementations produce identical compression output. Choose based on your deployment constraints and language ecosystem.\n\nSee [Benchmark Results](docs/BENCHMARK.md) for detailed comparison.\n\n### Test Vectors\n\nAll vectors are synthetic test data except for venus-express, which contains real housekeeping telemetry from ESA's [Venus Express](https://www.esa.int/Science_Exploration/Space_Science/Venus_Express) mission.\n\n| Vector | Packets | Size | R | pt | ft | rt |\n|--------|---------|------|---|----|----|-----|\n| simple | 100 | 9 KB | 1 | 10 | 20 | 50 |\n| hiro | 100 | 9 KB | 7 | 10 | 20 | 50 |\n| edge-cases | 500 | 45 KB | 1 | 10 | 20 | 50 |\n| housekeeping | 10,000 | 900 KB | 2 | 20 | 50 | 100 |\n| venus-express | 151,200 | 13.6 MB | 2 | 20 | 50 | 100 |\n\n### Run Benchmarks\n\n```bash\ndocker-compose run --rm benchmark\n```\n\nResults are written to `docs/BENCHMARK.md`.\n\n**Note**: Python is excluded from benchmarks as it prioritizes readability over performance.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for versioning strategy, release process, and contribution guidelines.\n\n## License\n\nSee [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftanagraspace%2Fccsds124","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftanagraspace%2Fccsds124","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftanagraspace%2Fccsds124/lists"}