{"id":13537211,"url":"https://github.com/chopyourbrain/kontrol","last_synced_at":"2026-01-11T16:56:27.202Z","repository":{"id":39710584,"uuid":"403580882","full_name":"chopyourbrain/kontrol","owner":"chopyourbrain","description":"Kontrol - a Kotlin Multiplatform library for creating debug menu.","archived":false,"fork":false,"pushed_at":"2024-05-29T11:13:28.000Z","size":1055,"stargazers_count":49,"open_issues_count":0,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-03T02:32:39.347Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chopyourbrain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-06T10:31:53.000Z","updated_at":"2024-09-16T12:51:49.000Z","dependencies_parsed_at":"2024-05-29T12:48:42.770Z","dependency_job_id":"6244ab62-08bf-4cd4-9667-eebabf1030ee","html_url":"https://github.com/chopyourbrain/kontrol","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chopyourbrain%2Fkontrol","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chopyourbrain%2Fkontrol/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chopyourbrain%2Fkontrol/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chopyourbrain%2Fkontrol/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chopyourbrain","download_url":"https://codeload.github.com/chopyourbrain/kontrol/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246756744,"owners_count":20828757,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T09:00:56.346Z","updated_at":"2026-01-11T16:56:27.190Z","avatar_url":"https://github.com/chopyourbrain.png","language":"Kotlin","funding_links":[],"categories":["Libraries"],"sub_categories":["GUI","🔧 Utils"],"readme":"# Kontrol\n![Maven Central](https://img.shields.io/maven-central/v/io.github.chopyourbrain/kontrol)\n![badge][badge-android]\n![badge][badge-ios]\n\n\u003cimg src=\"https://github.com/chopyourbrain/kontrol/blob/master/screenshots/1.png\" width=\"281\" height=\"600\"\u003e\u003cimg src=\"https://github.com/chopyourbrain/kontrol/blob/master/screenshots/4.png\" width=\"299\" height=\"600\"\u003e\n\n\u003cimg src=\"https://github.com/chopyourbrain/kontrol/blob/master/screenshots/2.png\" width=\"281\" height=\"600\"\u003e\u003cimg src=\"https://github.com/chopyourbrain/kontrol/blob/master/screenshots/3.png\" width=\"299\" height=\"600\"\u003e\n\nKontrol - a Kotlin Multiplatform library for creating a debugging menu.\n\n## Setup\n\n### KMM:\n\nAdd a dependency to your build.gradle\n\n```kotlin\nval commonMain by getting {\n    dependencies {\n      implementation(\"io.github.chopyourbrain:kontrol:$kontrol_version\")\n    }\n}\n\n```\n\nAndroid setup:\n\n```kotlin\nclass App : Application() {\n\n    override fun onCreate() {\n        super.onCreate()\n        kontrolAndroidInstall(applicationContext)\n    }\n}\n```\n\niOS setup (inside iosMain):\n\n```kotlin\nfun initIOS(navigationController: UINavigationController) {\n    kontrolIOSInstall(navigationController)\n}\n```\n\nKtor network inspection setup:\n\n```kotlin\nval httpClient = HttpClient(okhttp) {\n    install(KontrolKtorInterceptor) {\n      databaseDriverFactory = DatabaseDriverFactory(applicationContext)\n    }\n}\n```\n\n### Android:\n\nAdd dependency to your build.gradle\n\n```kotlin\nimplementation(\"io.github.chopyourbrain:kontrol-android:$kontrol_version\")\n```\n\nAdd setup to your application:\n\n```kotlin\nclass App : Application() {\n\n    override fun onCreate() {\n        super.onCreate()\n        kontrolAndroidInstall(applicationContext)\n    }\n}\n```\n\nOkhttp inspection setup:\n\n```kotlin\nval client = OkHttpClient.Builder()\n    .addInterceptor(KontrolOkhttpInterceptor(DatabaseDriverFactory(applicationContext)))\n    .build()\n```\n\n## Using the Library\n\nInside common code\n\nCreate your properties by DSL: \n\n```kotlin\nval properties = properties {\n    group(\"Network\") {\n        switcher(\"Enable log\", true) {\n            //Check listener\n        }\n        dropDown(\"Server\", listOf(\"google.com\", \"amazon.com\", \"reddit.com\"), \"google.com\") {\n            //Change listener\n        }\n        text(\"Default error\", \"Main Exception\")\n        button(\"Send request\") {\n            //Click listener\n        }\n    }\n    group(\"App\") {\n        switcher(\"darkTheme\", \"Enable dark theme\")\n        dropDown(\"version\", \"Version\", listOf(\"1.0\", \"2.0\", \"3.0\"))\n        text(\"Version code\", \"1.0\")\n        button(\"Kill application\") {\n            //Click listener\n        }\n    }\n    button(\"Clear cache\") {\n        //Click listener\n    }\n}\n```\n\nImplement key-value storage for saving switcher and dropDown state (if nessesary):\n\n```kotlin\nval kvStorage = object : KVStorage {\n    override fun getBoolean(key: String): Boolean? {\n        return settings.getBooleanOrNull(key)\n    }\n\n    override fun getString(key: String): String? {\n        return settings.getStringOrNull(key)\n    }\n\n    override fun setBoolean(key: String, value: Boolean) {\n        settings[key] = value\n    }\n\n    override fun setString(key: String, value: String) {\n        settings[key] = value\n    }\n\n}\n```\n\n### Important: \nIf you want to use KVStorage, create switchers and dropDowns by this: \n\n```kotlin\nswitcher(\"KEY\", \"Description\")\ndropDown(\"KEY\", \"Description\", listOf(\"First value\", \"Second value\", \"Third value\"))\n```\n\nThen create DebugScreen object and use `show()` for open screen:\n\n```kotlin\nval debugScreen = createDebugScreen(properties, kvStorage)\ndebugScreen.show()\n```\n\n## SAMPLE\n[Click here](https://github.com/chopyourbrain/kontrol/tree/master/sample)\n\n## ENJOY!\n\n[badge-android]: http://img.shields.io/badge/platform-android-6EDB8D.svg?style=flat\n[badge-ios]: http://img.shields.io/badge/platform-ios-CDCDCD.svg?style=flat\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchopyourbrain%2Fkontrol","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchopyourbrain%2Fkontrol","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchopyourbrain%2Fkontrol/lists"}