Organize your digital life, one link at a time
Features • Tech Stack • Getting Started • Building • Contributing
Linksi is a modern, Material Design 3 Android app that helps you save, organize, and rediscover links from anywhere. Save links from Chrome, YouTube, Twitter, Reddit, and any other app using the native Android share sheet. Built with Jetpack Compose for a smooth, responsive experience.
Perfect for researchers, content curators, developers, and anyone who finds too many interesting links and needs a better way to organize them.
- Save & Auto-Fetch: Save any URL with auto-fetched title, description, and favicon
- Share Sheet Integration: Appears in Android's native share menu from Chrome, YouTube, Twitter, Reddit, and more
- Custom Folders: Organize links into custom folders with custom icons and colors
- Full-Text Search: Search by title, domain, and description across all saved links
- Favorites & Status Tracking: Mark links as favorites and track read/unread status
- Multiple Views: Toggle between grid and list view layouts
- Smart Sorting: Sort by date, title, or domain — filter by favorites or unread
- Bulk Actions: Select multiple links to move or delete at once
- Trash Bin: Recover deleted links within 30 days before permanent deletion
- AI Link Organizer: Automatically categorize and move links into folders using AI
- Inbuilt Browser: Quick view and browse saved links without leaving the app
- Import/Export: Save links as JSON, CSV, or HTML — share your collection
- Browser Bookmarks Import: Import bookmarks from Chrome, Firefox, and Safari
- Reminders: Get notifications to review your saved links
- App Lock & Folder Lock: PIN or biometric authentication for sensitive links
- Material You Design: Dynamic color theming based on your device's wallpaper
- Dark Mode Support: Beautiful dark mode for comfortable viewing at any time
- Smooth Performance: Built with Jetpack Compose for responsive, fluid interactions
| Layer | Technology |
|---|---|
| UI Framework | Jetpack Compose, Material Design 3 |
| Architecture | MVVM + StateFlow |
| Database | Room Persistence Library |
| Dependency Injection | Hilt |
| Image Loading | Coil |
| Web Scraping | Jsoup |
| Navigation | Jetpack Compose Navigation |
| Async Operations | Kotlin Coroutines + Flow |
| Minimum SDK | API 26 (Android 8.0) |
| Target SDK | API 34 (Android 14) |
| Language | 100% Kotlin |
app/src/main/java/com/linksi/app/
├── data/
│ ├── db/
│ │ ├── Daos.kt # Database access objects
│ │ ├── Entities.kt # Room database entities
│ │ └── LinksDatabase.kt # Room database configuration
│ └── repository/
│ └── LinkRepository.kt # Data access abstraction layer
├── di/
│ └── AppModule.kt # Hilt dependency injection setup
├── domain/
│ └── model/
│ └── Models.kt # Domain models and data classes
├── ui/
│ ├── components/
│ │ ├── Dialogs.kt # Reusable dialog components
│ │ └── LinkCards.kt # Link display card components
│ ├── screens/
│ │ ├── FolderScreen.kt # Folder view implementation
│ │ ├── HomeScreen.kt # Main home screen UI
│ │ ├── HomeViewModel.kt # Home screen business logic
│ │ ├── InAppBrowser.kt # Built-in web browser
│ │ ├── SettingsScreen.kt # Settings & preferences UI
│ │ ├── SettingsViewModel.kt # Settings business logic
│ │ ├── ShareReceiverActivity.kt # Share intent handler
│ │ └── TopBar.kt # App bar and navigation
│ └── theme/
│ ├── Theme.kt # Material 3 theme configuration
│ └── Typography.kt # Text styles and typography
├── utils/
│ ├── ImportExportManager.kt # Import/export functionality
│ ├── MetadataFetcher.kt # URL metadata scraping logic
│ └── ...
├── LinksApplication.kt # Application class
└── MainActivity.kt # Main activity entry point
Before you begin, ensure you have the following installed:
- Android Studio: Hedgehog (2023.1.1) or newer
- JDK: Version 17 or later
- Android SDK: API level 34 with build tools
- Gradle: 8.4+ (automatically managed)
-
Clone the repository
git clone https://github.com/AsukaAzure/Linksi.git cd Linksi -
Open in Android Studio
- Launch Android Studio
- Select File → Open → Navigate to the Linksi folder
- Wait for Gradle to sync and index the project
-
Run the app
- Connect an Android device (API 26+) or start an emulator
- Select your device from the toolbar
- Click the Run button or press Shift + F10
./gradlew buildOutput: app/build/outputs/apk/debug/app-debug.apk
./gradlew assembleReleaseOutput: app/build/outputs/apk/release/app-release.apk
Note: For a signed release APK, configure your signing key in build.gradle or through Android Studio's build signing setup.
./gradlew test- Folder structure and organization
- Import/Export (JSON, CSV, HTML formats)
- Share sheet integration
- Built-in browser
- Reminders and notifications
- Trash bin with 30-day retention
- AI-powered link organization
- Security features (App Lock & Folder Lock)
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 your branch (
git push origin feature/amazing-feature) - Open a Pull Request with a clear description
- Follow Kotlin naming conventions and Android best practices
- Use Compose best practices for UI components
- Keep business logic in ViewModels
- Write meaningful commit messages
- Test your changes on multiple API levels
This project is licensed under the MIT License — see the LICENSE file for details.
- Built with Jetpack Compose
- Designed following Material Design 3 guidelines
- Database powered by Room
- Dependency injection with Hilt
Found a bug or have a feature request? Open an issue on GitHub.
Made with love using Kotlin & Jetpack Compose