Maildroid is a small robust android library for sending emails using SMTP server

Overview


nedim.co
Maildroid

🎉 Maildroid is a small robust android library for sending emails using SMTP server 🎉

Android Arsenal


JitPack Reddit Twitter Follow

Key FeaturesAdd to your projectDocumentationShowcaseDevelopmentFAQ

Latest active version is v0.0.6
Library status: ACTIVE

screenshot Library is using Oracle Java Mail API to handle connections and sending emails.

Key Features

  • Sending emails using SMTP protocol 📨
  • Compatible with all smtp providers 🎉
  • Sending HTML/CSS styled emails 🎨
  • Library is using Java Mail API that is well known as best library for sending emails 🔭

Add to your project

Maildroid is hosted on JitPack and it's quite easy to integrate in to your project. Maildroid requires at least Android API level 19 Android KitKat

How do you want to integrate Maildroid into your project

Gradle

Add this to your root.gradle file

allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}

Add dependency

dependencies {
	        implementation 'com.github.nedimf:maildroid:v0.0.6-release'
          }

Maven

Add the JitPack repository to your build file

<repositories>
   <repository>
       <id>jitpack.io</id>
       <url>https://jitpack.io</url>
    </repository>
</repositories>

Add the dependency


<dependency>
     <groupId>com.github.nedimf</groupId>
     <artifactId>maildroid</artifactId>
     <version>v0.0.6-release</version>
</dependency>

Add to your app

Adding Maildroid to your app is straight forword process. Library is using Builder pattern to achieve flexebilty and easy to read wholesome implementation:

  MaildroidX.Builder()
            .smtp("")
            .smtpUsername("")
            .smtpPassword("")
            .port("")
            .type(MaildroidXType.HTML)
            .to("")
            .from("")
            .subject("")
            .body("")
            .attachment()
	    .isJavascriptDisabled()
	    .isisStartTLSEnabled()
	    //or
	    .attachments() //List<String>
	    .onCompleteCallback(object : MaildroidX.onCompleteCallback{
		override val timeout: Long = 3000
		override fun onSuccess() {
  			Log.d("MaildroidX",  "SUCCESS")			  
		}
		override fun onFail(errorMessage: String) {
			 Log.d("MaildroidX",  "FAIL")
		}
	     })
	     .mail()

DSL implementation:

sendEmail {
      smtp("smtp.mailtrap.io")
      smtpUsername("username")
      smtpPassword("password")
      smtpAuthentication(true)
      port("2525")
      type(MaildroidXType.HTML)
      to("[email protected]")
      from("[email protected]")
      subject("Hello!")
      body("email body")
      attachment("path_to_file/file.txt") 
      //or
      attachments() //List<String>
      callback {
          timeOut(3000)
          onSuccess {
              Log.d("MaildroidX",  "SUCCESS")
          }
          onFail {
              Log.d("MaildroidX",  "FAIL")
          }
      }
 }

Documentation


Documentation for version v.0.0.4

  • context

Constructor that is used to declare context (Context) DEPRECATED

  • smtp

Constructor that is used to declare SMTP server your will use (String)

  • smtpUsername

Constructor that is used to declare SMTP username of your server (String)

  • smtpPassword

Constructor that is used to declare SMTP password of your server (String)

  • smtpAuthentication

Constructor that is used to declare if your server needs authentication (DEPRECETED) (Boolean)

  • port

Constructor that is used to declare port of your server (String)

  • type

Constructor that is used to declare type of your content (MaildroidXType)

  • MaildroidXType.HTML
  • MaildroidXType.PLAIN
  • to

Constructor that is used to declare internet adress where email will be send (String)

  • from

Constructor that is used to declare internet adress witch email is sent from. It s fully supporting @no_replay or not existent email adresses (String)

  • subject

Constructor that is used to declare subject of email your sending (String)

  • body

Constructor that is used to declare body of email your sending (String)

  • isJavascriptDisabled

Constructor that is used to check if javascript has to be disabled in body of an email (Boolean)

  • isStartTLSEnabled

Constructor that is used to enable STARTLS for certain SMTP servers (Boolean)

  • attachment

Constructor that is used to declare attachment of email in case that ones need to be added (String)

  • attachments

Constructor that is used to declare unlimited number attachments into email (List)

  • onCompleteCallback ()

