Contributing to AEDevLens¶
First off, thank you for considering contributing! π
Table of Contents¶
- Code of Conduct
- Getting Started
- Development Setup
- How to Contribute
- Pull Request Process
- Coding Standards
- Architecture Overview
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
internalkeyword - 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
UIPluginorDataPlugin - 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
βββββββββββββββββββββββββββββββββββββββββββ