A cross-platform Fediverse client for micro-blogging services written in Flutter/Dart.

Overview

Kaiteki

CodeFactor Translation status

A 快適 (kaiteki) Fediverse client for microblogging instances, made with Flutter and Dart.

Currently, Kaiteki is still in a proof-of-concept/alpha stage, with simple Mastodon/Pleroma and Misskey support, future backends could follow. See "What's working, what's missing?".

Screenshots

Platforms & Releases

If you want to try out Kaiteki, there are automatic builds available for use.

Web
(recommended)
Windows Linux Android macOS iOS
Build status No CI/CD available yet.
Help us!
Not supported.
Binaries Visit web version Download latest binaries Download latest binaries
Packages / Installers No reliable packaging yet.
Help us!
AppImage

Help us package for more platforms!

What's working, what's missing?

Currently, Kaiteki only allows viewing timelines, making text posts and viewing users.

Most important API calls for Misskey, Mastodon/Pleroma are already implemented but need a UI implementation.

Other features that are missing are extensive settings, unit tests, and many other things. If you'd like to contribute, feel free to do so.

Compiling Kaiteki

Depending on your platform you might have to take extra steps. See this page for steps on compiling for desktop, and this page for steps on compiling for web.

flutter upgrade # upgrade flutter to its latest version
flutter pub get # get packages

