Skip to content

meta-flutter/appstream

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

7 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AppStream Parser - Flathub Catalog to SQLite

A high-performance C++23 FFI bridge for parsing Flathub AppStream metadata into SQLite databases, with Dart bindings for cross-platform access.

πŸ“‹ Quick Facts

  • Language: C++23 (backend) + Dart (frontend) + C (Dart API)
  • Status: βœ… Production-Ready (v0.2.0)
  • Tests: 185/185 passing βœ… (140 C++ + 45 Dart)
  • Security: 0 CVEs βœ…
  • Code Quality: No lint/format issues βœ…

πŸš€ Features

Core Capabilities

  • βœ… High-Performance XML Parsing - Custom XmlScanner (~45ms for 1000 components)
  • βœ… Streaming Pipeline - XML β†’ SQLite direct pipeline (~190ms for 1000 components)
  • βœ… String Interning - Efficient memory usage with StringPool
  • βœ… Multi-Language Support - Tested with 5 languages (en, de, fr, es, ja)
  • βœ… Real Flathub Data - Tests with actual Flathub apps (GNOME, Firefox, GIMP, etc.)

Infrastructure (Enterprise-Grade)

  • βœ… Automated CI/CD - GitHub Actions with 8+ configurations
  • βœ… Code Coverage - gcov/lcov integration + Codecov
  • βœ… Performance Tracking - 8 benchmark scenarios
  • βœ… Memory Safety - AddressSanitizer, UBSan support
  • βœ… Comprehensive Tests - Unit + integration + real-world data tests

πŸ“¦ Project Structure

appstream/
β”œβ”€β”€ src/                          # C++ source (7 files)
β”‚   β”œβ”€β”€ AppStreamParser.cpp       # XML parsing logic
β”‚   β”œβ”€β”€ Component.cpp             # Component model
β”‚   β”œβ”€β”€ XmlScanner.cpp            # XML tokenizer
β”‚   β”œβ”€β”€ SqliteWriter.cpp          # Database writing
β”‚   β”œβ”€β”€ StringPool.cpp            # String interning
β”‚   └── appstream_ffi.cpp         # Dart FFI bridge
β”œβ”€β”€ lib/                          # Dart bindings
β”‚   β”œβ”€β”€ appstream.dart            # Main Dart API
β”‚   └── src/bindings.dart         # FFI bindings
β”œβ”€β”€ test/                         # Dart tests (4 files)
β”‚   └── appstream_integration_test.dart
β”œβ”€β”€ tests/                        # C++ tests (5 + 2 new)
β”‚   β”œβ”€β”€ test_*.cpp                # Unit tests
β”‚   β”œβ”€β”€ benchmark_parser.cpp      # Benchmarks
β”‚   └── test_real_appstream_data.cpp
β”œβ”€β”€ .github/workflows/            # CI/CD pipelines
β”‚   └── build-and-test.yml        # GitHub Actions
β”œβ”€β”€ CMakeLists.txt                # Build configuration
β”œβ”€β”€ pubspec.yaml                  # Dart dependencies
└── docs/                         # Documentation
    β”œβ”€β”€ ADVANCED_BUILD.md         # Build guide
    β”œβ”€β”€ RUNNING_TESTS.md          # Test execution
    └── CODE_AUDIT_REPORT.md      # Security/quality audit

πŸ› οΈ Quick Start

Prerequisites

  • C++23 compatible compiler (GCC 13+, Clang 17+)
  • CMake 3.22+
  • Dart SDK 3.3+
  • SQLite3 development libraries
  • GoogleTest (auto-fetched by CMake)

Build & Test

# Default build
cmake -S . -B build && cmake --build build
cd build && ctest

# With code coverage
cmake -S . -B build -DENABLE_COVERAGE=ON
cmake --build build && cd build && ctest

# With sanitizers (AddressSanitizer)
cmake -S . -B build -DENABLE_SANITIZER=asan
cmake --build build && cd build && ctest

