{"id":15655410,"url":"https://github.com/ghostbuster91/ktm","last_synced_at":"2025-10-14T03:31:48.912Z","repository":{"id":45781855,"uuid":"135726929","full_name":"ghostbuster91/ktm","owner":"ghostbuster91","description":"Kotlin Tooling Manager","archived":true,"fork":false,"pushed_at":"2022-07-16T10:51:29.000Z","size":192,"stargazers_count":25,"open_issues_count":7,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-04T12:58:50.508Z","etag":null,"topics":["cli","github","jitpack","kotlin"],"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/ghostbuster91.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}},"created_at":"2018-06-01T14:20:44.000Z","updated_at":"2024-08-20T12:59:13.000Z","dependencies_parsed_at":"2022-09-02T01:22:27.166Z","dependency_job_id":null,"html_url":"https://github.com/ghostbuster91/ktm","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghostbuster91%2Fktm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghostbuster91%2Fktm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghostbuster91%2Fktm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ghostbuster91%2Fktm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ghostbuster91","download_url":"https://codeload.github.com/ghostbuster91/ktm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236441988,"owners_count":19149327,"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":["cli","github","jitpack","kotlin"],"created_at":"2024-10-03T12:59:01.670Z","updated_at":"2025-10-14T03:31:43.632Z","avatar_url":"https://github.com/ghostbuster91.png","language":"Kotlin","readme":"# Kotlin Tooling Manager [![Build Status](https://travis-ci.org/ghostbuster91/ktm.svg?branch=master)](https://travis-ci.org/ghostbuster91/ktm) ![Release](https://jitpack.io/v/ghostbuster91/ktm.svg)\n\nKTM allows you to install command line applications(gradle based) directly from github.\n\n## Installation\n**Using wget**\n```\nbash -c \"$(wget https://raw.githubusercontent.com/ghostbuster91/ktm/master/install.sh -O -)\"\n```\n*If you are using fish shell you have to remove $ sing from installation command*\n```\nbash -c \"(wget https://raw.githubusercontent.com/ghostbuster91/ktm/master/install.sh -O -)\"\n```\n\nModify your `$PATH` to include `~/.ktm/bin`\n\nFor example if you use bash shell add following line to your `.bashrc`:\n\n`export PATH=$PATH:~/.ktm/bin`\n\n## Motivation\nIf you stripped it off, it is basically another tool to manage binary files. So the question comes, why did I create it?\n- Python has pip, JavaScript has npm and yarn (and probably many others), go has go get, even linux distros have their owns,\n  so I thought that it would be great if kotlin had something similar.\n- I think that cli will stick with us for a while. I see many great cli applications being built using js,\n  and I wanted to be able to build my own tools, but in a language I prefer.\n- Next thing is that many of mentioned above tools(if not all) require developers to publish artifacts to some other repository.\n  In the open source approach, where everything which is needed, to assemble the binary, is already on the internet,\n  I perceive this step as an unnecessary burden and redundant work.\n  Using this tool, artifacts can be installed directly from github repository.\n- Last but not least, I wanted to write some kotlin code.\n\n## Usage\n```\nUsage: ktm [OPTIONS] COMMAND [ARGS]...\n\nOptions:\n  --version   Show the version and exit.\n  -h, --help  Show this message and exit\n\nCommands:\n  install  Install or update given package\n  aliases  Manage aliases\n  info     Search jitPack api for versions of given package\n  search   Search jitPack api for given substring in package name\n  use      Switch to another version of already installed package\n  list     Display all installed packages with corresponding versions\n```\n\n### Install command\nTo illustrate workflow with this tool we will use [ktm-example-artifact](https://github.com/ghostbuster91/ktm-example-artifact)\n\nInstalling ktm-example-artifact:\n```\nktm install com.github.ghostbuster91:ktm-example-artifact --version 1.0.0\n```\nAs a version `git tag` or sha of git commit can be provided.\nFor many artifacts(read below for explanation) this can be simplified to:\n\n```\nktm install ktm-example-artifact\n```\n\nKTM will ask jitpack about all artifacts which contain `ktm-example-artifact` in their name.\nIf result will be a single item, ktm will proceed with installation, otherwise it will stop printing matched artifacts.\nVersion, if not provided, will be automatically picked up by asking jitpack about latest successful built of given artifact.\n\n*Note: jitPack api returns only results for repositories which have at least one `git tag` and that tag has been requested to download. You can ommit this limitation using [ktm-jitpack-notifier](https://github.com/ghostbuster91/ktm-jitpack-notifier/tree/master).*\n\n### Use command\nIf you have many versions of single artifact installed you can easily switch between them using `use` command:\n\n```\nktm use ktm-example-artifact --version 2.0.0\n```\n\nAgain, version and naming resolving works the same way as during installation.\n\n### List command\nRetrive all installed binaries with corresponding versions\n```\nktm list\n```\n```\nktm --\u003e 0.0.5\nktm-example-artifact --\u003e 2.0.0\n```\n### Search command\nIf you want to look for some command or just check all commands issued from particular repository you can use search command.\n```\nktm search com.github.ghostbuster91\n```\n```\ncom.github.ghostbuster91:ktm --\u003e [0.0.5, 0.0.4, 0.0.2]\ncom.github.ghostbuster91:solidity-collision-checker --\u003e [1.0.0]\n```\n*Search command will show you only artifacts which were built by jitPack, which means that they were requested to download at least once. You can ommit this limitation using [ktm-jitpack-notifier](https://github.com/ghostbuster91/ktm-jitpack-notifier/tree/master).*\n### Aliases command\n\nIf you work in a team and someone within it is developing a tool for the rest, you will find your self constantly updating it. In some cases naming resolving may not work for you and typing the fully qualified name of the artifact is tedius.\n\nThat's why the aliases were added.\n\nTo list all defined aliases:\n```\nktm aliases\n```\n\nBy default there is one alias added for ktm:\n```\n(ktm, com.github.ghostbuster91:ktm)\n```\n\nYou can add your own aliases easily:\n```\nktm aliases --add yourAliasName yourArtifactFullyQualifiedName\n```\n### Info command\nTo fetch information about versions of given artifact simply invoke info command. It is just a facade over jitPack api.\n```\nktm info ktm\n```\n```\nLooking for com.github.ghostbuster91:ktm......\n8fb07d78d4 --\u003e Error\ne19240a0fb --\u003e ok\n0.0.1 --\u003e Error\n0.0.2 --\u003e ok\n92af9f2605 --\u003e ok\n0.0.4 --\u003e ok\n6624eefc9f --\u003e ok\n0.0.5 --\u003e ok\n```\n*Info command will show you only artifacts which were built by jitPack, which means that they were requested to download at least once. You can ommit this limitation using [ktm-jitpack-notifier](https://github.com/ghostbuster91/ktm-jitpack-notifier/tree/master).*\n\n### Update command\nYou can simply update all applications installed via ktm by invoking\n```\nktm update\n```\nThis works based on github tags, which means that application will be updated only if it has a newer tag in repository.\n\n### Requirements for applications\nThere are only two requirements for applications, so they can be installed using ktm.\n1. Use gradle as a build system\n2. Have application plugin applied\n\nAn example application can be found [here](https://github.com/ghostbuster91/ktm-example-artifact/)\n\n### KTM internals\n\nBelow is an output of `tree ~/.ktm` command just after the installation.\n```\n.ktm\n├── aliases\n├── bin\n│   └── ktm -\u003e ~/.ktm/modules/com.github.ghostbuster91/ktm/0.0.5/ktm/bin/ktm\n└── modules\n    └── com.github.ghostbuster91\n        └── ktm\n            ├── 0.0.5\n            │   └── ktm\n            │       ├── bin\n            │       │   ├── ktm\n            │       │   └── ktm.bat\n            │       └── lib\n            │           ├── adapter-rxjava2-2.3.0.jar\n            │           ├── annotations-13.0.jar\n            │           ├── clikt-1.2.0.jar\n            │           ├── commons-codec-1.2.jar\n            │           ├── commons-compress-1.14.jar\n            │           ├── commons-httpclient-3.1.jar\n            │           ├── commons-logging-1.2.jar\n            │           ├── commons-vfs2-2.2.jar\n            │           ├── converter-moshi-2.3.0.jar\n            │           ├── converter-scalars-2.3.0.jar\n            │           ├── jline-2.14.2.jar\n            │           ├── kotlin-reflect-1.2.21.jar\n            │           ├── kotlin-stdlib-1.2.40.jar\n            │           ├── ktm-0.0.5.jar\n            │           ├── logging-interceptor-3.9.1.jar\n            │           ├── moshi-1.6.0.jar\n            │           ├── moshi-kotlin-1.6.0.jar\n            │           ├── okhttp-3.9.1.jar\n            │           ├── okio-1.14.0.jar\n            │           ├── reactive-streams-1.0.1.jar\n            │           ├── retrofit-2.3.0.jar\n            │           ├── rxjava-2.1.7.jar\n            │           └── rxkotlin-2.2.0.jar\n            └── ktm-0.0.5\n```\nAll installed artifacts are stores under `~/.ktm/modules` directory. Next ktm creates symlinks for currently used versions of relevant artifacts. These symlinks are stored in `~/.ktm/bin`. \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghostbuster91%2Fktm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fghostbuster91%2Fktm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fghostbuster91%2Fktm/lists"}