{"id":22015424,"url":"https://github.com/tsukinoko-kun/yab","last_synced_at":"2026-02-15T08:01:34.256Z","repository":{"id":218562017,"uuid":"746067236","full_name":"tsukinoko-kun/yab","owner":"tsukinoko-kun","description":"Cross-platform build tool with deterministic builds defined using Lua scripts.","archived":true,"fork":false,"pushed_at":"2024-04-20T15:38:33.000Z","size":490,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-13T22:46:59.604Z","etag":null,"topics":["build","build-tool","golang","lua"],"latest_commit_sha":null,"homepage":"https://brew.frankmayer.dev/formula/yab/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tsukinoko-kun.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":"2024-01-21T00:40:24.000Z","updated_at":"2024-08-20T22:03:45.000Z","dependencies_parsed_at":"2024-01-29T14:24:06.528Z","dependency_job_id":"dcecd27c-65ec-45ce-bdb2-ef38a1470e84","html_url":"https://github.com/tsukinoko-kun/yab","commit_stats":null,"previous_names":["frank-mayer/yab"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/tsukinoko-kun/yab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsukinoko-kun%2Fyab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsukinoko-kun%2Fyab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsukinoko-kun%2Fyab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsukinoko-kun%2Fyab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tsukinoko-kun","download_url":"https://codeload.github.com/tsukinoko-kun/yab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsukinoko-kun%2Fyab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29473364,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T06:58:05.414Z","status":"ssl_error","status_checked_at":"2026-02-15T06:58:05.085Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["build","build-tool","golang","lua"],"created_at":"2024-11-30T04:21:46.815Z","updated_at":"2026-02-15T08:01:33.937Z","avatar_url":"https://github.com/tsukinoko-kun.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Yab\n\nYet another build tool :construction_worker: :construction:\n\n[![Homebrew](https://img.shields.io/badge/Homebrew-FBB040?logo=homebrew\u0026logoColor=000)](#homebrew)\n\n[![Latest Release)](https://img.shields.io/github/v/release/tsukinoko-kun/yab?logo=github)](https://github.com/tsukinoko-kun/yab/releases/latest)\n\n[![CodeQL](https://github.com/tsukinoko-kun/yab/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/tsukinoko-kun/yab/actions/workflows/github-code-scanning/codeql)\n\nWouldn't it be great if you could use the same build tool for every project?\nRegardless of operating system, programming language...\n\nYab is just that.\n\nUse Lua scripts to define specific actions and execute them from the command line.\n\n\u003e [!CAUTION]\n\u003e This project is still in very early stages of development.\n\u003e Expect breaking changes.\n\u003e Stable API is guaranteed at v1.0.0\n\n## Does that not already exist?\n\nNo!\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003csup\u003eBuiltin support for many technologies\u003c/sup\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003csup\u003eSmart incremental build\u003c/sup\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003csup\u003eEasy to setup and extend\u003c/sup\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003csup\u003eImperative syntax (loops, functions, ...)\u003c/sup\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003csup\u003eParameters\u003c/sup\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003csup\u003e\u003cb\u003eNo\u003c/b\u003e domain specific language\u003c/sup\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003csup\u003eCross-platform by default\u003c/sup\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eYab\u003c/td\u003e\n            \u003ctd\u003e:x: / :white_check_mark:\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003ca href=\"https://bazel.build/\" target=\"blank\"\u003eBazel\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003ca href=\"https://gradle.org/\" target=\"blank\"\u003eGradle\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n            \u003ctd\u003e:grey_question:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:white_check_mark:\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.gnu.org/software/make/\" target=\"blank\"\u003eMake\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n            \u003ctd\u003e:x:\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n### Explanation\n\n#### Built-in support for many technologies\n\nHow many technologies are supported by the tool?\n\n#### Smart incremental build\n\nSkip tasks that are already done.\nThis should be done using file content hashes.\n\n#### Easy to set up and extend\n\nHow difficult is it to get started with the tool?\n\n#### Imperative syntax\n\nUse the tool to describe how the build process should be done.\n\n#### Parameters\n\nOptionally parametrize build configurations.\n\n#### No domain specific language\n\nUse a language to describe the build that is popular outside the tool.\n\n#### Cross-platform by default\n\nIt is easy to get the build working on different platforms.\n\n---\n\nLua is a common and performant programming language.\nYab offers some useful functions in addition to the Lua standard library that might be useful when building configurations.\n\nLooking for an example configuration?\nTake a look at [this projects `.yab` folder](https://github.com/tsukinoko-kun/yab/tree/main/.yab).\n\n## Docs\n\nDocumentation is in the [DOCS.md](https://github.com/tsukinoko-kun/yab/blob/main/DOCS.md) file.\n\n## Usage\n\nRun one or more configs:\n\n```bash\nyab run [configs ...]\n```\n\nPass arguments to the scripts:\n\n```bash\nyab run [configs ...] -- [args ...]\n```\n\nA config is a lua file inside the config directory.\n\nThe following directories are used as configs (first found wins)\n\n1. `./.yab/`\n1. `$XDG_CONFIG_HOME/yab/`\n1. `$APPDATA/yab/`\n1. `$HOME/.config/yab/`\n\nIf you run `yab run` without any arguments, the default config (`init.lua`) is used.\n\n## Lua definitions\n\nYou can use a Lua language server to get autocompletion and type checking.\n\nRun `yab def` to create a definitions file in your **global** config directory.\nAdd it to your Lua language server configuration.\n\nGlobal config is one of those directories:\n\n1. `$XDG_CONFIG_HOME/yab/`\n1. `$APPDATA/yab/`\n1. `$HOME/.config/yab/`\n\n## Example Code\n\n```lua\nlocal yab = require(\"yab\")\n\n-- use a specific Go version\nyab.use(\"golang\", \"1.21.6\")\n\n-- os specific name\nlocal bin_name = yab.os_type() == \"windows\" and \"yab.exe\" or \"yab\"\n\n-- incremental build\nyab.task(yab.find(\"**.go\"), bin_name, function()\n\tos.execute('go build -ldflags=\"-s -w\" -o ' .. bin_name .. \" ./cmd/yab/\")\nend)\n```\n\n## Attach external applications\n\nI like to create an `env.lua` config where all shared tools are defined.\n\n```lua\nlocal yab = require(\"yab\")\nyab.use(\"golang\", \"1.21.6\")\nyab.use(\"nodejs\", \"20.11.1\")\n```\n\nI now can start a shell using the specified environment using `yab run env --attach sh` or start neovim using `yab run env --attach nvim`.\n\n## Installation\n\n### Homebrew\n\n```sh\nbrew tap tsukinoko-kun/tap\nbrew install tsukinoko-kun/tap/yab\n```\n\n### Go install\n\n```bash\ngo install github.com/tsukinoko-kun/yab@latest\n```\n\n### Binary from release\n\n[Latest release](https://github.com/tsukinoko-kun/yab/releases/latest)\n\n## GitHub Actions\n\n```yaml\n- name: Use Yab\n  uses: tsukinoko-kun/use-yab@v1\n```\n\nYou can specify a version using the `version` input. The default is `latest`.\n\n```yaml\n- name: Use Yab\n  uses: tsukinoko-kun/use-yab@v1\n  with:\n      version: 0.3.0\n```\n\n## Badge\n\nUse the badge to show that your project uses Yab.\nThis helps to spread the word about Yab and makes it easier for others to work on your project.\n\nThis is just a suggestion.\nYou don't have to use it.\n\n[![Yab Project](https://img.shields.io/badge/Yab_Project-2C2D72?logo=lua)](https://github.com/tsukinoko-kun/yab)\n\n```markdown\n[![Yab Project](https://img.shields.io/badge/Yab_Project-2C2D72?logo=lua)](https://github.com/tsukinoko-kun/yab)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsukinoko-kun%2Fyab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftsukinoko-kun%2Fyab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsukinoko-kun%2Fyab/lists"}