When sending email is done, call this constructor to handle further actions in your app. Constructor is made out of two functions

  • onSuccess() that handles when email is succssfully sent
  • onFail() that handles any error in sending email from version v0.0.3 it containes errorMessage (String)
  • timeout value that is used to predict timout how long will it take for email to be sent defualt is 3 seconds (Long)
  • mail ()

Function that is called when email is ready to be sent

Errors


Maildroid is handling small amount of exceptions.

IllegalArgumentException
These exceptions are called after an error in checking if mandatory fields are not existent.

  • MaildroidX detected that you didn't pass [smtp] value in to the builder!
  • MaildroidX detected that you didn't pass [smtpAuthentication] value to the builder!
  • MaildroidX detected that you didn't pass [port] value to the builder!

AuthenticationFailedException
These exceptions are called when username or password on SMTP server is not correct, or address of SMTP server is not existent.

  • MaildroidX detected that you didn't pass [smtpUsername] or [smtpPassword] to the builder!
  • MaildroidX detected that you didn't pass [smtpUsername] or [smtpPassword] to the builder!

Other

  • SMTPAddressFailedException

Thrown when mail can't be sent

  • MessagingException

Thrown when there is problem with message

  • IOException

File in attachment not found or not existent

Proguard

-keep class org.apache.** { *; }
-dontwarn org.apache.**

-keep class com.sun.mail.** { *; }
-dontwarn com.sun.mail.**

-keep class java.beans.** { *; }
-dontwarn java.beans.**

Development

We love open source ♥️
Contributing to our project is really easy if you follow these steps.

  • Add maildroidx to your machine

    • Download maildroid folder
    • Open it on your machine using your favourite IDE (Android Studio / InteliJ ) is recomended
  • Contribution 🎉

    • Fork the repository
    • Create new branch git checkout -b maildroidx-community-features
    • Add your feature or other changes to files
    • Commit your changes git commit -m 'New feature'
    • Push to the branch git push origin maildroidx-community-features
    • Create a pull request

Bug 🐛


We are trying to make this library as bug free as possible ,but as you know some bugs can occure. If you find bug or typo in our library be free to open issue and report it.

  • Open issue
    • bug

    Explaining bug is most important thing please use standard english language and don't forget to share your debug log

    • typo

Feature Request


We strive to make maildroid best mailing library out there. We have ideas to add, but we would also like to hear from you.

  • Open issue
    • fetaure

Built with 💪


  • Kotlin
  • Java Mail API / Jakarta Mail API by Eclipse foundation

TODO


Team

nedimf javier-moreno

Your name here ♥️

Motivation

Maildroid was born from the frustration of implementing a good emailing solution I had while developing a few client apps. I had to do many hours of unneeded work to make some emailing functions work using old libraries. Those libraries were limited to one SMTP server and because of that frustration Maildroid was born..

Showcase

FAQ

HitCount Gitter Say Thanks!

  • How to use Google gmail smtp server

As stated above every smtp server that uses SSL should be supported.
Tutorial how to use smtp.gmail.com:

  • If you choose this SMTP server we suggest making brand new account and enabling less secure apps in settings. Google support link

  • smtp.("smtp.gmail.com")

  • smtpUsername.("") your gmail email adress

  • smtpPassword.("") your gmail password

  • smtpPort.("465") gmail SSL port

  • How to test sending emails,but not to affect client

Maildroid works great with mailtrap.io. They limit 50 message per inbox.Inbox can be erase at any time what it makes it one of the best solution for developers.

  • Do this library save any of those data to external parties or servers?

Maildroid is open source and it DOES NOT save ANY data to extarnal servers or parties.

  • Do this library needs AndroidX to run properly?

Yes,project needs to be compatible with AndroidX QUICK GUIDE

This part will grow more over time as question are posted.

License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Designer credits

Icon made by Designer & Freepik from flaticon

