node package manager


A lightweight, and docile, JavaScript library to help embracing functional programming.

Lamb, because it's docile like a lamb.

A lightweight, and docile, JavaScript (ES5) library to help embracing functional programming.

The API documentation is here.

Install it with npm:

npm install lamb

Require it in node.js:

var _ = require("lamb");

It's useful to alias it to have a shorter symbol, like _, as I did above and throughout the documentation: it's cleaner and the lamb object itself can be used as a placeholder argument in partial application.

In a browser, simply include the version you want from the dist folder:

<script src="dist/lamb.js"></script>


<script src="dist/lamb.min.js"></script>

Doing so a lamb variable will be created in the global object. The source map for the minified file is in the same dist folder.

Lamb it's also delivered on a CDN, courtesy of jsDelivr and unpkg:

<script src=""></script>
<script src=""></script>

The URLs above will retrieve the latest version, but you can target a specific one:

<script src=""></script>
<script src=""></script>

Please note that Lamb is served by jsDelivr since version 0.42.0.

You can try it right now in your browser, too.

Lamb uses semantic versioning and please be aware that, as long as the major version is 0, any bump in the minor version could involve a breaking change in the API. You can check the recent or the full changelog to see if your code is affected.

  • Is another JavaScript library really needed? Don't know, really. The story here is that I like to write my own code and, time permitting, to even reinvent the wheel: it's part of my learning process. This library is only a means for me to gather some utilities I wrote, clean them up a bit and put them together with some new tools to make a documented, reusable package.

  • Are your wheels rounder? Not at all, but I do try my best to add better suspension; and you do realise that you're reading a guy talking to himself, don't you?

  • Why ECMAScript 5? Because this is simply me tidying up some old code, and will hopefully be my goodbye to ES5 before fully diving into the world of transpilers.

  • What about ES4 environments? In my make-believe world they don't exist, but in case I can be proven wrong you can load some shims / polyfills before my library. There's plenty of those in the JavaScript Reference on MDN, and there are many pre-made packages as well out there.

  • Are there plans for the future? Absolutely yes: this isn't a complete work at all, only a first public release. I need better documentation and examples for starters, and I also want to add a bunch of other functions and concepts into the mix.

  • I really like Lamb's logo: are you the designer? I like it a lot too and, no, it isn't my doing: the author is a very talented designer who never signs his works by choice and doesn't want to be credited for it. Other than being eternally grateful, the least I can do is offer my services as a middleman and put you in touch if you need his craft.

  • Why "Lamb"? See the main header: because it's docile like a lamb.

You can also check the full changelog.

  • v0.46.0 - 2016/12/07

    • Fully compatible with versions down to 0.44.x
    • Added isFinite, isInteger, isSafeInteger
    • Code clean-up and minor performance improvements in sorting functions
    • First step in improving the documentation site
  • v0.45.0 - 2016/11/14

    • Fully compatible with versions down to 0.44.x
    • Added pull and pullFrom
    • Added keySatisfies and pathSatisfies
    • Updated examples and doc comments
  • v0.44.0 - 2016/11/08

    • API change: repeat and testWith now throw an exception when the source string is nil and convert to string every other value
    • API change: repeat now floors the value received as the times parameter instead of ceiling it
    • API change: the char parameter of the padding functions isn't optional anymore and will be coerced to string
    • Fixed: predicates built with testWith are now safe to reuse even when the global flag is used in the pattern
    • Added append and appendTo
    • Updated tests of all string functions
  • v0.43.0 - 2016/11/03

    • Fully compatible with versions down to 0.40.x
    • Added pathExists and pathExistsIn
    • Improved performance of setIn, setKey, updateIn and updateKey
    • Improved performance of setPath, setPathIn, updatePath and updatePathIn
  • v0.42.0 - 2016/10/25

    • Fully compatible with versions down to 0.40.x
    • Added unless and when
    • Improved performance of condition