SlimImage is a comprehensive React Native mobile application designed to make image manipulation simple and efficient. Whether you need to compress large images, resize them for different platforms, convert between formats, or crop and rotate, SlimImage has you covered with an intuitive and beautiful interface.
Built with modern technologies including React Native, Expo, TypeScript, and MobX State Tree, SlimImage delivers a seamless experience for all your image editing needs directly on your mobile device.
- Auto Compression: Smart compression with three preset levels (Small, Medium, Large)
- File Size Targeting: Compress images to a specific file size
- Percentage-based: Reduce image size by a specified percentage
- Quality Control: Fine-tune image quality manually
- Percentage Scaling: Resize images by percentage (e.g., 80% of original)
- Pixel Dimensions: Set exact width and height in pixels
- Aspect Ratio Preservation: Maintain original image proportions
- Convert between popular formats: JPEG, PNG, WEBP
- Batch conversion support
- Preserve or strip EXIF data (configurable)
- Free-style cropping with gesture support
- Image rotation capabilities
- Intuitive cropping interface
- Real-time preview
- Process multiple images simultaneously
- Organized output in dedicated folders
- Smart file naming with timestamps
- Keep or remove EXIF metadata
- Preserve original image format
- Configurable output preferences
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- Yarn (recommended) or npm
- Expo CLI:
npm install -g expo-cli - For iOS development: Xcode (macOS only)
- For Android development: Android Studio
-
Clone the repository
git clone https://github.com/harshitsaini17/slimimage.git cd slimimage -
Install dependencies
yarn install # or npm install -
Install patches (if any)
yarn postinstall
yarn start
# or
npm startyarn android
# or
npm run androidyarn ios
# or
npm run iosyarn web
# or
npm run webslimimage/
βββ app/ # Main application code
β βββ components/ # Reusable UI components
β βββ screens/ # Screen components
β β βββ HomeScreen.tsx
β β βββ CompressImageScreen.tsx
β β βββ ResizeImageScreen.tsx
β β βββ ConvertImageScreen.tsx
β β βββ CropImageScreen.tsx
β βββ navigators/ # Navigation configuration
β βββ models/ # MobX State Tree models
β βββ services/ # API and external services
β βββ theme/ # Theming (colors, spacing, typography)
β βββ utils/ # Utility functions and hooks
β βββ i18n/ # Internationalization
β βββ app.tsx # App entry point
βββ assets/ # Static assets
β βββ icons/ # App icons
β βββ images/ # Images and graphics
βββ android/ # Android native code
βββ ios/ # iOS native code (when built)
βββ test/ # Test files
βββ .maestro/ # End-to-end tests
βββ ignite/ # Ignite CLI templates
- React Native (0.74.3) - Mobile app framework
- Expo (~51.0.8) - Development platform
- TypeScript (~5.5.3) - Type safety
- MobX State Tree (6.0.1) - State management
- MobX React Lite (4.0.7) - React bindings
- React Navigation (^6.0.2) - Navigation library
- React Navigation Native Stack - Stack navigator
- @bam.tech/react-native-image-resizer - Image resizing
- react-native-image-crop-picker - Cropping
- expo-image-manipulator - Image manipulation
- expo-image-picker - Image selection
- Tailwind CSS (twrnc) (^4.4.0) - Utility-first styling
- React Native Paper (^5.10.0) - Material Design components
- Lottie React Native - Animations
- @react-native-async-storage/async-storage - Local storage
- expo-file-system - File system access
- react-native-fs - File operations
- Reactotron - Debugging
- i18n-js - Internationalization
- date-fns - Date utilities
| Script | Description |
|---|---|
yarn start |
Start the Expo development server |
yarn android |
Run the app on Android |
yarn ios |
Run the app on iOS |
yarn web |
Run the app on web browser |
yarn test |
Run Jest tests |
yarn test:watch |
Run tests in watch mode |
yarn test:maestro |
Run Maestro end-to-end tests |
yarn lint |
Lint and format code |
yarn compile |
Type-check with TypeScript |
yarn format |
Format code with Prettier |
yarn build:android:prod |
Build production Android app |
yarn build:ios:prod |
Build production iOS app |
The app uses Expo configuration defined in app.json and app.config.ts. Key configurations include:
- App Name: Slim Image
- Bundle Identifier (iOS):
com.priyanshusaini.slimimage - Package Name (Android):
com.priyanshusaini.slimimage - Permissions: Camera Roll, Media Library, File System
EAS Build configurations are available in eas.json for:
- Development builds
- Production builds
- Simulator/emulator builds
TypeScript is configured via tsconfig.json with:
- Strict type checking enabled
- Path aliases support (
app/*,assets/*) - React Native and Expo type definitions
yarn testyarn test:watchyarn test:maestroFor Maestro setup, follow the Ignite Cookbook guide.
SlimImage uses a consistent design system with reusable components:
- Screen: Base screen wrapper with safe area handling
- Text: Themed text component with presets
- Icon: Flexible icon component
- Card: Container components with elevation
- CompressionCard: Specialized card for compression options
- TextField: Styled input fields
All components support the app's theming system and Tailwind CSS styling.
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m 'Add some amazing feature' - Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
- Follow the existing code style and conventions
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting PR
This project is licensed under the MIT License - see the LICENSE file for details.
Harshit Saini (@harshitsaini17)
- GitHub: github.com/harshitsaini17
- Built with Ignite by Infinite Red
- Uses React Native and Expo
- UI powered by React Native Paper
- Styling with Tailwind CSS (twrnc)
If you encounter any issues or have questions:
- Check the Issues page
- Create a new issue with detailed information
- Contact the maintainer through GitHub
Made with β€οΈ using React Native and Expo
β Star this repo if you find it helpful!