| Crates.io | task-keeper |
| lib.rs | task-keeper |
| version | 0.30.3 |
| created_at | 2022-08-06 02:15:22.532841+00 |
| updated_at | 2025-08-30 15:38:08.167468+00 |
| description | Task keeper to manage tasks from different task runners |
| homepage | https://github.com/linux-china/task-keeper |
| repository | https://github.com/linux-china/task-keeper |
| max_upload_size | |
| id | 639651 |
| size | 495,324 |
tk(Task Keeper) is a tool to manage tasks from different task files,
such as Makefile,justfile, package.json , deno.json, .fleet/run.json etc.,
and call tasks from different project management tools,
such as Apache Maven, Gradle, Cargo and npm etc.

Bonus: sq(Squirrel) is a command-line snippets keeper to manage cli snippets.
tk --listtk task_nametk --runner=npm starttk --from=npm --to=fleet task1 task2tk --no-dotenv to disable--doctor support: check your system for potential problems to run taskstk -- node hello.js with a correct language version and PATHcargo install task-keeper (or cargo binstall task-keeper)nix shell github:linux-china/task-keepernix profile install github:linux-china/task-keeperAfter installation, execute tk --help for usage. Some commands as following:
tk --listtk task_nameSorry, I got lost in different task files and management tools, and sometimes I even cannot remember how to run them.
Makefile,justfile, package.json, deno.json, Taskfile.yml, tasks.py, README.md etc., and
too many task files to check tasks.just taskName, npm run task_name, deno task task_name, composer run-script task_name etcmvn versions:display-dependency-updates, ./gradlew dependencyUpdates, npm outdated etcmvn -DskipTests package, ./gradlew assemble, cargo build etcToo many differences, I want to save my brain and keyboard, and you know MacBook keyboard's price tag is $400+.
Bun Shell is a nice feature from Bun to make shell scripting with JavaScript & TypeScript fun.
Now Task Keeper support Taskfile.ts with Bun Shell, and you can use the following code to run tasks:
import {$} from "bun";
export async function hello() {
await $`echo Hello World!`;
}
export async function list_js() {
await $`ls *.js`;
}
Then execute tk hello to run the task with Bun Shell.
command type support now:
For details, please refer https://www.jetbrains.com/help/fleet/run-configs.html
Task Keeper uses .java-version, .node-version, .python-version files to detect a language version and bound with
local installed SDK.
To make task runner run tasks smoothly, Task Keeper will append the following directories to PATH automatically:
node-modules/.binvenv/bin or .venv/binvendor/binbin.binFor example, if you use Python virtual env to manage your project, Task Keeper will add venv/bin to PATH
automatically, and you don't need to do anything.
hello:
python hello.py
Tips: you can use double dash to run command with language detection and correct PATH,
such as tk -- mvn spring-boot:run. To make life easy, and you can use alias e='tk --' to create an alias,
then you can run e mvn spring-boot:run to run your project.
mvn archetype:generate, npm init, cargo new xxx etcnpm istall, dependency:resolvetk build -- --release, maven: mvn -DskipTests clean package, npm: npm run buildgo run main.gonpm test, maven: mvn test, cargo: cargo testmvn javadoc:javadocmvn clean, cargo: cargo cleango list -u -m allgo get -utk add dependency or tk -D add dependency or tk --runner=npm add dependencyAttention: if package manager's task name is in a task runner, and task keeper will not execute package manager's command.
Available
Please set up gradle-versions-plugin for dependency version
management.
You can transparently add the plugin to every Gradle project that you run via a Gradle init script.
$HOME/.gradle/init.d/plugins.gradle with the following code:
initscript {
repositories {
gradlePluginPortal()
}
dependencies {
classpath 'com.github.ben-manes:gradle-versions-plugin:+'
}
}
allprojects {
apply plugin: com.github.benmanes.gradle.versions.VersionsPlugin
tasks.named("dependencyUpdates").configure {
// configure the task, for example wrt. resolution strategies
}
}
Please add sbt-updates and DependencyTreePlugin as global plugins.
$HOME/.sbt/1.0/plugins/plugins.sbt with the following code:
addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.3")
addDependencyTreePlugin
Available.
bld is a new build system that allows you to write your build logic in pure Java.
Available
npm-check command available, npm-check -u will be used as outdated task.yarn, pnpm, bun supportAvailable. Please install cargo-tree, cargo-outdated.
Available
Available
Available
Only support cmake-conan, and conanfile.txt required.
Default build directory is cmake-build-debug, and you override it by CMAKE_BINARY_DIR=_build tk build.
Available
Available. Please install swift-outdated for outdated operation.
Available.
Available with the following tools:
[tool.poe] detected in pyproject.tomluv.lock or [tool.uv] detected in pyproject.tomlYou can use uv to install these tools:
uv tool install poethepoetuv tool install poetryuv tool install invokeAvailable.
Please set up antq for outdated dependencies. $HOME/.lein/profiles.clj
{
:user
{:dependencies [[com.github.liquidz/antq "RELEASE"]]
:aliases {"outdated" ["run" "-m" "antq.core"]}
}
}
Available.
Available.
Available.
Available.
if you use JetBrains IDE to edit Taskfile.yml, please add $schema comment on top of Taskfile.yml for completion.
# $schema: https://taskfile.dev/schema.json
version: '3'
tasks:
hello:
cmds:
- echo 'Hello World from Task!'
silent: true
Task keeper will parse README.md and extract tasks with the following code block format:
```shell {#task_name}
curl https://httpbin.org/ip
```
Now only shell, sh, javascript and typescript are supported.
Run JavaScript/TypeScript by node or deno:
```javascript {#task_name .deno}
console.log("hello world");
```
tk hello --name linux_chinatk hello - Jackie, use - to separate task paramstk hello --name Jack -- --verbose, use -- double dash to separate global optionsTask Keeper will detect a version configuration file and adjust the environment variables to run tasks.
.python-version is used for version management for pyenv.
.java-version is used for version management, and values as following:
Task Keeper will try to find Java from $HOME/.jbang/cache/jdks or $HOME/.sdkman/candidates/java/.
.sdkmanrc support, and set HOME and PATH environment variables automatically. Please refer https://sdkman.io/usage#env
for detail.
.node-version is used for Node.js version management, and values as following:
Task Keeper will try to find Node from $HOME/.nvm/versions/node or $HOME/.volta/tools/image/node.
sq is a command-line snippets keeper to manage cli snippets, and it's based on Just command runner.
sq listsq add snippet_namesq edit snippet_name. sq uses EDITOR environment variable to open snippets justfile.sq snippet_nameSnippets justfile: $HOME/.sk/snippets.just.
Please set TK_TASK_ID for task unique name, and Task Keeper will send notification when the task finished.
NATS_URL environment variable to set NATS server URL, and task-keeper as subject.TK_TASK_ID environment variable to set OSS object name, such as tasks/random-uuid.
to set OSS object name.
S3_ENDPOINT_URL: such as http://minio.example.com:9000S3_ACCESS_KEY: access key for S3S3_SECRET_KEY: access secret for S3S3_BUCKET: bucket name for S3S3_REGION: region for S3, such as us-east-1S3_VIRTUAL_STYLE: for MinIO, you don't need to set this, but for Aliyun OSS, you need to set this to true to
use
virtual-hosted-style requests.Tips: Notification is useful for CI/CD.
$ curl https://httpbin.org/get
$ curl -X POST https://httpbin.org/post
curl --silent https://httpbin.org/ip | jq '.origin'
curl https://httpbin.org/ip \
--user-agent "Task Keeper/0.1.0" \
--silent
curl https://httpbin.org/headers
let name: string = "linux_china";
console.log(name);