Solidarity is an environment checker for project dependencies across multiple machines.


Solidarity is an environment checker for project dependencies across multiple machines.

Build Status Build Status Codecov npm version

When the same exact code works on one machine but not another, Solidarity is the answer

Docs Website

We now return you to your regularly scheduled ReadMe


Install the command globally OR use via node_modules. It's suggested you install your snapshot plugins in the same place.

Note: Node.js version must be >= 7.6.0.

# example of installing global with npm and react-native snapshot
$ npm i -g solidarity solidarity-react-native

# example of installing local with yarn and elixir snapshot (dev dependencies)
$ yarn add solidarity solidarity-elixir --dev

How do I use it?

Using solidarity is easy! Run the following command to check the current project environment.

$ solidarity

This command looks for the .solidarity file in the working directory, and then runs a check of the containing rules against your environment. The command exit code is tied to the success of the solidarity check for testing frameworks.

Write your Solidarity file by hand, or use a snapshot.

How do I update it to my machine specs?

Environment updates can be stored to solidarity quickly.

$ solidarity snapshot

The snapshot parameter will update the rules in the .solidarity file to the current system specs. By default a snapshot will be strict with the versions of everything detected. But, semantic versioning is supported.

How do I create my first snapshot?

If no .solidarity file is present, then solidarity snapshot prompts you to identify the technology your project depends on.

$ solidarity snapshot
No `.solidarity` file found for this project.  Would you like to create one? (Y/n)

Custom rule-sets can be created by modifying the .solidarity file by hand, or by creating a solidarity plugin for a given technology. See documentation for how you can create your own.

How do I update my snapshots?

Given there is already a .solidarity file present, then you can run solidarity snapshot [rule]

$ solidarity snapshot cli node

Solidarity will follow up with aditional questions to help drill down your new snapshot rule.

Cross Platform

Solidarity works with Mac/Linux/Windows environments. CI tests all rules with each platform on every update.

Using Solidarity for GitHub Reports

Solidarity Reports You've already identified everything that's important to your project. So when anyone files bugs on your repo, they can just report using Solidarity!

Just run solidarity report

The resulting output is copy/paste markdown. If you're confused, here's the full blog post.

Project Support

Open Source

Solidarity, as open source, is free to use and always will be ❤️ . It's MIT Licensed and we'll always do our best to help and quickly answer issues. If you'd like to get a hold of us, join our community slack and look for the #solidarity room.


Infinite Red offers premium Solidarity support and general mobile app design/development services. Email us at [email protected] to get in touch with us for more details.

Additional Info

You can help!


The MIT License (MIT). Please see License File for more information.

