{"id":22454295,"url":"https://github.com/Neura-Studios/flash-list-lua","last_synced_at":"2025-08-02T02:31:06.952Z","repository":{"id":243434858,"uuid":"785747044","full_name":"Neura-Studios/flash-list-lua","owner":"Neura-Studios","description":"A better list for React Lua","archived":false,"fork":false,"pushed_at":"2024-06-08T20:42:51.000Z","size":467,"stargazers_count":5,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-06-09T21:50:52.983Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Lua","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/Neura-Studios.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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-04-12T14:35:57.000Z","updated_at":"2024-06-09T15:42:55.000Z","dependencies_parsed_at":"2024-06-08T21:46:32.271Z","dependency_job_id":null,"html_url":"https://github.com/Neura-Studios/flash-list-lua","commit_stats":null,"previous_names":["neura-studios/flash-list-lua"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neura-Studios%2Fflash-list-lua","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neura-Studios%2Fflash-list-lua/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neura-Studios%2Fflash-list-lua/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Neura-Studios%2Fflash-list-lua/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Neura-Studios","download_url":"https://codeload.github.com/Neura-Studios/flash-list-lua/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228426122,"owners_count":17917790,"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":[],"created_at":"2024-12-06T07:07:30.365Z","updated_at":"2024-12-06T07:07:34.967Z","avatar_url":"https://github.com/Neura-Studios.png","language":"Lua","funding_links":[],"categories":["Components"],"sub_categories":["FlashList-Lua \u003cimg src=\"luau.svg\" width=\"18px\" /\u003e"],"readme":"\u003cdiv align=\"center\"\u003e\n\n# `⚡ FlashList Lua`\n\n\u003ca href=\"https://neura-studios.github.io/flash-list-lua/\"\u003eWebsite\u003c/a\u003e •\n\u003ca href=\"https://discord.gg/Qm3JNyEc32\"\u003eDiscord\u003c/a\u003e •\n\u003ca href=\"https://neura-studios.github.io/flash-list-lua/\"\u003eGetting started\u003c/a\u003e •\n\u003ca href=\"https://neura-studios.github.io/flash-list-lua/usage\"\u003eUsage\u003c/a\u003e •\n\u003ca href=\"https://neura-studios.github.io/flash-list-lua/performance-troubleshooting\"\u003ePerformance\u003c/a\u003e •\n\u003ca href=\"https://neura-studios.github.io/flash-list-lua/fundamentals/performant-components\"\u003eWriting performant components\u003c/a\u003e •\n\u003ca href=\"https://neura-studios.github.io/flash-list-lua/known-issues\"\u003eKnown Issues\u003c/a\u003e\n\n**Fast \u0026 performant React Roblox list. No more blank cells.**\n\nSwap from FlatList in seconds. Get instant performance.\n\n\u003c/div\u003e\n\n\u003e ### ⚠️ **Here Be Dragons 🐉**\n\u003e\n\u003e FlashList-Lua is not yet ready for real-world use, and this repository is only open due to high demand. I will be away until early August and won't be around to work on the project until then.\n\u003e\n\u003e We are still testing FlashList inside of Clip It. We've deployed simple cases in production, but are still ironining out the bugs.\n\u003e\n\u003e **Also note** that the GitHub releases are broken. At the time of writing, the latest release on Wally is `rc.7`.\n\n## Installation\n\nFlashList Lua supports installation via NPM or Wally.\n\n### NPM\n\n`npm add @neura-studios/flash-list`\n\n`yarn add @neura-studios/flash-list`\n\n### Wally\n\n```toml\n[dependencies]\nFlashList = \"neura-studios/flash-list@^1.0.0\"\n```\n\n## Usage\n\nWe recommend reading the detailed documentation for using `FlashList` [here](https://neura-studios.github.io/flash-list-lua/usage).\n\nBut if you are familiar with [FlatList](https://github.com/jsdotlua/virtualized-list-lua), you already know how to use `FlashList`. You can try out `FlashList` by changing the component name and adding the `estimatedItemSize` prop or refer to the example below:\n\n```lua\nlocal ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\n\nlocal Packages = ReplicatedStorage.Packages\nlocal React = require(Packages.React)\nlocal FlashList = require(Packages.FlashList)\n\nlocal e = React.createElement\n\nlocal DATA = {\n    {\n        title = \"First Item\",\n    },\n    {\n        title = \"Second Item\",\n    },\n}\n\nlocal function MyList()\n    return e(FlashList.FlashList, {\n        data = DATA,\n        estimatedItemSize = 200,\n        renderItem = function(entry)\n            local item = entry.item\n            return e(\"TextLabel\", {\n                AutomaticSize = Enum.AutomaticSize.XY,\n                Text = item.title,\n            })\n        end,\n    })\nend\n```\n\nTo avoid common pitfalls, you can also follow these steps for migrating from `FlatList`, based on our own experiences:\n\n1. Switch from `FlatList` to `FlashList` and render the list once. You should see a warning about missing `estimatedItemSize` and a suggestion. Set this value as the prop directly.\n2. **Important**: Scan your [`renderItem`](https://neura-studios.github.io/flash-list-lua/docs/usage/#renderitem) hierarchy for explicit `key` prop definitions and remove them. If you’re doing a `.map()` use indices as keys.\n3. Check your [`renderItem`](https://neura-studios.github.io/flash-list-lua/docs/usage/#renderitem) hierarchy for components that make use of `useState` and verify whether that state would need to be reset if a different item is passed to that component (see [Recycling](https://neura-studios.github.io/flash-list-lua/docs/recycling))\n4. If your list has heterogenous views, pass their types to `FlashList` using [`getItemType`](https://neura-studios.github.io/flash-list-lua/docs/usage/#getitemtype) prop to improve performance.\n5. Do not test performance with React dev mode on. Make sure you’re in release mode. `FlashList` can appear slower while in dev mode due to a small render buffer.\n\n## Unsupported Features\n\nNot all features from FlashList or `recyclerlistview` are ported in this translation. Some notable exclusions are:\n\n- `RefreshControl` currently has no implementation in Axon. That's currently blocking refresh gesture support in this package.\n- Item animators aren't currently supported because there's no clear path for how to animate item layouts and entry/exist animations in Roblox. Could likely be revisited later if we come across a need for this.\n- Inverted lists aren't currently supported because Roblox lacks the matrix transforms used in upstream to make it work and I don't have the time to work out an alternative path. We don't have a use case for this.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNeura-Studios%2Fflash-list-lua","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNeura-Studios%2Fflash-list-lua","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNeura-Studios%2Fflash-list-lua/lists"}