{"id":"marcosdly/riptide-framework","name":"riptide-framework","scope":"marcosdly","platform":"roblox","description":"A lightweight and professional framework for Roblox.","version":"0.8.2","latest":"0.8.2","versions":["0.8.2"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{},"integrity":"00817e69f86968064fa052468062c8ba10713dac5fc6694fa3076a3b77804bc3","likes":0,"downloads":0,"install":"forest install marcosdly/riptide-framework","url":"https://forest.dev/p/roblox/marcosdly/riptide-framework","files":"https://api.forest.dev/ai/package/roblox/marcosdly/riptide-framework/files","readme":"<div align=\"center\">\r\n\r\n```text\r\n    ____  _       __  _     __   \r\n   / __ \\(_)___  / /_(_)___/ /__ \r\n  / /_/ / / __ \\/ __/ / __  / _ \\\r\n / _, _/ / /_/ / /_/ / /_/ /  __/\r\n/_/ |_/_/ .___/\\__/_/\\__,_/\\___/ \r\n       /_/                       \r\n```\r\n\r\n[![Luau](https://img.shields.io/badge/Luau-00A2FF?style=flat-square&logo=lua&logoColor=white)](https://luau-lang.org/)\r\n[![Roblox](https://img.shields.io/badge/Roblox-111111?style=flat-square&logo=roblox&logoColor=white)](https://roblox.com/)\r\n[![Pesde](https://img.shields.io/badge/pesde-0.8.2-success?style=flat-square)](https://github.com/pesde-pkg)\r\n[![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)\r\n[![CI](https://github.com/riptide-project/framework/actions/workflows/ci.yml/badge.svg)](https://github.com/riptide-project/framework/actions/workflows/ci.yml)\r\n\r\n**A lightweight, strictly-typed, and modular framework for Roblox.**\r\n\r\n[Read the Documentation 📚](https://riptide-project.github.io/framework) • [Releases](https://github.com/riptide-project/framework/releases)\r\n\r\n</div>\r\n\r\n## 🌊 Why Riptide?\r\n\r\nRiptide was built from the ground up for production Roblox games. It solves the most common architecture problems while remaining invisible, staying out of your way, and scaling elegantly.\r\n\r\n- **Deterministic Lifecycle:** Phased initialization (`Init` → `Start`) eliminates race conditions.\r\n- **Dependency Injection:** Ditch circular `require()` chains. Inject your dependencies safely using canonical paths.\r\n- **Unified Networking:** One single `RemoteEvent` and `RemoteFunction` handle your entire game's network traffic. Zero `ReplicatedStorage` clutter. Let Riptide multiplex everything.\r\n- **Strictly Typed:** 100% `--!strict` Luau. Enjoy flawless autocomplete and compile-time safety right out of the box.\r\n- **Built-in Power:** Comes fully loaded with a robust `StateMachine`, `ComponentService`, and `StateReplication`.\r\n\r\n## 📦 Installation\r\n\r\nRiptide is formally distributed via **[Pesde](https://github.com/pesde-pkg/pesde)**. Install it directly into your project using the Pesde CLI:\r\n\r\n```bash\r\npesde add riptide/core\r\n```\r\n\r\n### Via Wally\r\n\r\n> ⚠️ **Notice**: The `riptide` Wally scope is currently pending server registry synchronization from UpliftGames. For immediate access, please use **Pesde** or the `.rbxm` file.\r\n\r\nIf you prefer Wally, Riptide will shortly be available on the Wally index:\r\n\r\n```toml\r\n[dependencies]\r\nRiptide = \"riptide/core@0.8.2\"\r\n```\r\n\r\n### Manual Installation (.rbxm)\r\n\r\nIf you strictly prefer not to use package managers, you can download `Riptide.rbxm` directly from the [Releases](https://github.com/riptide-project/framework/releases) tab and insert it into `ReplicatedStorage.Packages`.\r\n\r\n## 🏁 Quick Look\r\n\r\nWrite clean, modular code with predictable execution phases.\r\n\r\n```lua\r\n--!strict\r\nlocal RiptidePkg = require(ReplicatedStorage.Packages.Riptide)\r\ntype Riptide = RiptidePkg.Riptide\r\n\r\nlocal PlayerState = {}\r\n\r\nfunction PlayerState:Init(Riptide: Riptide)\r\n    self.DataService = Riptide.GetService(\"DataService\")\r\n    \r\n    Riptide.Network.Register(\"PlayerJumped\", function(player, height)\r\n        print(player.Name .. \" jumped \" .. height .. \" studs!\")\r\n    end)\r\nend\r\n\r\nfunction PlayerState:Start(Riptide: Riptide)\r\n    self.DataService:GiveMoney(100)\r\nend\r\n\r\nreturn PlayerState\r\n```\r\n\r\n## 🧪 Testing Architecture\r\n\r\nRiptide guarantees production stability through a custom **Hybrid Testing Architecture** built on `frktest`.\r\n\r\n- **Development / CI**: Lightning-fast unit tests run via [Lune](https://github.com/lune-org/lune) CLI ensuring 0 millisecond regressions during active coding (`lune run test/lune/RunLuneTests.luau`).\r\n- **Engine Integration**: The exact same mock-free test suites seamlessly compile and run inside standard Roblox Studio DataModels, validating true Client/Server replication, network invocations, and Instance boundary behaviors.\r\n\r\n> Every single framework feature (StateReplication, ComponentService, Unified Networking, Async, and StateMachine) is covered by comprehensive Integration tests mapped across both sides of the network boundary.\r\n\r\n## 📚 Documentation\r\n\r\nFor complete setup guides, API reference, and examples, visit our official documentation site:\r\n\r\n**[👉 Go to Riptide Documentation](https://riptide-project.github.io/framework)**\r\n\r\n## 📄 License\r\n\r\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.","readmeTruncated":false}