NPM Details


  • Typescript


    Work in progress

    • [x] Install & Setup initial typescript configuration.
    • [x] Move over .js files to .ts files as is w/ passing specs and minimal changes.
    • [x] Update bin/solidarity to point at the new dist directory.

    Local setup should just include npm install -g typescript

    opened by mattathompson 15
  • Type error and infinite spinner

    Type error and infinite spinner

    TypeError: Cannot read property '1' of null
        at module.exports (/Users/sid/Dev/mobile-app/node_modules/solidarity-react-native/extensions/helpers/getAndroidEnvData.js:13:93)
        at Object.check (/Users/sid/Dev/mobile-app/node_modules/solidarity-react-native/extensions/react-native.js:28:15)
        at Object.<anonymous> (/Users/sid/Dev/mobile-app/node_modules/solidarity/dist/extensions/functions/checkRequirement.js:124:72)
        at (<anonymous>)
        at /Users/sid/Dev/mobile-app/node_modules/solidarity/dist/extensions/functions/checkRequirement.js:7:71
        at new Promise (<anonymous>)
        at __awaiter (/Users/sid/Dev/mobile-app/node_modules/solidarity/dist/extensions/functions/checkRequirement.js:3:12)
        at map (/Users/sid/Dev/mobile-app/node_modules/solidarity/dist/extensions/functions/checkRequirement.js:62:44)
        at _map (/Users/sid/Dev/mobile-app/node_modules/solidarity/node_modules/ramda/src/internal/_map.js:6:19)
        at map (/Users/sid/Dev/mobile-app/node_modules/solidarity/node_modules/ramda/src/map.js:64:14)
    opened by f0rr0 14
  • Type error and infinite spinner

    Type error and infinite spinner

    (split off #181)

    Seemingly starting with v2.0.0, solidarity (for a React Native project) shows:

    TypeError: Cannot read property '1' of null
    ✔︎ Solidarity checks valid
    ⠧ Verifying Android

    And it just spins forever on "Verifying Android."

    Interestingly, adding --verbose outputs:

    ✔ Package JSON - ./package.json file
    ✔ CocoaPods - ./ios/Pods directory
    ✔ Watchman - watchman binary
    ✔ Android - ANDROID_HOME env
    TypeError: Cannot read property '1' of null
    ✔ Yarn - yarn binary
    ✔ NPM - npm binary
    ✔ React Native - /usr/local/bin/react-native binary
    ✔ React Native - /usr/local/bin/react-native binary
    ✔ Node - node binary
    ✔ Xcode - xcrun binary
    ✔ Xcode - xcodebuild binary
    ✔ CocoaPods - pod binary
    ✔︎ Solidarity checks valid
    ✨  Done in 3.20s.

    (as the "Done" indicates, it actually finishes in this case, rather than hanging as it does without the --verbose) (note that the absolute path on /usr/local/bin/react-native is just to work around #181, and is not necessary with v2.0.1, but the behavior is otherwise the same btw. 2.0.0 and 2.0.1)

    solidarity snapshot does not have this issue.

    In case it's relevant (the type error makes me wonder if Solidarity is looking for something that's missing in the snapshot?), the Android section of the snapshot is as follows:

        "Android": [
            "rule": "env",
            "variable": "ANDROID_HOME",
            "error": "The ANDROID_HOME environment variable must be set to your local SDK.  Refer to getting started docs for help."
            "rule": "custom",
            "plugin": "React Native",
            "name": "androidVersion"
    opened by TheAlmightyBob 11
  • cannot find watchman on zsh

    cannot find watchman on zsh

    I'm using zsh and can confirm that I have watchman installed. But solidarity reports that watchman is not installed. applesimutils and ANDROID_HOME also reported missing

    "Watchman": [
        "rule": "cli",
        "binary": "watchman",
        "error": "Please install watchman on this machine. Refer to the official Watchman installation instructions for additional help.",
        "platform": [
    "Detox": [
        "rule": "cli",
        "binary": "detox"
        "rule": "cli",
        "binary": "applesimutils",
        "error": "Try `brew install --HEAD applesimutils`",
        "platform": "darwin"
    "Android": [
        "rule": "cli",
        "binary": "emulator"
        "rule": "cli",
        "binary": "android"
        "rule": "env",
        "variable": "ANDROID_HOME",
        "error": "The ANDROID_HOME environment variable must be set to your local SDK.  Refer to getting started docs for help."

    The following are from the cli:

    ~/D/D ❯❯❯ which applesimutils
    ~/D/D ❯❯❯ which watchman
    ~/D/D❯❯❯ export
    opened by hiaw 11
  • React Native binary gives wrong version number

    React Native binary gives wrong version number


    Solidarity is reporting that I have the wrong version of React Native installed.

    ✖ react-native: you have '21', but the project requires '^2.0.1'


    In my .solidarity file I have this:

        "React Native": [
            "rule": "cli",
            "binary": "react-native",
            "semver": "^2.0.1",
            "platform": "darwin"

    System Settings

      platform           darwin
      arch               x64
      cpu                8 cores                               Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
      node               9.5.0        /usr/local/bin/node
      npm                5.6.0        /usr/local/bin/npm
      yarn               1.3.2        /usr/local/bin/yarn
    React Native
      react-native-cli   2.0.1
      app rn version     0.53.0


    From my shell, if I type react-native --version I get this:


    If I type: ./node_modules/.bin/react-native --version I get this:


    Path Hijacking

    When you exec a command with Node.JS, it prepends several node binary paths in front of anything that is defined in your shell.

    That means ./node_modules/.bin/react-native wins over $(which react-native).

    Which means our command output gets us:

    Scanning folders for symlinks in /Users/steve/src/ir/clients/lanetix/node_modules (21ms)

    Instead of

    react-native-cli: 2.0.1
    react-native: 0.53.0

    Which means your regex is picking up the (21ms) part instead of the 0.53.0 part.

    Giving you version 21 installed.

    Even If It Did Work...

    Here's the fun part.

    Let's say you put a "line": 2 in your solidarity rule.

    Now you get:

    ✖ react-native: you have '0.53.0', but the project requires '^2.0.1'

    It's reporting the react-native dependency and not the react-native-cli.

    Effectively, the react-native-cli becomes invisible unless you start mucking about with the env.PATH that exec uses.

    react-native-cli vs react-native

    react-native-cli is only required to create a project. If you are using .solidarity, you already have your project created... so this rule is kinda redundant if you already have a rule that checks for the presence of the node_modules directory.

    I'm just going to delete the rule in my projects.

    opened by skellock 8
  • Contribution Documentation.

    Contribution Documentation.

    Having a hard time just setting up this repository locally w/ a passing test suite. It would be nice to have some sort of guidelines i.e: Node versioning and any other requirements.

    enhancement help wanted Hacktoberfest 
    opened by mattathompson 8
  • feature: add docsify to repo

    feature: add docsify to repo

    #Add docsify

    • npm run generate:docs to generate docs
    • npm run serve:docs to serve locally on localhost:3000 for dev purposes
    • More here ->docsify cli
    opened by rmnegatives 8
  • Published JSON schema on is outdated

    Published JSON schema on is outdated

    The current published JSON schema does not reflect the latest 2.3.1 build

    Most notably, shell and custom definition types are missing.

    There is probably a version flag I'm missing, but this is the one that is published in the example

    opened by shwanton 7
  • Add docs with some kind of tooling (e.g. Docsify)

    Add docs with some kind of tooling (e.g. Docsify)

    There needs to be clean way to read and understand how to use solidarity. Preferably, I'd love to have something where I write markdown, and it generates the github site.

    I'm looking into Docsify but could really use some help on setup for this portion of the app. I'm terribly distracted while I'm working on the internals, so I haven't spent any time finding the best solution.

    help wanted Hacktoberfest 
    opened by GantMan 7
  • --fix flag

    --fix flag

    This extends rules with a fix property and adds a fix option to the solidarity command that allows users to run the specified fix script when a rule fails. Fixes could be anything from installing a binary via brew to opening documentation in a browser.

    opened by ryanlntn 6
  • WIP - Fixing Gluegun and other dep upgrades

    WIP - Fixing Gluegun and other dep upgrades

    @GantMan I started working through this but ran out of time. Can you carry the ball forward from here? I've made some progress, but am still getting test failures.

    opened by jamonholmgren 6
  • Is this still maintained?

    Is this still maintained?

    Just rediscovered this project after not using it for a few projects, and I'm a bit sad it doesn't seem to be maintained anymore.

    Haven't really found a better alternative. We do have react-native doctor and expo doctor, but it's not very configurable, and I'd love to use something like this for Node/backend projects as well. Is there a more generally used package out there I've missed?

    Some would-be-nices if this is still something to build on:

    • Validate .nvmrc versions (currently it's not possible to compare cli output to a file, right?)
    • Make it possible to use "cli doctor" tools like react-native doctor and expo doctor inside solidarity
    • A plugin to warn when Windows line endings is about to cause problems 😄
    • A plugin aimed at Expo
    opened by robertherber 1
  • shell scripts that pass in shell fail in solidarity shell

    shell scripts that pass in shell fail in solidarity shell

    Hi, I'm trying to run a shell script to detect if you have nvm or fnm installed.

    The first case passes (in both solidarity and shell) if you have fnm install or the .nvm folder exists at your home root.

    The second case fails when running solidarity but passes when ran in shell.

    To replicate this issue you will need to have nvm installed.

    Example .solidarity json

      "$schema": "",
      "requirements": {
        "Node Manager (NVM | FNM)": [
            "rule": "shell",
            "command": "if [ $(command -v fnm) ] || [ -d $HOME/.nvm ]; then echo true; fi;",
            "match": "true",
            "error": "NVM or FNM binaries are not detected"
            "rule": "shell",
            "command": "if [ $(command -v nvm) ]; then echo true; fi;",
            "match": "true",
            "error": "NVM not detected"
    opened by FrederickEngelhardt 0
  • Add {{installedVersion}} and {{wantedVersion}} to fix command

    Add {{installedVersion}} and {{wantedVersion}} to fix command

    I tried the fix command like this: "fix": "brew install node@{{wantedVersion}}" but it doesn't work.

    I think having {{installedVersion}} and {{wantedVersion}} available in the fix command would be great.

    enhancement help wanted 
    opened by caiconkhicon 0
  • Question: Skipping continuous integration

    Question: Skipping continuous integration

    How does solidarity work for detecting that it is currently running on continuous integration?

    Do I need to pass a flag? Example npx solidarity --ci

    Also the question Should this rule be skipped on a Continuous Integration server? seems to output a "ci": true when selecting to skip the rule, is this intended or does "ci": true allow the rule to run on ci?

    Screen Shot 2021-01-19 at 2 38 18 PM


      "requirements": [
          "rule": "cli",
          "binary": "",
          "platform": [
          "ci": true
    opened by FrederickEngelhardt 1
  • v3.0.0(Mar 23, 2020)

  • v2.3.1(Dec 1, 2018)

    adding CI, full NPM updates, and ability to check outside of platforms


    Good stopgap for buying time to 3.0

    • Merge branch 'master' of 97a42ad
    • version bump 7dfe76d
    • new CI rule with tests (#232) e4f46bf
    • package updates (#228) bea63b6
    • :tada: upgrade to envinfo 5.x, fix tests (#229) ae02cbf
    • Refactored combined use of await and .then to use await only (#225) 966d11f
    • Add yarn global path (#222) 12b8be2
    • :sparkles: improve verbose 6191d04
    • 🐍 Fixup java python (#219) 31eb84c
    • Merge branch 'master' of 060f6dd
    • :movie_camera: Pretty recording commands (#216) b6896ac
    • :arrow_up: Upgrade latest (#215) c54f5d1
    • fixed up merged up c669fb6
    • :satellite: add --stack option (#214) 64fce79
    • fix ts-node issue d350a72
    • update types 9344eec
    • another update working 4788563
    • latest typescript a8a3791
    • another update df560b6
    • major updates 7b3cc6e
    • fix up tests 7528f33
    • fix naming collision 6b86542
    • fix silent bug b87e22b
    • adding CLI Options docs fbc877a
    • no more check folder 9225138
    • fix for tsc b1f2e0f
    • break out helpers and write tests 749c1a9
    • fixing up tests 2edb198
    • fix folder flag f3b32d5
    • no more local file 35ae910
    • verbiage chage 6b35715
    • fix shortcut and help 74998e8
    • now uses Solidarity Stacks repo 22a34ee
    • move check to stack ee65d6d
    • properly parse json5 strings 1c0d353
    • basic solidarity setup 4c1ece7
    • shifting getSettings to async + tests bdaf8e4
    • primed to move functionality down to function 97b4460
    • starting check option 2d706fa
    • 🔭 Upgrades to gluegun 2.0.0-beta.11 (#202) a73fdb0
    • Merge branch 'master' of 32a8097
    • Communicating snapshot update feature in Readme (#204) f7f6d94
    • :wheelchair: disable travis buddy for now (#203) 434f3f0
    • :sparkles: Dist folder - testing and proper building (#185) 936ecf1
    • Merge branch 'master' of b611be3
    • :revolving_hearts: adding a new plugin fb132f5
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Apr 4, 2018)


    • :rage: windows madness (#201) 272ad51
    • Riding node module plugins (#200) 44b8c7d
    • run yoself fool 8345148
    • Merge branch 'master' of 53f961a
    • configurable solidarity file locations with -f and -m (#199) 60ae218
    Source code(tar.gz)
    Source code(zip)
  • v2.0.5(Apr 3, 2018)

  • v2.0.4(Apr 3, 2018)


    • :pen: style touchups 2a275e1
    • :small_red_triangle: don't fail on missing check functions (#197) 3641d3a
    • :hearts: improve plugin flow and tests (#196) eb8020d
    • feat: inject versions into friendly errors (#195) d5ed9d4
    • Merge branch 'master' of dfe8fd8
    • simplify readme 540d8a3
    Source code(tar.gz)
    Source code(zip)
  • v2.0.3(Mar 18, 2018)


    • Windows friendly snaps (#192) b03c219
    • upgrade envinfo to 4.3.1 (#189) 6f6a881
    • fix: retain semver symbols on snapshot update (#191) fe99160
    • :lock: lock to envinfo beta 7 (#188) 915b12e
    • :lock: keep updated 02a3dc0
    • adding contributors recognition dd6cd59
    • Merge branch 'master' of e3ffa3f
    • Added repository link to package.json (#187) ce7b1e6
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Mar 2, 2018)

    Important notes

    This enables the much sought after plugin powers, while also updating modules, and fixing a few small bugs. This release helps get things rolling in the plugins sector.


    • :sparkles: Fixups for new version (#180) 6ebc451
    • :rage3: windows working and fight node modules (#179) 3b0cede
    • ⚒ Upgrades to the latest Gluegun beta (#177) e0c7652
    • :punch: add catchprase (#176) 63d996f
    • :bowtie: Plugin generator (#174) 848f71f
    • fixups for playing well with plugins (#173) ba463fd
    • Explainer GIF (#172) 8a0532d
    • move slack badge 5c0060a
    • add license scan 115f79c
    • :raised_hands: lint change and expose envinfo (#169) df74d10
    • version reference bump bae2311
    • fix ci 18cad6b
    • linting cleaning 68d67ae
    • added docs for custom plugins 2544fed
    • add testing of custom tables 79d1656
    • adds proper testing of custom reporting 42cbe36
    • power up tests d7037d7
    • :construction: customized reports on existing reports e39526e
    • add solidarity report function b315d2c
    • fixups and simplifying 59fae5e
    • add tests for findPluginInfo 1faf25d
    • tests of snapshots d8c37f2
    • fix tests f9f27a7
    • simple custom snapshot 33b34c3
    • restructured plugin style b7ddcd1
    • added tests for check functions a04ffa5
    • better error message d08b5b9
    • fix for tests fc7647f
    • start docs of new plugin features 3aa0ed7
    • update schema b88a28d
    • style and typescript fixes e7935ac
    • fixed up run rule checker from custom 49d057b
    • do not show non-template plugins 33025cd
    • :dizzy: Support JSON5 (#165) cecd47e
    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Jan 19, 2018)


    • Fix up gluegun version and colors and all deps upgraded (#164) :+1: dafa03f
    • :arrow_right: Run TS directly (#161) c32b5c0
    • Security update :closed_lock_with_key: 8dd7d63
    • Spellcheck - Via Function (#157) :capital_abcd: 5b65d00
    • :construction: Adding Danger-JS (#154) cc87c77
    • Travis report master only :mute: 802b478
    • add circular dependency check (#153) 6d6307b
    • :barber: Touchups - Style and Version (#149) 46cf798
    • Snapshot update (#134) e7e59ec
    • :lipstick: Add prettier (#148) d55a791
    • using gluegun editorconfig (#146) 0f0331a
    • :bookmark_tabs: Typescript mods (#144) cf9e500
    • :open_file_folder: Fix Docs Page Link 387ed65
    • fix sidebar :page_with_curl: 7f7861b
    • Add blog posts to side bar (#143) :file_folder: f8af111
    • Update tools - Use Latest Gluegun (#142) bff2f1e
    • TravisBuddy Integration :zap: (#141) 76dac13
    • :link: link in readme 6e75db1
    • fix printing noise :sound: in tests (#139) 7dcd2ab
    • 🔧 Teaches jest about source maps and thresholds (#138) 57ca798
    Source code(tar.gz)
    Source code(zip)
Infinite Red, Inc.
Development Studio
Infinite Red, Inc.
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
An efficient package, which syncs ratelimits of your Discord Bot on all Machines/Clusters.

Discord-cross-ratelimit An efficient package, which syncs ratelimits of your Discord Bot on all Machines/Clusters. Why? When Sharding/Scaling your Bot

meister03 13 Oct 23, 2022
💪🏽 Form creation made easy, backed by state machines

Elderform Form handling without tears and predictable form state based on defined parameters. Elderform gives you everything you need to create robust

Joshua 27 Nov 6, 2022
💻 ssher.vim is interacting remote machines(only linux) through ssh connection

?? ssher.vim is interacting remote machines(only linux) through ssh connection

Luma 3 Feb 21, 2022
nodejs load balancing app to distribute http requests evenly across multiple servers.

load-balancer-nodejs nodejs load balancing app to distribute http requests evenly across multiple servers. How to use ? Please edit the file 'config.j

Abdi Syahputra Harahap 13 Nov 7, 2022
Add grouped tabsets, which remember the active tab across multiple HTML documents.

Grouped Tabsets See the extension in action. This quarto extension provides support for "grouped" tabsets in Quarto HTML documents. Consider the case

null 13 Sep 30, 2022
jQuery plugin to show a tabs bar for navigation. The tabs can be defined once, and shared across multiple HTML pages.

jquery.simpletabs v1.2.3 The jquery.simpletabs plugin shows a tabs bar for navigation. The tabs can be defined once, and shared across multiple HTML p

Peter Thoeny 1 Feb 23, 2022
mirrord lets you easily mirror traffic from your production environment to your development environment.

mirrord lets you easily mirror traffic from your Kubernetes cluster to your development environment. It comes as both Visual Studio Code extension and a CLI tool.

MetalBear 2.1k Dec 24, 2022
EA Origin platform username checker

Origin EA Origin platform username checker. Instructions [?] Installation "npm i" [?] Fill in your Discord webhook details. "var webhookId = ``;" "va

yani 3 Sep 29, 2022
TypeScript with a Borrow Checker. Multi-threaded, Tiny binaries. No GC. Easy to write.

TypeScript with a Borrow Checker. Multi-threaded, Tiny binaries. No GC. Easy to write.

David Alsh 1.4k Dec 19, 2022
NodeJs, tron transaction checker

Tron node-Explorer Recommended requirements Node v14.17.5. npm 6.14.14 Development Install dependencies npm install Running applica

null 3 Aug 21, 2022
Babel-plugin-amd-checker - Module format checking plugin for Babel usable in both Node.js the web browser environments.

babel-plugin-amd-checker A Babel plugin to check the format of your modules when compiling your code using Babel. This plugin allows you to abort the

Ferdinand Prantl 1 Jan 6, 2022
this is a discord nitro generator and checker⚙ EZPZ

Language | EN Hello my dear friends ???? In this new project, I wrote a program to extract nitro discord code, which after extracting the code, verifi

Sobhan.SRZA 6 Sep 17, 2022
A simple static type checker that enforces C-style programming in Julia

SimpleTypeChecker is an experimental Julia package designed to enforce C-style programming in Julia language. Note : it won't save you if your codes a

null 21 May 23, 2023
True P2P concept for your p2p powered website/app/client. MSC/MEP (Multiple Strategy Concept/Multiple Entry Points)

TRUE P2P CONCEPT - Lets redecentralize the web This repo is just conceptual. Active development of the endproduct (TRUE P2P) happens here https://gith

Bo 6 Mar 29, 2022
⚡🚀 Call multiple view functions, from multiple Smart Contracts, in a single RPC query!

ethers-multicall ⚡ ?? Call multiple view functions, from multiple Smart Contracts, in a single RPC query! Querying an RPC endpoint can be very costly

Morpho Labs 20 Dec 30, 2022
A light-weight, no-dependency, vanilla JavaScript engine to drive the user's focus across the page

Driver.js Powerful, highly customizable vanilla JavaScript engine to drive the user's focus across the page No external dependencies, supports all maj

Kamran Ahmed 14.3k Jan 4, 2023