{"id":13861616,"url":"https://github.com/emacs-taskrunner/emacs-taskrunner","last_synced_at":"2025-07-14T09:32:41.557Z","repository":{"id":218765072,"uuid":"200453410","full_name":"emacs-taskrunner/emacs-taskrunner","owner":"emacs-taskrunner","description":"A universal task runner for emacs","archived":false,"fork":false,"pushed_at":"2024-06-01T23:22:54.000Z","size":345,"stargazers_count":89,"open_issues_count":7,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-08-05T06:03:28.258Z","etag":null,"topics":["elisp","emacs","emacs-lisp","taskrunner"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emacs-taskrunner.png","metadata":{"files":{"readme":"README.org","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}},"created_at":"2019-08-04T05:24:07.000Z","updated_at":"2024-07-12T15:34:29.000Z","dependencies_parsed_at":null,"dependency_job_id":"821d52f4-86aa-420e-bd8e-ab8447226ab2","html_url":"https://github.com/emacs-taskrunner/emacs-taskrunner","commit_stats":null,"previous_names":["emacs-taskrunner/emacs-taskrunner"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-taskrunner%2Femacs-taskrunner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-taskrunner%2Femacs-taskrunner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-taskrunner%2Femacs-taskrunner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-taskrunner%2Femacs-taskrunner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emacs-taskrunner","download_url":"https://codeload.github.com/emacs-taskrunner/emacs-taskrunner/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225968843,"owners_count":17553147,"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":["elisp","emacs","emacs-lisp","taskrunner"],"created_at":"2024-08-05T06:01:26.339Z","updated_at":"2024-11-22T21:30:54.232Z","avatar_url":"https://github.com/emacs-taskrunner.png","language":"Emacs Lisp","readme":"* Emacs Taskrunner\nThis is an elisp library which aims to provide a way to retrieve all of the\ntasks/targets from various build systems and execute them in a compilation buffer.\n\nThe ultimate goal is to use this library to provide the data necessary for an\ninteractive interface through helm/ivy/ido which will let the user select tasks\nand run them. Additionally, it will also provide a task caching mechanism so the\ntasks do not have to be retrieved over and over again.\n\n*Warning*: I have not worked with most of these build systems/taskrunners but\n support has been provided for them. Since my knowledge is fairly elementary, I\n might miss some subtleties. If you have any advice then please feel free to\n open a pull request/issue on this repository. Thanks\n \n* Installation\nTo install this library, you will need the following dependencies:\n- Emacs version 25.1 and above\n- [[https://github.com/bbatsov/projectile][projectile]] \n- [[https://github.com/jwiegley/emacs-async][emacs-async]] \n\nIn addition, you will also need to install one(or more if you would like) of\nthese frontends:\n- [[https://github.com/emacs-taskrunner/ivy-taskrunner][ivy-taskrunner]] \n- [[https://github.com/emacs-taskrunner/helm-taskrunner][helm-taskrunner]] \n- Ido frontend is still in progress. Please use one of the other 2 for now.\n* Project Status\nCurrently, this project is stable. It makes quite a lot of assumptions about\nbuild/taskrunner configuration files being present at the root only and not\nnested in the file hierarchy of the project.\n** Supported Systems\nIt can be used for the following systems/frontends listed below.\n*** Currently supported\n**** Build/Task Systems\n- [X] yarn/npm\n- [X] Gulp\n- [X] Grunt\n- [X] Gradle\n- [X] Jake\n- [X] Apache ant\n- [X] mix\n- [X] leinengen\n- [X] rake\n- [X] Make\n- [X] CMake\n- [X] Meson/Ninja\n- [X] [[https://github.com/go-task/task][go-task]] \n- [X] [[https://github.com/magefile/mage][mage]] \n- [X] [[https://github.com/pydoit/doit][doit]] \n- [X] [[https://github.com/jakedeichert/mask][mask]] \n- [X] [[https://github.com/casey/just][just]] \n- [X] [[https://github.com/sagiegurari/cargo-make][cargo-make]]\n- [X] [[https://buidler.dev/][buidler]] \n- [X] [[https://github.com/rliebz/tusk][Tusk]] \n- [X] [[https://dnephin.github.io/dobi/install.html][dobi]] \n- [X] cargo(Limited Support)\n- [X] go compiler(Limited support)\n- [X] Cask(Limited Support)\n- [X] stack(Limited Support)\n- [X] cabal(Limited Support)\n**** User interfaces\n- [X] ivy\n- [X] helm\n- [ ] ido (Work in progress. Coming Soon!)\n** Planned improvements\n- [ ] Use ripgrep/ag/grep to locate task files. This will help find nested\n  Makefiles and other task files which need to be parsed.\n- [ ] Add Smart/Dumb support. Smart support will use ripgrep/ag/grep and \"Dumb\"\n  support will work very similarly to the way it is done now. This is if the\n  user does not have any of those installed or they would not like to spawn too\n  many ripgrep/ag/grep processes on their system.\n- [ ] Add support for more taskrunners/build systems.\n*** Planning to add support for\n- [ ] Apache maven\n- [ ] [[https://waf.io/][waf]] \n- [ ] [[https://github.com/pantsbuild/pants][pants]] \n- [ ] [[https://github.com/reisraff/phulp][phulp]] \n- [ ] [[https://github.com/zaaack/foy][foy]] \n- [ ] tasks.json(VSCode)\n- [ ] Ninja\n- [ ] sbt\n- [ ] Buck\n- [ ] Bazel\n- [ ] msbuild(Maybe)\n* API\nThe API for taskrunner is slowly being documented [[file:api-doc.org][here]]. It is not yet complete\nbut the majority of the basics are there.\n* Design Choices\n** Async vs Sync\nThis library comes with both sync and async functions. Originally, everything\nworked synchronously but obviously Emacs froze and was unresponsive. For most\ntaskrunners/build systems, it took only 1-3 seconds for the tasks to be\nretrieved. On the other hand most Java based systems(gradle is the worst) will\ntake 5-9 seconds to start up and spit out a list of tasks. As a result,\n~emacs-async~ was used as a way to avoid freezing the UI while tasks were being\nretrieved. \n\nUnder the hood, this whole library is synchronous and starts synchronous\nprocesses in order to coordinate the way tasks are retrieved. Most projects use\na single build system/taskrunner but for others(web projects for example) might\nuse multiple(gulp and package.json/npm scripts and so on...). If the tasks are\nretrieved asynchronously from the start then it becomes very difficult to\nsynchronize the way the tasks are added to caches and might cause data\nraces. Emacs 26 brought mutexes but those will freeze the UI as well while they\nare waiting.\n** Threads vs ~emacs-async~ \nEmacs 26 brough threads but they are cooperative. This means that processes\nwhich take a long time(cough, cough, Gradle and its daemon) will still freeze\nthe UI even when being ran on a separate thread. Due to this, ~emacs-async~ is\nused even though the Emacs which runs this library might have threads available.\n","funding_links":[],"categories":["Emacs Lisp"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacs-taskrunner%2Femacs-taskrunner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femacs-taskrunner%2Femacs-taskrunner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacs-taskrunner%2Femacs-taskrunner/lists"}