{"id":50493809,"url":"https://github.com/kyonru/feel.lua","last_synced_at":"2026-06-02T05:03:34.570Z","repository":{"id":360318325,"uuid":"1249366382","full_name":"Kyonru/feel.lua","owner":"Kyonru","description":"feedback recipe runner for making game actions feel better.","archived":false,"fork":false,"pushed_at":"2026-05-25T23:54:57.000Z","size":81,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T00:27:51.165Z","etag":null,"topics":["animation","feedback","love","love2d","lua","tween"],"latest_commit_sha":null,"homepage":"https://kyonru.github.io/feel.lua/","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Kyonru.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-25T16:13:31.000Z","updated_at":"2026-05-25T23:55:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Kyonru/feel.lua","commit_stats":null,"previous_names":["kyonru/feel.lua"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Kyonru/feel.lua","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kyonru%2Ffeel.lua","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kyonru%2Ffeel.lua/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kyonru%2Ffeel.lua/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kyonru%2Ffeel.lua/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kyonru","download_url":"https://codeload.github.com/Kyonru/feel.lua/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kyonru%2Ffeel.lua/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33806997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["animation","feedback","love","love2d","lua","tween"],"created_at":"2026-06-02T05:03:30.020Z","updated_at":"2026-06-02T05:03:34.565Z","avatar_url":"https://github.com/Kyonru.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# feel.lua\n\n`feel.lua` is a tiny LOVE2D-first feedback sequencing library for making actions feel good.\n\n## What It Does\n\n- Defines reusable named feedback sequences with `feel.define`.\n- Plays named or inline sequences with `feel.play`.\n- Animates lightweight target values.\n- Emits host-owned events for particles, camera shake, flashes, sounds, haptics, shaders, and more.\n- Runs steps in order, including waits, nested sequences, repeats, random branches, and parallel groups.\n\nhttps://github.com/user-attachments/assets/6b15a87f-5a11-42f6-922b-ccf8bd0627f7\n\n## Install\n\nInstall with [Feather](https://kyonru.github.io/feather/installation/):\n\n```sh\nfeather package install feel\n```\n\nFeather installs the package under `lib/feel`:\n\n```lua\nlocal feel = require(\"lib.feel\")\n```\n\n## Quick Start\n\n```lua\nlocal feel = require(\"lib.feel\")\n\nlocal button = feel.target({\n  label = \"PRESS ME\",\n  x = 320,\n  y = 240,\n  w = 180,\n  h = 54,\n  values = { scale = 1, y = 0, glow = 0 },\n})\n\nfeel.define(\"button.press\", {\n  { kind = \"emit\", event = \"sound\", payload = { cue = \"click\" } },\n  { kind = \"animate\", duration = 0.06, to = { scale = 0.92, y = 3 }, ease = \"quadout\" },\n  { kind = \"parallel\", steps = {\n    {\n      { kind = \"animate\", duration = 0.16, to = { scale = 1, y = 0 }, ease = \"backout\" },\n    },\n    {\n      { kind = \"animate\", duration = 0.08, to = { glow = 1 }, ease = \"quadout\" },\n      { kind = \"animate\", duration = 0.22, to = { glow = 0 }, ease = \"quadout\" },\n    },\n  } },\n})\n\nlocal function insideButton(x, y)\n  return x \u003e= button.x - button.w / 2\n    and x \u003c= button.x + button.w / 2\n    and y \u003e= button.y - button.h / 2\n    and y \u003c= button.y + button.h / 2\nend\n\nfunction love.update(dt)\n  feel.update(dt)\nend\n\nfunction love.mousepressed(x, y)\n  if insideButton(x, y) then\n    feel.play(\"button.press\", button, {\n      restart = true,\n      key = \"button.press\",\n      emit = function(event)\n        print(event.kind, event.payload and event.payload.cue)\n      end,\n    })\n  end\nend\n\nfunction love.draw()\n  local v = button.values\n  local x = button.x\n  local y = button.y + v.y\n\n  love.graphics.clear(0.08, 0.09, 0.11)\n  love.graphics.push()\n  love.graphics.translate(x, y)\n  love.graphics.scale(v.scale)\n\n  love.graphics.setColor(0.2, 0.8, 1, 0.18 * v.glow)\n  love.graphics.rectangle(\"fill\", -button.w / 2 - 14, -button.h / 2 - 14, button.w + 28, button.h + 28, 12)\n\n  love.graphics.setColor(0.12, 0.14, 0.18)\n  love.graphics.rectangle(\"fill\", -button.w / 2, -button.h / 2, button.w, button.h, 8)\n\n  love.graphics.setColor(0.2, 0.8, 1)\n  love.graphics.rectangle(\"line\", -button.w / 2, -button.h / 2, button.w, button.h, 8)\n\n  love.graphics.setColor(1, 1, 1)\n  love.graphics.printf(button.label, -button.w / 2, -7, button.w, \"center\")\n  love.graphics.pop()\nend\n```\n\n## Docs\n\n- [Guides](https://kyonru.github.io/feel.lua)\n\n## How does it work?\n\nIt wraps a vendored copy of [flux](https://github.com/rxi/flux) by [rxi](https://github.com/rxi) so you can describe game feel as small Lua recipes: animation, timing, emitted effects, audio cues, callbacks, random choices, loops, and grouped steps.\n\nThe core stays small and table-driven. LOVE-specific work lives in optional adapters or user callbacks.\n\n## Tests\n\n```sh\nbusted spec\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyonru%2Ffeel.lua","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkyonru%2Ffeel.lua","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyonru%2Ffeel.lua/lists"}