Project Guide
Complete guide to the Datadog MAUI SDK project - architecture, structure, and current status.
Quick Navigation
- New to the project? Start with Current Status
- Need architecture details? See Architecture
- Looking for files? Check Directory Structure
- Want to build? Go to Build System
Current Status
Project Created: January 15, 2026 SDK Version: 3.5.0 .NET Targets: 8, 9, 10 Platforms: iOS (12.0+), Android (API 21+)
β Completed
Android Bindings: 13/13 packages building successfully
- Core: dd-sdk-android-internal, dd-sdk-android-core
- Features: logs, rum, trace, ndk, session-replay, webview, flags
- Integrations: okhttp, trace-otel, okhttp-otel, gradle-plugin
Build System: Complete automation
- Multi-framework targeting (net9.0/net10.0-android)
- GitHub Actions workflows
- Package combination scripts
- Version management tools
Documentation: Comprehensive guides
- Android dependency management
- Build scripts and workflows
- iOS binding strategy
- Integration packages
π§ In Progress
iOS Bindings: Scaffolded, implementing minimal manual bindings
- Objective Sharpie generated 684 API types
- Creating clean user-facing bindings (~250 lines vs 7,199)
- Following opt-in approach
Unified API: Cross-platform MAUI plugin
- Design complete ()
- Implementation pending iOS bindings
π― Next Steps
- Complete iOS minimal bindings
- Implement cross-platform MAUI plugin wrapper
- Expand sample app to demonstrate all features
- NuGet package publishing
Architecture
High-Level Design
βββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Datadog.MAUI (Main Plugin - Future) β
β - Cross-platform interfaces (IDatadogSdk) β
β - Configuration (DatadogConfiguration) β
β - Static entry point (DatadogSdk) β
ββββββββββββββββ¬ββββββββββββββββββ¬βββββββββββββββββββ
β β
ββββββββββΌββββββββ ββββββββΌβββββββββ
β Android β β iOS β
β Platform β β Platform β
β (13 packages) β β (In progress)β
ββββββββββββββββββ βββββββββββββββββ
Component Breakdown
1. Android Bindings (Datadog.MAUI.Android.Binding)
Modular Architecture: 13 separate NuGet packages
Core Packages (2):
Datadog.MAUI.Android.Internal- Internal utilitiesDatadog.MAUI.Android.Core- Core SDK functionality, initialization
Feature Packages (7):
Datadog.MAUI.Android.Logs- Logging functionalityDatadog.MAUI.Android.RUM- Real User MonitoringDatadog.MAUI.Android.Trace- APM tracingDatadog.MAUI.Android.NDK- Native crash reportingDatadog.MAUI.Android.SessionReplay- Session replayDatadog.MAUI.Android.WebView- WebView trackingDatadog.MAUI.Android.Flags- Feature flags
Integration Packages (4):
Datadog.MAUI.Android.OkHttp- OkHttp instrumentationDatadog.MAUI.Android.Trace.OpenTelemetry- OTel integrationDatadog.MAUI.Android.OkHttp.OpenTelemetry- OkHttp + OTelDatadog.MAUI.Android.GradlePlugin- Build-time tools
Dependency Pattern: Centralized core
- Core provides shared dependencies (Gson, Kotlin, AndroidX)
- Features reference core via
ProjectReference - Features declare
AndroidIgnoredJavaDependencyfor shared deps
2. iOS Bindings (Datadog.MAUI.iOS.Binding)
Status: In progress - implementing minimal manual bindings
Approach: Opt-in (expose only user-facing APIs)
- Generated bindings: 7,199 lines (294 interfaces)
- Manual bindings: ~250 lines (3 essential interfaces)
- Covers 100% of user needs with 97% less code
Frameworks (8):
- DatadogCore - SDK initialization
- DatadogRUM - RUM monitoring
- DatadogLogs - Logging
- DatadogTrace - Tracing
- DatadogSessionReplay - Session replay
- DatadogCrashReporting - Crash reports
- DatadogWebViewTracking - WebView tracking
- DatadogInternal - Internal utilities
3. Main Plugin (Datadog.MAUI.Plugin)
Status: Design complete, implementation pending
Purpose: Cross-platform abstraction layer
Features:
- Unified API across iOS and Android
- Dependency injection support
- Configuration builder pattern
- Platform-specific implementations
Directory Structure
dd-sdk-maui/
βββ Datadog.MAUI.Android.Binding/ # Android native bindings (13 packages)
β βββ dd-sdk-android-internal/
β βββ dd-sdk-android-core/
β βββ dd-sdk-android-logs/
β βββ dd-sdk-android-rum/
β βββ dd-sdk-android-trace/
β βββ dd-sdk-android-ndk/
β βββ dd-sdk-android-session-replay/
β βββ dd-sdk-android-webview/
β βββ dd-sdk-android-flags/
β βββ dd-sdk-android-okhttp/ # Integration packages
β βββ dd-sdk-android-trace-otel/
β βββ dd-sdk-android-okhttp-otel/
β βββ dd-sdk-android-gradle-plugin/
β βββ Datadog.MAUI.Android.Binding.csproj # Meta-package
β
βββ Datadog.MAUI.iOS.Binding/ # iOS native bindings (in progress)
β βββ DatadogCore/
β βββ DatadogRUM/
β βββ DatadogLogs/
β βββ DatadogTrace/
β βββ DatadogSessionReplay/
β βββ DatadogCrashReporting/
β βββ DatadogWebViewTracking/
β
βββ Datadog.MAUI.Plugin/ # Cross-platform plugin (planned)
β βββ Datadog.MAUI.Plugin.csproj
β βββ IDatadogSdk.cs
β βββ DatadogConfiguration.cs
β βββ Platforms/
β β βββ Android/
β β βββ iOS/
β βββ README.md
β
βββ samples/DatadogMauiSample/ # Sample application
β βββ DatadogMauiSample.csproj
β βββ MauiProgram.cs
β βββ Platforms/
β β βββ Android/
β β βββ iOS/
β βββ README.md
β
βββ scripts/ # Build and automation scripts
β βββ pack.sh # Master build script
β βββ map-maven-to-nuget.sh # Dependency mapping
β βββ validate-android-artifacts.sh
β βββ check-nuget-versions.sh
β βββ update-sdk-version.sh
β
βββ .github/workflows/ # CI/CD pipelines
β βββ build-all.yml # Master workflow
β βββ build-android.yml # Android-specific
β βββ build-ios.yml # iOS-specific
β βββ publish-to-nuget.yml # Package publishing
β βββ check-sdk-updates.yml # Version monitoring
β
βββ docs/ # Documentation
β βββ README.md # Documentation index
β βββ PROJECT_GUIDE.md # This file
β βββ ANDROID_DEPENDENCIES.md # Android dependency guide
β βββ ANDROID_INTEGRATION_PACKAGES.md
β βββ IOS_BINDING_STRATEGY.md
β βββ SCRIPTS_OVERVIEW.md
β βββ WORKFLOW_ARCHITECTURE.md
β βββ PACKAGING_ARCHITECTURE.md
β βββ _reference/ # Historical docs
β
βββ Directory.Build.props # Centralized MSBuild properties
βββ Directory.Packages.props # Centralized NuGet versions
βββ global.json # .NET SDK version pinning
βββ NuGet.Config # NuGet configuration
βββ README.md # Main project README
Build System
Package Structure
3-Tier Architecture:
- Module Packages - Individual binding packages
- Meta Packages - Dependency-only packages (Datadog.MAUI.Android.Binding)
- Main Plugin - Cross-platform wrapper (future)
Build Process
Local Build:
./scripts/pack.sh
What happens:
- Builds all Android modules in dependency order
- Packs into NuGet packages (.nupkg)
- Places in
./artifacts/directory - Supports multi-framework targeting
CI/CD Pipeline:
- build-android.yml - Builds Android packages
- Separate builds for net9.0-android and net10.0-android
- Combines into multi-framework packages
- Tests with sample app
- build-ios.yml - Builds iOS packages (planned)
- build-all.yml - Master orchestrator
- publish-to-nuget.yml - Publishes to NuGet.org
Version Management
Centralized in Directory.Build.props:
<DatadogSdkVersion>3.5.0</DatadogSdkVersion>
<PackageVersion>3.5.0</PackageVersion>
Centralized in Directory.Packages.props:
<PackageVersion Include="Xamarin.Kotlin.StdLib" Version="2.3.0.1" />
<PackageVersion Include="GoogleGson" Version="2.11.0" />
Update Process:
./scripts/update-sdk-version.sh 3.6.0
Technical Decisions
1. Modular Package Architecture
Decision: Create separate NuGet packages for each feature
Rationale:
- Users opt-in to features they need
- Smaller app size (no unused code)
- Matches upstream SDK structure
- Easier to maintain and update
Alternative Considered: Single βfatβ package with everything
Why Not: Bloats app size, forces users to include unused features
2. AndroidMavenLibrary vs Manual AARs
Decision: Use AndroidMavenLibrary for automatic Maven downloads
Rationale:
- Automatic transitive dependency resolution
- No manual AAR management
- Easier to update versions
- Standard .NET Android approach
Alternative Considered: Manually download and embed AARs
Why Not: Manual process, harder to maintain, no dependency resolution
3. Centralized Dependency Management
Decision: Core provides shared dependencies, features consume
Rationale:
- Prevents duplicate Java classes
- Single source of truth for versions
- Transitive via ProjectReference
- Avoids D8/R8 compilation errors
Alternative Considered: Each module manages its own dependencies
Why Not: Causes duplicate class errors, version conflicts
4. Directory.Packages.props for Versions
Decision: Central Package Management (CPM) for all NuGet versions
Rationale:
- Single file for all version numbers
- Prevents version conflicts
- Easier to audit and update
- MSBuild best practice
Alternative Considered: Versions in each .csproj
Why Not: Hard to maintain consistency, prone to conflicts
5. iOS Minimal Manual Bindings
Decision: Create clean user-facing bindings, not fix all generated code
Rationale:
- 97% less code (250 lines vs 7,199)
- Exposes only what users need
- Easier to document and maintain
- Follows opt-in philosophy
Alternative Considered: Fix all 42 errors in Objective Sharpie output
Why Not: Exposes 97% internal APIs, high maintenance burden
Key Metrics
Android Bindings
- Packages: 13 (2 core + 7 features + 4 integrations)
- Target Frameworks: net9.0-android, net10.0-android
- Build Status: 0 errors, 0 warnings (critical)
- Maven Artifacts: Automatically downloaded
- Shared Dependencies: 3 (Gson, Kotlin, Annotations)
iOS Bindings
- Frameworks: 8 (Core, RUM, Logs, Trace, SessionReplay, CrashReporting, WebView, Internal)
- Target Frameworks: net8.0-ios, net9.0-ios, net10.0-ios (planned)
- Generated Code: 684 types (7,199 lines) β Manual: 3 types (~250 lines)
- Coverage: 100% of user-facing APIs
Build System
- Scripts: 10 automation scripts
- Workflows: 6 GitHub Actions workflows
- Build Time: ~5 minutes (first), ~2 minutes (cached)
- Artifacts: .nupkg packages in
./artifacts/
Related Documentation
- Android Dependencies - Complete dependency guide
- Android Integration Packages - Optional integrations
- iOS Binding Strategy - iOS implementation approach
- Scripts Overview - Build automation details
- Workflow Architecture - CI/CD pipeline
- Packaging Architecture - NuGet structure
- Unified API Design - Cross-platform API spec
Last Updated: 2026-01-20