Skip to content

Launch your Kotlin / KMP app automatically on system startup ✨

License

Notifications You must be signed in to change notification settings

vinceglb/AutoLaunch

Repository files navigation

AutoLaunch Kotlin

AutoLaunch Kotlin

Lightweight Kotlin library to enable auto-launch on system startup.

AutoLaunch Maven Version Badge JVM

📦 Installation

AutoLaunch targets JVM platform.

repositories {
    mavenCentral()
}

dependencies {
    implementation("io.github.vinceglb:auto-launch:0.1.0")
}

🚀 Quick start

// Create an instance of AutoLaunch.
val autoLaunch = AutoLaunch(appPackageName = "com.autolaunch.sample")

// Enable or disable launch at startup.
autoLaunch.enable()
autoLaunch.disable()

// Check if auto launch is enabled.
val isEnabled = autoLaunch.isEnabled()

ℹ️ Note: To test the auto-launch feature, your application must be distributed. With Compose Multiplatform, you can run a distributable package using ./gradlew :runDistributable

📖 Advanced

⚡️ Convenient methods

// Get the app resolved executable path
val appPath = AutoLaunch.resolvedExecutable

// Determine whether the app is distributable
val isDistributable = AutoLaunch.isRunningFromDistributable

🔧 Customizing the application path

By default, your application path is detected automatically. You can customize the application path that will be launched at startup:

  • MacOS: something like /Applications/JetBrains Toolbox.app/Contents/MacOS/jetbrains-toolbox.
  • Windows: the path to the .exe file.
val autoLaunch = AutoLaunch(
    appPackageName = "com.autolaunch.sample",
    appPath = "/path/to/your/app"
)

✨ Behind the scene

Depending on the platform, AutoLaunch uses the following techniques:

  • MacOS: create a plist file in ~/Library/LaunchAgents/ directory.
  • Windows: create a registry key in HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.
  • Linux: to be implemented 🚧

🌱 Sample project

You can find a sample project in the sample directory. Run the following command to test the auto-launch feature:

:sample:runDistributable

😎 Contribution

Your contributions are welcome 🔥 Here are some features that are missing:

  • Linux support
  • Pass optional arguments to the application

Made with ❤️ by Vince