A cross-platform EXIF viewer application supporting Android, HarmonyOS, Web, and Desktop (Tauri) platforms.
Your handy tool to view EXIF information of your photos! With this lightweight and simple app, you can effortlessly select any photo from your device and delve into its EXIF data. Gain insights into camera settings, date and time of capture, location, and much more. Whether you're a photography enthusiast or just curious about the technical details behind your images, PhotoChecker has got you covered.
![]() |
![]() |
![]() |
|---|
- Node.js >= 18.0.0
- pnpm >= 8.0.0
# Install dependencies
pnpm install
# Install and setup git hooks
pnpm prepare# Start Tauri development server
pnpm tauri:dev
# Build all projects
pnpm build
# Run all tests
pnpm test
# Lint all projects
pnpm lint
# Format all projects
pnpm formatPhotoChecker/
├── packages/ # Shared packages (future)
├── apps/ # Applications (future)
├── tauri/ # Tauri desktop application
├── android/ # Android native application
├── harmony/ # HarmonyOS application
├── web/ # Web application
├── package.json # Root workspace configuration
├── pnpm-workspace.yaml # pnpm workspace configuration
└── .gitignore # Git ignore rules
pnpm build- Build all projectspnpm dev- Start development servers for all projectspnpm test- Run all testspnpm lint- Lint all projectspnpm lint:fix- Fix linting issuespnpm format- Format all projectspnpm format:check- Check formattingpnpm typecheck- Type check all projectspnpm clean- Clean all node_modules and build outputs
pnpm tauri:dev- Start Tauri development serverpnpm tauri:build- Build Tauri applicationpnpm android:build- Build Android applicationpnpm harmony:build- Build HarmonyOS applicationpnpm web:build- Build and serve web application
- Location:
./tauri/ - Tech Stack: React, TypeScript, Vite, Tauri 2
- Commands:
pnpm tauri:dev,pnpm tauri:build
- Location:
./android/ - Tech Stack: Kotlin, Jetpack Compose
- Commands:
pnpm android:build
- Location:
./harmony/ - Tech Stack: ArkTS
- Commands:
pnpm harmony:build
- Location:
./web/ - Tech Stack: Static files with Docker
- Commands:
pnpm web:build
- Make changes to any platform-specific project
- Test locally using the development server for that platform
- Run linting with
pnpm lint - Format code with
pnpm format - Commit changes using the conventional commit format
- Test across platforms to ensure consistency
This monorepo uses conventional commits and automated tools for quality control:
- Use conventional commit format:
type(scope): description - Interactive commits: Use
pnpm commitfor guided commit creation - Commit validation: Commits are automatically validated with commitlint
feat: 新功能 (New features)fix: 修复 bug (Bug fixes)docs: 文档更新 (Documentation updates)style: 代码格式调整 (Code formatting changes)refactor: 重构 (Code refactoring)test: 增加测试 (Adding tests)build: 构建相关变动 (Build related changes)ci: CI/CD 配置变动 (CI/CD configuration changes)chore: 其他修改 (Other changes)revert: 回滚 (Reverting changes)
- pre-commit: Runs lint-staged to format and lint staged files
- commit-msg: Validates commit messages with commitlint
pnpm release: Creates a new release with changelogpnpm release:patch: Bump patch versionpnpm release:minor: Bump minor versionpnpm release:major: Bump major version
This monorepo uses pnpm workspaces for dependency management:
- Single lockfile:
pnpm-lock.yamlat root - Hoisting: Dependencies are shared between packages
- Efficient: Faster installs and less disk space
- Fork the repository
- Create a feature branch
- Make your changes
- Follow the commit message format
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.