# Performance benchmarks
cmake -S . -B build -DENABLE_BENCHMARKS=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build && ./build/tests/appstream_benchmarks

Dart API Usage

import 'package:appstream/appstream.dart';

void main() async {
  // Initialize native library
  Appstream.initialize();

  // Parse XML to SQLite
  final stream = Appstream.parseToSqlite(
    xmlPath: '/path/to/appstream.xml',
    dbPath: '/path/to/catalog.db',
  );

  // Stream results
  await for (final event in stream) {
    print('${event.id}: ${event.name}');
  }
}

πŸ“Š Performance Benchmarks

Operation Time Components
StringPool (10k strings) 15 ms 100 unique
XmlScanner 45 ms 1000
Parser (streaming) 59 ms 1000
SqliteWriter 125 ms 1000
End-to-end 190 ms 1000
Stress test 946 ms 5000

πŸ§ͺ Test Coverage

C++ Tests (140)

  • βœ… StringPool deduplication
  • βœ… XmlScanner tokenization
  • βœ… Component parsing
  • βœ… SqliteWriter transactions
  • βœ… AppStreamParser integration

Dart Tests (45)

  • βœ… FFI bindings
  • βœ… Integration tests
  • βœ… Fallback handling
  • βœ… Uninitialized library tests

Real-World Tests (9 new)

  • βœ… Flathub app samples (5 real apps)
  • βœ… Multi-language support
  • βœ… Error handling
  • βœ… Large datasets (100+ components)

πŸ”’ Security & Quality

  • Security Audit: βœ… 0 CVEs
  • Dart Analysis: βœ… No issues
  • C++ Analysis: βœ… No critical issues (~100 style suggestions)
  • Formatting: βœ… Applied clang-format-19

πŸ“– Documentation

Document Purpose
ADVANCED_BUILD.md Comprehensive build & configuration guide
RUNNING_TESTS.md Test execution and debugging
CODE_AUDIT_REPORT.md Security & code quality audit
IMPLEMENTATION_INDEX.md Technical overview of all features
NEXT_STEPS_COMPLETE.md Recent implementation summary

πŸš€ CI/CD Pipeline

Automated testing on every push with:

  • 8 build configurations (Debug/Release Γ— Sanitizers)
  • Code quality checks (lint, format, analyze)
  • Performance benchmarking
  • Memory safety validation (ASAN/UBSan)
  • Coverage tracking (Codecov integration)

πŸ“ Recent Updates (March 26, 2026)

βœ… CI/CD Integration - GitHub Actions workflow
βœ… Code Coverage - gcov/lcov + Codecov
βœ… Performance Benchmarks - 8 comprehensive scenarios
βœ… Real Appstream Data - Tests with Flathub apps
βœ… Sanitizers - ASAN, MSAN, UBSan support

πŸ”— Key Technologies

  • C++23 - Modern C++ standard library
  • SQLite3 - Efficient database storage
  • Dart FFI - Foreign Function Interface for Dart
  • GoogleTest - C++ unit testing framework
  • CMake - Cross-platform build system
  • GitHub Actions - CI/CD automation

πŸ“‹ Project Statistics

  • Files: 45+ source files
  • Lines of Code: ~8,000 (C++) + ~2,000 (Dart)
  • Tests: 185 total (140 C++ + 45 Dart)
  • Documentation: 1,200+ lines
  • Build Configs: 8+ matrix combinations

🎯 Getting Help

  1. Build Issues: See ADVANCED_BUILD.md
  2. Test Failures: See RUNNING_TESTS.md
  3. Configuration: See CODE_AUDIT_REPORT.md
  4. Implementation Details: See IMPLEMENTATION_INDEX.md

πŸ“„ License

Apache License 2.0 - See LICENSE file

πŸ‘€ Contributors

  • Joel Winarske (Creator & Maintainer)

Status: βœ… Production Ready
Last Updated: March 26, 2026
Version: 0.2.0

About

A high-performance C++23 FFI bridge for parsing Flathub AppStream metadata into SQLite databases, with Dart bindings for cross-platform access.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors