Skip to content

Contributing to AEDevLens

First off, thank you for considering contributing! πŸŽ‰

Table of Contents

Code of Conduct

This project follows our Code of Conduct. By participating, you agree to uphold this code.

Getting Started

Prerequisites

  • JDK 17+
  • Android Studio Ladybug or later / Fleet
  • Xcode 15+ (for iOS targets)
  • Kotlin 2.3.0+

Development Setup

# Clone the repository
git clone https://github.com/abdo-essam/AEDevLens.git
cd AEDevLens

# Build the project
./gradlew build

# Run tests
./gradlew allTests

# Run the sample app (Android)
./gradlew :sample:composeApp:installDebug

# Check code formatting
./gradlew spotlessCheck

# Fix code formatting
./gradlew spotlessApply

# Generate API docs
./gradlew dokkaGeneratePublicationHtml

# Verify binary compatibility
./gradlew apiCheck

How to Contribute

πŸ› Reporting Bugs

  • Use the Bug Report template
  • Include: KMP version, platform, steps to reproduce, expected vs actual behavior

πŸ’‘ Suggesting Features

  • Use the Feature Request template
  • Describe the use case, not just the solution

πŸ”§ Submitting Changes

  • Fork the repository
  • Create a feature branch: git checkout -b feat/my-feature
  • Make your changes
  • Add/update tests
  • Run the full check: ./gradlew check
  • Commit using Conventional Commits
  • Push and open a Pull Request

Pull Request Process

  • Fill out the PR template completely
  • Ensure CI passes β€” all checks must be green
  • One approval required from a maintainer
  • Squash merge is preferred for clean history
  • Update CHANGELOG.md under [Unreleased]

Coding Standards

Kotlin Style

  • Follow Kotlin Coding Conventions
  • Use explicitApi() β€” all public APIs need visibility modifiers
  • Mark internal APIs with internal keyword
  • KDoc on all public classes, functions, and properties

Commit Conventions

We use Conventional Commits:

feat: add network inspection plugin
fix: resolve theme bleed into host app
docs: update plugin creation guide
test: add LogStore unit tests
refactor: extract log filtering to separate class
chore: update Kotlin to 2.3.0
perf: cache LogEntry computed properties
ci: add iOS build to CI pipeline

Architecture Rules

  • Plugins must implement UIPlugin or DataPlugin
  • No Android-specific imports in commonMain
  • All state exposed as StateFlow (no LiveData)
  • Compose UI uses Material3 exclusively
  • Keep the public API surface minimal

Architecture Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              AEDevLensProvider           β”‚  ← Compose entry point
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚              AEDevLens                  β”‚  ← Core engine
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ LogsPluginβ”‚ (Your   β”‚  DataPlugin       β”‚  ← Plugin system
β”‚ (UIPlugin)β”‚  Plugin) β”‚  (headless)       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚              LogStore / DataStore        β”‚  ← Storage layer
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