MoonGetter
A Kotlin-KMP library for extracting resources from popular sites like Streamtape, Google Drive, Mediafire, Fireload, Mp4Upload, Okru, Voe, Uqload, and many more.
Install / Use
/learn @darkryh/MoonGetterREADME
MoonGetter for Kotlin
MoonGetter MoonGetter is a robust, Kotlin-first library engineered for seamless stream extraction and video hosting download logic. It offers comprehensive support for Android and is now fully Kotlin Multiplatform (KMP) ready, featuring flexible custom server integration.
✅ Features
- Custom Server Integration — Easily build and integrate your own streaming providers.
- Coroutine-based Architecture — Async-first design for highly scalable extraction logic.
- Transparent HTTP Client Injection — Works seamlessly with both OkHttp and Ktor.
- Custom Error Types — Intuitive error handling via
InvalidServerExceptionand descriptiveErrorenums. - Flexible Cookie Management — Automatic for OkHttp, configurable for Ktor.
🔄 Compatibility Table
| Feature | Android | JVM | Kotlin Multiplatform | | :--------------------- | :-----: |:----------:| :------------------: | | Core Library | ✅ | ✅ | ✅ | | Robot Servers API | ✅ | ⏳(desktop) | ⏳ (Planned) | | Server Implementations | ✅ | ✅ | ✅ |
✅ = Supported / ⏳ = In development / JVM refers to non-Android Kotlin projects.
🌐 Supported Servers (Core)
✅ Actively maintained / 💥 Deprecated
- ✅ Google Drive
- ✅ Mediafire
- ✅ Streamtape
- ✅ PixelDrain
- ✅ Okru
- ✅ StreamWish
- 💥 Voe (Deprecated)
- ✅ Senvid
- ✅ Vihide
- ✅ Hexload
- ✅ YourUpload
- ✅ XTwitter
- ✅ LuluStream
- ✅ Mp4Upload
- ✅ Uqload
- ✅ Mixdrop
- ✅ Doodstream
- ✅ Vidguard
- ✅ Filemoon
- ✅ VK
🤖 Robot Servers (Optional)
These require the
moongetter-core-robotmodule and a platform-specific Robot API.
- 💥 Fireload (Deprecated)
- ✅ 1CloudFile
Coming Soon: GoodStream, Gofile, Abyss
☕ Installation (Gradle)
// For stable releases, use Maven Central
repositories {
mavenCentral()
}
Kotlin Multiplatform Project Dependencies
This section outlines the dependencies block specifically for integrating MoonGetter modules within a Kotlin Multiplatform (KMP) project structure. It focuses solely on MoonGetter-related dependencies, showing their placement for common shared code, Android-specific configurations, and iOS (Darwin) targets.
val moonGetterVersion = "2.0.0-alpha02"
dependencies {
// --- Common Main (Shared KMP Logic) ---
commonMain.dependencies {
implementation("io.github.darkryh.moongetter:moongetter-core:$moonGetterVersion")
implementation("io.github.darkryh.moongetter:moongetter-client-ktor:$moonGetterVersion")
implementation("io.github.darkryh.moongetter:moongetter-server-bundle:$moonGetterVersion")
implementation("io.github.darkryh.moongetter:moongetter-core-robot:$moonGetterVersion")
implementation("io.github.darkryh.moongetter:moongetter-server-robot-bundle:$moonGetterVersion")
// Optional: Individual server modules (instead of bundles)
// implementation("io.github.darkryh.moongetter:moongetter-mp4upload:$moonGetterVersion")
}
// --- Android Specific ---
androidMain.dependencies {
// Choose ONE HTTP client:
implementation("io.github.darkryh.moongetter:moongetter-client-okhttp:$moonGetterVersion") // Option 1: MoonGetter OkHttp Client
// OR
// implementation("io.ktor:ktor-client-okhttp:2.3.12") // Option 2: Ktor with OkHttp engine
implementation("io.github.darkryh.moongetter:moongetter-client-cookie-java-net:$moonGetterVersion") // Cookie management
implementation("io.github.darkryh.moongetter:moongetter-client-trustmanager-java-net:$moonGetterVersion") // Trust management
implementation("io.github.darkryh.moongetter:moongetter-android-robot:$moonGetterVersion") // Android Robot APIs
}
// --- iOS Specific ---
iosMain.dependencies {
// REQUIRED: Ktor's Darwin engine for network requests on iOS.
implementation("io.ktor:ktor-client-darwin:2.3.12")
}
// --- Desktop (JVM) Specific ---
desktopMain.dependencies {
// Choose ONE HTTP client:
implementation("io.ktor:ktor-client-cio:2.3.12") // Option 1: Ktor with CIO engine
// OR
// implementation("io.github.darkryh.moongetter:moongetter-client-okhttp:$moonGetterVersion") // Option 2: MoonGetter OkHttp Client
implementation("io.github.darkryh.moongetter:moongetter-client-cookie-java-net:$moonGetterVersion") // Cookie management
implementation("io.github.darkryh.moongetter:moongetter-client-trustmanager-java-net:$moonGetterVersion") // Trust management
}
}
Java/Kotlin JVM Project Dependencies
This section outlines the dependencies block for integrating MoonGetter modules into a standard Java or Kotlin JVM project. This includes typical Android applications or standalone desktop JVM applications that do not use Kotlin Multiplatform.
val moonGetterVersion = "2.0.0-alpha02"
dependencies {
// --- Core & Server Support ---
implementation("io.github.darkryh.moongetter:moongetter-core:$moonGetterVersion")
implementation("io.github.darkryh.moongetter:moongetter-server-bundle:$moonGetterVersion")
implementation("io.github.darkryh.moongetter:moongetter-core-robot:$moonGetterVersion")
implementation("io.github.darkryh.moongetter:moongetter-server-robot-bundle:$moonGetterVersion")
// Optional: Individual server modules
// implementation("io.github.darkryh.moongetter:moongetter-mp4upload:$moonGetterVersion")
// --- HTTP Client & Utilities ---
// Choose your client:
implementation("io.github.darkryh.moongetter:moongetter-client-okhttp:$moonGetterVersion") // Option 1: OkHttp (recommended)
// OR
// implementation("io.github.darkryh.moongetter:moongetter-client-ktor:$moonGetterVersion") // Option 2: Ktor
// + Ktor engine (e.g., "io.ktor:ktor-client-okhttp:2.3.12" or "io.ktor:ktor-client-cio:2.3.12")
implementation("io.github.darkryh.moongetter:moongetter-client-cookie-java-net:$moonGetterVersion") // Cookie management
implementation("io.github.darkryh.moongetter:moongetter-client-trustmanager-java-net:$moonGetterVersion") // Trust management
// Android-specific Robot (only for Android projects)
implementation("io.github.darkryh.moongetter:moongetter-android-robot:$moonGetterVersion")
}
🧐 Client & Cookie Management Integration
| Client Library | Module | Cookie Management | KMP Support |
|-------------------|----------------------------------------------|-----------------------------------|--------------------|
| OkHttp | moongetter-client-okhttp | ✅ Built-in | ⏳ Not Supported |
| Ktor | moongetter-client-ktor | ⚠️ Manual setup required | ✅ Experimental |
| JavaNetCookieManager | moongetter-client-cookie-java-net | ✅ (Only for Ktor, optional) | ⏳ Not Supported |
✅ = Supported / ⚠️ = Manual setup / ⏳ = Coming soon
Note:
-
OkHttp has built-in cookie support, no setup needed.
-
Ktor requires you to explicitly inject cookie management (e.g.,
JavaNetCookieManagement).Example Initialization:
MoonGetter.start(
MoonFactory
.Builder()
.setClient(
client = KtorMoonClient(
engineFactory = httpClientEngineFactory,
cookieManagement = cookieManagement,
trustManager = trustManager
)
)
.setTimeout(timeoutMillis = 12000)
.setEngine(engine = engine)
)
Example with Ktor:
MoonFactory.Builder()
.setClient(
KtorMoonClient(
engineFactory = CIO, //on iOS Darwin
cookieManagement = JavaNetCookieManagement(), //on iOS MoonCookie.Management.newEmptyFactory()
trustManager = JavaMoonTrustManager // on iOS MoonTrust.Manager.newEmptyFactory()
)
)
Example with OkHttp:
MoonFactory.Builder()
.setClient(
OkHttpClient
)
🚀 Example Usage
ViewModel with coroutine logic:
class MyViewModel : ViewModel() {
private val engine = Engine.Builder()
.onCore(
engines = arrayOf(
Mp4UploadFactory,
FilemoonFactory,
StreamtapeFactory,
StreamwishFactory,
// CustomServerFactory (recommended to use `object`)
)
)
.build()
fun getMediaStreams(url: String) = viewModelScope.launch(Dispatchers.IO) {
try {
MoonGetter.start(
MoonFactory
.Builder()
.setClient(
KtorMoonClient(
engineFactory = CIO,//jvm other option Okhttp //on iOS Darwin
cookieManagement = JavaNetCookieManagement(), //on iOS MoonCookie.Management.newEmptyFactory()
trustManager = JavaMoonTrustManager // on iOS MoonTrust.Manager.newEmptyFactory()
)
)
.setTimeout(8000)
.setEngine(engine)
)
val server : Server = MoonGetter.get(url) // returns server
val serverNullable : Server? = MoonGetter.getOrNull(url) // returns server or null, in this case there's no ne