# run (debug)
flutter run
# or build (release)
flutter build apk
flutter build windows
flutter build linux
flutter build web
# and so on...
Comments
  • Exception on deserialization of Misskey API response while probing instance

    Exception on deserialization of Misskey API response while probing instance

    I keep getting the error type Null is not a subtype of type 'bool' in type cast. It also can't detect my instance's software.

    Tried with stop.voring.me, misskey.ai, jigglypuff.club and snug.moe, none of them worked.

    Using app-release.apk from the latest git commit with flutter build apk.

    | | | | - | - | | Screenshot_20220522-202719.png | Screenshot_20220522-202708.png |

    bug api:misskey 
    opened by ThatOneCalculator 36
  • Material Design 3 (where/when possible)

    Material Design 3 (where/when possible)

    Components that are Material 3 ready should opt-in to Material Design 3 with useMaterial3.

    https://api.flutter.dev/flutter/material/ThemeData/useMaterial3.html

    Material 3 support in Flutter is currently in pretty early stages, but staying ahead of the curve on design can't hurt too much :)

    enhancement area:ui/ux 
    opened by ThatOneCalculator 15
  • Shows blank window on Linux when building from source.

    Shows blank window on Linux when building from source.

    Setup:

    • Build Kaiteki from source
    • Arch Linux x86_64
    • Wayland on wlroots (Hyprland)
    • Mesa drivers for AMD GPU
    Kaiteki/src/kaiteki/build/linux/x64/release on  master   ./kaiteki                      
    embedder.cc (958): 'FlutterEngineCreateAOTData' returned 'kInvalidArguments'. Invalid ELF path specified.
    
    ** (kaiteki:72655): WARNING **: 19:46:24.081: Failed to start Flutter engine: Failed to create AOT data
    

    This doesn't happen when running from the AppImage.

    bug platform:linux 
    opened by ThatOneCalculator 10
  • No replies on misskey instances

    No replies on misskey instances

    What happened?

    Replies dont load on my calckey instance (probably misskey specific, could be a calckey issue tho.) On Mastodon replies load without a problem.

    Expected behavior

    Display replies on misskey instances

    How to reproduce

    1. Open a post with reply count
    2. No replies are displayed

    What platform are you seeing the issue on?

    None

    Additional context

    No response

    bug api:misskey area:api 
    opened by lelehier 7
  • Add Japanese Language File(app_ja.arb)

    Add Japanese Language File(app_ja.arb)

    Hi, I'm a genuine programming novice committing to GitHub for the first time. I'm sure there are things I'm not good at, but thank you in advance for your patience.

    I am a native Japanese speaker and a Misskey user. I like Material You designs, and I am interested in Kaiteki using Flutter. That's why I made the file in Japanese. On my Android smartphone (Xiaomi 12S Ultra, MIUI 13, Android 12), I briefly confirmed that the file is now in Japanese, but the settings screen for the public scope of posts, etc. are still in English (The file has been changed, but it does not seem to be reflected on the screen.).

    Below are the difficulties I had in translating the file, since different types of instance backends are called differently. Although I know it is not perfect, I could not come up with a good translation at the moment. I don't know if this will be understood by speakers of other languages, but I'll write it down just in case.

    • ReNote(Misskey),Boost(Mastodon) -> I translated it as 拡散, which is a common Japanese word meaning "Spread".

    • Unlisted(Mastodon,Pleroma),Home(Misskey)->I had the hardest time deciding. I used both "Home" and "Unlisted" and decided on ホーム/Unlisted.

    I also tried to convey the same content with as few characters as possible, so that the overall UI would not break down. However, the login button on the login screen is still broken. I am sorry, but I do not have the knowledge and have not been able to fix it. Screenshot_2022-08-21-06-49-28-066_moe craftplacer kaiteki (Translated by DeepL.com)

    enhancement area:l10n 
    opened by digitalsp 7
  • Failed to create server socket

    Failed to create server socket

    Error Type

    SocketException

    Error Message

    SocketException: Failed to create server socket (OS Error: Failed to start accept), address = localhost, port = 8080

    Stack Trace

    #0      _NativeSocket.bind (dart:io-patch/socket_patch.dart:996)
    <asynchronous suspension>
    #1      serve (package:shelf/shelf_io.dart:51)
    <asynchronous suspension>
    #2      runOAuthServer (package:kaiteki/auth/login_functions.dart:30)
    <asynchronous suspension>
    #3      _LoginScreenState.handleOAuth (package:kaiteki/ui/auth/login/login_screen.dart:334)
    <asynchronous suspension>
    #4      MisskeyAdapter.login (package:kaiteki/fediverse/backends/misskey/adapter.dart:81)
    <asynchronous suspension>
    #5      _LoginScreenState.loginButtonPress (package:kaiteki/ui/auth/login/login_screen.dart:292)
    <asynchronous suspension>
    

    Additional information

    Platform: Windows ("Windows 11 Pro" 10.0 (Build 25169))

    I have two-factor authentication set up, so it may be an error due to that.

    bug platform:windows area:auth waiting-for-reoccurrance 
    opened by Hayao0819 6
  • Dynamic color palette doesn't change unless app is force-stopped and restarted

    Dynamic color palette doesn't change unless app is force-stopped and restarted

    What happened?

    If you change your device's color palette, the app stays on the old palette and needs to be force-stopped from Android's about menu and relaunched in order to have the new color palette.

    Expected behavior

    For the colors to change dynamically. Other Flutter apps that use the dynamic_color package like KitchenOwl don't have this problem.

    How to reproduce

    1. Open Kaiteki
    2. Change color palette on device

    What platform are you seeing the issue on?

    Android

    Additional context

    version 0.0.1

    moe.craftplacer.kaiteki versionCode 1672109666

    targetSdk 33 minSdk 18

    Installed: Dec 26, 2022; 10:53 AM Updated: Dec 27, 2022; 6:59 PM

    bug 
    opened by ThatOneCalculator 4
  • Request content type applied to body

    Request content type applied to body

    What happened?

    Tried to load tl, latest release

    #0      _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1383)
    #1      _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1250)
    #2      _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:915)
    #3      _parseJson (dart:convert-patch/convert_patch.dart:35)
    #4      JsonDecoder.convert (dart:convert/json.dart:612)
    #5      JsonCodec.decode (dart:convert/json.dart:216)
    #6      jsonDecode (dart:convert/json.dart:155)
    #7      new MisskeyClient.<anonymous closure> (package:kaiteki/fediverse/backends/misskey/client.dart:34)
    #8      KaitekiClient.sendRequest (package:kaiteki/http/client.dart:47)
    #9      MisskeyClient.getNotifications (package:kaiteki/fediverse/backends/misskey/client.dart:390)
    #10     MisskeyAdapter.getNotifications (package:kaiteki/fediverse/backends/misskey/adapter.dart:415)
    #11     NotificationService.build (package:kaiteki/fediverse/services/notifications.dart:41)
    #12     NotificationServiceProvider.runNotifierBuild (package:kaiteki/fediverse/services/notifications.g.dart:69)
    #13     AsyncNotifierProviderElement.create.<anonymous closure>.<anonymous closure> (package:riverpod/src/async_notifier/base.dart:343)
    #14     Result.guard (package:riverpod/src/result.dart:18)
    #15     FutureHandlerProviderElementMixin.handleFuture (package:riverpod/src/async_notifier/base.dart:223)
    #16     AsyncNotifierProviderElement.create.<anonymous closure> (package:riverpod/src/async_notifier/base.dart:342)
    #17     ResultData.when (package:riverpod/src/result.dart:68)
    #18     AsyncNotifierProviderElement.create (package:riverpod/src/async_notifier/base.dart:337)
    #19     ProviderElementBase.buildState (package:riverpod/src/framework/element.dart:421)
    #20     ProviderElementBase.mount (package:riverpod/src/framework/element.dart:243)
    #21     _StateReader._create (package:riverpod/src/framework/container.dart:49)
    #22     _StateReader.getElement (package:riverpod/src/framework/container.dart:37)
    #23     ProviderContainer.readProviderElement (package:riverpod/src/framework/container.dart:503)
    #24     ProviderBase.addListener (package:riverpod/src/framework/provider_base.dart:79)
    #25     ProviderContainer.listen (package:riverpod/src/framework/container.dart:307)
    #26     ConsumerStatefulElement.watch.<anonymous closure> (package:flutter_riverpod/src/consumer.dart:556)
    #27     _LinkedHashMapMixin.putIfAbsent (dart:collection-patch/compact_hash.dart:527)
    #28     ConsumerStatefulElement.watch (package:flutter_riverpod/src/consumer.dart:549)
    #29     _MainScreenState.getTabs.<anonymous closure> (package:kaiteki/ui/main/main_screen.dart:69)
    #30     _MainScreenState._navigationDestinations (package:kaiteki/ui/main/main_screen.dart:379)
    #31     _MainScreenState._getNavigationBar (package:kaiteki/ui/main/main_screen.dart:327)
    #32     _MainScreenState.build.<anonymous closure> (package:kaiteki/ui/main/main_screen.dart:135)
    #33     BreakpointBuilder.build.<anonymous closure> (package:breakpoint/breakpoint.dart:191)
    #34     _LayoutBuilderElement._layout.layoutCallback (package:flutter/src/widgets/layout_builder.dart:119)
    #35     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2605)
    #36     _LayoutBuilderElement._layout (package:flutter/src/widgets/layout_builder.dart:153)
    #37     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:2246)
    #38     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:1035)
    #39     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:2246)
    #40     RenderConstrainedLayoutBuilder.rebuildIfNecessary (package:flutter/src/widgets/layout_builder.dart:228)
    #41     _RenderLayoutBuilder.performLayout (package:flutter/src/widgets/layout_builder.dart:316)
    #42     RenderObject.layout (package:flutter/src/rendering/object.dart:2135)
    #43     RenderBox.layout (package:flutter/src/rendering/box.dart:2418)
    #44     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:120
    

    What platform are you seeing the issue on?

    Android

    Additional context

    Likely related to http refactor

    bug 
    opened by ThatOneCalculator 3
  • Wrong fallback language on non-English system

    Wrong fallback language on non-English system

    What happened?

    I run it on Linux and its language is not what I can read.

    My environment variable LANG is ja_JP.UTF-8, which is not supported. And tried to change it and LC_ALL to C but nothing has been changed.

    I want to know how to change language.

    Expected behavior

    I think all applications should be English if it does not support the system's language.

    To Reproduce

    No response

    What platform are you seeing the issue on?

    • [ ] Android
    • [ ] Windows
    • [X] Linux
    • [ ] Web

    Additional context

    image

    In addition if I can know it, I try to translate it to Japanese and send pull req

    bug 
    opened by Hayao0819 3
  • sessionToken not initialized when generating authorization URL fails

    sessionToken not initialized when generating authorization URL fails

    Error Type

    LateError

    Error Message

    LateInitializationError: Local 'sessionToken' has not been initialized.

    Stack Trace

    #0      LateError._throwLocalNotInitialized (dart:_internal-patch/internal_patch.dart:199)
    #1      MisskeyAdapter.login (package:kaiteki/fediverse/backends/misskey/adapter.dart:96)
    <asynchronous suspension>
    #2      _LoginScreenState.loginButtonPress (package:kaiteki/ui/auth/login/login_screen.dart:292)
    <asynchronous suspension>
    

    Additional information

    Platform: Windows ("Windows 10 Home" 10.0 (Build 22622))

    bug api:misskey area:auth 
    opened by AidanTheBandit1 3
  • Timeline not updating properly

    Timeline not updating properly

    What happened?

    The timeline retains posts from the previously used account, which causes API errors if the user tries to interact with them.

    Expected behavior

    No response

    To Reproduce

    No response

    What platform are you seeing the issue on?

    • [ ] Android
    • [ ] Windows
    • [ ] Linux
    • [ ] Web

    Additional context

    No response

    bug 
    opened by Craftplacer 2
  • FoundKey support

    FoundKey support

    Name

    FoundKey

    Link

    https://akkoma.dev/FoundKeyGang/FoundKey

    API Docs Link

    https://misskey-hub.net/en/docs/api

    Features

    The API is almost the same as MissKey, I actually could run the app on my instance just by turning some MissKey's properties like mascotImageUrl, ads... to nullable since it doesn't have them.

    I saw that you are already planning on rebuilding the way you construct generic implementations (#211) and I would be glad to help with the it as well as other issues.

    enhancement backend-request 
    opened by ajiiisai 3
  • Note separator color too harsh when using system color scheme (MY)

    Note separator color too harsh when using system color scheme (MY)

    The problem

    This may be a nitpick, but with no matter what color scheme I try from my wallpaper, the bar that separates notes is just too contrasted from the background.

    Screenshots

    Default color scheme (good)

    System color scheme (bad)

    App info

    version 0.0.1
    
    moe.craftplacer.kaiteki
    versionCode 1672320354
    
    targetSdk 33
    minSdk 18
    
    Installed: Dec 26, 2022; 10:53 AM
    Updated: Dec 29, 2022; 8:12 PM
    
    bug platform:android area:ui/ux 
    opened by ThatOneCalculator 3
  • "Denser reactions" doesn't make the reactions denser

    The problem

    As seen in the screenshots below, the emoji sizes are shrunk but the actual size of the reaction buttons are the same.

    Screenshots

    Denser reactions off

    Denser reactions on

    App info

    version 0.0.1
    
    moe.craftplacer.kaiteki
    versionCode 1672320354
    
    targetSdk 33
    minSdk 18
    
    Installed: Dec 26, 2022; 10:53 AM
    Updated: Dec 29, 2022; 8:12 PM
    
    area:ui/ux experiments 
    opened by ThatOneCalculator 2
Releases(latest)
Owner
Kaiteki
A cross-platform Fediverse client for micro-blogging services written in Flutter/Dart.
Kaiteki
ANSI escape sequences and styling micro-library written in fluent/modern Dart.

neoansi ANSI escape sequences and styling micro-library written in fluent/modern Dart. This library provides minimal ANSI escape sequences and helpers

Neo Dart 8 Oct 31, 2022
A Dart micro-library for asserting at build time.

A micro-library for asserting at build time. It's a common practice to configure a Dart app using const (build-time) values. There are benefits to thi

Christopher Casey 17 Oct 14, 2022
A cross-platform classic and minimalist logger written in the Dart language.

A cross-platform classic and minimalist logger written in the Dart language.

Kato Shinya / 加藤 真也 6 Dec 3, 2022
Sport-pluse - A live score and blogging flutter mobile app

sport-pluse A live score and blogging flutter mobile app

Marshal Greatness 0 Jan 1, 2022
A flutter Blogging app

Blog App A Blogging app made by flutter and dart to create and post Blogs. User can also read others Blogs and like it by hiting on thumbs up. Screens

Raju Yadav 8 Apr 7, 2022
A blogging application where users can publish their blogs and articles and can connect with other authors, developed using Flutter and Firebase.

Utopia About the app A blogging application where users can publish their blogs and articles and can connect with other authors, developed using Flutt

Utopia 12 Jan 3, 2023
Breathe is a mental health blogging app where users can join communities of doctors and other users from around the world and both share their problems as well as lend a ear to and help others

?????????????? ?????????????? In a condensed, suffocating society you can feel closed off, when you can't process your emotions and are going through

Soham Sen 3 May 16, 2022
A beautiful, secure and simple authenticator app that supports multiple protocols and services. Free and open source. Written in Flutter and Dart.

OpenAuth A beautiful, secure and simple authenticator app that supports multiple protocols and services. Free and open source. Written in Flutter and

Isaiah Collins Abetong 31 Oct 5, 2022
Cross-platform client for Mentorship System

Mentorship System is an application that allows women in tech to mentor each other, on career development topics, through 1:1 relations for a certain period of time.

AnitaB.org Open Source 62 Dec 12, 2022
A libre, cross-platform client to browse Medium.

XMedium A libre, cross-platform client to browse Medium ?? This is an unofficial app from medium.com. If you are a developer and you want the schemas

Clone Conflict 5 Jan 18, 2022
A libre, cross-platform client to browse Medium.

nedium A libre, cross-platform client to browse Medium ?? This a video showcase. Features ✨ : Browse without an account. Search for posts, users, tags

Clone Conflict 6 Jan 15, 2022
Open source cross-platform client for popular imageboards: 4chan.org and 2ch.hk

iChan (iOS) and Zchan (Android) Open source cross-platform client for popular im

null 50 Dec 31, 2022
Cross-Platform Google Drive client with encryption support.

arthurmorgan A Cross-Platform Google Drive client with encryption support. Features implemented Google OAuth2 Upload Files Download Single Files Uploa

Washiul Alam Sohan 45 Aug 14, 2023
Mysql.dart - MySQL client for Dart written in Dart

Native MySQL client written in Dart for Dart See example directory for examples

null 48 Dec 29, 2022
Open-source, cross-platform, hassle-free file sharing with AES-256 encryption made with Flutter & Dart.

Odin ⚡ Open source easy file sharing for everyone. ⚡ Cross-platform hassle-free file sharing with AES-256 encryption made with Flutter & Dart. Getting

Odin 111 Dec 22, 2022
Blood Bank is cross platform mobile application that is developed using technologies like Flutter/Dart for frontend and Firebase for data storage

Blood Bank is cross platform mobile application that is developed using technologies like Flutter/Dart for frontend and Firebase for data storage. The sole goal of this application is to make blood donation resourceful and accessible all round the world.

Sajan Poudel 4 Nov 5, 2022
A Dart package to handle HTTP services

http_services A package to support the creation of Http services in a Dart application. Features convenient methods to perform HTTP requests disposing

Antonello Galipò 5 Jul 27, 2021
The deta-dart library is the simple way to interact with the services of the free clud on the Deta plataform.

Deta A Dart package to interact with the HTTP API of the free services of the Deta plataform. ?? WARNING ?? This client should only be used on the ser

Yeikel Uriarte Arteaga 6 May 2, 2022