This repository was archived by the owner on Aug 20, 2024. It is now read-only.

[ ryanlua ](https://github.com/ryanlua) / ** [Shime](https://github.com/ryanlua/Shime) ** Public archive

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ryanlua/Shime/wiki/Getting-Started/da413b668c346981a9e5d00f5ed4dce4b8f8cb54).

  * [ Notifications ](https://github.com/login?return_to=%2Fryanlua%2FShime) You must be signed in to change notification settings
  * [ Fork 1 ](https://github.com/login?return_to=%2Fryanlua%2FShime)
  * [ Star  29 ](https://github.com/login?return_to=%2Fryanlua%2FShime)

# Getting Started

Jump to bottom

Ryan edited this page Mar 29, 2023 · [5 revisions](https://github.com/ryanlua/Shime/wiki/Getting-Started/_history)

## Installation

Shime is simple and straightforward, you will need the require Shime's module script as a variable and then you can use constructors such as [`Shime.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) to create a new Shimmer object. Below are two methods to install Shime.

### Require from Roblox (Recommended)

  1. Require the Shime module in your script like below when you want to use Shime.

    local Shime = require(1234567890)

### Download from GitHub & Install in Studio

> **Warning** This installation method will not allow for automatic updates including security updates. It is recommended to use the Require from Roblox method. Only use this method if you are planning to use a modified version of Shime.

  1. Download the Shime module from [Releases](https://github.com/RyanLua/Shime/releases).

  2. Place the Shime module in [`ReplicatedStorage`](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage).

  3. Require the Shime module in your script like below when you want to use Shime.

    local Shime = require(game.ReplicatedStorage.Shime)

## Usage

The below code samples will show you how to use Shime and it's constructors, methods, and functions. To learn more about Shime, you can read the [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation).

The examples below expect the `script.Parent` to be a [`GuiObject`](https://create.roblox.com/docs/reference/engine/classes/GuiObject) and that you have the Shime module in [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage), to learn about how to add the module to [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage) go to **Installation > Download from GitHub & Install in Studio**. If you are using Shime from Roblox, you will need to change the `require` line to `local Shime = require(1234567890)` where `1234567890` is the ID of the Shime module.

### Creating a Shimmer

To create a Shimmer, you need to create a new `Shimmer` object. You can do this by calling the Shime module like a function. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play).

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

### Creating a Shimmer with a Custom Animation

Shime allows you to create a Shimmer with a custom animation using the [`Shimmer.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) methods and specifying the parameters which are based closely off the [TweenBase](https://create.roblox.com/docs/reference/engine/classes/TweenBase) class. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play). The Shimmer will use a custom animation that will be played when the Shimmer is played.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    local time = 1 -- Time for shimmer animation
    local style = Enum.EasingStyle.Linear -- Easing style for shimmer animation
    local direction = Enum.EasingDirection.InOut -- Easing direction for easing style
    local repeatCount = -1 -- Repeat amount for shimmer (negative number means infinite)
    local reverse = false -- Reverse direction of shimmer when it reaches the end
    local delayTime = 0 -- Delay between each shimmer

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent, time, style, direction, repeatCount, reverse, delayTime)
    shimmer:Play()

### Pausing & Stopping a Shimmer

To pause a Shimmer, you need to call the [`Shimmer.Pause()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause) function which can be paused again to toggle the playback state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. When the mouse enters the GuiObject the Shimmer will be paused using `Shimmer.Pause` and when the mouse leaves the GuiObject the Shimmer will be stopped.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Pause the Shimmer when the mouse enters the GuiObject
    script.Parent.MouseEnter:Connect(function()
        shimmer:Pause()
    end)

    -- Stop the Shimmer when the mouse leaves the GuiObject
    script.Parent.MouseButton1Click:Connect(function()
        shimmer:Stop()
    end)

### Reading Shimmer Properties

Shimmer has a few properties that you can use to get information about the Shimmer mostly related to the Shimmer's state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. Every 1 second the `shimmer` is paused then played again. The IsPlaying and IsPaused properties are then printed to the output.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Loop shimmers play and pause every 1 second
    while true do
        task.wait(1)
        if shimmer.IsPlaying then
            -- Pause the shimmer and print IsPaused
            shimmer:Pause()
            print("shimmer.IsPaused: " .. tostring(shimmer.IsPaused))
        elseif shimmer.IsPaused then
            -- Play the shimmer and print IsPlaying
            shimmer:Play()
            print("shimmer.IsPlaying: " .. tostring(shimmer.IsPlaying))
        end
    end

# 🎉 Shime is officially released!

Shime has officially been released.

Shime development will be split between normal releases and long term support (LTS) releases. For those seeking stable builds with minor API changes or not worrying about having to update Shime as frequently you can choose the LTS release which will be specifically marked with LTS. For those seeking the lastest stable changes and occasional API changes you can select the normal release.

Shime has added new methods in it's first release from pre-release. These methods include `:GetFrame()` and `:GetGradient()` which will return their respective Instances. Seek documentation for more details.

# Shime Wiki

Shimmer is a class required from the Shime module that allows you to easily create a shimmer effect on any GuiObject based off of CoreGui's Shimmer module.

## [Home](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home)

  * [What is Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#what-is-shime)
  * [Why use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#why-use-shime)
  * [How to use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#how-to-use-shime)

## [Getting Started](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started)

  * [Installation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#installation)
    * [Install from Roblox](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-roblox)
    * [Install from GitHub](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-github)
  * [Usage](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#usage)
    * [Creating a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer)
    * [Creating a Shimmer with a Custom Animation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-animation)
    * [Pausing & Stopping a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#pausing--stopping-a-shimmer)
    * [Reading Shimmer Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#reading-shimmer-properties)
    * [Creating a Shimmer with a Custom Frame and Gradient](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-frame-and-gradient)

## [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation)

  * [Summary](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#summary)
    * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors)
    * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties)
    * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods)
  * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors-1)
    * [new](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new)
  * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties-1)
    * [PlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#playbackstate)
  * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods-1)
    * [GetFrame](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getframe)
    * [GetPlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getplaybackstate)
    * [Stop](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#stop)
    * [Pause](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause)
    * [Play](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play)

### Clone this wiki locally


This repository was archived by the owner on Aug 20, 2024. It is now read-only.

[ ryanlua ](https://github.com/ryanlua) / ** [Shime](https://github.com/ryanlua/Shime) ** Public archive

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ryanlua/Shime/wiki/Getting-Started/00db334adfcd12d190f840026b0a534f7e6ff89e).

  * [ Notifications ](https://github.com/login?return_to=%2Fryanlua%2FShime) You must be signed in to change notification settings
  * [ Fork 1 ](https://github.com/login?return_to=%2Fryanlua%2FShime)
  * [ Star  29 ](https://github.com/login?return_to=%2Fryanlua%2FShime)

# Getting Started

Jump to bottom

Ryan edited this page Apr 4, 2023 · [5 revisions](https://github.com/ryanlua/Shime/wiki/Getting-Started/_history)

This page will cover installation and basic usage including code samples of Shime. For more information about Shime, you can read the [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation).

## Installation

Shime is simple and straightforward, you will need the require Shime's module script as a variable and then you can use constructors such as [`Shime.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) to create a new Shimmer object. Below are two methods to install Shime.

### Install from Roblox

> **Warning** This installation method will **not allow for automatic updates** including **security updates**. It is recommended to use the Require from Roblox method. Only use this method if you are planning to **use a modified version of Shime**.

  1. Get the Shime module from the [Creator Marketplace](https://create.roblox.com/marketplace/asset/12958292783).

  2. Open Roblox Studio and create a new place or open an existing place.

  3. Open or locate the [Toolbox](https://create.roblox.com/docs/studio/toolbox).

  4. Open your [Inventory](https://create.roblox.com/docs/studio/toolbox#inventory) from the [Toolbox](https://create.roblox.com/docs/studio/toolbox).

  5. Search for `Shimmer Module` created by `WinnersTakesAll` and click on it.

  6. Insert `Shimmer Module` into the [Explorer](https://create.roblox.com/docs/studio/explorer) and drag into [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage).

### Install from GitHub

> **Warning** This installation method will not allow for automatic updates including security updates. It is recommended to use the Require from Roblox method. Only use this method if you are planning to use a modified version of Shime.

You can install Shime from GitHub, this is intended if you want to use a modified version of Shime.

  1. Download the `Shime.rbxm` file from [Releases](https://github.com/RyanLua/Shime/releases).

  2. Open Roblox Studio and create a new place or open an existing place.

  3. Go to the [Explorer](https://create.roblox.com/docs/studio/explorer) and right click on [`ReplicatedStorage`](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage) and click on `Insert from file...`.

  4. Select the `Shime.rbxm` you downloaded from GitHub and click `Open`.

  5. Require the Shime module in your script like below when you want to use Shime.

    local Shime = require(game.ReplicatedStorage.Shime)

## Usage

The below code samples will show you how to use Shime and it's constructors, methods, and functions. To learn more about Shime, you can read the [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation).

The examples below expect the `script.Parent` to be a [`GuiObject`](https://create.roblox.com/docs/reference/engine/classes/GuiObject) and that you have the Shime module in [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage), to learn about how to add the module to [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage) go to **Installation > Download from GitHub & Install in Studio**. If you are using Shime from Roblox, you will need to change the `require` line to `local Shime = require(1234567890)` where `1234567890` is the ID of the Shime module.

### Creating a Shimmer

To create a Shimmer, you need to create a new `Shimmer` object. You can do this by calling the Shime module like a function. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play).

    -- Require the Shime module
    local Shime = require(12958292783)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

### Creating a Shimmer with a Custom Animation

Shime allows you to create a Shimmer with a custom animation using the [`Shimmer.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) methods and specifying the parameters which are based closely off the [TweenBase](https://create.roblox.com/docs/reference/engine/classes/TweenBase) class. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play). The Shimmer will use a custom animation that will be played when the Shimmer is played.

    -- Require the Shime module
    local Shime = require(12958292783)

    local time = 1 -- Time for shimmer animation
    local style = Enum.EasingStyle.Linear -- Easing style for shimmer animation
    local direction = Enum.EasingDirection.InOut -- Easing direction for easing style
    local repeatCount = -1 -- Repeat amount for shimmer (negative number means infinite)
    local reverse = false -- Reverse direction of shimmer when it reaches the end
    local delayTime = 0 -- Delay between each shimmer

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent, time, style, direction, repeatCount, reverse, delayTime)
    shimmer:Play()

### Pausing & Stopping a Shimmer

To pause a Shimmer, you need to call the [`Shimmer.Pause()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause) function which can be paused again to toggle the playback state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. When the mouse enters the GuiObject the Shimmer will be paused using `Shimmer.Pause` and when the mouse leaves the GuiObject the Shimmer will be stopped.

    -- Require the Shime module
    local Shime = require(12958292783)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Pause the Shimmer when the mouse enters the GuiObject
    script.Parent.MouseEnter:Connect(function()
        shimmer:Pause()
    end)

    -- Stop the Shimmer when the mouse leaves the GuiObject
    script.Parent.MouseButton1Click:Connect(function()
        shimmer:Stop()
    end)

### Reading Shimmer Properties

Shimmer has a few properties that you can use to get information about the Shimmer mostly related to the Shimmer's state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. Every 1 second the `shimmer` is paused then played again. The IsPlaying and IsPaused properties are then printed to the output.

    -- Require the Shime module
    local Shime = require(12958292783)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Loop shimmers play and pause every 1 second
    while true do
        task.wait(1)
        if shimmer.IsPlaying then
            -- Pause the shimmer and print IsPaused
            shimmer:Pause()
            print("shimmer.IsPaused: " .. tostring(shimmer.IsPaused))
        elseif shimmer.IsPaused then
            -- Play the shimmer and print IsPlaying
            shimmer:Play()
            print("shimmer.IsPlaying: " .. tostring(shimmer.IsPlaying))
        end
    end

# 🎉 Shime is officially released!

Shime has officially been released.

Shime development will be split between normal releases and long term support (LTS) releases. For those seeking stable builds with minor API changes or not worrying about having to update Shime as frequently you can choose the LTS release which will be specifically marked with LTS. For those seeking the lastest stable changes and occasional API changes you can select the normal release.

Shime has added new methods in it's first release from pre-release. These methods include `:GetFrame()` and `:GetGradient()` which will return their respective Instances. Seek documentation for more details.

# Shime Wiki

Shimmer is a class required from the Shime module that allows you to easily create a shimmer effect on any GuiObject based off of CoreGui's Shimmer module.

## [Home](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home)

  * [What is Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#what-is-shime)
  * [Why use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#why-use-shime)
  * [How to use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#how-to-use-shime)

## [Getting Started](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started)

  * [Installation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#installation)
    * [Install from Roblox](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-roblox)
    * [Install from GitHub](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-github)
  * [Usage](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#usage)
    * [Creating a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer)
    * [Creating a Shimmer with a Custom Animation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-animation)
    * [Pausing & Stopping a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#pausing--stopping-a-shimmer)
    * [Reading Shimmer Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#reading-shimmer-properties)
    * [Creating a Shimmer with a Custom Frame and Gradient](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-frame-and-gradient)

## [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation)

  * [Summary](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#summary)
    * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors)
    * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties)
    * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods)
  * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors-1)
    * [new](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new)
  * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties-1)
    * [PlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#playbackstate)
  * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods-1)
    * [GetFrame](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getframe)
    * [GetPlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getplaybackstate)
    * [Stop](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#stop)
    * [Pause](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause)
    * [Play](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play)

### Clone this wiki locally


This repository was archived by the owner on Aug 20, 2024. It is now read-only.

[ ryanlua ](https://github.com/ryanlua) / ** [Shime](https://github.com/ryanlua/Shime) ** Public archive

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ryanlua/Shime/wiki/Getting-Started/6d583db6f9bd79454fdde56fff7d02462d87e47f).

  * [ Notifications ](https://github.com/login?return_to=%2Fryanlua%2FShime) You must be signed in to change notification settings
  * [ Fork 1 ](https://github.com/login?return_to=%2Fryanlua%2FShime)
  * [ Star  29 ](https://github.com/login?return_to=%2Fryanlua%2FShime)

# Getting Started

Jump to bottom

Ryan edited this page Apr 7, 2023 · [5 revisions](https://github.com/ryanlua/Shime/wiki/Getting-Started/_history)

This page will cover installation and basic usage including code samples of Shime. For more information about Shime, you can read the [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation).

## Installation

Shime is simple and straightforward, you will need the require Shime's module script as a variable and then you can use constructors such as [`Shime.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) to create a new Shimmer object. Below are two methods to install Shime.

### Install from Roblox

> **Warning** This installation method will **not allow for automatic updates** including **security updates**. It is recommended to use the Require from Roblox method. Only use this method if you are planning to **use a modified version of Shime**.

  1. Get the Shime module from the [Creator Marketplace](https://create.roblox.com/marketplace/asset/game.ReplicatedStorage.Shime).

  2. Open Roblox Studio and create a new place or open an existing place.

  3. Open or locate the [Toolbox](https://create.roblox.com/docs/studio/toolbox).

  4. Open your [Inventory](https://create.roblox.com/docs/studio/toolbox#inventory) from the [Toolbox](https://create.roblox.com/docs/studio/toolbox).

  5. Search for `Shimmer Module` created by `WinnersTakesAll` and click on it.

  6. Insert `Shimmer Module` into the [Explorer](https://create.roblox.com/docs/studio/explorer) and drag into [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage).

### Install from GitHub

> **Warning** This installation method will not allow for automatic updates including security updates. It is recommended to use the Require from Roblox method. Only use this method if you are planning to use a modified version of Shime.

You can install Shime from GitHub, this is intended if you want to use a modified version of Shime.

  1. Download the `Shime.rbxm` file from [Releases](https://github.com/RyanLua/Shime/releases).

  2. Open Roblox Studio and create a new place or open an existing place.

  3. Go to the [Explorer](https://create.roblox.com/docs/studio/explorer) and right click on [`ReplicatedStorage`](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage) and click on `Insert from file...`.

  4. Select the `Shime.rbxm` you downloaded from GitHub and click `Open`.

  5. Require the Shime module in your script like below when you want to use Shime.

    local Shime = require(game.ReplicatedStorage.Shime)

## Usage

The below code samples will show you how to use Shime and it's constructors, methods, and functions. To learn more about Shime, you can read the [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation).

The examples below expect the `script.Parent` to be a [`GuiObject`](https://create.roblox.com/docs/reference/engine/classes/GuiObject) and that you have the Shime module in [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage), to learn about how to add the module to [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage) go to **Installation > Download from GitHub & Install in Studio**. If you are using Shime from Roblox, you will need to change the `require` line to `local Shime = require(1234567890)` where `1234567890` is the ID of the Shime module.

### Creating a Shimmer

To create a Shimmer, you need to create a new `Shimmer` object. You can do this by calling the Shime module like a function. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play).

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

### Creating a Shimmer with a Custom Animation

Shime allows you to create a Shimmer with a custom animation using the [`Shimmer.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) methods and specifying the parameters which are based closely off the [TweenBase](https://create.roblox.com/docs/reference/engine/classes/TweenBase) class. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play). The Shimmer will use a custom animation that will be played when the Shimmer is played.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    local time = 1 -- Time for shimmer animation
    local style = Enum.EasingStyle.Linear -- Easing style for shimmer animation
    local direction = Enum.EasingDirection.InOut -- Easing direction for easing style
    local repeatCount = -1 -- Repeat amount for shimmer (negative number means infinite)
    local reverse = false -- Reverse direction of shimmer when it reaches the end
    local delayTime = 0 -- Delay between each shimmer

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent, time, style, direction, repeatCount, reverse, delayTime)
    shimmer:Play()

### Pausing & Stopping a Shimmer

To pause a Shimmer, you need to call the [`Shimmer.Pause()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause) function which can be paused again to toggle the playback state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. When the mouse enters the GuiObject the Shimmer will be paused using `Shimmer.Pause` and when the mouse leaves the GuiObject the Shimmer will be stopped.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Pause the Shimmer when the mouse enters the GuiObject
    script.Parent.MouseEnter:Connect(function()
        shimmer:Pause()
    end)

    -- Stop the Shimmer when the mouse leaves the GuiObject
    script.Parent.MouseButton1Click:Connect(function()
        shimmer:Stop()
    end)

### Reading Shimmer Properties

Shimmer has a few properties that you can use to get information about the Shimmer mostly related to the Shimmer's state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. Every 1 second the `shimmer` is paused then played again. The PlaybackState property is then printed to the output.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Loop shimmers play and pause every 1 second
    while true do
        task.wait(1)
        if shimmer.PlaybackState == Enum.PlaybackState.Playing then
            -- Pause the shimmer and print PlaybackState
            shimmer:Pause()
            print("shimmer.PlaybackState: " .. tostring(shimmer.PlaybackState))
        elseif shimmer.PlaybackState == Enum.PlaybackState.== Enum.PlaybackState.Playing then
            -- Play the shimmer and print PlaybackState
            shimmer:Play()
            print("shimmer.PlaybackState: " .. tostring(shimmer.PlaybackState))
        end
    end

### Creating a Shimmer with a Custom Frame and Gradient

Shimmer can be customized using the [`Shimmer.GetFrame()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getframe) and [`Shimmer.GetGradient()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getgradient) functions. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. The Shimmer will use a custom frame and gradient.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Get the Shimmer's frame and set it's properties
    local frame = shimmer:GetFrame()
    frame.Size = UDim2.new(0.5, 0, 1, 0)
    frame.Position = UDim2.new(0, 0, 0, 0)
    frame.AnchorPoint = Vector2.new(0, 0)

    -- Get the Shimmer's gradient and set it's properties
    local gradient = shimmer:GetGradient()
    gradient.Rotation = 90
    gradient.Transparency = NumberSequence.new({
        NumberSequenceKeypoint.new(0, 0),
        NumberSequenceKeypoint.new(0.5, 0.5),
        NumberSequenceKeypoint.new(1, 0)
    })

# 🎉 Shime is officially released!

Shime has officially been released.

Shime development will be split between normal releases and long term support (LTS) releases. For those seeking stable builds with minor API changes or not worrying about having to update Shime as frequently you can choose the LTS release which will be specifically marked with LTS. For those seeking the lastest stable changes and occasional API changes you can select the normal release.

Shime has added new methods in it's first release from pre-release. These methods include `:GetFrame()` and `:GetGradient()` which will return their respective Instances. Seek documentation for more details.

# Shime Wiki

Shimmer is a class required from the Shime module that allows you to easily create a shimmer effect on any GuiObject based off of CoreGui's Shimmer module.

## [Home](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home)

  * [What is Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#what-is-shime)
  * [Why use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#why-use-shime)
  * [How to use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#how-to-use-shime)

## [Getting Started](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started)

  * [Installation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#installation)
    * [Install from Roblox](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-roblox)
    * [Install from GitHub](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-github)
  * [Usage](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#usage)
    * [Creating a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer)
    * [Creating a Shimmer with a Custom Animation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-animation)
    * [Pausing & Stopping a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#pausing--stopping-a-shimmer)
    * [Reading Shimmer Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#reading-shimmer-properties)
    * [Creating a Shimmer with a Custom Frame and Gradient](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-frame-and-gradient)

## [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation)

  * [Summary](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#summary)
    * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors)
    * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties)
    * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods)
  * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors-1)
    * [new](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new)
  * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties-1)
    * [PlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#playbackstate)
  * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods-1)
    * [GetFrame](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getframe)
    * [GetPlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getplaybackstate)
    * [Stop](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#stop)
    * [Pause](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause)
    * [Play](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play)

### Clone this wiki locally


This repository was archived by the owner on Aug 20, 2024. It is now read-only.

[ ryanlua ](https://github.com/ryanlua) / ** [Shime](https://github.com/ryanlua/Shime) ** Public archive

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ryanlua/Shime/wiki/Getting-Started/b9e26a0ece4c440f1036118beb758f196fc608ea).

  * [ Notifications ](https://github.com/login?return_to=%2Fryanlua%2FShime) You must be signed in to change notification settings
  * [ Fork 1 ](https://github.com/login?return_to=%2Fryanlua%2FShime)
  * [ Star  29 ](https://github.com/login?return_to=%2Fryanlua%2FShime)

# Getting Started

Jump to bottom

Ryan edited this page Apr 1, 2023 · [5 revisions](https://github.com/ryanlua/Shime/wiki/Getting-Started/_history)

This page will cover installation and basic usage including code samples of Shime. For more information about Shime, you can read the [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation).

## Installation

Shime is simple and straightforward, you will need the require Shime's module script as a variable and then you can use constructors such as [`Shime.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) to create a new Shimmer object. Below are two methods to install Shime.

### Require from Roblox

You can use Shime without installing it by requiring it from Roblox. This method will allow you to automatically update Shime when a new version is released. This is the recommended method to install Shime.

  1. Require the Shime module in your script like below when you want to use Shime.

    local Shime = require(12958292783)

### Install from Roblox

> **Warning** This installation method will **not allow for automatic updates** including **security updates**. It is recommended to use the Require from Roblox method. Only use this method if you are planning to **use a modified version of Shime**.

  1. Get the Shime module from the [Creator Marketplace](https://create.roblox.com/marketplace/asset/12958292783).

  2. Open Roblox Studio and create a new place or open an existing place.

  3. Open or locate the [Toolbox](https://create.roblox.com/docs/studio/toolbox).

  4. Open your [Inventory](https://create.roblox.com/docs/studio/toolbox#inventory) from the [Toolbox](https://create.roblox.com/docs/studio/toolbox).

  5. Search for `Shimmer Module` created by `WinnersTakesAll` and click on it.

  6. Insert `Shimmer Module` into the [Explorer](https://create.roblox.com/docs/studio/explorer) and drag into [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage).

### Install from GitHub

> **Warning** This installation method will not allow for automatic updates including security updates. It is recommended to use the Require from Roblox method. Only use this method if you are planning to use a modified version of Shime.

You can install Shime from GitHub, this is intended if you want to use a modified version of Shime.

  1. Download the `Shime.rbxm` file from [Releases](https://github.com/RyanLua/Shime/releases).

  2. Open Roblox Studio and create a new place or open an existing place.

  3. Go to the [Explorer](https://create.roblox.com/docs/studio/explorer) and right click on [`ReplicatedStorage`](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage) and click on `Insert from file...`.

  4. Select the `Shime.rbxm` you downloaded from GitHub and click `Open`.

  5. Require the Shime module in your script like below when you want to use Shime.

    local Shime = require(game.ReplicatedStorage.Shime)

## Usage

The below code samples will show you how to use Shime and it's constructors, methods, and functions. To learn more about Shime, you can read the [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation).

The examples below expect the `script.Parent` to be a [`GuiObject`](https://create.roblox.com/docs/reference/engine/classes/GuiObject) and that you have the Shime module in [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage), to learn about how to add the module to [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage) go to **Installation > Download from GitHub & Install in Studio**. If you are using Shime from Roblox, you will need to change the `require` line to `local Shime = require(1234567890)` where `1234567890` is the ID of the Shime module.

### Creating a Shimmer

To create a Shimmer, you need to create a new `Shimmer` object. You can do this by calling the Shime module like a function. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play).

    -- Require the Shime module
    local Shime = require(12958292783)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

### Creating a Shimmer with a Custom Animation

Shime allows you to create a Shimmer with a custom animation using the [`Shimmer.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) methods and specifying the parameters which are based closely off the [TweenBase](https://create.roblox.com/docs/reference/engine/classes/TweenBase) class. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play). The Shimmer will use a custom animation that will be played when the Shimmer is played.

    -- Require the Shime module
    local Shime = require(12958292783)

    local time = 1 -- Time for shimmer animation
    local style = Enum.EasingStyle.Linear -- Easing style for shimmer animation
    local direction = Enum.EasingDirection.InOut -- Easing direction for easing style
    local repeatCount = -1 -- Repeat amount for shimmer (negative number means infinite)
    local reverse = false -- Reverse direction of shimmer when it reaches the end
    local delayTime = 0 -- Delay between each shimmer

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent, time, style, direction, repeatCount, reverse, delayTime)
    shimmer:Play()

### Pausing & Stopping a Shimmer

To pause a Shimmer, you need to call the [`Shimmer.Pause()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause) function which can be paused again to toggle the playback state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. When the mouse enters the GuiObject the Shimmer will be paused using `Shimmer.Pause` and when the mouse leaves the GuiObject the Shimmer will be stopped.

    -- Require the Shime module
    local Shime = require(12958292783)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Pause the Shimmer when the mouse enters the GuiObject
    script.Parent.MouseEnter:Connect(function()
        shimmer:Pause()
    end)

    -- Stop the Shimmer when the mouse leaves the GuiObject
    script.Parent.MouseButton1Click:Connect(function()
        shimmer:Stop()
    end)

### Reading Shimmer Properties

Shimmer has a few properties that you can use to get information about the Shimmer mostly related to the Shimmer's state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. Every 1 second the `shimmer` is paused then played again. The IsPlaying and IsPaused properties are then printed to the output.

    -- Require the Shime module
    local Shime = require(12958292783)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Loop shimmers play and pause every 1 second
    while true do
        task.wait(1)
        if shimmer.IsPlaying then
            -- Pause the shimmer and print IsPaused
            shimmer:Pause()
            print("shimmer.IsPaused: " .. tostring(shimmer.IsPaused))
        elseif shimmer.IsPaused then
            -- Play the shimmer and print IsPlaying
            shimmer:Play()
            print("shimmer.IsPlaying: " .. tostring(shimmer.IsPlaying))
        end
    end

# 🎉 Shime is officially released!

Shime has officially been released.

Shime development will be split between normal releases and long term support (LTS) releases. For those seeking stable builds with minor API changes or not worrying about having to update Shime as frequently you can choose the LTS release which will be specifically marked with LTS. For those seeking the lastest stable changes and occasional API changes you can select the normal release.

Shime has added new methods in it's first release from pre-release. These methods include `:GetFrame()` and `:GetGradient()` which will return their respective Instances. Seek documentation for more details.

# Shime Wiki

Shimmer is a class required from the Shime module that allows you to easily create a shimmer effect on any GuiObject based off of CoreGui's Shimmer module.

## [Home](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home)

  * [What is Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#what-is-shime)
  * [Why use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#why-use-shime)
  * [How to use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#how-to-use-shime)

## [Getting Started](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started)

  * [Installation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#installation)
    * [Install from Roblox](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-roblox)
    * [Install from GitHub](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-github)
  * [Usage](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#usage)
    * [Creating a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer)
    * [Creating a Shimmer with a Custom Animation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-animation)
    * [Pausing & Stopping a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#pausing--stopping-a-shimmer)
    * [Reading Shimmer Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#reading-shimmer-properties)
    * [Creating a Shimmer with a Custom Frame and Gradient](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-frame-and-gradient)

## [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation)

  * [Summary](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#summary)
    * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors)
    * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties)
    * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods)
  * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors-1)
    * [new](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new)
  * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties-1)
    * [PlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#playbackstate)
  * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods-1)
    * [GetFrame](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getframe)
    * [GetPlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getplaybackstate)
    * [Stop](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#stop)
    * [Pause](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause)
    * [Play](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play)

### Clone this wiki locally


This repository was archived by the owner on Aug 20, 2024. It is now read-only.

[ ryanlua ](https://github.com/ryanlua) / ** [Shime](https://github.com/ryanlua/Shime) ** Public archive

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ryanlua/Shime/wiki/Getting-Started/550c5f1c775ed6dbf0fd39c2e0440abcec81ec8a).

  * [ Notifications ](https://github.com/login?return_to=%2Fryanlua%2FShime) You must be signed in to change notification settings
  * [ Fork 1 ](https://github.com/login?return_to=%2Fryanlua%2FShime)
  * [ Star  29 ](https://github.com/login?return_to=%2Fryanlua%2FShime)

# Getting Started

Jump to bottom

Ryan Luu edited this page Dec 21, 2023 · [5 revisions](https://github.com/ryanlua/Shime/wiki/Getting-Started/_history)

This page will cover installation and basic usage including code samples of Shime. For more information about Shime, you can read the [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation).

## Installation

Shime is simple and straightforward, you will need the require Shime's module script as a variable and then you can use constructors such as [`Shime.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) to create a new Shimmer object. Below are two methods to install Shime.

### Install from Roblox

> **Warning** This installation method will **not allow for automatic updates** including **security updates**. It is recommended to use the Require from Roblox method. Only use this method if you are planning to **use a modified version of Shime**.

  1. Get the Shime module from the [Creator Marketplace](https://create.roblox.com/marketplace/asset/12959615382).

  2. Open Roblox Studio and create a new place or open an existing place.

  3. Open or locate the [Toolbox](https://create.roblox.com/docs/studio/toolbox).

  4. Open your [Inventory](https://create.roblox.com/docs/studio/toolbox#inventory) from the [Toolbox](https://create.roblox.com/docs/studio/toolbox).

  5. Search for `Shimmer Module` created by `WinnersTakesAll` and click on it.

  6. Insert `Shimmer Module` into the [Explorer](https://create.roblox.com/docs/studio/explorer) and drag into [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage).

### Install from GitHub

> **Warning** This installation method will not allow for automatic updates including security updates. It is recommended to use the Require from Roblox method. Only use this method if you are planning to use a modified version of Shime.

You can install Shime from GitHub, this is intended if you want to use a modified version of Shime.

  1. Download the `Shime.rbxm` file from [Releases](https://github.com/RyanLua/Shime/releases).

  2. Open Roblox Studio and create a new place or open an existing place.

  3. Go to the [Explorer](https://create.roblox.com/docs/studio/explorer) and right click on [`ReplicatedStorage`](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage) and click on `Insert from file...`.

  4. Select the `Shime.rbxm` you downloaded from GitHub and click `Open`.

  5. Require the Shime module in your script like below when you want to use Shime.

    local Shime = require(game.ReplicatedStorage.Shime)

## Usage

The below code samples will show you how to use Shime and it's constructors, methods, and functions. To learn more about Shime, you can read the [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation).

The examples below expect the `script.Parent` to be a [`GuiObject`](https://create.roblox.com/docs/reference/engine/classes/GuiObject) and that you have the Shime module in [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage), to learn about how to add the module to [ReplicatedStorage](https://create.roblox.com/docs/reference/engine/classes/ReplicatedStorage) go to **Installation > Download from GitHub & Install in Studio**. If you are using Shime from Roblox, you will need to change the `require` line to `local Shime = require(1234567890)` where `1234567890` is the ID of the Shime module.

### Creating a Shimmer

To create a Shimmer, you need to create a new `Shimmer` object. You can do this by calling the Shime module like a function. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play).

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

### Creating a Shimmer with a Custom Animation

Shime allows you to create a Shimmer with a custom animation using the [`Shimmer.new()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new) methods and specifying the parameters which are based closely off the [TweenBase](https://create.roblox.com/docs/reference/engine/classes/TweenBase) class. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it using [`Shimmer:Play()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play). The Shimmer will use a custom animation that will be played when the Shimmer is played.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    local time = 1 -- Time for shimmer animation
    local style = Enum.EasingStyle.Linear -- Easing style for shimmer animation
    local direction = Enum.EasingDirection.InOut -- Easing direction for easing style
    local repeatCount = -1 -- Repeat amount for shimmer (negative number means infinite)
    local reverse = false -- Reverse direction of shimmer when it reaches the end
    local delayTime = 0 -- Delay between each shimmer

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent, time, style, direction, repeatCount, reverse, delayTime)
    shimmer:Play()

### Pausing & Stopping a Shimmer

To pause a Shimmer, you need to call the [`Shimmer.Pause()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause) function which can be paused again to toggle the playback state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. When the mouse enters the GuiObject the Shimmer will be paused using `Shimmer.Pause` and when the mouse leaves the GuiObject the Shimmer will be stopped.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Pause the Shimmer when the mouse enters the GuiObject
    script.Parent.MouseEnter:Connect(function()
        shimmer:Pause()
    end)

    -- Stop the Shimmer when the mouse leaves the GuiObject
    script.Parent.MouseButton1Click:Connect(function()
        shimmer:Stop()
    end)

### Reading Shimmer Properties

Shimmer has a few properties that you can use to get information about the Shimmer mostly related to the Shimmer's state. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. Every 1 second the `shimmer` is paused then played again. The PlaybackState property is then printed to the output.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Loop shimmers play and pause every 1 second
    while true do
        task.wait(1)
        if shimmer.PlaybackState == Enum.PlaybackState.Playing then
            -- Pause the shimmer and print PlaybackState
            shimmer:Pause()
            print("shimmer.PlaybackState: " .. tostring(shimmer.PlaybackState))
        elseif shimmer.PlaybackState == Enum.PlaybackState.== Enum.PlaybackState.Playing then
            -- Play the shimmer and print PlaybackState
            shimmer:Play()
            print("shimmer.PlaybackState: " .. tostring(shimmer.PlaybackState))
        end
    end

### Creating a Shimmer with a Custom Frame and Gradient

Shimmer can be customized using the [`Shimmer.GetFrame()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getframe) and [`Shimmer.GetGradient()`](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getgradient) functions. The below script will create a new Shimmer object and store it in a variable called `shimmer` and add it to the `script.Parent` then play it. The Shimmer will use a custom frame and gradient.

    -- Require the Shime module
    local Shime = require(game.ReplicatedStorage.Shime)

    -- Create a new Shimmer and play it
    local shimmer = Shime.new(script.Parent)
    shimmer:Play()

    -- Get the Shimmer's frame and set it's properties
    local frame = shimmer:GetFrame()
    frame.Size = UDim2.new(0.5, 0, 1, 0)
    frame.Position = UDim2.new(0, 0, 0, 0)
    frame.AnchorPoint = Vector2.new(0, 0)

    -- Get the Shimmer's gradient and set it's properties
    local gradient = shimmer:GetGradient()
    gradient.Rotation = 90
    gradient.Transparency = NumberSequence.new({
        NumberSequenceKeypoint.new(0, 0),
        NumberSequenceKeypoint.new(0.5, 0.5),
        NumberSequenceKeypoint.new(1, 0)
    })

# 🎉 Shime is officially released!

Shime has officially been released.

Shime development will be split between normal releases and long term support (LTS) releases. For those seeking stable builds with minor API changes or not worrying about having to update Shime as frequently you can choose the LTS release which will be specifically marked with LTS. For those seeking the lastest stable changes and occasional API changes you can select the normal release.

Shime has added new methods in it's first release from pre-release. These methods include `:GetFrame()` and `:GetGradient()` which will return their respective Instances. Seek documentation for more details.

# Shime Wiki

Shimmer is a class required from the Shime module that allows you to easily create a shimmer effect on any GuiObject based off of CoreGui's Shimmer module.

## [Home](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home)

  * [What is Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#what-is-shime)
  * [Why use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#why-use-shime)
  * [How to use Shime?](https://github.com/ryanlua/Shime/wiki/Getting-Started/Home#how-to-use-shime)

## [Getting Started](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started)

  * [Installation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#installation)
    * [Install from Roblox](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-roblox)
    * [Install from GitHub](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#install-from-github)
  * [Usage](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#usage)
    * [Creating a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer)
    * [Creating a Shimmer with a Custom Animation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-animation)
    * [Pausing & Stopping a Shimmer](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#pausing--stopping-a-shimmer)
    * [Reading Shimmer Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#reading-shimmer-properties)
    * [Creating a Shimmer with a Custom Frame and Gradient](https://github.com/ryanlua/Shime/wiki/Getting-Started/Getting-Started#creating-a-shimmer-with-a-custom-frame-and-gradient)

## [Documentation](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation)

  * [Summary](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#summary)
    * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors)
    * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties)
    * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods)
  * [Constructors](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#constructors-1)
    * [new](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#new)
  * [Properties](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#properties-1)
    * [PlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#playbackstate)
  * [Methods](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#methods-1)
    * [GetFrame](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getframe)
    * [GetPlaybackState](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#getplaybackstate)
    * [Stop](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#stop)
    * [Pause](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#pause)
    * [Play](https://github.com/ryanlua/Shime/wiki/Getting-Started/Documentation#play)

### Clone this wiki locally


This repository was archived by the owner on Aug 20, 2024. It is now read-only.

[ ryanlua ](https://github.com/ryanlua) / ** [Shime](https://github.com/ryanlua/Shime) ** Public archive

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ryanlua/Shime/wiki/_history?page=2).

  * [ Notifications ](https://github.com/login?return_to=%2Fryanlua%2FShime) You must be signed in to change notification settings
  * [ Fork 1 ](https://github.com/login?return_to=%2Fryanlua%2FShime)
  * [ Star  29 ](https://github.com/login?return_to=%2Fryanlua%2FShime)

# History

## Revisions

Compare revisions

  * Update parameters.

[ ryanlua ](https://github.com/ryanlua) committed Mar 24, 2023

b74bb71

  * Removed duplicate header

[ ryanlua ](https://github.com/ryanlua) committed Mar 24, 2023

853949e

  * Changes to format and fixed headers

[ ryanlua ](https://github.com/ryanlua) committed Mar 24, 2023

2542d6f

  * Updated _Footer (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Mar 24, 2023

267d2fc

  * Updated Home (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Mar 23, 2023

b297e04

  * Created _Footer (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Mar 23, 2023

f607b1c

  * Updated Documentation (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Mar 23, 2023

8e669e6

  * Created _Sidebar (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Mar 23, 2023

51be81e

  * Created Documentation (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Mar 23, 2023

42a4239

  * Initial Home page

[ ryanlua ](https://github.com/ryanlua) committed Mar 21, 2023

5097136


This repository was archived by the owner on Aug 20, 2024. It is now read-only.

[ ryanlua ](https://github.com/ryanlua) / ** [Shime](https://github.com/ryanlua/Shime) ** Public archive

  * ### Uh oh!

There was an error while loading. [Please reload this page](https://github.com/ryanlua/Shime/wiki/_history?page=1).

  * [ Notifications ](https://github.com/login?return_to=%2Fryanlua%2FShime) You must be signed in to change notification settings
  * [ Fork 1 ](https://github.com/login?return_to=%2Fryanlua%2FShime)
  * [ Star  29 ](https://github.com/login?return_to=%2Fryanlua%2FShime)

# History

## Revisions

Compare revisions

  * Updated Getting Started (markdown)

[ devbyeagle ](https://github.com/devbyeagle) committed May 22, 2024

4bfc927

  * Updated _Footer (markdown)

[ devbyeagle ](https://github.com/devbyeagle) committed May 22, 2024

f2a4e44

  * Updated _Sidebar (markdown)

[ devbyeagle ](https://github.com/devbyeagle) committed Apr 25, 2024

59a0e6c

  * Replaced Usage with Getting Started.

[ FloofyProtoBomb ](https://github.com/FloofyProtoBomb) committed Mar 16, 2024

8b54c51

  * Fix broken links.

[ FloofyProtoBomb ](https://github.com/FloofyProtoBomb) committed Mar 16, 2024

6b5e24d

  * Fix link

[ ryanlua ](https://github.com/ryanlua) committed Dec 21, 2023

550c5f1

  * Updated Home (markdown)

[ ryanlua ](https://github.com/ryanlua) committed May 21, 2023

e26e9e1

  * Updated Home (markdown)

[ ryanlua ](https://github.com/ryanlua) committed May 6, 2023

5e523c2

  * Updated _Footer (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Apr 23, 2023

ac05ea1

  * Updated Documentation (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Apr 8, 2023

d711c08

  * Updated _Sidebar (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Apr 7, 2023

438856f

  * Add new methods and property

[ ryanlua ](https://github.com/ryanlua) committed Apr 7, 2023

6d583db

  * Add new methods

[ ryanlua ](https://github.com/ryanlua) committed Apr 7, 2023

e31f711

  * Add new methods

[ ryanlua ](https://github.com/ryanlua) committed Apr 7, 2023

021f812

  * Update installation

[ ryanlua ](https://github.com/ryanlua) committed Apr 4, 2023

9d7d481

  * Update installation

[ ryanlua ](https://github.com/ryanlua) committed Apr 4, 2023

00db334

  * Updated to open beta

[ ryanlua ](https://github.com/ryanlua) committed Apr 2, 2023

b29c671

  * Updated Home (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Apr 2, 2023

410eb31

  * Fixed typo

[ ryanlua ](https://github.com/ryanlua) committed Apr 1, 2023

9e24cb3

  * Add images

[ ryanlua ](https://github.com/ryanlua) committed Apr 1, 2023

3deb1d3

  * Minor changes

[ ryanlua ](https://github.com/ryanlua) committed Apr 1, 2023

7214bce

  * Fixed spacing

[ ryanlua ](https://github.com/ryanlua) committed Apr 1, 2023

e4db4e1

  * Added new pages

[ ryanlua ](https://github.com/ryanlua) committed Apr 1, 2023

75e309c

  * Added images

[ ryanlua ](https://github.com/ryanlua) committed Apr 1, 2023

b9e26a0

  * Updated code samples

[ ryanlua ](https://github.com/ryanlua) committed Apr 1, 2023

be97d66

  * Updated Usage (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Mar 29, 2023

da413b6

  * Added usage and installation

[ ryanlua ](https://github.com/ryanlua) committed Mar 27, 2023

0bac255

  * Updated to add Shime home

[ ryanlua ](https://github.com/ryanlua) committed Mar 27, 2023

4d5bbf9

  * Change parameter name for constructor

[ ryanlua ](https://github.com/ryanlua) committed Mar 27, 2023

a4fc972

  * Updated _Sidebar (markdown)

[ ryanlua ](https://github.com/ryanlua) committed Mar 24, 2023

32977c5


>**o·ver·ture**
>*/ˈōvərCHər,ˈōvərˌCHo͝or/*
>1. an orchestral piece at the beginning of an opera, suite, play, oratorio, or other extended composition.
>2. an introduction to something more substantial.

Overture is a source management module for Roblox. Overture was created to decomplexify the loading of libraries, streamline OOP classes and bridge the server-client gap!

For more information on usage, head over to the [documentation webpage](https://devsparkle.me/Overture/).

## Getting Started
Head over to the [releases tab](http://github.com/devSparkle/Overture/releases) and download the prepared `.rbxm` file. Insert this file into your game and drag the ModuleScript to `ReplicatedStorage`.

Then, require it in your code like the example below:

```lua
local Overture = require(game:GetService("ReplicatedStorage"):WaitForChild("Overture"))

### Wally

Overture is also available through Wally! Include it in your project by adding the following to your `wally.toml`:
```toml
Overture = "devsparkle/overture@^2"

## Extension
Development with Rojo can be turbocharged with the [VSCode extension for Overture](https://marketplace.visualstudio.com/items?itemName=devSparkle.overture-vscode), which amongst other features provides typechecking support for modules required through `LoadLibrary`.


# patch-roblox-cameramodule
Module that provides access to the CameraModule API in the Roblox PlayerModule

## How to use
* [Wally](https://wally.run/package/egomoose/patch-cameramodule)
* [Releases](https://github.com/EgoMoose/patch-roblox-cameramodule/releases)

This module returns a function that should be called on the CameraModule before PlayerModule has had a chance to run. The easiest place to do this is in the `PlayerScriptsLoader`, but this may or may not be the right place depending on the rest of your project.

For example:

```Lua
-- PlayerScriptsLoader
local PlayerModule = script.Parent:WaitForChild("PlayerModule")
local CameraModule = PlayerModule:WaitForChild("CameraModule")
local PatchCameraModule = script.Parent:WaitForChild("PatchCameraModule")

require(PatchCameraModule)(CameraModule)

local playerModuleObject = require(PlayerModule)
local cameraModuleObject = playerModuleObject:GetCameras()

-- the api is public!
print(cameraModuleObject)

-- can overwrite the functions
local prevUpdateFunc = cameraModuleObject.Update
function cameraModuleObject.Update(self, ...)
    print(...)
    prevUpdateFunc(self, ...)
end

## A note on CameraModule descendants
When this patch runs it renames the `CameraModule` to `_CameraModule` and creates a redirection module named `CameraModule` that points to the new patched value. This is done b/c as a result of the patch trying to require `_CameraModule` will cause a infinite yield.

```Lua
local CameraModule = require(game.Players.LocalPlayer.PlayerModule.CameraModule)
print(CameraModule) -- this works!

local CameraModule = require(game.Players.LocalPlayer.PlayerModule._CameraModule)
print(CameraModule) -- this will never print b/c the above line yields forever!

As a result of this an important decision needed to be made on the development end of this patch. The module named `CameraModule` returns the patched value, but it doesn't have any of the descendants that `_CameraModule` does. This is problematic if the user of this patch is trying to access any of those descendants by standard naming conventions.

```Lua
-- This doesn't exist!
local TransparencyController = require(game.Players.LocalPlayer.PlayerModule.CameraModule.TransparencyController)
-- It's here instead!
local TransparencyController = require(game.Players.LocalPlayer.PlayerModule._CameraModule.TransparencyController)

You might just suggest to move all the descendants of `_CameraModule` to the new `CameraModule` and at the time of writing this that would work, but it could easily break in the future if any of the camera code becomes dependant on the expected parent-child relationship.

The solution I decided to use instead is to continue to use redirection modules and proxy values. Instead of moving the descendants out from `_CameraModule` I instead create a duplicate hierarchy under `CameraModule` with module scrips and values that redirect to the values under `_CameraModule`.

This is the best way to get behavior parity with the default CameraModule that I can think of at the moment. If you want to be extra safe you can always reference the path via `_CameraModule` to avoid worrying about the redirection modules and proxies.


# luau-roblox

A luau library to manipulate Roblox instances from place/model files.

## Usage

Setup the library, ideally with `.luaurc`.

### Virtual DataModel

Using the Virtual DataModel is easier, but it has more interface overhead.

```luau
local roblox = require("@roblox");

local placeContents = ...; -- read the place file
local game = roblox.deserializePlace(placeContents);

-- do something with the game

local content = roblox.serializePlace(game);

> [!NOTE]
> The `Virtual DataModel` could *upgrade* deserialized instances, converting properties under instances to their **latest version** (based on the current version of `luau-roblox`), converting some deprecated properties.
> This "upgrade" step is manually implemented under this library and must be activated.
> To activate it, call `applyPatches` function after requiring the library:
> ```luau
> local roblox = require("@roblox")
> roblox.manager.applyPatches()
> This step is optional, and removing this step could mean outdated properties would error on use.

### DOM

Using the DOM over the [Virtual DataModel](#virtual-datamodel) is ideally faster, with zero overhead.
The downside is that you have to manually handle the instances, classes, parents, sharedstrings, and references.

```luau
local roblox = require("@roblox");

local dom = roblox.dom;

local placeContents = ...; -- read the place file
local doc = dom.deserialize(placeContents);

-- do something with the doc

local content = dom.serialize(doc, "BINARY");

### Types
The library does not include types internally, but types are available as a separate package: `@roblox/types`.

```luau
local roblox = require("@roblox");
local types = require("@roblox/types/roblox");
local enums_types = require("@roblox/types/roblox_enums");

local Enum: enums_types.Enums = roblox.manager.datatypes.Enum;

local object: types.Part = roblox.manager.Instance.new("Part");

object.Material = Enum.Material.Wood;
object.Posit|
        --  ^ <- autocomplete

> [!WARNING]
> The roblox types provided in this library are known to make the new luau type solver a ton slower.
> It is recommended to use the library's provided roblox types on the older type solver.
> alternatively you can use the built-in roblox types with luau-lsp to annotate with, which should be faster. But could be more ahead of the roblox version.

## Runtime Specifications

> [!NOTE]
> This library would attempt to use runtime native functions if available, otherwise fallback to pure Luau implementations.

General `Runtime` support requirements:
- Luau (`0.669+`).
  - `vector` support.
  - Require-by-string.
  - `.luaurc` support.

| runtime | capabilities | version | notes |
|---------|--------------|---------|-------|
| [`zune`](https://github.com/Scythe-Technology/zune) | `all` | `0.5.*` | performs best with + this library utilizes all possible features |
| [`Lune`](https://lune-org.github.io/docs/) | `all-luau` | `0.10.*` | fallbacks to most luau implementations |
| other/unknown | `some` | `~` | missing support for `zstd`, incomplete `task`, and `datetime` |

If a runtime is not listed above, it would be treated as `other/unknown`. This just means the library does not have specific optimization for the runtime, and would use pure Luau implementations for everything, there will be missing features like no `zstd` support, smaller `datetime` support, poor `lz4` compression, etc.

capabilities:
- `all` means all complete use of features and support for this library.
- `all-luau` means all features are supported, but this library would use pure `luau` implementations for missing runtime features.
- `most` means some features are missing, but the library is still usable.
- `some` means only basic features are supported, and the library could be slow but should remain usable.

> [!WARNING]
> Roblox `binary` format could use different compression methods, in which this library does not have pure Luau implementations for all of them, and currently only has `lz4` luau implementation.
> With the `lz4` compression implementation in pure `luau`, the output size could be significantly worse, the size could be many times larger than the ideal/original size.
> This library would use runtime native compression methods if available, and would be manually used by this library, those runtime without it should be noted above in the list as `all-pure` or below.
> In most cases, Roblox uses `lz4` compression for `binary` format.

> [!TIP]
> For the best performance, and best compatibility, use this library with the [`zune`](https://github.com/Scythe-Technology/zune) runtime.

## Information

> [!WARNING]
> 64-bit integer data could not be represented fully due to luau's number limitations, the max precision is 2^53.

`DOM` supported formats:
- `Binary` (.rbxl, .rbxm)
    - [x] deserialization
    - [x] serialization
- `XML` (.rbxlx, .rbxmx)
    - [x] deserialization
    - [x] serialization

**Goals**:
- High performance + compatibility
- Up to date Roblox instances


![](./gh-assets/FullLogo.png)

RoQuest is a sophisticated abstract implementation of a Quest System. Although it can self manage nearly everything it also allows for the developer to manually set and manage everything

![](./gh-assets/CollectExample.gif)
![](./gh-assets/CollectCorn.gif)

## 📦 Installing

RoQuest can be installed in different ways, depending on your project's needs. Choose the method that suits you best:

### 🐶 Wally
Watch wally's page

roquest = "prooheckcp/roquest@>0.0.0, <10.0.0"

### 🔨Studio
Get the Roblox Model

### 🐙GitHub
Download from Github Releases

# 📚Start Learning

You can start learning in the docs page! https://prooheckcp.github.io/RoQuest/docs/intro

## 📷Tutorial
Coming soon!

# ⭐ Contributing
Please leave a star on [GitHub](https://github.com/prooheckcp/RoQuest), it helps a lot!

Pull requests are welcome. For major changes, please open an issue first
to discuss what you would like to change.

Please make sure to update tests as appropriate.

# 📄 License
[MIT](https://choosealicense.com/licenses/mit/)


### Server -> Client

RoQuest automatically replicates all the quest data to the client making it easy to update UIs and handling data on the client

### Abstract implementation

RoQuest is an abstract implementation meaning it isn't fully auto managed. The developer has full control on how quests and loaded/saved and how they are handled

### Fast

RoQuest takes advantage of a lot of caching in order to keep most getters with an O(1) complexity. This allows us to quickly retrieve and modify the data


This plugin adds autocomplete suggestions to the Roblox Studio script editor for ModuleScripts in
your project as well as Services that can be imported via GetService. Just begin typing the name of
a ModuleScript or a Service and then select it from the autocomplete list.

https://github.com/sircfenner/AutoImport/assets/25118482/0d9222e1-8094-4982-a716-6d8b8f111d3a

### Useful features

-   When requiring a ModuleScript, a GetService call may be automatically inserted to enable accessing
    the module in the canonical way; if the service was already imported, it will use the variable
    assigned to it instead
-   Suggestions are sensitive to Luau syntax/context; for example, they will not appear while typing
    in comments or strings other than in the expression parts of interpolated strings
-   Comment directives/hot comments at the top of the file (such as `--!strict`) are respected when
    inserting code
-   Network boundaries and common practices for locating server/client-specific code are respected;
    for example, inaccessible server modules are not suggested from client scripts
-   Modules that are descendants of folders with names typically used by package managers
    ('node_modules' and '\_Index') are removed from autocomplete suggestions
-   Service completions are derived from the API dump at the time of building the plugin, so you can
    re-build the plugin yourself following the steps below to stay up to date with the latest service
    names

### Installing the plugin

You can pay for a pre-built version of the plugin via the
[Roblox Creator Store](https://create.roblox.com/store/asset/18297441605/Auto-Import). Alternatively,
follow the steps below to build it yourself, then add it to your local plugins folder.

### Building the plugin

To build this plugin yourself:

1. Clone the repo
2. Install [foreman](https://github.com/Roblox/foreman), then run `foreman install`
3. Run `scripts/build.sh`

If you are interested in making a contribution, run `scripts/dev.sh` with the `Reload plugins on
file changed` setting enabled in Studio. This will hot-reload the plugin as you make edits.

### See also

Existing plugin with similar functionality: <https://github.com/MonzterDev/Roblox-Auto-Import>


# Seam
Seam is a reactive state and animation library, useful in many contexts including UI and game mechanics.

Read everything you need to know about Seam on the documentation site: https://seam.igottic.com/

You can also install Seam from Wally. See info about that [here](https://wally.run/package/miagobble/seam?version=0.4.1).

Some credits for internal modules:
- Sleitnick (Trove, Signal)
- bottosson (Oklab color space)


# The next evolution of states and animation on Roblox

### Easy to learn

A simple and flexible API allows you to do less learning and more developing.

### Flexible and scalable

Seam is built for projects of any size; be one person or one hundred, and it will scale with you.

### Great for animation

Smooth animations that feel natural and responsive are built-in to this library.

### Light as feathers

Seam has a small footprint with excellent performance, even when compared to other state managers.

### It's time to make games better

It's open-source and free, so give it a spin and see what you think. You can always get support here: https://discord.gg/k5MaZEU8sm

[API](https://seam.igottic.com/docs/getting-started)[Blog](https://seam.igottic.com/blog)


v0.5.2 introduces implicit children, critical changes to nested reactive values, and other small changes.

v0.5.1 has just a few small changes for quality of life.

v0.5.0 has many fixes and changes, including an update to camelCase variants for Seam functions.

v0.4.7 improves scopes and springs, including fixes and features.

v0.4.4 fixes and changes minor issues within Seam.

v0.4.5 fixes more issues related to states using `nil`.

v0.4.3 introduces `ForPairs` and makes a change to camel-case variants of Seam constructors.

I missed the post for the v0.4.1 update, so this a joint post between 0.4.1 and 0.4.2!

v0.4.0 of Seam evolves this library to not just be for UI, but general purpose. It's now usable on the server and has some changes to the API. As a bonus, the documentation is now complete!

New year, new update! v0.3.4 introduces `EventSequence`, alongside some other changes and API doc improvements.


v0.4.0 of Seam evolves this library to not just be for UI, but general purpose. It's now usable on the server and has some changes to the API. As a bonus, the documentation is now complete!

To summarize, here are the changes made to Seam:

  * Removed `MakeSignal()`
  * Removed `MakeSymbol()`
  * Added `.Looped` to `EventSequence`
  * Adjusted `EventSequence` so that keypoints are now an array, with index `1` being the time, and index `2` being the callback. `ValueSource` and `NewValue` have been removed
  * Adjusted the backend so that the entirety of Seam works on the server too

Seam has been rebranded to be more general-purpose, meaning it's **no longer just for UI**. Reactive states and other Seam features can be handy in a number of situations outside of UI/UX, so it's best to take advantage of it! Seam now also works on the server, so it can be used there too.

Other than that, the API got modified a bit. `MakeSignal()` and `MakeSymbol()` were removed since it's better practice to just use different libraries for those.

Additionally, `EventSequence` got changed. Read the API docs for more info, but this is an example of what it looks like now:

    local EventSeqeuence = Seam.EventSequence({
        {1, function()
            print("a")
        end},

        {2, function()
            print("b")
        end},

        {3, function()
            print("c")
        end},
    })

    EventSeqeuence:Play()

Finally, examples and tutorials are now complete, meaning you should no longer find warnings saying there is missing documentation.

And that's it! Enjoy v0.4.0.


Two updates in two days? Wow, we're ending 2025 strong! Version 0.3.3 just dropped some utilities and more!

Version 0.3.2 has just released. Not much changed, but it might be worth updating if you have random problems!

Seam is not the only UI framework on Roblox, with many other popular and great options (including React-lua, Fusion, Blend, and Vide) capturing a lot of adoption. So, when I present Seam to developers, I often get asked why Seam is better than the other options.

This blog post is going to be an overview of why I think Seam is worth trying, and what it's best for.

As a quick patch, version 0.3.1 has released! Here is what changed:

  * Added `SetValue`
  * Animation states (Spring and Tween) now calculate on pre-render (instead of render) to fix occasional bugs
  * Backend changes
  * Added `Tags`

Also, documentation for `GetValue` was finally added, even though it's been around since 0.2.2; this was a previous mistake, oops!

Version 0.3.0 of Seam is here! Included in this update is:

  * Removal of `From` and `DeclareComponent`, revamp of components system
  * Removal of preset components
  * Addition of `GetValue`
  * Improvements to the backend
  * Fixes to race conditions
  * Fixes to crashes and infinite loops
  * And an insane number of other fixes

Version 0.2.0 of Seam is here! Included in this update is:

  * Signifigantly improved typechecking
  * Added StageGui preset component
  * Removed ScaledUIStroke preset component
  * Bug fixes and more backend changes

This feels strange to say considering I've never done this before, but yes, hi, this is my first blog post for Seam!

I want to catch you up on what has been happening with this framework lately, what my thinking is, etc.


I missed the post for the v0.4.1 update, so this a joint post between 0.4.1 and 0.4.2!

**Version 0.4.1** just fixed a critical issue when using Seam on the server. Make sure that, if you're using Seam on the server, you use this version at minimum.

**Version 0.4.2** update just adds `EventSequence.LoopDelayTime`, which you can read more about in the API.

That's all!


v0.4.5 fixes more issues related to states using `nil`.

The following fixes were made:

  * Fixed an issue where `Use` would return incorrect data when it was used on a computed or rendered instance returning nil
  * Fixed an issue where `GetValue` would return incorrect data when it was used on a computed or rendered instance returning nil
  * `GetValue` better differenciates between states and non-states now
  * Fixed `IsState` returning false on computed and rendered instances


v0.5.1 has just a few small changes for quality of life.

For the most part, errors and warnings have improved tracebacks. In addition, there are more times where a warning or error is thrown intentionally to be descriptive, instead of letting a different error happen.

Some minor adjustments have been made to the codebase, including fixing some shadowed variables.


New year, new update! v0.3.4 introduces `EventSequence`, alongside some other changes and API doc improvements.

Before going deeper, this is the summary of changes made:

  * Added `EventSequence`
  * Completely rewrote the math for springs, fixing bugs relating to critical dampening
  * Backend changes
  * Removed `From` and `DeclareComponent` errors when trying to refer to them, and they now just return `nil`
  * Improved API documentation

The big highlight of this update is `EventSequence`, which is a way to, well, sequence stuff. It's great for complex animations with many changing values and moving parts.

Here is an example using it:

    local TestValue = Value(5)

    OnChanged(TestValue, function()
        print(TestValue.Value)
    end)

    local TestSequence = EventSequence({
            Time = 0.1,
            ValueSource = TestValue,
            NewValue = 10,
        },

            Time = 1,
            ValueSource = TestValue,
            NewValue = 15,
        },

            Time = 3,
            ValueSource = TestValue,
            NewValue = 25,
        },

            Time = 2.5,
            ValueSource = TestValue,
            NewValue = 20,
        },

            Time = 5,
            Callback = function()
                print("Reached 5 seconds")
            end,
    })

    TestSequence:Play() -- Over the course of 5 seconds, it prints 10, 15, 20, 25, and "Reached 5 seconds"

Aside from that, let's talk about springs. When I first added `Spring`, it had a comment in the math function saying:

> I copied this spring math from another module I did a long time ago, so let's hope it doesn't explode.

And well... it exploded. It turns out the math didn't do a good job with critically dampened springs that were updated often, usually causing crazy results. The new math _should_ fix this.

On the backend, the big change I did was swap from Janitor to Trove for anything cleanup-related, since Janitor wasn't very reliable at times. That being said, in the future I plan to swap out Trove for Heap, a cleanup module of mine that was just birthed (<https://github.com/MiaGobble/Heap>).

Finally, `From` and `DeclareComponent` will no longer throw an error when referenced, and all references to them are now cut. If you still try to use them, you will get a `nil` value.

I want to point out that alongside this update is some improvements to the API documentation, which should hopefully better explain some key parts of Seam.

That's this update! Let me know how event sequences and springs work for you.


v0.4.7 improves scopes and springs, including fixes and features.

The following was done this update:

  * Fixed an issue where setting `Spring.Velocity` did nothing
  * `OnEvent` is now scopable
  * `OnAttributeChanged` is now scopable
  * Updated scope typechecking to fix missing members
  * Adjusted Moonwave comments in source code

Also, you may noticed I missed a post about v0.4.6. That update was important for fixing critical issues.

Make sure to keep updating Seam to get the latest features, fixes, and more.


v0.4.3 introduces `ForPairs` and makes a change to camel-case variants of Seam constructors.

`ForPairs` is similar to `Computed`, in the sense that it updates in reaction to other values. However, it has some differences, so make sure to check out the docs.

Also, camel-case variants of constructors (e.g. `new()` instead of `New()`), will soon be retired, and using them right now will throw a warning. This is to reduce the amount of space wasted in autofill!

That's it. Have a good day!


v0.5.2 introduces implicit children, critical changes to nested reactive values, and other small changes.

Here is everything that changed:

  * `Children` now supports a single instance without a table (`[Children] = Instance` instead of `[Children] = {Instance}`)
  * Implicit children are now supported (read the documentation for `Children` for more info)
  * Rewrote the value packing/unpacking behind the scenes
  * Removed `Value.ValueRaw`
  * Removed reactivity from nested keys in table values

The two major changes with this update have to do with `Children` and `Value`.

Seam now supports implicit children, meaning you can make them without the `Children` declaration. To do so, just put them directly in the properties table, like so:

    local Object = New("Object", {
        -- Properties
        Property = Value,
        Property2 = Value2,

        -- Children
        New("Object", {

        }),

        New("Object", {

        }),
    })

Additionally, `Value` no longer reacts to nested table keys. The below example works in previous versions, but as of today it will no longer work:

    local MyValue = Value({x = 5})

    OnChanged(MyValue, function()
        print("Detected change")
    end)

    MyValue.Value = {x = 6} -- Prints "Detected change" still
    MyValue.Value.x = 7 -- Starting today, this will no longer trigger the print or other reactivity

Because this change was made, `Value.ValueRaw` is no longer needed, and `GetValue` now uses `Value.Value`.

That's all. Make sure to update to always get the newest improvements!


v0.4.4 fixes and changes minor issues within Seam.

To start, setting `Value.Value` or initializing with `Value(...)` ignores `nil` as a type, meaning it bypasses the type matching check. The below code example threw an error before today's update (and no longer does):

    local MyValue = Value(nil)

    MyValue.Value = workspace.Part

This also accidentally fixed an edge-case issue where reading a value state in computed would return the value state itself with `Use` if the value was `nil`.

Finally, some more things are now scopable in Seam, improving cleanup capabilities. These are:

  * `Inspect`
  * `OnChanged`
  * `OnAttached`

As a side note, documentation for `Value`, `SetValue`, and `GetValue` was improved today.

Make sure to update Seam to keep up with fixes and features!


v0.5.0 has many fixes and changes, including an update to camelCase variants for Seam functions.

The most important takeaway from this update is that _all_ camelCase variants for Seam functions are removed. For example, `New` had the `new` variant, but that no longer exists. This change was made to free up space in autofill and improve consistency. Because this change is major and may break some developers' code, the version is ticked up 0.5.0 instead of 0.4.8.

There were also a bunch of smaller improvements made this update:

  * Improved error traceback on ForPairs
  * `Spring` now accepts states for speed and dampening
  * `Tween` now accepts a state for TweenInfo
  * `Spring.Speed` and `Spring.Dampening` are now readable
  * Fixed some edge case issues with animated states
  * Renamed `Tween.TweenInformation` to `Tween.TweenInfo`
  * Added `DeltaTime` as an argument for `Rendered`
  * Fixed a C-stack overflow with scopes
  * Fixed non-descriptive and non-traced errors from internal state manager
  * Fixed some edge-case errors caused by signals

As always, be sure to update Seam so that you get the latest improvements!

_This post might arrive late due to delayed deployments!_


Version 0.2.0 of Seam is here! Included in this update is:

  * Signifigantly improved typechecking
  * Added StageGui preset component
  * Removed ScaledUIStroke preset component
  * Bug fixes and more backend changes

## The improved typechecking

There are a _lot_ of added types, as well as improvements to the way types are implemented behind the scenes.

Let's create an example where we are making a new Value state. Before, the best you could do would be something like this:

    local MyValue = Value(5) -- ok
    local Foo : number = MyValue.Value -- ok
    local Bar : string = MyValue.Value -- ok

Or if you wanted to be _really_ fancy, maybe:

    type MyValue = {Value : number}
    local MyValue : MyValue = Value(5) -- not ok
    local Foo : number = MyValue.Value -- ok
    local Bar : string = MyValue.Value -- not ok

But now, we have the `Value` type in Seam, so we can do this:

    local MyValue : Seam.Value<number> = Value(5) -- ok
    local Foo : number = MyValue.Value -- ok
    local Bar : string = MyValue.Value -- not ok

Which is great for when you need to be explicit! Feel free to mess around with this and let me know how you feel about it.

## Changes to preset components

To start, I removed `ScaledUIStroke`. Roblox recently made updates to the `UIStroke` instance, making this preset component useless.

Replacing it is `StageGui`, a preconfigured `ScreenGui`. If you were to do this:

    local MyGui = New("ScreenGui", {}, From "StageGui")

_MyGui_ would have the following properties set:

  * `ResetOnSpawn` will be _false_
  * `IgnoreGuiInset` will be _true_
  * `Parent` will be the player's GUI

Which makes it easy to create, well, stage GUIs.

## The small changes

I made a bunch of small changes behind the scenes, and you shouldn't care about them.

That being said, I did find and fix a memory leak with `Tween`; turns out I suck at variable names when I'm tired and that bit me in the ass.

## Is Seam production-ready yet?

Maybe? I don't want to say yes yet, simply because it hasn't been used on a large-scale project (except for a single component in Slap Battles). For now I'll say no, _but_ I am using it in an upcoming large-scale project of mine, so hey, we'll see.

If you use Seam in a big project, let me know! I need to see what issues exist in niche cases so that I can patch them up as soon as possible.

That's it though, enjoy v0.2.0! :3