Raccoon/README.md

137 lines
6.4 KiB
Markdown
Raw Normal View History

2023-09-03 21:43:36 +02:00
<div align="center">
2023-09-23 22:39:51 +02:00
<img src="https://img.shields.io/badge/Kotlin-1.9.10-7f52ff?logo=kotlin" />
<img src="https://img.shields.io/badge/platforms-Android,iOS-green" />
2023-09-30 22:32:17 +02:00
<img src="https://img.shields.io/badge/Jetpack_Compose-1.5.2-3e7fea?logo=jetpackcompose" />
2023-09-26 18:39:49 +02:00
<img src="https://img.shields.io/github/license/diegoberaldin/RaccoonForLemmy" />
2023-09-03 21:43:36 +02:00
</div>
<br />
<div align="center">
2023-09-26 18:39:49 +02:00
<img src="https://github.com/diegoberaldin/RaccoonForLemmy/assets/2738294/6785188f-9c2a-4622-ab6b-5aa116d27c31" width="250" height="auto" />
2023-09-03 21:43:36 +02:00
</div>
2023-09-26 18:39:49 +02:00
# Raccoon for Lemmy
2023-08-04 15:18:57 +02:00
2023-08-04 00:04:07 +02:00
A Kotlin Multiplatform Mobile client for Lemmy.
<div align="center">
<table>
<tr>
2023-09-22 13:30:52 +02:00
<td><!-- Home -->
2023-09-26 18:39:49 +02:00
<img src="https://github.com/diegoberaldin/RaccoonForLemmy/assets/2738294/01b3f04b-3900-46dc-b835-efc11c89ab63" width="310" />
2023-08-04 00:04:07 +02:00
</td>
2023-09-22 13:30:52 +02:00
<td><!-- Post detail -->
2023-09-26 18:39:49 +02:00
<img src="https://github.com/diegoberaldin/RaccoonForLemmy/assets/2738294/c303237d-b5df-40bd-acc6-419aeed8de10" width="310" />
2023-09-06 08:22:21 +02:00
</td>
</tr>
<tr>
2023-09-22 13:30:52 +02:00
<td><!-- Explore -->
2023-09-26 18:39:49 +02:00
<img src="https://github.com/diegoberaldin/RaccoonForLemmy/assets/2738294/e836c063-f85c-488d-b26a-5aa14a49ec2b" width="310" />
2023-09-06 08:22:21 +02:00
</td>
2023-09-22 13:30:52 +02:00
<td><!-- Community detail -->
2023-09-26 18:39:49 +02:00
<img src="https://github.com/diegoberaldin/RaccoonForLemmy/assets/2738294/e9174244-e0bf-4bcc-bed5-6332e807ce60" width="310" />
2023-09-06 08:22:21 +02:00
</td>
</tr>
<tr>
2023-09-22 13:30:52 +02:00
<td><!-- Inbox -->
2023-09-26 18:39:49 +02:00
<img src="https://github.com/diegoberaldin/RaccoonForLemmy/assets/2738294/1aaff3ac-205b-404d-b83e-ce3f4e267e75" width="310" />
2023-09-06 08:22:21 +02:00
</td>
2023-09-22 13:30:52 +02:00
<td><!-- Settings -->
2023-09-26 18:39:49 +02:00
<img src="https://github.com/diegoberaldin/RaccoonForLemmy/assets/2738294/3e5e95bf-d09e-4339-bdaf-4e56dedb2bf3" width="310" />
2023-08-04 00:04:07 +02:00
</td>
</tr>
</table>
</div>
2023-10-05 23:55:07 +02:00
Raccoon for Lemmy is a client for the federated aggregation and discussion platform Lemmy.
The project started as an exercise to play around with Kotlin Multiplatform (KMP) and Compose
multiplatform and gradually grew as a fully functional client with many features.
2023-08-04 00:04:07 +02:00
2023-10-05 23:55:07 +02:00
## Main features
2023-08-04 00:04:07 +02:00
2023-10-05 23:55:07 +02:00
- view post feed and comments with different listing and sort types;
- possibility to upvote and downvote (with optional swipe actions)
- community and user detail;
- user profile with one's own posts, comments and saved items;
- inbox with replies, mentions and direct messages;
- global search on Lemmy with different result types (all, posts, comments, user, communities);
- create new posts (with optional images);
- reply to post and comments;
- custom appearance (color scheme, font size, post layout);
- custom localization (more languages to be added in future versions);
- block users and communities;
- support for multiple accounts (and multiple instances) with account-specific settings;
- explore all the communities on a given instance in guest mode;
- multi-community (aggregation).
Most clients for Lemmy currently offer the first points (with various degrees of completion), so
there is nothing special about Raccoon for Lemmy, whereas the last ones are less common and are
directed to more picky users (like me) who like to explore the Lemmy ecosystem and want to be able
to group feed contents arbitrarily.
The application is under active development, so expect new features to be added (e.g. video support,
marking posts as read / hide read posts, etc.) and the layout is going to change and evolve (
hopefully for the better) over time.
## Why was the project started?
Because raccoons are so adorable, aren't they? 🦝🦝🦝
Joking apart, one of the main goals was to experiment with KMP and learn how to properly deal
with the challenges of a multiplatform environment.
Secondly, as a means to dig deeper inside Lemmy's internals and become more humble and patient
towards other apps whenever I found anything lacking or not implemented in an optimal way (according
to my taste).
In the third place, I felt that the Android ecosystem of Lemmy apps was a little "poor" with few
native apps (fewer open source), while the "market" is dominated by iOS and cross platform clients.
I love Kotlin, I love open source software and I love native development, so there was a "niche"
that needed to be filled.
Plus, developing a new client was an opportunity to add all the features that I needed and that
were "scattered" across different apps, e.g. I liked the feature richness of Liftoff (e.g. the
possibility to explore all the communities of an external instance), the multi-community feature of
Summit and the polished UI of Thunder and I wished I could have them all in the same app. If I saw a
feature of Lemmy (e.g. sorting by "Controversial") that not all apps offer, I could add it myself,
etc. This involves a high level of discretionality and personal taste, I know, but this project _is_
about experimenting and learning.
## Technologies used:
2023-08-04 00:04:07 +02:00
2023-08-04 15:18:57 +02:00
- [Koin](https://github.com/InsertKoinIO/koin) for dependency injection
- [Voyager](https://github.com/adrielcafe/voyager) for screen navigation
2023-09-28 13:48:10 +02:00
- [Ktor](https://github.com/ktorio/ktor) and [Ktorfit](https://github.com/Foso/Ktorfit) for
2023-08-04 15:18:57 +02:00
networking in conjunction with kotlinx-serialization for JSON marshalling
- [Moko resources](https://github.com/icerockdev/moko-resources) for resource management
- [Kamel](https://github.com/Kamel-Media/Kamel) for lazy image loading
- [Multiplatform settings](https://github.com/russhwolf/multiplatform-settings) for encrypted
preferences
- [Markdown](https://github.com/JetBrains/markdown) for markdown parsing
2023-09-28 13:48:10 +02:00
- [SQLDelight](https://github.com/cashapp/sqldelight)
and [SQLCipher](https://github.com/sqlcipher/sqlcipher) for local persistence
2023-08-04 00:04:07 +02:00
2023-09-22 13:30:52 +02:00
## Credits:
2023-08-04 15:18:57 +02:00
- the `core-api` module is heavily inspired
by [Jerboa for Lemmy](https://github.com/dessalines/jerboa)
2023-09-22 13:30:52 +02:00
- the `core-md` module is taken
2023-09-28 13:48:10 +02:00
from [Multiplatform Markdown Renderer](https://github.com/mikepenz/multiplatform-markdown-renderer)
with some adptations _a posteriori_
2023-09-22 13:30:52 +02:00
- the UI is inspired by the really great [Thunder](https://github.com/thunder-app/thunder) app
## Want to try it out?
2023-09-28 13:48:10 +02:00
- get it on [Obtanium](https://github.com/ImranR98/Obtainium/releases) by simply adding this
repo `https://github.com/diegoberaldin/RaccoonForLemmy`
2023-10-08 13:35:45 +02:00
## Want to leave your feedback or report a bug?
- open an issue on this
project's [issue tracker](https://github.com/diegoberaldin/RaccoonForLemmy/issues) to report bugs
or request new features
- create a post on the project's on [community](https://lemmy.world/c/raccoonforlemmy) on
Lemmy.world for broader questions, opinions, personal feedback, suggestions, insults or whatever
you feel like writing