Comments
  • Failed to resolve: com.github.nedimf:maildroid:v0.0.4

    Failed to resolve: com.github.nedimf:maildroid:v0.0.4

    Hello! I went to update to v0.0.4 but I get this error, however v0.0.3 works correctly and without any problems, is the new version enabled for the Gradle?

    ERROR: Failed to resolve: com.github.nedimf:maildroid:v0.0.4
    Show in Project Structure dialog
    Affected Modules: app
    

    The application is programmed in Kotlin for Android and the Android Studio version is as follows:

    Android Studio 3.6.3 Build #AI-192.7142.36.36.6392135, built on April 14, 2020 Runtime version: 1.8.0_212-release-1586-b04 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o Windows 10 10.0 GC: ParNew, ConcurrentMarkSweep Memory: 4012M Cores: 12 Registry: ide.new.welcome.screen.force=true Non-Bundled Plugins: org.jetbrains.kotlin, com.google.services.firebase, wu.seal.tool.jsontokotlin

    opened by jeluchu 19
  • STARTTLS support?

    STARTTLS support?

    Is your feature request related to a problem? Please describe. I would like to send mails via Office365, but I can't seem to find any documentation on STARTTLS.

    Describe the solution you'd like STARTTLS support or the documentation for it.

    Describe alternatives you've considered Nothing yet, MailDroid is already implemented, so it would be great to keep using it.

    Additional context None

    opened by Lars- 12
  • Cannot send via yahoo or Google SMTP servers

    Cannot send via yahoo or Google SMTP servers

    When I configure the library to user SMTP server from Yahoo or Google, the sending fails.

    I am using Yahoo configuration settings from here: https://help.yahoo.com/kb/SLN4724.html

    When using port 465 I get the following error: Failed to send email to: [email protected]: javax.mail.AuthenticationFailedException: 535 5.7.0 (#AUTH005) Too many bad auth attempts..

    When using port 587 I get the following error: Failed to send email to: [email protected]: com.sun.mail.smtp.SMTPSendFailedException: 450 Requested mail action not taken: mailbox unavailable.

    opened by jamiehiggins 8
  • Callbacks not being called when uploading large file

    Callbacks not being called when uploading large file

    I'm using this library to send images taken by the camera. It works as expected but i have a major issue. The Callbacks aren't reliable. It doesnt call onSuccess or onFail even though the message got through as expected.

        MaildroidX.Builder()
            .smtp("***")
            .smtpUsername("***")
            .smtpPassword("***")
            .port("***")
            .type(MaildroidXType.HTML)
            .to("***")
            .from("***")
            .subject(subject)
            .body(body)
            .attachment(getRealPathFromUri(this, image_uri)!!)
            .isJavascriptDisabled(true)
            .onCompleteCallback(object : MaildroidX.onCompleteCallback{
                override val timeout: Long = 3000
                override fun onSuccess() {
                    println("Email Sent!")
                }
                override fun onFail(errorMessage: String) {
                    print("Email Failed!")
                }
            })
            .mail()
    

    Logcat output is: W/Success: Success, mail sent [STATUS: true] onSuccess nor onFail fired.

    It appears to work fine when i remove the image attachment. Attachment size is approx 3MB. Increasing the Timeout to 30 seconds doesnt fix the issue.

    wontfix 
    opened by ZumWoelkchen 7
  • Got exception on Android 11

    Got exception on Android 11

    To Reproduce Steps to reproduce the behavior: Use Android 11 Version of lib: v0.0.6-release

    trying send email using following code:

    
    sendEmail {
                smtp("smtp.gmail.com")
                smtpUsername("....")
                smtpPassword("....")
                port("465")
                type(MaildroidXType.PLAIN)
                to("[email protected]")
                from("Test")
                subject("Test")
                body("Test")
                attachment(path to file)
                onCompleteCallback(object : MaildroidX.onCompleteCallback {
                    override val timeout = 20_000L
    
                    override fun onSuccess() {
                        
                    }
    
                    override fun onFail(errorMessage: String) {
                        
                    }
    
                })
            }
    

    See error:

    java.lang.VerifyError: Rejecting class com.sun.mail.handlers.text_plain that attempts to sub-type erroneous class com.sun.mail.handlers.handler_base (declaration of 'com.sun.mail.handlers.text_plain' appears in /data/app/~~2p-u-SKN4fRsh6MWdSC7nQ==/***.***.***-z7AKAGLybnYB-JoQrwg_NQ==/base.apk!classes3.dex)
            at java.lang.Class.newInstance(Native Method)
            at javax.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:631)
            at javax.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:585)
            at javax.activation.DataHandler.getDataContentHandler(DataHandler.java:627)
            at javax.activation.DataHandler.writeTo(DataHandler.java:329)
            at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:340)
            at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1575)
            at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1172)
            at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:522)
            at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1533)
            at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2271)
            at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2231)
            at javax.mail.Transport.send(Transport.java:123)
            at co.nedim.maildroidx.MaildroidX$Builder$send$1.run(MaildroidX.kt:262)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
            at java.lang.Thread.run(Thread.java:923)
         Caused by: java.lang.VerifyError: Verifier rejected class com.sun.mail.handlers.handler_base: java.awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors() failed to verify: java.awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors(): [0x4]  can't resolve returned type 'Unresolved Reference: java.awt.datatransfer.DataFlavor[]' or 'Reference: javax.activation.ActivationDataFlavor[]' (declaration of 'com.sun.mail.handlers.handler_base' appears in /data/app/~~2p-u-SKN4fRsh6MWdSC7nQ==/***.***.***-z7AKAGLybnYB-JoQrwg_NQ==/base.apk!classes3.dex)
            at java.lang.Class.newInstance(Native Method) 
            at javax.activation.MailcapCommandMap.getDataContentHandler(MailcapCommandMap.java:631) 
            at javax.activation.MailcapCommandMap.createDataContentHandler(MailcapCommandMap.java:585) 
            at javax.activation.DataHandler.getDataContentHandler(DataHandler.java:627) 
            at javax.activation.DataHandler.writeTo(DataHandler.java:329) 
            at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:340) 
            at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1575) 
            at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1172) 
            at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:522) 
            at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1533) 
            at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2271) 
            at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2231) 
            at javax.mail.Transport.send(Transport.java:123) 
            at co.nedim.maildroidx.MaildroidX$Builder$send$1.run(MaildroidX.kt:262) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
            at java.lang.Thread.run(Thread.java:923) 
    2021-02-07 18:06:16.675 5565-5615/***.***.*** E/CrashlyticsCore: Error occurred sending report com.crashlytics.android.core.SessionReport@46dec0b
    
    opened by finchatticus 6
  • Error in compilation

    Error in compilation

    Since today, for no reason, the library has stopped working and it always gives me an error, I have spent hours with the project to see what was failing until I finally discovered that it was this ... check it

    /.gradle/caches/transforms-2/files-2.1/73a03b94eee9f632e5fc0cdc50cafb02/jetified-kotlin-stdlib-1.5.10.jar!/META-INF/kotlin-stdlib.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16.

    opened by miguelmanas93 4
  • No onFail callback for an invalid SMTP server address or port

    No onFail callback for an invalid SMTP server address or port

    If I attempt to send an email to an invalid SMTP server address or port, I never see the onCompleteCallback being called.

    To Reproduce

    1. Configure a MaildroidX builder with an invalid SMTP address (e.g. dummy.smtp.com) and all other details correct.
    2. Call mail() to attempt to send the email

    Expected behavior onFail() should be called with an appropriate errorString

    help wanted 
    opened by jamiehiggins 4
  • Add failure reason/exception to onFail method of onCompleteCallback

    Add failure reason/exception to onFail method of onCompleteCallback

    Firstly thanks for the library, I've just started using it and it seems to work really well.

    What I am lacking though is a way to understand why an email send failed. It would be great if we could get at an underlying exception and/or failure reason in the onFail callback. This is important because if we allow a user to enter SMTP details for their own server and for example they make a typo there is just no way for my app to know or to convey to them why the email send may be failing.

    enhancement design 
    opened by jamiehiggins 4
  • Allow multiple CC / BCC, Kotlin refactor

    Allow multiple CC / BCC, Kotlin refactor

    Hey,

    We started to use maildroid for the mailing part of our company app and I needed to make some changes. This should not break anything when migrating from previous versions.

    • Merged the recipient and recipients var into one single list, to be able to add one or more recipients with the same method call
    • Did the same for cc, bcc fields
    • Reworked the attachment system to allow renaming (filename is optional)
    • Unified the log tag (you can of course ignore this if you needed specific tags)
    • Simplified some parts and avoided !! operators ..

    Feel free to ask for changes if anything looks wrong to you. I can also comment unclear parts if needed.

    All the best, Narval

    opened by NarvalNudiste 3
  • Using attachments() no attachments are sent if the array contains only one attachment

    Using attachments() no attachments are sent if the array contains only one attachment

    Describe the bug Using attachments() no attachments are sent if the array contains only one attachment

    In MaildroidX.kt it checks > 1.

    if(attachments != null && attachments!!.isNotEmpty() && attachments!!.size > 1){

    design 
    opened by yanickv 3
  • XSS in Body Mail

    XSS in Body Mail

    Describe the bug inject <h1 onload=alert(document.cookie)>Hello World!</h1> and trigged on load element and get cookies

    Desktop:

    • OS: Linux
    • Browser Chrome
    • Version 80.0.3987.163

    Smartphone:

    • Device: Pixel2
    • OS: Android 9
    • Browser Chrome
    • Version 80.0.3987.162

    Additional context

    • https://portswigger.net/web-security/cross-site-scripting
    opened by rezaduty 2
  • Design of Library

    Design of Library

    Please share your feedback if you want to use this library and help us grow :tada: We strive for improvement so any feedback even slightest is always welcome.

    design 
    opened by nedimf 5
Releases(v0.1.1-release)
  • v0.1.1-release(Dec 22, 2022)

  • v0.1.0-release(Jan 29, 2022)

    This version should fix error with Android 11 unresolved dependencies!

    What's Changed

    • Fix android 11 error by @v1rus-dev in https://github.com/nedimf/maildroid/pull/41

    New Contributors

    • @v1rus-dev made their first contribution in https://github.com/nedimf/maildroid/pull/41

    Full Changelog: https://github.com/nedimf/maildroid/compare/v0.0.5...v0.1.0-release

    Source code(tar.gz)
    Source code(zip)
  • v0.0.9-release(Nov 1, 2021)

    This release contains updated version of JakartaMail API, this should solve any Android 11 incompatibilities. Big thanks to @julianprester for providing needed PR #39

    Thank you all for using Maildroid!

    Source code(tar.gz)
    Source code(zip)
  • v0.0.8-release(May 23, 2021)

    Thanks to contribution of @rcoley93, I'm happy to create new release of your favorite Android emailing library! Ryan did amazing job, adding new features to this library:

    • multiple recipients for to: email field
    • bcc support
    • cc support

    Ryan also added new design to sample app. Thank you Ryan for your contribution, looking forward to see what else you contribute to this project!


    Ryans PR: #33

    Source code(tar.gz)
    Source code(zip)
  • v0.0.7-release(Feb 10, 2021)

  • v0.0.6-release(Jan 9, 2021)

  • v0.0.5(Aug 3, 2020)

  • v0.0.4-relase(May 17, 2020)

  • v0.0.4(Apr 7, 2020)

    In this release we introduced:

    • isJavascriptDisabled

    This option should be true only for specific case when javascript must not be parsed. This is built in as reference to issue #21. Be aware that using this will distort CSS layout of an e-mail.

    .isJavascriptDisabled(true) 
    
    
    • smtpAuthentication

    constructor is DEPRECETED as of it's now default `` `true``` in the codebase. Referencing issue #15

    Thank you for using this library.

    Nedim

    Source code(tar.gz)
    Source code(zip)
  • v0.0.3(Aug 29, 2019)

    Version v0.0.3 :tada:

    It's time for version v0.0.3. This is small release and we are pushing it because of the enhancement that we added in latest commit to fix issue #12. New feature:

    •   onCompleteCallback(object : MaildroidX.onCompleteCallback{
                    override val timeout: Long = 4000 //Add timeout accordingly
                    override fun onSuccess() { //Success message}
                    override fun onFail(errorMessage: String) { //Error message and errorMessage to identify it}
                })
      

    We have added errorMessage parameter in function onFail() and we are hoping that it will be used to more easily identify errors in sending email.

    • context() parameter is DEPRECATED
    • Library will no longer check if internet connection is active, we will leave that to developer

    Celebrating 90 :star:

    Thank you very much for supporting and using this library :bowing_man:

    Source code(tar.gz)
    Source code(zip)
  • v0.0.2(Aug 13, 2019)

    Version 0.0.2 alpha release :tada:

    New features:

    • DSL implementation ( Thank you @javier-moreno :+1: : )
    • Enum class to declare type of email (HTML/PLAIN)
    • No limit on number attachments
    • No limit on number of recipients
    • Better handling onCompleteCallback
    • Solve issues/bugs #6 #10 #9

    Thank you message

    I have published this library less than a week ago and we are already pushing a new alpha version. Big thank you to all redditors on r/androidev who commented, open thread and upvoted this library :bowing_man:
    Also big thanks to @javier-moreno who is maildroid 's, the first contributor :bowing_man:

    Source code(tar.gz)
    Source code(zip)
  • 0.0.1(Aug 10, 2019)

Owner
Nedim
Creating next big thing
Nedim
A server code template using Kotlin, Gradle, and Ktor

This project is a server code template using Kotlin, Gradle, and Ktor. It aims to help you build a service by providing reusable code examples that is likely essential for a server.

Dooho Chang 25 Dec 26, 2022
A collection of small utility functions to make it easier to deal with some otherwise nullable APIs on Android.

requireKTX requireKTX is a collection of small utility functions to make it easier to deal with some otherwise nullable APIs on Android, using the sam

Márton Braun 82 Oct 1, 2022
Small app to create icon sets for Linux, Windows, OSX, Android and IOS from a single PNG image

FXIconcreator Small app to create icon sets (multi resolution) for Linux, Windows, OSX from a single PNG image Reason for creating such an app was tha

null 18 Aug 4, 2022
CryptoMovies is a small app that show modern Android developement: with Hilt, Coroutines, Flow, Jetpack and Material Design 3

CryptoMovies is a small app that show modern Android developement: with Hilt, Coroutines, Flow, Jetpack and Material Design 3.

Leonardo Pirro 7 Sep 2, 2022
Server Sent Events (SSE) client multiplatform library made with Kotlin and backed by coroutines

OkSSE OkSSE is an client for Server Sent events protocol written in Kotlin Multiplatform. The implementation is written according to W3C Recommendatio

BioWink GmbH 39 Nov 4, 2022
Permissionmanager is a small wrapper for handling permission requests.

Permissionmanager Permissionmanager is a small wrapper for handling permission requests. Installation Add jitpack to your repositories in Project buil

Thomas Cirksena 11 Nov 17, 2020
💫 Small microservice to handle state changes of Kubernetes pods and post them to Instatus or Statuspages

?? Kanata Small microservice to handle state changes of Kubernetes pods and post them to Instatus or Statuspages ?? Why? I don't really want to implem

Noel 4 Mar 4, 2022
A small DSL to make building a conversation in Bukkit easy.

Konversation Konversation provides a simple builder to construct chains of prompts to be used in the conversation API present in Bukkit. Bukkit only p

Tim Hagemann 2 Dec 4, 2022
Small Kafka Playground to play around with Test Containers, and KotlinX Coroutines bindings while reading Kafka Definite Guide V2

KafkaPlayground Small playground where I'm playing around with Kafka in Kotlin and the Kafka SDK whilst reading the Kafka book Definite Guide from Con

Simon Vergauwen 34 Dec 30, 2022
Small lib for recovering stack trace in exceptions thrown in Kotlin coroutines

Stacktrace-decoroutinator Library for recovering stack trace in exceptions thrown in Kotlin coroutines. Supports JVM(not Android) versions 1.8 or high

null 104 Dec 24, 2022
Location-history-viewer - Small compose-desktop app to view data from google's location history

Google Location History Takeout Viewer This application provides a minimalistic

Chris Stelzmüller 3 Jun 23, 2022
Arrow-Maven-Template - A template project for Arrow with Maven. It defines an application and a couple small examples

Arrow-Maven-Template A template project for Arrow on Maven. See the official doc

ΛRROW 0 Jan 11, 2022
LanServers - A small plugin written in Kotlin that runs on all major Minecraft Servers

LanServers This is a small plugin written in Kotlin that runs on all major Minec

Redstonecrafter0 6 Mar 12, 2022
Gradle plugin adding a task to run a Paper Minecraft server

Run Paper Run Paper is a Gradle plugin which adds a task to automatically download and run a Paper Minecraft server along with your plugin built by Gr

Jason 64 Dec 29, 2022
VirtualTag is a name tag edit plugin for minecraft server

VirtualTag VirtualTag is a NameTag Edit plugin for modern minecraft server Support Version 1.17.x Download https://github.com/jiangdashao/VirtualTag/r

RERERE 13 Dec 18, 2022
A powerful Minecraft Server Software coming from the future

Mirai A powerful Minecraft Server Software coming from the future Mirai is ❗ under heavy development ❗ and contributions are welcome! Features 30% fas

Etil 354 Dec 30, 2022
Solves every bug, ever, for any Paper server.

NoServer Solves every bug, ever, for any Paper server. How does it work? By employing the use of advanced philosophical-programmatic thinking, we have

Brian 7 Dec 29, 2021
This server uses json files to model items, entities and more.

Design Server | Simple server to design items, entities or more About this project/server: This server uses json files to model items, entities and mo

Phillipp Glanz 5 Jan 7, 2022
Pragmateam code challenge server (Kotlin)

Pragmateam code challenge server (Kotlin) Please refer to the provided document for the code challenge requirements. Framework & languages This projec

Pragmateam 0 Nov 9, 2021