Thanks for your interest in contributing to AppInspect! This document outlines how to get started.
-
Clone the repository
git clone https://github.com/iCrazeiOS/AppInspect.git cd AppInspect -
Install dependencies
bun install
This also sets up Husky git hooks via the
preparescript. -
Run the app
bun run start
We use Biome for linting and formatting. The configuration is in biome.json.
| Setting | Value |
|---|---|
| Indentation | Tabs |
| Line width | 100 characters |
| Semicolons | Always |
| Quotes | Double quotes |
| Trailing commas | None |
| Arrow function parens | Always |
| Bracket spacing | Yes |
bun run check # Lint + format check
bun run check:fix # Auto-fix lint/format issues
bun run format # Format files in place
bun run lint # Lint onlyInstall the recommended Biome extension for format-on-save. Settings are in .vscode/settings.json.
Every commit runs through a pre-commit hook that:
- Auto-fixes lint/format issues (
bun run check:fix) - Re-stages modified files
- Runs lint check (
bun run check) - Runs TypeScript type check (
bun run typecheck) - Runs tests (
bun test)
If any step fails, the commit is aborted. Do not bypass with --no-verify.
Tests use bun:test. Run all tests with:
bun testTest files live in __tests__/ directories next to the code they test:
src/main/parser/__tests__/— parser unit testssrc/main/analysis/__tests__/— security scan testssrc/main/ipa/__tests__/— IPA extraction tests
When adding new features or fixing bugs, add or update corresponding tests.
- Branch from
masterand give your branch a descriptive name - Keep changes focused — one feature or fix per PR
- Write clear commit messages — describe what and why
- Add tests for new functionality
- Update documentation if adding user-facing features (README.md, CLAUDE.md)
- Ensure all checks pass — the pre-commit hook runs automatically
AppInspect is an Electron app with three processes:
- Main (
src/main/) — file I/O, binary parsing, analysis orchestration - Renderer (
src/renderer/) — vanilla TypeScript DOM manipulation - Preload (
src/preload/) — typed IPC bridge viawindow.api
Additionally:
- MCP (
src/mcp/) — standalone MCP server for AI agents - Shared (
src/shared/) — types shared across processes
See CLAUDE.md for detailed architecture documentation.
Please open an issue on GitHub with:
- A clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- App version and OS
By contributing, you agree that your contributions will be licensed under the same license as the project.