{"id":"alexeylegasov63/leafframeworkrbx","name":"leafframeworkrbx","scope":"alexeylegasov63","platform":"roblox","description":"LeafFramework is a lightweight modular Roblox framework inspired by Flamework (Roblox-TS)","version":"0.4.5","latest":"0.4.5","versions":["0.1.0","0.1.1","0.1.2","0.1.3","0.1.4","0.1.5","0.1.6","0.2.1","0.2.2","0.2.4","0.2.5","0.2.6","0.2.7","0.2.8","0.2.9","0.2.95","0.3.1","0.4.0","0.4.2","0.4.3","0.4.4","0.4.5"],"license":"MIT","licenseRating":"safe","licenseCaveats":["The package archive does not include its license text; the license is declared in its manifest metadata."],"licenseVerified":false,"dependencies":{"evaera/promise":{"version":"^4.0.0","alias":"Promise"}},"integrity":"1e14f55c536eb3bbd51be0de3a733d0aee9783349fafd33d16529c8a4da534c5","likes":0,"downloads":0,"install":"forest install alexeylegasov63/leafframeworkrbx","url":"https://forest.dev/p/roblox/alexeylegasov63/leafframeworkrbx","files":"https://api.forest.dev/ai/package/roblox/alexeylegasov63/leafframeworkrbx/files","readme":"# LeafFramework\r\n\r\n**LeafFramework** — lightweight, modular Roblox framework built around **components**, **services**, and **lifecycle events**. Manages dependencies, asynchronous initialization, and per-frame updates efficiently. Very influenced by the **Flamework**.\r\n\r\n## Features\r\n\r\n- **Components**: attachable to any `Instance` via `CollectionService` tags.\r\n- **Services / Controllers**: modular, dependency-aware, loaded in proper order.\r\n- **Lifecycle**: `onInit`, `onStart`, `onTick`, `onPhysics`, `onRender`.\r\n- **Asynchronous initialization** using `Promise`.\r\n- **Attributes**: synchronized properties on components (`self.Attributes`), auto-updates with Instance.\r\n- **Reusable thread system** for efficient lifecycle execution.\r\n- **Dependency Resolver**: topological sorting, circular dependency detection.\r\n\r\n## Installation\r\n\r\n### Wally\r\n\r\n```ini\r\nLeaf = \"alexeylegasov63/leafframeworkrbx@0.1.5\"\r\n```\r\n\r\n## Usage\r\n\r\n### Initialization & Running\r\n\r\n```lua\r\nLeafFramework.addServices(game.ServerScriptService.Services)\r\nLeafFramework.addComponents(game.ServerScriptService.Components)\r\nLeafFramework.addComponentsDeep(game.ReplicatedStorage.Components)\r\nW\r\n-- And more more more\r\n\r\nLeafFramework.run({\r\n    profiling = true -- optional\r\n}):catch(warn)\r\n```\r\n\r\n### Creating a Service\r\n\r\n```lua\r\n-- DamageService.lua\r\nlocal DamageService = {\r\n    LoadOrder = 2\r\n}\r\n\r\nfunction DamageService:onInit()\r\n    self._time = 0\r\nend\r\n\r\nfunction DamageService:onTick(dt)\r\n    self._time += dt\r\nend\r\n\r\nfunction DamageService:calculateDamage(damager)\r\n    return damager.Attributes.Damage * self._time\r\nend\r\n\r\nreturn DamageService\r\n```\r\n\r\n### Creating a Component\r\n\r\n```lua\r\n-- DamagerComponent.lua\r\nlocal DamagerComponent = {\r\n    Name = \"Damager\",\r\n    Tag = \"Damager\", -- Optional\r\n    Attributes = {\r\n        Damage = 10,\r\n        LastDamage = 0,\r\n    },\r\n    Depends = {\r\n        DamageService = {}\r\n    }\r\n}\r\n\r\nfunction DamagerComponent:onSpawn()\r\n\tself.Super.onSpawn(self) -- If you wish to have BaseComponent stuff\r\n\r\n    print(self.Depends.DamageService:calculateDamage(self)) -- Use the dependency\r\n\r\n\tself:onAttributeChanged(\"Damage\", function(new, last)\r\n\t\tprint(\"Hello, Flamework!\", new, last)\r\n\tend)\r\nend\r\n\r\n    print(self.Depends.DamageService:calculateDamage(self)) -- Use the dependency\r\n\r\n\tself:onAttributeChanged(\"Damage\", function(new, last)\r\n\t\tprint(\"Hello, Flamework!\", new, last)\r\n\tend)\r\nend\r\n\r\n\r\nreturn DamagerComponent\r\n```\r\n\r\n### Using a Component\r\n\r\n```lua\r\nlocal Components = require(game.ServerScriptService.LeafFramework.Components)\r\n\r\nlocal damager = Components.addComponent(somePart, \"Damager\")\r\nprint(damager.Attributes.Damage) -- 10\r\n\r\ndamager.Attributes.LastDamage = 5\r\nprint(damager.Instance:GetAttribute(\"LastDamage\")) -- 5\r\n```\r\n\r\n### Lifecycle Methods\r\n\r\n```lua\r\nfunction SomeService:onTick(dt)\r\n    print(\"Heartbeat delta:\", dt)\r\nend\r\n\r\nfunction SomeService:onPhysics()\r\n    print(\"Physics step\")\r\nend\r\n\r\n-- Client-only\r\nfunction SomeService:onRender()\r\n    print(\"Render update\")\r\nend\r\n```\r\n\r\n```bash\r\nargon build\r\n```\r\n","readmeBorrowedFrom":{"version":"0.1.6","source":"wally"},"readmeTruncated":false}