Have ideas to improve npm?Join in the discussion! »

    TypeScript icon, indicating that this package has built-in type declarations

    3.0.7 • Public • Published

    Build Status npm version Bower version Downloads


    A Functional Reactive Programming (FRP) library for TypeScript/JavaScript


    Here are some demos from the community you can try in your browser:

    Prerequisite: Node.js

    Install Node.js® and npm if they are not already on your machine.


    via NPM

    $> npm install sodiumjs
    $> npm install -g sodiumjs

    via Yarn

    $> yarn add sodiumjs
    $> yarn global add sodiumjs

    via html include

    <script src="https://cdn.jsdelivr.net/npm/sodiumjs/dist/sodium.umd.min.js"></script>

    this requires also including sanctuary-type-classes and typescript-collections dependencies

    How to use


    import { Cell } from 'sodiumjs';


    const c = new Cell(12);


    const c = new Cell<number>(12);

    In a browser

        var cell = new Sodium.Cell(12);


    The usual npm run build/test/clean commands are available to produce the distribution package.

    However, a more comfortable iteration style may be using the the live integration testing approach:

    1. cd src/tests/integration
    2. npm run dev:auto-reload (or just npm run dev without live reloading)

    This starts up a local development server and showcases integration with a webpack app.

    Changes to the core lib are then seen live since it uses a local alias rather than reference the lastest build or distribution of the library

    Sodium library code is in src/lib

    Packaging/tree-shaking and bundling of the library is done with Rollup

    Testing is via Jest


    Distributed under BSD 3-Clause


    Stephen Blackheath, 9 Jul 2016

    I am very happy to announce that the Typescript implementation of Sodium is ready!

    It features a newly developed scheme for memory management, which was needed because Javascript has no finalizers. Memory management in Sodium is 100% automatic.

    This scheme imposes one small requirement on the API: You must declare any Sodium objects held inside closures using wrapper functions lambda1, lambda2 .. lambda6 - depending on the number of arguments that the closure has. These take a second argument, which is a list of the Sodium objects contained in the context of the closure. For example:

    csw = csw_str.map(lambda1(sw => sw == "sa" ? sa : sb, [sa, sb])),

    This allows Sodium to track all dependencies. There are some limitations to this scheme - for example, it can't track dependencies if you poke arbitrary Sodium objects into a StreamSink, but I think these should not affect any normal usages. Time will tell.


    1.0.5 Migrate build environment over to fuse-box. Begin adding fantasy-land compatibility

    1.0.0 Add snapshot3(), snapshot4(), snapshot5() and snapshot6(). Fix a serious bug in TimerSystem where timers sometimes don't fire.


    npm i sodiumjs

    DownloadsWeekly Downloads






    Unpacked Size

    1.53 MB

    Total Files


    Last publish


    • avatar
    • avatar
    • avatar
    • avatar