{"id":16980010,"url":"https://github.com/vaibhav2002/newsgo","last_synced_at":"2025-03-22T15:30:37.296Z","repository":{"id":64867275,"uuid":"571660723","full_name":"Vaibhav2002/NewsGo","owner":"Vaibhav2002","description":"NewsGo - Your daily shot of news on the Go. NewsGo is a Kotlin Multiplatform Mobile Application for Android and iOS.","archived":false,"fork":false,"pushed_at":"2023-01-05T12:57:18.000Z","size":63689,"stargazers_count":46,"open_issues_count":2,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-18T12:25:48.616Z","etag":null,"topics":["android","ios-app","jetpack-compose","kotlin","kotlin-multiplatform","opensource-projects","swift"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Vaibhav2002.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-11-28T15:58:42.000Z","updated_at":"2024-12-24T19:38:23.000Z","dependencies_parsed_at":"2023-02-04T06:46:43.018Z","dependency_job_id":null,"html_url":"https://github.com/Vaibhav2002/NewsGo","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vaibhav2002%2FNewsGo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vaibhav2002%2FNewsGo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vaibhav2002%2FNewsGo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vaibhav2002%2FNewsGo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Vaibhav2002","download_url":"https://codeload.github.com/Vaibhav2002/NewsGo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244978335,"owners_count":20541836,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","ios-app","jetpack-compose","kotlin","kotlin-multiplatform","opensource-projects","swift"],"created_at":"2024-10-14T01:48:31.205Z","updated_at":"2025-03-22T15:30:32.281Z","avatar_url":"https://github.com/Vaibhav2002.png","language":"Kotlin","funding_links":["https://www.buymeacoffee.com/VaibhavJaiswal"],"categories":[],"sub_categories":[],"readme":"![](graphics/banners/gif/NewsGO-Banner.gif)\n\n# **News Go** -  Your daily shot of news on the go 🚀 \u003cbr\u003e\n\n## About NewsGo\n**NewsGo** is a news feed application built using Kotlin Multiplatform Mobile. NewsGo currently offers **Android** and **iOS** Applications with Desktop and Website support to be added soon.\n\n- Material You based theming with dynamic color support in Android App\n- Support for both dark and light themes. 🌗\n- Clean Code Quality with best practices, great for learning\n- World Wide News Support\n\u003cbr\u003e\n\n## Android App \n![Android Banner](graphics/banners/gif/News-GO-Android-Banner.gif)\n## iOS App\n![iOS Banner](graphics/banners/gif/News-GO-IOS-Banner.gif)\n\n# Application Install\n\n***You can Install and test latest NewsGo app from below 👇***\n\n[![NewsGo](https://img.shields.io/badge/NewsGo✅-APK-red.svg?style=for-the-badge\u0026logo=android)](https://github.com/Vaibhav2002/NewsGo/releases)\n\nFor iOS App, please clone the project and build it, or if possible contribute the installable file 😅\n\n## Setup\n- Clone the repository on your machine.\n- Create account on [News Api](https://newsapi.org) and get your api key\n- If you want crash and analytics reporting, create a project on Firebase, enable crashlytics and analytics and paste the `google.services.json` file in `androidApp` directory for android else remove the firebase dependencies from android and project gradle files.\n\nOpen Secrets.kt and add your api key\n\n```kotlin\nobject Secrets {\n    const val API_KEY = \"\" // your api key here\n}\n```\n\n## App Features\n- Get all the latest news, with options to view from categories like Sports, Tech and many more \n- Save articles to view them offline\n- Search from millions of articles and read whatever you want\n- Read News from all around the world with Country Specific News\n\n## ScreenShots 📷\n\n### Android\n\n|   |   |   |   |\n|---|---|---|---|\n| ![HomeScreen](graphics/screenshots/android/HomeScreen-Android.jpeg)  | ![SavedScreen](graphics/screenshots/android/SavedScreen-Android.jpeg)  | ![Seacrch Screen](graphics/screenshots/android/SearchScreen-Android.jpeg)  | ![ArticleScreen](graphics/screenshots/android/ArticleDetail-Android.jpeg) |\n\n### iOS\n\n|   |   |   |   |\n|---|---|---|---|\n| ![HomeScreen](graphics/screenshots/iOS/HomeScreen-iOS.png)  | ![SavedScreen](graphics/screenshots/iOS/SavedScreen-iOS.png)  | ![Seacrch Screen](graphics/screenshots/iOS/SearchScreen-iOS.png)  | ![ArticleScreen](graphics/screenshots/iOS/DetailScreen-IOS.png)\n\n\n## Technical Details 💻\n\n### Shared\n- NewsGo's codebase follows [Android's recommended architecture](https://developer.android.com/topic/architecture?gclid=Cj0KCQiAtbqdBhDvARIsAGYnXBOC7uGj6xlSxw5j1p8LtrKKOIgT_HlMrmpW9YV6mn3-4HTbfbV-5SgaAvfKEALw_wcB\u0026gclsrc=aw.ds)\n- **Shared ViewModels** as well, so the only thing which is not shared is the UI.\n- **Reactive data management** using Kotlin Flows which makes state auto-update when any changes happen in data.\n- **Asychronous** handling of data using Kotlin Coroutines.\n- NewsGo supports offline caching so you dont have to look at an empty screen while loading 😄\n- NewsGo's code follows all the best practices and software development principles like SOLID which makes it a very good learning resource for beginners.\n- Code is properly linted using Kt-lint.\n\n### Android\n- NewsGo android app is built using Kotlin.\n- App User Interface is built using Jetpack Compose. No more XML 😜\n- Code follows Dependency Injection practices using Hilt.\n- NewsGo's codebase follows [Android's recommended architecture](https://developer.android.com/topic/architecture?gclid=Cj0KCQiAtbqdBhDvARIsAGYnXBOC7uGj6xlSxw5j1p8LtrKKOIgT_HlMrmpW9YV6mn3-4HTbfbV-5SgaAvfKEALw_wcB\u0026gclsrc=aw.ds)\n- Material 3 based theming with dynamic colors based on your phone's wallpaper\n\n### iOS \n- NewsGo iOS app is built using Swift.\n- User Inteface is built using **Swift UI**\n- iOS 16 bases theming.\n\n\n## Built With 🛠\n- [Kotlin](https://kotlinlang.org/) - First class and official programming language for Android development.\n- [Kotlin Multiplatform Mobile](https://kotlinlang.org/lp/mobile/) - Kotlin Multiplatform Mobile is an SDK for iOS and Android app development. It offers all the combined benefits of creating cross-platform and native apps.\n- [Swift](https://developer.apple.com/swift/) - Swift is a powerful and intuitive programming language for iOS, iPadOS, macOS, tvOS, and watchOS.\n- [Swift UI](https://developer.apple.com/xcode/swiftui/) - SwiftUI helps you build great-looking apps across all Apple platforms with the power of Swift — and surprisingly little code.\n- [Coroutines](https://kotlinlang.org/docs/reference/coroutines-overview.html) - For asynchronous and more..\n- [Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/) - A cold asynchronous data stream that sequentially emits values and completes normally or with an exception.\n - [StateFlow](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow) - StateFlow is a state-holder observable flow that emits the current and new state updates to its collectors.\n - [SharedFlow](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow) - A SharedFlow is a highly-configurable generalization of StateFlow.\n- [Android Architecture Components](https://developer.android.com/topic/libraries/architecture) - Collection of libraries that help you design robust, testable, and maintainable apps.\n  - [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel) - Stores UI-related data that isn't destroyed on UI changes.\n- [Dependency Injection](https://developer.android.com/training/dependency-injection) - \n  - [Hilt-Dagger](https://dagger.dev/hilt/) - Standard library to incorporate Dagger dependency injection into an Android application.\n  - [Hilt-ViewModel](https://developer.android.com/training/dependency-injection/hilt-jetpack) - DI for injecting `ViewModel`.\n- [Timber](https://github.com/JakeWharton/timber) - A simple logging library for android.\n- [Coil](https://github.com/coil-kt/coil) - An image loading library for Android backed by Kotlin Coroutines.\n- [Material 3 Android](https://developer.android.com/jetpack/androidx/releases/compose-material3) - Material 3 components for Android in Jetpack compose\n- [Kotlin Serialization](https://kotlinlang.org/docs/serialization.html) - Kotlin's own Serialization Api.\n- [Kotlin DateTime](https://github.com/Kotlin/kotlinx-datetime) - A multiplatform Kotlin library for working with date and time.\n- [SQL Delight](https://cashapp.github.io/sqldelight/1.5.4/) - SQLDelight generates typesafe kotlin APIs from your SQL statements.\n- [Ktor Client](https://ktor.io/docs/getting-started-ktor-client-multiplatform-mobile.html) - Create asynchronous client and server applications. Anything from microservices to multiplatform HTTP client apps in a simple way.\n- [News Api](https://newsapi.org) - Public API to get news data\n\n## Package Structure\n\n### Shared\n    \n    dev.vaibhav.newsapp     # Root Package\n    .\n    ├── data                # For data handling.\n    |   ├── local           # Database and Local Datasources\n    |   ├── remote          # Remote DataSources\n    │   ├── model           # Model data classes and mappers, both remote and local entities of Data Layer\n    │   └── repo            # Repository Implementations\n    |\n    ├── domain              # Domain Layer to abstract data layer details from UI   \n    |   ├── models          # Model Data Classes for Domain Layer\n    │   ├── mappper         # Mappers from Data layer models to Domain Layer models\n    |   ├── usecases        # Use-Case Classes for business logic\n    |   └── repo            # Repository Definitions\n    |\n    ├── presentation        # Presentation Layer for UI State and Shared View Model\n    |   ├── article         # State and ViewModel for Article Detail Screen. \n    |   ├── saved           # State and ViewModel for Saved Articles Screen. \n    |   ├── home            # State and ViewModel for Home Screen. \n    |   └── search          # State and ViewModel for Search Screen.\n    |\n    └── utils               # Utility Classes / Kotlin extensions\n\n    sqldelight.database     # Database Package containing all SQL Queries\n\n### Android App\n\n    dev.vaibhav.newsapp.android\n    .\n    ├── di                  # Dependency Injection             \n    │   └── module          # DI Modules\n    |\n    ├── presentation        # UI/View layer\n    |   ├── components      # All UI Components\n    |   ├── screens         # All App Screens \n    |   └── theme           # Theming classes\n    |\n    └── utils               # Utility Classes / Kotlin extensions\n\n### iOS App\n    dev.vaibhav.newsapp.iosApp\n    .\n    ├── ui \n        ├── components      # Ui Components            \n        └── screens         # App Screens\n\n\n## Architecture\nThis app uses [***MVVM (Model View View-Model)***](https://developer.android.com/jetpack/docs/guide#recommended-app-arch) architecture.\n\n![](https://developer.android.com/topic/libraries/architecture/images/final-architecture.png)\n  \n\n---\n\n## If you like my projects and want to support me to build more cool open source projects\n  \n[![\"Buy Me A Coffee\"](https://www.buymeacoffee.com/assets/img/custom_images/yellow_img.png)](https://www.buymeacoffee.com/VaibhavJaiswal)\n---\n\n## Contact\nIf you need any help, you can connect with me.\n\nVisit:- [Vaibhav Jaiswal](https://vaibhavjaiswal.vercel.app/#/)\n  \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaibhav2002%2Fnewsgo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvaibhav2002%2Fnewsgo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaibhav2002%2Fnewsgo/lists"}