Kotlin SDK for Jellyfin supporting Android and the JVM.

Overview

Jellyfin Kotlin SDK

Part of the Jellyfin Project


Logo Banner

LGPL 3.0 license Current Release Maven Central Release
Donate Chat on Matrix Join our Subreddit Release RSS Feed Master Commits RSS Feed


The Jellyfin Kotlin SDK is a library implementing the Jellyfin API to easily access servers. It is currently available for the JVM and Android 4.4 and up. Java 8 or higher is required. Android versions below Android 8 should use library desugaring.

Setup

Releases are published to mavenCentral(). Make sure to use the correct library depending on your platform.

Latest version on Maven Central

Gradle with Kotlin DSL

implementation("org.jellyfin.sdk:jellyfin-core:$sdkVersion")
Gradle with Groovy
implementation "org.jellyfin.sdk:jellyfin-core:$sdkVersion"
Maven
<dependency>
    <groupId>org.jellyfin.sdk</groupId>
    <artifactId>jellyfin-core</artifactId>
    <version>$sdkVersion</version>
</dependency>
Using SNAPSHOT versions

When working on new features in your application you might need a build of the SDK targetting the next server version. For this use case we publish two SNAPSHOT releases: master-SNAPSHOT and openapi-unstable-SNAPSHOT. To use the snaphot versions, add the snapshot repository to your build script: https://s01.oss.sonatype.org/content/repositories/snapshots/

An example using Gradle with Kotlin DSL that only allows the master-SNAPSHOT version:

repositories {
    maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") {
        content {
            // Only allow SDK snapshots
            includeVersionByRegex("org\\.jellyfin\\.sdk", ".*", "master-SNAPSHOT")
        }
    }
}

Usage

Creating a Jellyfin instance

Most functionality of the SDK requires an instance of the Jellyfin class. This class holds the configuration required to make API calls and platform specific options. The Jellyfin class can be instantiated using a custom Kotlin DSL:

val jellyfin = createJellyfin {
    clientInfo = ClientInfo(name = "My awesome client!", version = "1.33.7",)

    // Uncomment when using android:
    // context = /* Android Context */
}

Make sure to supply the client information if you want to make API calls. The context is required for Android applications.

Creating an API instance

API calls require an API instance. This can be done with the createApi function. It requires a server address. The client and device information are set automatically but can be changed. All properties can be changed later in the API instance.

val api = jellyfin.createApi(
    baseUrl = "https://demo.jellyfin.org/stable/",
    // Optional options:
    // accessToken = "access token or api key"
    // clientInfo = ClientInfo(), // defaults to parent info
    // deviceInfo = DeviceInfo(), // defaults to parent info
    // httpClientOptions = HttpClientOptions() // allows setting additional options
)

Authenticating a user

All API operations are grouped. To make use of an operation you need to first get the group from your ApiClient instance. All groups are defined as extension functions and you can alternatively construct the API instances manually.

val userApi = api.userApi
// or
val userApi = UserApi(api)

try {
    val authenticationResult by userApi.authenticateUserByName(
        username = "demo", 
        password = "",
    )
    
    // Use access token in api instance
    api.accessToken = authenticationResult.accessToken
    
    // Print session information
    println(authenticationResult.sessionInfo)
} catch(err: ApiClientException) {
    // Catch exceptions
    println("Something went wrong! ${err.message}")
}

WebSockets

Jellyfin uses WebSockets to communicate events like library changes and activities. This API can be used with the special WebSocketApi class.

// Publish messages
webSocketApi.publish(ActivityLogEntryStartMessage())
webSocketApi.publish(SessionsStartMessage())
webSocketApi.publish(ScheduledTasksInfoStartMessage())

// Listen for messages
webSocketApi.subscribe().collect { message ->
    println(message)
}

Server discovery

The server discovery feature can be used to find servers on the local network, normalize inputted server addresses and to determine the best server to use from a list of adresses.

// Discover servers on the local network
jellyfin.discovery.discoverLocalServers().collect {
    println("Server ${it.name} was found at address ${it.address}")
}

// Get all candidates for a given input
val candidates = jellyfin.discovery.getAddressCandidates("demo.jellyfin.org/stable")

// Get a flow of potential servers to connect to
val recommended = jellyfin.discovery.getRecommendedServers(candidates, RecommendedServerInfoScore.GOOD)

