An open API service indexing awesome lists of open source software.

https://github.com/livefasteattrashraccoon/raccoonforfriendica

A Kotlin Multiplatform client for Friendica
https://github.com/livefasteattrashraccoon/raccoonforfriendica

android-app compose-multiplatform compose-ui coroutines fediverse-client friendica jetbrains-compose kotlin kotlin-multiplatform mastodon-app mastodon-client mvi

Last synced: 19 days ago
JSON representation

A Kotlin Multiplatform client for Friendica

Awesome Lists containing this project

README

        


badge for Android
badge for build status
badge for unit test status
GitHub Downloads (all assets, all releases)
translation status
badge for code coverage
GitHub Release
IzzyOnDroid badge
F-Droid version badge


application icon

# RaccoonForFriendica

This is a client for the [Friendica](https://friendi.ca) federated social platform powered by
Kotlin Multiplatform (KMP) and Compose Multiplatform (CMP). The app is also compatible with Mastodon
and Mastodon-like backends.

The project is _heavily_ inspired by the **RaccoonForLemmy** app for Lemmy, which demonstrated
something like this can be achieved with this tech stack. This is why it retains its name, making
clear that the two projects are related and share a lot of common heritage and are maintained by
the same people with the same spirit.

## Want to try it out?

Here are some options to install the application on your device:



Get it on Obtainium banner
 
Get it on IzzyOnDroid banner
 
Get it on F-Droid
 
Get it on Google Play

If you use [IzzyOnDroid](https://apt.izzysoft.de/fdroid/) as a source in your FDroid app, you can easily
install the app, please refer to the link in the badge above to see the app details.

On the other hand, if you want to be able to test each pre-release build as soon as it is published
here on GitHub, apart from downloading the APKs from the
[Releases](https://github.com/LiveFastEatTrashRaccoon/RaccoonForFriendica/releases) page, you can also
use [Obtainium](https://github.com/ImranR98/Obtainium) and add a new app by inserting
`https://github.com/LiveFastEatTrashRaccoon/RaccoonForFriendica` as a source.

> [!TIP]
> On Obtainium, please make sure to check the "Include pre-releases" option: by doing so you will be able
> to receive all alpha and beta builds automatically.

## Want to leave your feedback or report a bug?


badge for website
badge for user manual
Matrix logo
Friendica logo

Reach out to the community on Friendica, Matrix or file a report in the [issue tracker](https://github.com/LiveFastEatTrashRaccoon/RaccoonForFriendica/issues) here on GitHub.

Alternatively, you can use the "Report an issue" in-app form you can find in the "App information" dialog
(it only works if you have enabled crash reporting). If none of the above methods fits your needs you can always write
an [email](mailto://[email protected]).

Please remember: every contribution is welcome and everyone's opinion matters here. This is a
community project, open source, ad-free and free of charge, and it belongs to us all so don't be
afraid to get involved.

And don't forget every 🦝's motto: `#livefasteattrash`.

## Would you like to improve the existing translation?



translation status on Weblate

Translators and localizators, your work is of paramount importance to make sure user experience is of high quality on the app! If you want to help with the localization,
please have a look at the project on Weblate and submit your changes.

## Screenshots





timeline screen with subscriptions


user detail screen




post detail screen


list of posts containing a followed hashtag




post editor


settings screen




explore screen on hashtags tab


notifications screen




group opened in forum mode


thread screen within a group with replies



## Why was the project started and why is it called like that?

Because raccoons are so adorable, aren't they? 🦝🦝🦝

Joking apart, one of the main goals was to experiment with Kotlin multiplatform (KMP) and Compose
Multiplatform (CMP). This project has a fair degree of complexity and allows to put under stress
the existing solutions and evaluate what they behave like with common tasks (image loading, HTML
rendering, file system and gallery access, networking, local database management, shared
preferences, navigation, access to resources like fonts/drawables/localization, etc.).

Secondly, the Android ecosystem for Friendica was a little lacking, especially with few native
apps (except [Dica](https://github.com/jasoncheng/dica),
whereas [Friendiqa](https://git.friendi.ca/lubuwest/Friendiqa) is a very _cute_ example of Qt on
Android, although not a traditional mobile app at all).
I ❤️ Kotlin, I ❤️ Free and Open Source Software and I ❤️ native app development, so there was a
niche that could be filled.

In the third place, we were wondering whether the adoption of a platform like Friendica could be
improved with a user-friendly and easy to use mobile app that abstracts away some of the
complications of the current web UI. This is why this app looks a lot like a plain Mastodon client
(and technically speaking _it is_ a Mastodon client) – adding on top of it some Friendica specific
features such as media gallery, circle management, direct messages and support for ActivityPub
groups.

With this respect, it takes a different approach compared to other existing solutions
like the feature-complete [Relatica](https://gitlab.com/mysocialportal/relatica) app, in trying
to look familiar to users with a UI they are already accustomed to, adding a thin layer on
top of it to support the additional features.

This project is all about experimenting and learning, so please be _patient_ if you find some bugs
or missing features.

## Development roadmap

The app is under ongoing development, here is a list of the features that are being implemented:

- [x] timeline view (Public/Local/Subscriptions) with ability to switch feed type
- [x] post detail, i.e. opening a conversation or reply in its context
- [x] user detail with ability to see posts/post and replies/pinned/media posts
- [x] login/logout to one's own instance
- [x] view notifications and check for unread items
- [x] view one's own profile
- [x] see trending posts/hashtags/news
- [x] see following recommendations
- [x] view all the posts containing a given hashtag
- [x] view followers and following of a given user
- [x] follow/unfollow other users
- [x] post actions (re-share, favorite, bookmark, dislike only on Friendica)
- [x] follow/unfollow hashtags
- [x] view list of one's own favorites/bookmarks
- [x] view list of one's own followed hashtags
- [x] view people who added as favorite/re-shared a given post
- [x] enable/disable notifications for other users
- [x] create a post/reply with image attachments and alt text
- [x] global search for users/posts/hashtags
- [x] open groups in "forum mode" (Friendica only) and see conversation as threads
- [x] edit/delete one's own posts
- [x] mute/unmute user and see list of muted users
- [x] block/unblock user and see list of blocked users
- [x] OAuth authentication (and HTTP Basic only on Friendica)
- [x] pin/unpin posts to one's own profile
- [x] manage one's own circles/lists
- [x] see polls (everywhere) and submit vote (Mastodon only)
- [x] manage one's own follow requests
- [x] support for post addons (spoilers everywhere, titles only on Friendica)
- [x] multi-account: add multiple accounts and switch between them
- [x] edit one's own profile (custom fields and images may not supported by the back-end)
- [x] direct messages (Friendica only)
- [x] photo gallery (Friendica only)
- [x] advanced media visualization (videos, GIFs, multiple images, audio)
- [x] scheduled posts and local drafts
- [x] create reports for posts/users
- [x] support custom emojis
- [x] event calendar (Friendica only, creating events is not supported via API)
- [x] pull notifications with background checks
- [x] (experimental) push notifications with UnifiedPush
- [x] instance announcements (Mastodon only)
- [x] customize application appearance and timeline layout (card, full, compact, distraction-free)
- [x] filter timeline content with stopwords or setting user-specific rate limits
- [x] add shortcuts to foreign instances to explore them in "guest mode"

## Technologies used

For the main app:

- [Calf](https://github.com/MohamedRejeb/Calf) for a web view implementation;
- [Coil](https://github.com/coil-kt/coil) for image loading;
- [Compose Multiplatform](https://www.jetbrains.com/lp/compose-multiplatform) for UI;
- [Compose ColorPicker](https://github.com/skydoves/colorpicker-compose) for custom color selection;
- [Compose Multiplatform Media Player](https://github.com/Chaintech-Network/ComposeMultiplatformMediaPlayer)
for video playback;
- [Connectivity](https://github.com/jordond/connectivity) to detect network state changes;
- [Kodein](https://github.com/kosi-libs/Kodein) for dependency injection;
- [Ksoup](https://github.com/MohamedRejeb/Ksoup) for HTML parsing;
- [Ktor](https://ktor.io/) and [Ktorfit](https://foso.github.io/Ktorfit) for networking;
- [Multiplatform Settings](https://github.com/russhwolf/multiplatform-settings) for encrypted shared
preferences;
- [MaterialKolor](https://github.com/jordond/MaterialKolor) for custom theme generation;
- [Moko-Permissions](https://github.com/icerockdev/moko-permissions) for runtime permission management;
- [Room](https://developer.android.com/kotlin/multiplatform/room) for local persistence;
- [Sentry](https://sentry.io) for crash reporting and user feedback collection;
- [UnifiedPush](https://unifiedpush.org) for push notifications;
- [Voyager](https://voyager.adriel.cafe/) for navigation;

For QA:

- [Kover](https://github.com/Kotlin/kotlinx-kover) to calculate test coverage;
- [Mokkery](https://mokkery.dev/) to generate mocks which can be used in the `commonTest`;
- [Robolectric](https://robolectric.org/) to run Compose tests quickly (even in the CI);
- [Turbine](https://github.com/cashapp/turbine) to test Flow (from kotlinx.coroutines);

## Disclaimer

> [!WARNING]
> This is an experimental project and some technologies it is build upon are still in pre-production
> stage, moreover this is a side-project developed by volunteers in their spare time, so use
> _at your own risk_.

You shouldn't expect a full-fledged and fully functional app; you should be prepared to occasional
failures, yet-to-implement features and areas where (a lot of) polish is needed.

Contributions are welcome and new feature requests will be evaluated depending on the available time.