base on A free and open source manga reader app to read manga from a Tachidesk-Server instance. <p align="center"> <img width=200px height=200px src="assets/icons/launcher/sorayomi_icon.png" alt="Sorayomi logo"/> </p> <h1 align="center"> Sorayomi </h1> <div align="center"> [![Platform](https://img.shields.io/badge/platform-Android%20%7C%20iOS%20%7C%20Linux%20%7C%20Windows%20%7C%20MacOS%20%7C%20Web-lightgrey)][release] [![Discord](https://img.shields.io/discord/801021177333940224.svg?label=discord&labelColor=7289da&color=2c2f33&style=flat)](https://discord.gg/DDZdqZWaHA) </div> <div align="center"> [![GitHub Stars](https://img.shields.io/github/stars/Suwayomi/Tachidesk-Sorayomi)](https://github.com/Suwayomi/Tachidesk-Sorayomi) [![GitHub License](https://img.shields.io/github/license/Suwayomi/Tachidesk-Sorayomi)](https://github.com/Suwayomi/Tachidesk-Sorayomi/blob/main/LICENSE) ![CI](https://github.com/Suwayomi/Tachidesk-Sorayomi/actions/workflows/publish.yml/badge.svg) [![stable release](https://img.shields.io/github/release/Suwayomi/Tachidesk-Sorayomi.svg?maxAge=3600&label=download)](https://github.com/Suwayomi/Tachidesk-Sorayomi/releases) </div> <p align="center"> A free and open source manga reader based on <a href="https://flutter.dev/">Flutter</a> to read manga from a <a href="https://github.com/Suwayomi/Tachidesk-Server">Suwayomi-Server</a> instance.</br></br> Sorayomi need to connect with an already hosted server.</br></br> Sorayomi supports Linux, Windows, MacOS, Web, iOS and Android. </p> --- ## Is this application usable? Should I test it? Here is a list of current features for interaction with Sorayomi: - Managing installed Extensions. - Interaction with your library. - Browsing installed sources. - Viewing manga and chapters. - Reading, downloading, and managing chapters. - Viewing chapter updates **Note:** Keep in mind that Sorayomi and Suwayomi-Server are alpha software, so it can have issues. See [Support and help](#support-and-help) if it happens. ### Supported Suwayomi versions These are the versions of [Suwayomi-Server][suwayomi-server] that Sorayomi supports. #### [Release build][release] - [Suwayomi-Server][suwayomi-server] v0.6.6+ ## Downloading and Running the app ### Android Download *-android-all.apk file from latest release [the releases section][release]. ### iOS - Download the latest .ipa file from [the releases section][release] - use [AltStore](https://altstore.io/) to install Sorayomi in ios. ### Windows Download the latest .msi file from [the releases section][release]. if you use WINGET, you can run ``` winget install tachidesk-sorayomi ``` ### MacOS - Download the *-macos-x64.zip from the latest release [the releases section][release] - Extract the file. - Drag and drop the extracted app file to applications folder in finder. if you use HomeBrew, you can run ``` brew install --cask tachidesk-sorayomi ``` ### Debian based Linux Download the latest deb release from [the releases section][release]. ### Arch based Linux Download the latest release from [the aur](https://aur.archlinux.org/packages/tachidesk-sorayomi-bin). If you use yay, you can run ``` yay -S tachidesk-sorayomi-bin ``` inside a terminal window. ### Web Download the latest web.zip file from [the releases section][release]. - Sorayomi-web deployed in GitHub pages. You can check out [Sorayomi here](https://suwayomi.github.io/Tachidesk-Sorayomi/). ## Post installation - Configure your server address in `Navigation bar > more screen > Server URL`. ## Building from source These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. ### Prerequisites You can install Flutter & Dart from [Official website](https://docs.flutter.dev/get-started/install) - Dart sdk - Flutter - Channel Stable ### Building 1. Clone the repository: ``` $ git clone https://github.com/Suwayomi/Tachidesk-Sorayomi.git $ cd Tachidesk-Sorayomi/ ``` 2. You can install all dependencies by running this command in terminal: ``` $ flutter pub get ``` 3. Now enter the following command to start debugging the app: ``` $ flutter run ``` - Localization generator ``` $ flutter gen-l10n ``` - Pull-Request Suggestion - Install GitHooks after cloning the repo using `git config --local core.hooksPath .githooks` ## Support and help - Join Suwayomi's [discord server](https://discord.gg/DDZdqZWaHA) to hang out with the community and receive support and help. ## Built Using - [Flutter](https://flutter.dev/) is an open source framework by Google for building beautiful, natively compiled, multi-platform applications from a single codebase. - [Flutter Riverpod](https://pub.dev/packages/riverpod/) - A simple way to access state while robust and testable. - [Riverpod Architecture](https://codewithandrea.com/articles/flutter-app-architecture-riverpod-introduction/) - File architecture developed by [@bizz84](https://github.com/bizz84) Find other dependencies in [pubspec.yaml](pubspec.yaml) ## Credit - The `Suwayomi-server` project is developed by [@AriaMoradi](https://github.com/AriaMoradi) and contributors, - The `Tachidesk-Sorayomi` project is developed by [@DattatreyaReddy](https://github.com/DattatreyaReddy) and contributors, - CI-CD for `Tachidesk-Sorayomi` is developed by [@mahor1221](https://github.com/mahor1221) and contributors. ## Translation Feel free to translate the project on [Weblate](https://hosted.weblate.org/projects/suwayomi/tachidesk-sorayomi/) <details><summary>Translation Progress</summary> <a href="https://hosted.weblate.org/engage/suwayomi/"> <img src="https://hosted.weblate.org/widgets/suwayomi/-/tachidesk-sorayomi/multi-auto.svg" alt="Translation status" /> </a> </details> ## License A link for [Tachidesk is provided here](https://github.com/Suwayomi/Tachidesk) and is licensed under `Mozilla Public License v2.0`. You can obtain a copy of `Mozilla Public License v2.0` from https://mozilla.org/MPL/2.0/ Copyright (C) Contributors to the Suwayomi project This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. [release]: https://github.com/Suwayomi/Tachidesk-Sorayomi/releases [suwayomi-server]: https://github.com/Suwayomi/Suwayomi-Server [suwayomi-server-preview]: https://github.com/Suwayomi/Suwayomi-Server-preview/releases ", Assign "at most 3 tags" to the expected json: {"id":"9931","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"