More examples

We provide a few small projects in the samples folder. The samples are used for testing new features and can be used as a basis for your own application.

Projects using the SDK

Official Jellyfin clients

Third party clients

  • Gelli is a music-focused Android client.

Want to add your project? Please create a pull request!

Comments
  • Use broadcast address 255.255.255.255 for server discovery

    Use broadcast address 255.255.255.255 for server discovery

    Use broadcast address 255.255.255.255 instead of the network specific broadcast address to find Jellyfin servers on the local network.

    | Pros | Cons | |---|---| | A single implementation for both Android and JVM | IPv4 only. (seems like the Jellyfin server discovery doesn't even listen on IPv6 anyway) | | Drops the requirement for ACCESS_WIFI_STATE permission on Android | | | Removes some code | |

    I have tested this on two different networks with both the Android SDK and the JVM library.

    Edit: this PR was previously using the multicast address 224.0.0.1

    enhancement 
    opened by jarnedemeulemeester 10
  • Ensure device name has no special characters

    Ensure device name has no special characters

    The below checks for "special characters" on client level wasn't enough to cause the client not being able to connect to the server when it has special characters in the device name. Proposed to have checks at SDK level instead. Additionally to fallback to use the manufacturer and model string instead if the device name has special characters:

    https://github.com/jellyfin/jellyfin-android/blob/0d2457cf660f6ba2cd9c4013f7afdd044b357f0d/app/src/main/java/org/jellyfin/mobile/bridge/NativeInterface.kt#L63

    opened by Nazar78 8
  • Add GitHub workflow to automatically update OpenAPI spec and generated sources

    Add GitHub workflow to automatically update OpenAPI spec and generated sources

    Description

    This PR adds a GH Action workflow to run a weekly API gen (via updateApiSpecStable) and open a PR if changes are detected.

    Changes

    • add workflow to check for generated jellyfin API changes

    Issues

    • closes #210

    NOTE

    if you want to the PR to be opened by jellyfin-bot I think you can, but we woul have to change to token used in the technote-space/create-pr-action action

    backport 
    opened by h1dden-da3m0n 8
  • Update OpenAPI to 10.7.5

    Update OpenAPI to 10.7.5

    Changed files

    Changed 2 files
    • jellyfin-api/src/main/kotlin-generated/org/jellyfin/sdk/api/operations/MediaInfoApi.kt
    • jellyfin-api/src/main/kotlin-generated/org/jellyfin/sdk/api/operations/PlaylistsApi.kt
    opened by jellyfin-bot 6
  • Refactor discovery code with better rules

    Refactor discovery code with better rules

    Changes

    Address Candidates

    • Drop baseurl addition - too small of a user base to do this for. Each candidate adds to the amount of HTTP requests to make.
    • Always prioritize candidates

    Recommendation discover

    • Add new score type: GREAT
    • Document all score types to summarize what they mean
    • Remove includeAppendedServers: too complex, not worth the amount of additional requests
    • Completely rewritten the scoring system. Doesn't use points anymore but strict rules instead.
      • Easier to maintain and see how it works
      • Checks if the server actually responded now
      • Uses the new GREAT type if all checks succeed
    • Moved some code around, tweaked some calls

    Discovery Service

    • Change the kdoc to reference the used functions instead
      • To prevent outdated comments
    • Remove includeAppendedServers
    • Remove getRecommendedServer. Client should determine on it's own which server to use.

    </>

    I'd love to have some feedback on the rules. Do they make sense? I think they do.

    backport 
    opened by nielsvanvelzen 6
  • Migrate from JCenter to Maven Central

    Migrate from JCenter to Maven Central

    Unfortunately JCenter is closing in a few months. We need to publish the apiclient somewhere else before this happens. Additionally all our Java based projects (the Android apps) need to switch to different repositories for all dependencies.

    I think our best bet is to wait a bit and see what other projects in the java ecosystem do before we act.

    See the jfrog blog article for some more information:

    https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/

    opened by nielsvanvelzen 6
  • No assets are uploaded to the GitHub release

    No assets are uploaded to the GitHub release

    Unfortunately not everything worked in the 0.7.1 release. The assets were not uploaded. Not a major issue but it should be fixed for the next release.

    Logs

    In case the Azure logs get too old and will be deleted.

    2020-08-18T15:58:47.2723873Z ##[section]Starting: GitHub Upload
    2020-08-18T15:58:47.2738850Z ==============================================================================
    2020-08-18T15:58:47.2739452Z Task         : GitHub Release
    2020-08-18T15:58:47.2739881Z Description  : Create, edit, or delete a GitHub release
    2020-08-18T15:58:47.2740288Z Version      : 0.160.5
    2020-08-18T15:58:47.2740640Z Author       : Microsoft Corporation
    2020-08-18T15:58:47.2741691Z Help         : https://aka.ms/AA5vv5o
    2020-08-18T15:58:47.2742474Z ==============================================================================
    2020-08-18T15:58:47.4668852Z 9bde9970-f931-4741-b0e3-f9f2bbcbf4ae exists true
    2020-08-18T15:58:47.5062106Z Computing changes made in this release...
    2020-08-18T15:58:47.7352006Z Fetching the latest published release...
    2020-08-18T15:58:47.9899384Z Found the latest published release: https://github.com/jellyfin/jellyfin-apiclient-java/releases/tag/v0.7.1
    2020-08-18T15:58:48.2483200Z Fetching the list of commits since the last published release...
    2020-08-18T15:58:48.5968714Z No changes were found. The provided target commit is the same as the commit of the last published release.
    2020-08-18T15:58:48.5972148Z Release notes file: /home/vsts/work/1/s is a directory and not a file.
    2020-08-18T15:58:48.5973273Z Fetching the release for tag: v0.7.1
    2020-08-18T15:58:48.9265051Z Found a release for tag: v0.7.1
    2020-08-18T15:58:48.9272950Z Editing the release with tag: v0.7.1
    2020-08-18T15:58:49.2010463Z Uploading assets...
    2020-08-18T15:58:49.2016049Z Searching for file(s) matching '**/distributions/*-${JELLYFIN_VERSION}.zip'.
    2020-08-18T15:58:49.3337046Z No files found matching '**/distributions/*-${JELLYFIN_VERSION}.zip'. Nothing to upload.
    2020-08-18T15:58:49.3338629Z Searching for file(s) matching '**/libs/*-${JELLYFIN_VERSION}.jar'.
    2020-08-18T15:58:49.4329634Z No files found matching '**/libs/*-${JELLYFIN_VERSION}.jar'. Nothing to upload.
    2020-08-18T15:58:49.4331135Z Searching for file(s) matching '**/libs/*-${JELLYFIN_VERSION}-sources.jar'.
    2020-08-18T15:58:49.5278786Z No files found matching '**/libs/*-${JELLYFIN_VERSION}-sources.jar'. Nothing to upload.
    2020-08-18T15:58:49.5280259Z All assets uploaded successfully.
    2020-08-18T15:58:49.5281914Z Release edited successfully https://github.com/jellyfin/jellyfin-apiclient-java/releases/tag/v0.7.1
    2020-08-18T15:58:49.5322867Z ##[section]Finishing: GitHub Upload
    

    Logs (after #88)

    2020-08-19T07:33:23.5116508Z ##[section]Starting: GitHub Upload
    2020-08-19T07:33:23.5129081Z ==============================================================================
    2020-08-19T07:33:23.5129845Z Task         : GitHub Release
    2020-08-19T07:33:23.5130467Z Description  : Create, edit, or delete a GitHub release
    2020-08-19T07:33:23.5130888Z Version      : 0.160.5
    2020-08-19T07:33:23.5131588Z Author       : Microsoft Corporation
    2020-08-19T07:33:23.5132025Z Help         : https://aka.ms/AA5vv5o
    2020-08-19T07:33:23.5133224Z ==============================================================================
    2020-08-19T07:33:23.7313368Z 9bde9970-f931-4741-b0e3-f9f2bbcbf4ae exists true
    2020-08-19T07:33:23.7802548Z Computing changes made in this release...
    2020-08-19T07:33:23.9567074Z Fetching the latest published release...
    2020-08-19T07:33:24.1384291Z Found the latest published release: https://github.com/jellyfin/jellyfin-apiclient-java/releases/tag/v0.7.2
    2020-08-19T07:33:24.3440201Z Fetching the list of commits since the last published release...
    2020-08-19T07:33:24.6088660Z No changes were found. The provided target commit is the same as the commit of the last published release.
    2020-08-19T07:33:24.6091549Z Release notes file: /home/vsts/work/1/s is a directory and not a file.
    2020-08-19T07:33:24.6101088Z Fetching the release for tag: v0.7.2
    2020-08-19T07:33:24.8060860Z Found a release for tag: v0.7.2
    2020-08-19T07:33:24.8061699Z Editing the release with tag: v0.7.2
    2020-08-19T07:33:25.0480932Z Uploading assets...
    2020-08-19T07:33:25.0488543Z Searching for file(s) matching '/home/vsts/work/1/s/**/distributions/*-${JELLYFIN_VERSION}.zip'.
    2020-08-19T07:33:25.1717647Z No files found matching '/home/vsts/work/1/s/**/distributions/*-${JELLYFIN_VERSION}.zip'. Nothing to upload.
    2020-08-19T07:33:25.1719290Z Searching for file(s) matching '/home/vsts/work/1/s/**/libs/*-${JELLYFIN_VERSION}.jar'.
    2020-08-19T07:33:25.2674781Z No files found matching '/home/vsts/work/1/s/**/libs/*-${JELLYFIN_VERSION}.jar'. Nothing to upload.
    2020-08-19T07:33:25.2675919Z Searching for file(s) matching '/home/vsts/work/1/s/**/libs/*-${JELLYFIN_VERSION}-sources.jar'.
    2020-08-19T07:33:25.3548400Z No files found matching '/home/vsts/work/1/s/**/libs/*-${JELLYFIN_VERSION}-sources.jar'. Nothing to upload.
    2020-08-19T07:33:25.3549354Z All assets uploaded successfully.
    2020-08-19T07:33:25.3550407Z Release edited successfully https://github.com/jellyfin/jellyfin-apiclient-java/releases/tag/v0.7.2
    2020-08-19T07:33:25.3588737Z ##[section]Finishing: GitHub Upload
    
    bug 
    opened by nielsvanvelzen 6
  • JsonDecodingException: TranscodeReasons is not a string

    JsonDecodingException: TranscodeReasons is not a string

    Getting this error, using the latest Jellyfin version (10.8.5) and the latest sdk version (1.3.6). Seems like it expects TranscodeReasons to be a String?

    kotlinx.serialization.json.internal.JsonDecodingException: Unexpected JSON token at offset 5217: Expected beginning of the string, but got [ at path: $[0].TranscodingInfo.TranscodeReasons
    JSON input: .....hannels":6,"TranscodeReasons":["ContainerBitrateExceedsLimit.....
    	at kotlinx.serialization.json.internal.JsonExceptionsKt.JsonDecodingException(JsonExceptions.kt:24) ~[bundleFile:?]
    	at kotlinx.serialization.json.internal.JsonExceptionsKt.JsonDecodingException(JsonExceptions.kt:32) ~[bundleFile:?]
    	at kotlinx.serialization.json.internal.AbstractJsonLexer.fail(AbstractJsonLexer.kt:528) ~[bundleFile:?]
    
    opened by GiviMAD 5
  • Optimize map building in generator

    Optimize map building in generator

    Using buildMap {} with capacity set instead of a mutable map should be more efficient as the capacity is known in advance. I didn't benchmark this though.

    enhancement 
    opened by nielsvanvelzen 5
  • add java utility to consume suspend functions and move package

    add java utility to consume suspend functions and move package

    Signed-off-by: Miguel Álvarez Díez [email protected]

    Hi again. Still missing another util to consume all the sdk utilities from Java. I have added it next to the JavaFlow and I've moved the package with the two utils to the root of the core. I have tried to implement it similar to what we did with the JavaFlow, it can be used as follows:

    suspendFn(..., JavaContinuation.get((err, result)->{
                // ...
    }));
    

    Hope everything is correct. Regards

    opened by GiviMAD 5
  • Add ParameterValidation framework with initial IntRangeValidation

    Add ParameterValidation framework with initial IntRangeValidation

    Allows for client-side checking of values based on the metadata available in the OpenAPI specification. Right now (with 10.7.x) none of the parameters add any validation metadata.

    Sample of generated code with the changes from https://github.com/jellyfin/jellyfin/pull/6276

    	/**
    	 * Tests the network with a request with the size of the bitrate.
    	 *
    	 * @param size The bitrate. Defaults to 102400.
    	 */
    	public suspend fun getBitrateTestBytes(size: Int? = 102400): Response<ByteReadChannel> {
    		val pathParameters = emptyMap<String, Any?>()
    		val queryParameters = mutableMapOf<String, Any?>()
    		require(size in 0..100000000) { "Parameter \"size\" must be in range 0..100000000 (inclusive)." }
    		queryParameters["size"] = size
    		val data = null
    		val response = api.`get`<ByteReadChannel>("/Playback/BitrateTest", pathParameters,
    				queryParameters, data)
    		return response
    	}
    
    opened by nielsvanvelzen 5
  • Update dependency vitepress to v1.0.0-alpha.34

    Update dependency vitepress to v1.0.0-alpha.34

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | vitepress (source) | 1.0.0-alpha.33 -> 1.0.0-alpha.34 | age | adoption | passing | confidence |


    Release Notes

    vuejs/vitepress

    v1.0.0-alpha.34

    Compare Source

    Bug Fixes
    • build: dedent of a single-line region (#​1687) (7de7fff)
    • build: handle - in title of code blocks with line highlighting (#​1743) (ce9467e)
    • handle cleanUrls with subfolders when using a trailing slash (#​1575) (195d867)
    Features
    Performance Improvements
    • a11y: make menu traversable only when it is open (#​1491) (257f9e6)
    • preload css to improve loading speed (bf1315a)

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies 
    opened by renovate[bot] 0
  • Update dependency io.insert-koin:koin-core to v3.3.2

    Update dependency io.insert-koin:koin-core to v3.3.2

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | io.insert-koin:koin-core (source) | 3.2.2 -> 3.3.2 | age | adoption | passing | confidence |


    Release Notes

    InsertKoinIO/koin

    v3.3.2

    • [UPDATED] - koin-core 3.3.2

    v3.3.0

    • [UPDATED] - io.ktor:ktor-server-core 2.2.1
    • [UPDATED] - koin-core 3.3.2

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    dependencies gradle 
    opened by renovate[bot] 0
  • Automatically add labels to openapi update pull requests

    Automatically add labels to openapi update pull requests

    The GH actions workflow that creates the OpenAPI schema update pull requests should automatically add "enhancement" labels to the pull requests so it doesn't need to be done manually. Example PR #603.

    enhancement good first issue github-actions 
    opened by nielsvanvelzen 0
  • Follow index redirect in discovery

    Follow index redirect in discovery

    Sometimes people use a baseurl and only have a redirect on the index page (e.g. jellyfin.local -> jellyfin.local/jellyfin). When the user inputs jellyfin.local we should send a HEAD request and see if there is any redirect. If the redirect is the same origin but with a subpath we should add that to the candidates.

    This should allow easier setup in Jellyfin apps. Behavior can be tested with our own demo server which redirects to the /stable path.

    enhancement 
    opened by nielsvanvelzen 0
  • Add RecommendedServerIssue for connection problems

    Add RecommendedServerIssue for connection problems

    Right now connection issues are emitted as MissingSystemInfo, with the throwable pointing to an ApiClientException with a cause containing the actual exception emitted from OkHttp.

    This can be made better/easier.

    I'd suggest creating a new issue type "NoConnection". It should contain the throwable and an enum explaining what went wrong with the connection: bad SSL, no internet etc.

    enhancement 
    opened by nielsvanvelzen 0
Releases(v1.4.0)
Owner
Jellyfin
The Free Software Media System
Jellyfin
Create libraries for all types of Kotlin projects: android, JVM, Multiplatform, Gradle plugins, and so on.

JavierSC Kotlin template Create libraries for all types of Kotlin projects: android, JVM, Multiplatform, Gradle plugins, and so on. Features Easy to p

Javier Segovia Córdoba 2 Dec 14, 2022
A simple, lightweight, non-bloated redis client for kotlin and other JVM languages

rekt is a lightweight, non-bloated redis client, primarily written for the kotlin programming language, while also supporting other JVM-based languages, such as Java, Scala, and obviously way more.

Patrick 8 Nov 2, 2022
Kotlin jvm + android packages for bdk-ffi

bdk-kotlin This project builds .jar and .aar packages for the jvm and android platforms that provide Kotlin language bindings for the bdk library. The

Bitcoin Dev Kit 14 Nov 15, 2022
An implementation of MediatR on JVM for Spring using Kotlin coroutines

Kpring MediatR In this project, an attempt has been made to implement the mediator pattern on the JVM with simplicity using Kotlin with native corouti

Mahdi Bohloul 4 Aug 6, 2022
Asynchronous Spring Initializr API wrapper for Kotlin/JVM

initializr-kt Asynchronous Spring Initializr API wrapper for Kotlin/JVM. This library provides the simplest DSL for initializing Spring Boot projects

Mikhail Titov 2 May 8, 2022
Depenject - a lightweight, minimalistic dependency injection library for Kotlin/JVM.

depenject depenject is a lightweight, minimalistic dependency injection library for Kotlin/JVM. Our goal is similar to flavor's to simplify the usage

Patrick 1 Mar 22, 2022
Utility library dedicated for functional & non-functional codebases to simplify modelling of success and failure responses for the JVM languages 🔀

Expressible Utility library, part of the panda-lang SDK, dedicated for functional codebases that require enhanced response handling. Express yourself

Panda 28 Nov 14, 2022
Sample app to demonstrate the integration code and working of Dyte SDK for android, using Kotlin.

Dyte Kotlin Sample App An example app in kotlin using the Dyte Mobile SDK Explore the docs » View Demo · Report Bug · Request Feature Table of Content

Dyte 8 Dec 3, 2021
Archimedes's implementation for the Java Virtual Machine (JVM)

Archimedes Give me a place to stand, and I shall move the earth. Archimedes's implementation for the Java Virtual Machine (JVM) Building From Source T

Archimedes 24 Aug 20, 2022
JVM Open Asset Import Library (Assimp)

assimp JVM porting of Assimp This port is being written trying to stick as much as possible close to the C version in order to: minimize maintenance t

null 83 Oct 30, 2022
Collection of JVM library logic that the Sirloin software development team is currently using

Collection of JVM library logic that the Sirloin software development team is currently using

Sirloin Dev 4 May 10, 2022
This is the interpreter of Hime language, a dialect of Lisp, run on JVM platform.

Hime Language About This is the interpreter of Hime language, a dialect of Lisp, running on JVM platform. Once a feature is finished and tested, and n

Hime Programming Language 8 Jul 12, 2022
A Kotlin-first SDK for Firebase

Firebase Kotlin SDK Built and maintained with ?? by GitLive Real-time code collaboration inside any IDE The Firebase Kotlin SDK is a Kotlin-first SDK

GitLive 522 Jan 3, 2023
HQ OpenAPI Specification and Client & Server SDK Generators

HQ-API HQ OpenAPI Specification and Client & Server SDK Generators Cloning Github Repository Get access to Flocktory team in Github Adding a new SSH k

Flocktory Spain, S.L. 1 Sep 2, 2022
Android SDK development environment Docker image

AndroidSDK Android SDK development environment Docker image Goals It contains the complete Android SDK enviroment, is able to perform all regular Andr

Jing Li 1k Dec 30, 2022
Application includes Admob SDK, In-App Messaging, Crashlytics, Lottie, Flurry

AdvertisementApplication This application includes Admob SDK, In-App Messaging, Crashlytics, Lottie, Flurry. * Admob: AdMob helps you monetize your mo

Alparslan Köprülü 2 Nov 8, 2021
Mocking for Kotlin/Native and Kotlin Multiplatform using the Kotlin Symbol Processing API (KSP)

Mockative Mocking for Kotlin/Native and Kotlin Multiplatform using the Kotlin Symbol Processing API (KSP). Installation Mockative uses KSP to generate

Mockative 121 Dec 26, 2022
🎲 Kotlin Symbol Processor to auto-generate extensive sealed classes and interfaces for Android and Kotlin.

SealedX ?? Kotlin Symbol Processor to auto-generate extensive sealed classes and interfaces for Android and Kotlin. Why SealedX? SealedX generates ext

Jaewoong Eum 236 Nov 30, 2022
Kotlin microservices with REST, and gRPC using BFF pattern. This repository contains backend services. Everything is dockerized and ready to "Go" actually "Kotlin" :-)

Microservices Kotlin gRPC Deployed in EC2, Check it out! This repo contains microservices written in Kotlin with BFF pattern for performing CRUD opera

Oguzhan 18 Apr 21, 2022