CLI usage

Plain text comparison

By default, differently will perform a plain text comparison between any two files:

$ differently examples/1.md examples/2.md
# "differently" example file                           =  # "differently" example file
                                                       =
To run this example, install `differently` then run:   =  To run this example, install `differently` then run:
                                                       =
```bash                                                =  ```bash
differently 1.md 2.md                                  =  differently 1.md 2.md
```                                                    =  ```
                                                       =
This line says "foo" in 1.md.                          ~  This line says "bar" in 2.md.
                                                       =
Now, a deletion:                                       =  Now, a deletion:
                                                       x
Hello from 1.md.                                       x
                                                       =
The line above should appear in 1.md but deleted in    =  The line above should appear in 1.md but deleted in
the diff because it's not in 2.md.                     =  the diff because it's not in 2.md.
                                                       =
And finally, this next line doesn't exist in 1.md but  =  And finally, this next line doesn't exist in 1.md but
should be added in the diff because it's in 2.md:      =  should be added in the diff because it's in 2.md:
                                                       >
                                                       >  Hello from 2.md.

Style

differently will guess whether to emit style codes. When she does:

  • green indicates no change

  • yellow indicates change

  • red indicates deletion

To force style codes to be emitted, pass --color.

Regardless of whether or not colour is emitted, the symbols in the visualisation indicate:

  • = no change

  • > inserted line

  • ~ modified line

  • x deleted line

Data comparison

differently can also compare the data described by JSON and YAML files.

Comparing the same type

To perform a data comparison, specify the file type via the --in-format argument:

$ differently examples/1.json examples/2.json --in-format json
{                                          =  {
  "array_of_dictionaries": [               =    "array_of_dictionaries": [
    {                                      =      {
      "name": "Bobby Pringles",            ~        "name": "Bobby Salami",
      "occupation": "Fire Starter"         ~        "occupation": "Fire Fighter"
    },                                     =      },
    {                                      =      {
      "name": "Susan Cheddar",             =        "name": "Susan Cheddar",
      "occupation": "Transporter Chief"    =        "occupation": "Transporter Chief"
    },                                     =      },
    {                                      =      {
      "name": "Jade Rat",                  =        "name": "Jade Rat",
      "occupation": "Lightning Conductor"  ~        "occupation": "Lightning Chaser"
    }                                      =      }
  ],                                       =    ],
  "array_of_strings": [                    =    "array_of_strings": [
    "This is the first line.",             =      "This is the first line.",
    "This is the second line.",            =      "This is the second line.",
                                           >      "This is the second-point-five line.",
    "This is the third line."              =      "This is the third line."
  ],                                       =    ],
  "dictionary": {                          =    "dictionary": {
                                           >      "flavour": "Cheese and Onion",
    "greeting": "Hello",                   =      "greeting": "Hello",
    "sound": "Fire Truck",                 x
    "username": "operator"                 ~      "username": "root"
  }                                        =    }
}                                          =  }

Comparing the same type but visualising as another

Regardless of the type of the data you’re comparing, you can visualise as another by adding the –out-format argument.

For example, to compare two JSON files but emit the visualisation as YAML:

$ differently examples/1.json examples/2.json --in-format json --out-format yaml
array_of_dictionaries:             =  array_of_dictionaries:
- name: Bobby Pringles             ~  - name: Bobby Salami
  occupation: Fire Starter         ~    occupation: Fire Fighter
- name: Susan Cheddar              =  - name: Susan Cheddar
  occupation: Transporter Chief    =    occupation: Transporter Chief
- name: Jade Rat                   =  - name: Jade Rat
  occupation: Lightning Conductor  ~    occupation: Lightning Chaser
array_of_strings:                  =  array_of_strings:
- This is the first line.          =  - This is the first line.
- This is the second line.         =  - This is the second line.
                                   >  - This is the second-point-five line.
- This is the third line.          =  - This is the third line.
dictionary:                        =  dictionary:
                                   >    flavour: Cheese and Onion
  greeting: Hello                  =    greeting: Hello
  sound: Fire Truck                x
  username: operator               ~    username: root

Comparing across types

Finally, differently allows you to compare data between JSON and YAML by specifying the file types comma-separated to --in-format. You must specify an --out-format in this case.

$ differently examples/1.json examples/2.yml --in-format json,yaml --out-format yaml
array_of_dictionaries:             =  array_of_dictionaries:
- name: Bobby Pringles             ~  - name: Bobby Salami
  occupation: Fire Starter         ~    occupation: Fire Fighter
- name: Susan Cheddar              =  - name: Susan Cheddar
  occupation: Transporter Chief    =    occupation: Transporter Chief
- name: Jade Rat                   =  - name: Jade Rat
  occupation: Lightning Conductor  ~    occupation: Lightning Chaser
array_of_strings:                  =  array_of_strings:
- This is the first line.          =  - This is the first line.
- This is the second line.         =  - This is the second line.
                                   >  - This is the second-point-five line.
- This is the third line.          =  - This is the third line.
dictionary:                        =  dictionary:
                                   >    flavour: Cheese and Onion
  greeting: Hello                  =    greeting: Hello
  sound: Fire Truck                x
  username: operator               ~    username: root