Skip to content
This repository has been archived by the owner on Jul 15, 2022. It is now read-only.

freddylist/llama

Repository files navigation

⚠️ No longer maintained ⚠️

Alternatives:


Hello all! Since I do not do much Roblox game development these days (among other reasons), I will no longer be maintaining Llama.

Thank you to all of Llama's contributors, and I am verry sorry for any inconveniences I have caused.

If you have a good alternative to Llama, email me at llama@freddylist.xyz so I can link to it in this readme and archive Llama.

I recommend you do not fork Llama for these reasons:

  • Runtime typechecking (present in Llama) is not really needed anymore with the advent of Luau type analysis.
  • The tests are a bit of a mess.
  • I'm sure Llama could've been designed better.
  • Many other minor reasons...

If I do return to Roblox development in the future and no alternatives have been created yet, I may create a new immutable collections library. I will then hopefully have more experience with open-source projects and software development in general.

Thank you all again!

📚 Llama 🦙

GitHub Actions Build Status Documentation
Lua Library for Immutable Data
Llama

Installation

There are a few ways to get started with Llama.

Method 1: Import model file

  1. Download the .rbxmx model file from the latest release on the Llama releases page.
  2. Insert the model anywhere in a Roblox place!

Method 2: Good ol' copy + paste

  1. Copy the src directory of Llama into your project.
  2. Rename it to Llama.
  3. Make sure you put t under the Llama directory. (this step will hopefully be resolved in the future by package managers or Luau type-checking)
  4. Use something like Rojo to sync your project to Roblox Studio!

Method 3: Git submodule

  1. Navigate to where you want to keep your submodules in Git bash.
  2. Run git submodule add https://github.com/F-RDY/llama.git.
  3. Using something like Rojo, set up your project to sync Llama/src into Roblox Studio!

Method 4: Package manager

Coming Soon™

Usage

Basic usage

To use Llama, simply require it as a module from where you installed it! It is also recommended that you set Llama.Dictionary, Llama.List, and Llama.Set to their own variables; otherwise, you'll be typing a lot!

-- Other modules...
local Llama = require(LlamaPath)

local Dictionary = Llama.Dictionary
local List = Llama.List
local Set = Llama.Set

Usage with Roact and Rodux

Rodux requires your state to be immutable, so Llama is a great choice for manipulating it!

local function reducer(state, action)
	if action.type == "Add" then
		return Dictionary.merge(state, {
			counter = counter + 1
		})
	elseif action.type == "Subtract" then
		return Dictionary.merge(state, {
			counter = counter - 1
		})
	end
end

Visit the docs for examples and API reference.

Special Thanks

What's in a name?

Llamas are members of the Camelid group of mammals along with alpacas, camels, and dromedaries, which are known for being very stubborn but reliable animals.