{"id":"znotfireman/ohmyprvd","name":"ohmyprvd","scope":"znotfireman","platform":"roblox","description":"Oh My Prvd is a delightful framework for Roblox games.","version":"0.2.0-dev.5","latest":"0.2.0-dev.5","versions":["0.2.0-dev.5"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{},"integrity":"ea02a48cd998dc06ddf05f3c1943fde26b8eef085d2fd28a79983c48a122a1a2","likes":0,"downloads":0,"install":"forest install znotfireman/ohmyprvd","url":"https://forest.dev/p/roblox/znotfireman/ohmyprvd","files":"https://api.forest.dev/ai/package/roblox/znotfireman/ohmyprvd/files","readme":"# Oh My Prvd\n\n<img src=\"../../assets/logo.svg\" width=\"300px\" align=\"right\" alt=\"Logo\"/>\n\n![CI](https://github.com/team-fireworks/ohmyprvd/actions/workflows/ci.yml/badge.svg)\n\nOh My Prvd is a delightful framework for Roblox games.\n\nBoring. Do it again.\n\n***Oh My Prvd will not make you a front page developer, but you may feel like\none.***\n\nOh My Prvd accelerates the process with providers, connecting the top-level\ndesign of your game. Choose to mix in networking and components as you need.\nEnjoy a development experience that fades into the background, freeing you to\nbuild faster and shout: **Oh, My Prvd!**\n\n## Highlights\n\n- Type-safe APIs for both Luau and TypeScript\n- Featherlight, choose to mix in packages as you need\n- Uses dependency injection for cleaner code organization\n- Made to be extendable\n- Non-intrusive lifecycle events for flexibility\n- Designed for clarity with syntax inspired by Rust\n\nSparked your interest? [Get going in minutes with our on-rails\ntutorial](https://team-fireworks.github.io/ohmyprvd/latest/get-started/).\n\n> **Warning:** Oh My Prvd is in early development. Portions of the API may\n> break, be changed, or outright deleted. There will be dragons.\n\n## Code Sample\n\n```Lua\nlocal prvd = require(\"@pkg/ohmyprvd\")\nlocal CharacterProvider = require(\"./character-provider\")\n\nlocal CombatProvider = {\n  characterProvider = prvd.use(CharacterProvider)\n}\n\nfunction CombatController.performMove(\n  self: typeof(CombatController),\n  move: CombatMove\n)\n  local character = self.characterProvider:awaitCharacter()\n  -- do something with the character\nend\n\nreturn prvd.Provider(\"CombatProvider\", CombatProvider)\n```\n\n```TypeScript\nimport { Provider, use } from \"@rbxts/ohmyprvd\"\nimport { CharacterProvider } from \"./character-provider\"\n\nexport const CombatProvider = Provider(\"CombatProvider\", {\n  characterProvider: use(CharacterProvider)\n\n  performMove(move: CombatMove) {\n    const character = this.characterProvider.awaitCharacter()\n    // do something with the character\n  }\n})\n```\n\n## FAQ\n\n### How do you say Oh My Prvd?\n\nHowever you want:\n\n- *Oh, my prvd!* for excitement\n- *Oh, my providers!* for completeness\n- *O-m-p!* for brevity\n- *Ommp!* for power\n\n### Who's that handsome gentlemen on the home page?\n\nHis name is Womp Womp:\n\n<img src=\"../../assets/womp.png\" alt=\"Womp Womp\" height=\"256px\" />\n","readmeTruncated":false}