# record_sheet

id: ffmpeg
git_filename: ./ffmpeg.md
format: md
field_title: ffmpeg
field_category: CLI
data:
{"title": "ffmpeg", "category": "CLI", "body": "### Common switches\n\n```bash\n-codecs          # list codecs\n-c:v             # video codec (-vcodec) - 'copy' to copy stream\n-c:a             # audio codec (-acodec)\n```\n\n```bash\n-fs SIZE         # limit file size (bytes)\n```\n\n### Bitrate\n\n```bash\n-b:v 1M          # video bitrate (1M = 1Mbit/s)\n-b:a 1M          # audio bitrate\n```\n\n### Video\n\n```bash\n-aspect RATIO    # aspect ratio (4:3, 16:9, or 1.25)\n-r RATE          # frame rate per sec\n-s WIDTHxHEIGHT  # frame size\n-vn              # no video\n```\n\n### Audio\n\n```bash\n-aq QUALITY      # audio quality (codec-specific)\n-ar 44100        # audio sample rate (hz)\n-ac 1            # audio channels (1=mono, 2=stereo)\n-an              # no audio\n-vol N           # volume (256=normal)\n```\n\n## Example\n\n### Ringtone conversion using ffmpeg\n\n```bash\nffmpeg -i foo.mp3 -ac 1 -ab 128000 -f mp4 -acodec libfaac -y target.m4r\n```\n\n### To web\n\n```bash\n# no audio\nffmpeg -i input.mov -vcodec h264   -an -strict -2 output.mp4\nffmpeg -i input.mov -vcodec libvpx -an output.webm\n```\n\n```bash\nffmpeg -i input.mov -vcodec h264 -acodec aac -strict -2 output.mp4\nffmpeg -i input.mov -vcodec libvpx -acodec libvorbis output.webm\n```\n\n```html\n<video width=\"320\" height=\"240\" controls>\n  <source src=\"movie.mp4\" type='video/mp4'></source>\n  <source src=\"movie.webm\" type='video/ogg'></source>\n</video>\n```"}

field_body:
### Common switches

```bash
-codecs          # list codecs
-c:v             # video codec (-vcodec) - 'copy' to copy stream
-c:a             # audio codec (-acodec)
```

```bash
-fs SIZE         # limit file size (bytes)
```

### Bitrate

```bash
-b:v 1M          # video bitrate (1M = 1Mbit/s)
-b:a 1M          # audio bitrate
```

### Video

```bash
-aspect RATIO    # aspect ratio (4:3, 16:9, or 1.25)
-r RATE          # frame rate per sec
-s WIDTHxHEIGHT  # frame size
-vn              # no video
```

### Audio

```bash
-aq QUALITY      # audio quality (codec-specific)
-ar 44100        # audio sample rate (hz)
-ac 1            # audio channels (1=mono, 2=stereo)
-an              # no audio
-vol N           # volume (256=normal)
```

## Example

### Ringtone conversion using ffmpeg

```bash
ffmpeg -i foo.mp3 -ac 1 -ab 128000 -f mp4 -acodec libfaac -y target.m4r
```

### To web

```bash
# no audio
ffmpeg -i input.mov -vcodec h264   -an -strict -2 output.mp4
ffmpeg -i input.mov -vcodec libvpx -an output.webm
```

```bash
ffmpeg -i input.mov -vcodec h264 -acodec aac -strict -2 output.mp4
ffmpeg -i input.mov -vcodec libvpx -acodec libvorbis output.webm
```

```html
<video width="320" height="240" controls>
  <source src="movie.mp4" type='video/mp4'></source>
  <source src="movie.webm" type='video/ogg'></source>
</video>
```


id: ffaker
git_filename: ./ffaker.md
format: md
field_title: FFaker
field_category: Ruby libraries
field_updated: 2017-09-12
field_updated___timezone: UTC
data:
{"title": "FFaker", "category": "Ruby libraries", "updated": "2017-09-12", "body": "## FFaker\n{: .-one-column}\n\n### Installing\n\n```ruby\n# gem install ffaker\nrequire 'ffaker'\n```\n\n## Faker::Address\n{: .-one-column}\n\n```ruby\nFaker::Address.city                     #=> \"Autumnside\"\n                                        #=> \"South Brielleberg\"\n                                        #=> \"West Alvera\"\n```\n\n```ruby\nFaker::Address.street_name              #=> \"Greyson Rapid\"\n                                        #=> \"Hoppe Grove\"\n                                        #=> \"Reichert Lights\"\n```\n\n```ruby\nFaker::Address.street_address           #=> \"98786 Neal Motorway\"\n                                        #=> \"6619 Yvonne Dale\"\n                                        #=> \"6143 Bailey Plaza\"\n```\n\n```ruby\nFaker::Address.secondary_address        #=> \"Suite 560\"\n                                        #=> \"Apt. 332\"\n                                        #=> \"Apt. 411\"\n```\n\n## Faker::Company\n{: .-one-column}\n\n```ruby\nFaker::Company.name                     #=> \"Pouros-Ondricka\"\n                                        #=> \"Ward Group\"\n                                        #=> \"Walter-Romaguera\"\n```\n\n```ruby\nFaker::Company.suffix                   #=> \"and Sons\"\n                                        #=> \"LLC\"\n                                        #=> \"and Sons\"\n```\n\n```ruby\nFaker::Company.catch_phrase             #=> \"Versatile mobile help-desk\"\n                                        #=> \"Extended fresh-thinking utilisation\"\n                                        #=> \"Reactive coherent flexibility\"\n```\n\n```ruby\nFaker::Company.bs                       #=> \"extend one-to-one convergence\"\n                                        #=> \"architect 24/7 interfaces\"\n                                        #=> \"revolutionize viral vortals\"\n```\n\n```ruby\nFaker::Company.position                 #=> \"General Corporate President\"\n                                        #=> \"Executive Department Consultant\"\n                                        #=> \"Associate Director\"\n```\n\n## Faker::Education\n{: .-one-column}\n\n```ruby\nFaker::Education.school                 #=> \"Larkwood Institution\"\n                                        #=> \"Whiteshire School\"\n                                        #=> \"California International College\"\n```\n\n```ruby\nFaker::Education.degree                 #=> \"Bachelor of Science in Political Administration\"\n                                        #=> \"Doctor of Medicine in Marketing Economics\"\n                                        #=> \"Bachelor of Music in Marketing Development\"\n```\n\n```ruby\nFaker::Education.degree_short           #=> \"MD in Industrial Arts\"\n                                        #=> \"DPhil in Social Management\"\n                                        #=> \"AB in Political Science\"\n```\n\n```ruby\nFaker::Education.major                  #=> \"Financial Philosophy\"\n                                        #=> \"Social Arts\"\n                                        #=> \"Business Accountancy\"\n```\n\n```ruby\nFaker::Education.school_name            #=> \"Larkfield\"\n                                        #=> \"Northshire\"\n                                        #=> \"Lakepoint\"\n```\n\n## Faker::Geolocation\n{: .-one-column}\n\n```ruby\nFaker::Geolocation.lat                  #=> 40.89505\n                                        #=> 41.77117\n                                        #=> 41.022921\n```\n\n```ruby\nFaker::Geolocation.lng                  #=> -115.120716573\n                                        #=> -118.427610513239\n                                        #=> -72.204989\n```\n\n## Faker::Internet\n{: .-one-column}\n\n```ruby\nFaker::Internet.email                   #=> \"dayna@auer.name\"\n                                        #=> \"joy@nienowbradtke.info\"\n                                        #=> \"bernhard@wyman.ca\"\n```\n\n```ruby\nFaker::Internet.user_name               #=> \"emory\"\n                                        #=> \"janelle_schamberger\"\n                                        #=> \"brigitte.dooley\"\n```\n\n```ruby\nFaker::Internet.domain_name             #=> \"langworth.biz\"\n                                        #=> \"corkery.info\"\n                                        #=> \"schroeder.uk\"\n```\n\n```ruby\nFaker::Internet.disposable_email        #=> \"barrett_schroeder@spamherelots.com\"\n                                        #=> \"nicholaus@suremail.info\"\n                                        #=> \"gladys@safetymail.info\"\n```\n\n```ruby\nFaker::Internet.free_email              #=> \"lemuel@yahoo.com\"\n                                        #=> \"nickolas.gulgowski@gmail.com\"\n                                        #=> \"isaac_ankunding@gmail.com\"\n```\n\n```ruby\nFaker::Internet.domain_word             #=> \"purdykutch\"\n                                        #=> \"sauer\"\n                                        #=> \"trantowmaggio\"\n```\n\n```ruby\nFaker::Internet.domain_suffix           #=> \"us\"\n                                        #=> \"info\"\n                                        #=> \"biz\"\n```\n\n## Faker::Job\n{: .-one-column}\n\n```ruby\nFaker::Job.title                        #=> \"Future Data Assistant\"\n                                        #=> \"Product Division Technician\"\n                                        #=> \"Product Research Developer\"\n```\n\n## Faker::Lorem\n{: .-one-column}\n\n```ruby\nFaker::Lorem.word                       #=> \"sint\"\n                                        #=> \"sit\"\n                                        #=> \"omnis\"\n```\n\n```ruby\nFaker::Lorem.sentence                   #=> \"Expedita et aspernatur eum sit ipsam culpa.\"\n                                        #=> \"Rem sunt voluptatem laborum dolores.\"\n                                        #=> \"Ad explicabo atque culpa.\"\n```\n\n```ruby\nFaker::Lorem.paragraph                  #=> \"Quidem deserunt qui atque labore sunt quis laborum. Et iste\n                                        #    laudantium nobis adipisci delectus. Quod vero repudiandae m\n                                        #    agni repellat totam. Id ullam a aperiam et laboriosam. Volup\n                                        #    tas aut perspiciatis o...\"\n                                        #=> \"Dolor et quae quisquam placeat. Accusantium quidem totam no\n                                        #    n et deleniti accusamus hic. Iure quidem inventore molestiae\n                                        #    harum magni dolor. Deleniti ex a voluptas nihil temporibus.\n                                        #    \"\n                                        #=> \"Fugiat sapiente vero voluptatum natus assumenda quam beatae\n                                        #    in. Nemo velit incidunt dolor perspiciatis. Ipsum minima oc\n                                        #    caecati est laudantium ducimus libero. Et fugit et adipisci\n                                        #    molestias. Cupiditate ...\"\n```\n\n```ruby\nFaker::Lorem.words(4)                   #=> [\"repellat\", \"quos\", \"amet\", \"voluptatem\"]\n                                        #=> [\"porro\", \"molestias\", \"ut\", \"qui\"]\n                                        #=> [\"blanditiis\", \"soluta\", \"enim\", \"fugit\"]\n```\n\n```ruby\nFaker::Lorem.sentence(5)                #=> \"Laborum sint voluptate voluptatem rem doloremque et incidun\n                                        #    t itaque.\"\n                                        #=> \"Autem atque eum laborum alias perspiciatis debitis suscipit\n                                        #    deserunt sint.\"\n                                        #=> \"Quaerat nam consectetur eum dolor deleniti tempore doloremq\n                                        #    ue et aspernatur.\"\n```\n\n```ruby\nFaker::Lorem.sentences(3)               #=> [\"Culpa debitis architecto est.\", \"Quo et voluptatem distinc\n                                        #    tio repellendus qui cupiditate.\", \"Quo repellendus ut eius.\"\n                                        #    ]\n                                        #=> [\"Quos nihil dolorem quidem maxime.\", \"Expedita ab veniam do\n                                        #    lorum at et placeat iure.\", \"In perspiciatis cupiditate amet\n                                        #    non saepe consequatur molestias minus.\"]\n                                        #=> [\"Quasi velit et voluptas est.\", \"Dolores ut dolor aut repel\n                                        #    lat fuga minima sed quia.\", \"Eum id minus atque ex modi.\"]\n```\n\n```ruby\nFaker::Lorem.paragraphs(3)              #=> [\"Iusto mollitia sequi nam perspiciatis fuga aut. Modi moles\n                                        #    tiae consectetur architecto et dolorem aut perferendis. Cumq\n                                        #    ue rerum aliquam sapiente. Dolorum quo reiciendis nemo vero.\n                                        #    Quo earum explicabo pariatur.\", \"Possimus omnis accusamus f\n                                        #    uga. Harum sint facere sed dolor itaque quia. Ullam optio at\n                                        #    que vel nihil facilis quidem accusantium sint.\", \"Itaque per\n                                        #    ferendis saepe pariatur maxime expedita laborum qui. Ea nemo\n                                        #    dolor aut. In sed sit minus itaque sit.\"]\n                                        #=> [\"Ducimus non quo qui doloremque aperiam aspernatur. Consequ\n                                        #    atur id qui sit occaecati. Incidunt tempora quia et. Esse vo\n                                        #    luptatem debitis similique ab totam sit. Illo neque vel face\n                                        #    re maxime voluptatum non voluptatem.\", \"Aut eveniet consequa\n                                        #    tur laudantium veniam qui dolores. Provident pariatur perspi\n                                        #    ciatis id. Eum iste id quasi. Esse nihil quis rerum laudanti\n                                        #    um aliquam molestiae eum tempora.\", \"Quia porro sint numquam\n                                        #    qui. Ut sint reiciendis quis pariatur veniam nesciunt optio\n                                        #    . Officia unde fugit distinctio dolorem voluptatem incidunt.\n                                        #    Ex omnis sit et non aut.\"]\n                                        #=> [\"Dicta consequatur sapiente saepe fugiat ut. Necessitatibus\n                                        #    enim explicabo qui fugiat occaecati expedita quis. Quo iust\n                                        #    o magnam facere nihil earum.\", \"In deleniti explicabo veniam\n                                        #    dolorem temporibus enim. Delectus exercitationem ipsum dolo\n                                        #    r modi. Aut quia voluptas velit sint aperiam sed eveniet.\",\n                                        #    \"Quo doloribus explicabo ut magnam quasi. Voluptatem debitis\n                                        #    quaerat aperiam. Accusantium quis voluptatem dolorem.\"]\n```\n\n## Faker::HipsterIpsum\n{: .-one-column}\n\n```ruby\nFaker::HipsterIpsum.paragraph           #=> \"Wayfarers mustache thundercats pitchfork messenger bag high\n                                        #    life. Beard messenger bag wayfarers squid vinyl letterpress\n                                        #    party iphone jean shorts. Lomo irony before they sold out e\n                                        #    thical wayfarers scene...\"\n                                        #=> \"Tofu stumptown cliche sartorial vhs letterpress keffiyeh wi\n                                        #    lliamsburg. Whatever jean shorts williamsburg lomo salvia fo\n                                        #    od truck 8-bit. Cosby sweater portland artisan wayfarers vhs\n                                        #    photo booth.\"\n                                        #=> \"Skateboard fanny pack wes anderson sartorial cred gluten-fr\n                                        #    ee vinyl marfa locavore. Messenger bag master cleanse mlkshk\n                                        #    vegan thundercats beard wes anderson brunch. Helvetica mess\n                                        #    enger bag lo-fi four l...\"\n```\n\n## Faker::HTMLIpsum\n{: .-one-column}\n\n```ruby\nFaker::HTMLIpsum.body                   #=> \"<h1>Exercitationem et</h1><table><thead><tr><th>Eligendi</t\n                                        #    h><th>Vel</th><th>Sed</th><th>At</th></tr></thead><tbody><tr\n                                        #    ><...\"\n                                        #=> \"<h1>Excepturi sequi</h1><table><thead><tr><th>Quam</th><th>\n                                        #    Eius</th><th>Quibusdam</th><th>Totam</th></tr></thead><tbody\n                                        #    ><tr>...\"\n                                        #=> \"<h1>Iusto voluptatem</h1><p>Laborum velit ducimus eius. Mol\n                                        #    estiae id vel ipsam a accusantium et ut. Sunt et fugiat qui\n                                        #    sint ab quia. Eum ut molestiae cumque molestiae error volupt\n                                        #    ates. Ipsum molestiae ...\"\n```\n\n```ruby\nFaker::HTMLIpsum.table                  #=> \"<table><thead><tr><th>Voluptatem</th><th>Porro</th><th>Tene\n                                        #    tur</th><th>Facilis</th></tr></thead><tbody><tr><td>Numquam<\n                                        #    /t...\"\n                                        #=> \"<table><thead><tr><th>Impedit</th><th>Voluptatem</th><th>Qu\n                                        #    i</th><th>Est</th></tr></thead><tbody><tr><td>Nihil</td>...\"\n                                        #=> \"<table><thead><tr><th>Iste</th><th>Et</th><th>Sequi</th><th\n                                        #    >Et</th></tr></thead><tbody><tr><td>Blanditiis</td>...\"\n```\n\n```ruby\nFaker::HTMLIpsum.fancy_string           #=> \"<a href=\\\"#distinctio\\\" title=\\\"Tenetur explicabo\\\">Velit e\n                                        #    st</a> <code>aperiam reiciendis</code> Consectetur aut hic e\n                                        #    um quisquam. Dolore aut rerum dolor accusantium ab repellend\n                                        #    us magni. Deserunt optio o...\"\n                                        #=> \"Et vel similique ullam accusantium laboriosam. Sit ut ea to\n                                        #    tam. Iusto praesentium ut molestiae. Voluptatem laudantium a\n                                        #    ut qui adipisci. Est saepe repellendus qui blanditiis volupt\n                                        #    ates sed odit ullam. <...\"\n                                        #=> \"Neque et omnis ipsam ad culpa maiores inventore. Laborum cu\n                                        #    m est fugit libero repellendus vero. Modi pariatur sunt tene\n                                        #    tur soluta inventore ratione. Iste consequuntur quia omnis n\n                                        #    umquam excepturi quod ...\"\n```\n\n## Faker::Name\n{: .-one-column}\n\n```ruby\nFaker::Name.name                        #=> \"Trevion Herman V\"\n                                        #=> \"Aracely Balistreri\"\n                                        #=> \"Daphnee Terry Sr.\"\n```\n\n```ruby\nFaker::Name.first_name                  #=> \"Aliza\"\n                                        #=> \"Joseph\"\n                                        #=> \"Orland\"\n```\n\n```ruby\nFaker::Name.last_name                   #=> \"Hand\"\n                                        #=> \"Macejkovic\"\n                                        #=> \"Heller\"\n```\n\n```ruby\nFaker::Name.prefix                      #=> \"Dr.\"\n                                        #=> \"Ms.\"\n                                        #=> \"Mr.\"\n```\n\n```ruby\nFaker::Name.suffix                      #=> \"I\"\n                                        #=> \"III\"\n                                        #=> \"DDS\"\n```\n\n## Faker::PhoneNumber\n{: .-one-column}\n\n```ruby\nFaker::PhoneNumber.phone_number         #=> \"335-364-4549 x430\"\n                                        #=> \"040-278-4021 x753\"\n                                        #=> \"420.645.4382\"\n```\n\n```ruby\nFaker::PhoneNumber.short_phone_number   #=> \"473-412-3192\"\n                                        #=> \"353-084-1297\"\n                                        #=> \"080-546-2356\"\n```\n\n## Faker::Product\n{: .-one-column}\n\n```ruby\nFaker::Product.brand                    #=> \"Trouffeforge\"\n                                        #=> \"VIG\"\n                                        #=> \"NDZ\"\n```\n\n```ruby\nFaker::Product.product_name             #=> \"Air HD Viewer\"\n                                        #=> \"HD Kit\"\n                                        #=> \"Air HD Bridge\"\n```\n\n```ruby\nFaker::Product.product                  #=> \"Amnix Air HD Tuner\"\n                                        #=> \"Panapod Audible Filter\"\n                                        #=> \"Phuffe Disc Receiver\"\n```\n\n```ruby\nFaker::Product.model                    #=> \"I-422\"\n                                        #=> \"J89\"\n                                        #=> \"L6\"\n```\n\n## Faker::NameCN\n{: .-one-column}\n\n```ruby\nFaker::NameCN.name                      #=> \"\u59f5\u4e66\u865e\"\n                                        #=> \"\u4fee\u7537\u5d47\"\n                                        #=> \"\u745c\u4eba\u519b\"\n```\n\n```ruby\nFaker::NameCN.last_first                #=> \"\u5411\u575a\u821c\"\n                                        #=> \"\u758f\u9a8f\u54f2\"\n                                        #=> \"\u79d8\u5408\u96ea\"\n```\n\n```ruby\nFaker::NameCN.first_name                #=> \"\u4f51\u6dd1\"\n                                        #=> \"\u71d5\u8c26\"\n                                        #=> \"\u91cd\u751f\"\n```\n\n```ruby\nFaker::NameCN.last_name                 #=> \"\u91ca\"\n                                        #=> \"\u5de9\"\n                                        #=> \"\u9ebb\"\n```\n\n## Faker::NameDE\n{: .-one-column}\n\n```ruby\nFaker::NameDE.name                      #=> \"Noelle Schuster\"\n                                        #=> \"Bendix Schmid\"\n                                        #=> \"Azra Neumann\"\n```\n\n```ruby\nFaker::NameDE.first_name                #=> \"Victoria\"\n                                        #=> \"Lotta\"\n                                        #=> \"Mads\"\n```\n\n```ruby\nFaker::NameDE.last_name                 #=> \"Martin\"\n                                        #=> \"Klein\"\n                                        #=> \"Walter\"\n```\n\n```ruby\nFaker::NameDE.prefix                    #=> \"Frau\"\n                                        #=> \"Prof.\"\n                                        #=> \"Prof.\"\n```\n\n## Faker::NameJA\n{: .-one-column}\n\n```ruby\nFaker::NameJA.name                      #=> \"\u98db\u9ce5\u7530\u90e8\"\n                                        #=> \"\u672a\u6749\u6d66\"\n                                        #=> \"\u529f\u672c\u9593\"\n```\n\n```ruby\nFaker::NameJA.last_first                #=> \"\u9752\u6728\u674f\u5b50\"\n                                        #=> \"\u68da\u539f\u5927\u8cb4\"\n                                        #=> \"\u77e5\u540d\u7fd4\"\n```\n\n```ruby\nFaker::NameJA.first_name                #=> \"\u5df4\"\n                                        #=> \"\u6d69\u5b50\"\n                                        #=> \"\u6c99\u8036\"\n```\n\n```ruby\nFaker::NameJA.last_name                 #=> \"\u5c0f\u6817\"\n                                        #=> \"\u9ad8\u6c5f\u6d32\"\n                                        #=> \"\u53cb\u5bc4\"\n```\n\n## Faker::NameRU\n{: .-one-column}\n\n```ruby\nFaker::NameRU.name                      #=> \"\u0421\u0442\u0435\u043b\u043b\u0430 \u041a\u0430\u0440\u043d\u0438\u043b\u0438\u043d\u0430\"\n                                        #=> \"\u0415\u0432\u0433\u0435\u043d\u0438\u044f \u041c\u0430\u0437\u043e\u0432\u0441\u043a\u0430\u044f\"\n                                        #=> \"\u041a\u0443\u0437\u044c\u043c\u0430 \u0412\u0430\u0438\u0440\u0435\u043d\u043a\u043e\"\n```\n\n```ruby\nFaker::NameRU.last_name                 #=> \"\u041c\u0430\u043d\u0438\u0448\u0435\u0432\u0430\"\n                                        #=> \"\u0422\u044e\u043b\u0435\u0432\u0430\"\n                                        #=> \"\u041f\u043e\u043d\u0447\u0435\u043d\u043a\u043e\"\n```\n\n```ruby\nFaker::NameRU.first_name                #=> \"\u0410\u0440\u0442\u0443\u0440\"\n                                        #=> \"\u0420\u0443\u0441\u043b\u0430\u043d\u0430\"\n                                        #=> \"\u0417\u0438\u043d\u0430\u0438\u0434\u0430\"\n```\n\n```ruby\nFaker::NameRU.patronymic                #=> \"\u041c\u0435\u0447\u0435\u0441\u043b\u0430\u0432\u043e\u0432\u0438\u0447\"\n                                        #=> \"\u0418\u043e\u043d\u043e\u0432\u0438\u0447\"\n                                        #=> \"\u0418\u0441\u0430\u0435\u0432\u0438\u0447\"\n```\n\n```ruby\nFaker::NameRU.name(:male)               #=> \"\u0421\u043b\u0435\u0436\u0438\u043a\u043e\u0432 \u0420\u043e\u043c\u0430\u043d \u0412\u0441\u0435\u0432\u043e\u043b\u043e\u0434\u043e\u0432\u0438\u0447\"\n                                        #=> \"\u041e\u0441\u0438\u043f \u041c\u0443\u0433\u0440\u0443\u0437\u0438\u043d\"\n                                        #=> \"\u0414\u0436\u0438\u0434\u0436\u0430\u0435\u0432 \u0413\u0430\u0432\u0440\u0438\u0438\u043b \u041b\u0435\u0432\u0430\u043d\u043e\u0432\u0438\u0447\"\n```\n\n```ruby\nFaker::NameRU.name(:female)             #=> \"\u0417\u0438\u044f\u0434\u0442\u0434\u0438\u043d\u043e\u0432\u0430 \u041f\u043e\u043b\u0438\u043d\u0430 \u041b\u044e\u0434\u0432\u0438\u0433\u043e\u0432\u043d\u0430\"\n                                        #=> \"\u0410\u043d\u0434\u0440\u0435\u0435\u0432\u0430 \u0422\u0435\u0440\u0435\u0437\u0430 \u0410\u0440\u0441\u0435\u043d\u043e\u0432\u043d\u0430\"\n                                        #=> \"\u0414\u0430\u0440\u0438\u043d\u0430 \u041c\u0438\u043d\u0445\u0430\u0437\u043e\u0432\u0430\"\n```\n\n## Faker::NameSN\n{: .-one-column}\n\n```ruby\nFaker::NameSN.name_sn                   #=> \"mame Djaly Mbodj\"\n                                        #=> \"Hatab Samy\"\n                                        #=> \"Niouma Dram\u00e9\"\n```\n\n```ruby\nFaker::NameSN.name_male                 #=> \"serigne Yakou Diagne\"\n                                        #=> \"serigne S\u00e9couba Diagne\"\n                                        #=> \"Sihal\u00e9b\u00e9 Badji\"\n```\n\n```ruby\nFaker::NameSN.name_female               #=> \"Thiomba Niang\"\n                                        #=> \"adjaratou Kin\u00e9 Panduppy\"\n                                        #=> \"Nini Gakou\"\n```\n\n```ruby\nFaker::NameSN.first_name_male           #=> \"Khoudia\"\n                                        #=> \"Sanokho\"\n                                        #=> \"Diomaye\"\n```\n\n```ruby\nFaker::NameSN.first_name_female         #=> \"Assa\"\n                                        #=> \"Sahaba\"\n                                        #=> \"Manthita\"\n```\n\n```ruby\nFaker::NameSN.prefix_male               #=> \"eladji\"\n                                        #=> \"eladji\"\n                                        #=> \"serigne\"\n```\n\n```ruby\nFaker::NameSN.prefix_female             #=> \"adjaratou\"\n                                        #=> \"adja\"\n                                        #=> \"adja\"\n```\n\n## Faker::PhoneNumberAU\n{: .-one-column}\n\n```ruby\nFaker::PhoneNumberAU.phone_number       #=> \"0495 539 191\"\n                                        #=> \"(05) 6838 2406\"\n                                        #=> \"0496 013 652\"\n```\n\n## Faker::PhoneNumberSN\n{: .-one-column}\n\n```ruby\nFaker::PhoneNumberSN.phone_number       #=> \"77-356-93-09\"\n                                        #=> \"33-891-67-75\"\n                                        #=> \"33-886-02-02\"\n```"}

field_body:
## FFaker
{: .-one-column}

### Installing

```ruby
# gem install ffaker
require 'ffaker'
```

## Faker::Address
{: .-one-column}

```ruby
Faker::Address.city                     #=> "Autumnside"
                                        #=> "South Brielleberg"
                                        #=> "West Alvera"
```

```ruby
Faker::Address.street_name              #=> "Greyson Rapid"
                                        #=> "Hoppe Grove"
                                        #=> "Reichert Lights"
```

```ruby
Faker::Address.street_address           #=> "98786 Neal Motorway"
                                        #=> "6619 Yvonne Dale"
                                        #=> "6143 Bailey Plaza"
```

```ruby
Faker::Address.secondary_address        #=> "Suite 560"
                                        #=> "Apt. 332"
                                        #=> "Apt. 411"
```

## Faker::Company
{: .-one-column}

```ruby
Faker::Company.name                     #=> "Pouros-Ondricka"
                                        #=> "Ward Group"
                                        #=> "Walter-Romaguera"
```

```ruby
Faker::Company.suffix                   #=> "and Sons"
                                        #=> "LLC"
                                        #=> "and Sons"
```

```ruby
Faker::Company.catch_phrase             #=> "Versatile mobile help-desk"
                                        #=> "Extended fresh-thinking utilisation"
                                        #=> "Reactive coherent flexibility"
```

```ruby
Faker::Company.bs                       #=> "extend one-to-one convergence"
                                        #=> "architect 24/7 interfaces"
                                        #=> "revolutionize viral vortals"
```

```ruby
Faker::Company.position                 #=> "General Corporate President"
                                        #=> "Executive Department Consultant"
                                        #=> "Associate Director"
```

## Faker::Education
{: .-one-column}

```ruby
Faker::Education.school                 #=> "Larkwood Institution"
                                        #=> "Whiteshire School"
                                        #=> "California International College"
```

```ruby
Faker::Education.degree                 #=> "Bachelor of Science in Political Administration"
                                        #=> "Doctor of Medicine in Marketing Economics"
                                        #=> "Bachelor of Music in Marketing Development"
```

```ruby
Faker::Education.degree_short           #=> "MD in Industrial Arts"
                                        #=> "DPhil in Social Management"
                                        #=> "AB in Political Science"
```

```ruby
Faker::Education.major                  #=> "Financial Philosophy"
                                        #=> "Social Arts"
                                        #=> "Business Accountancy"
```

```ruby
Faker::Education.school_name            #=> "Larkfield"
                                        #=> "Northshire"
                                        #=> "Lakepoint"
```

## Faker::Geolocation
{: .-one-column}

```ruby
Faker::Geolocation.lat                  #=> 40.89505
                                        #=> 41.77117
                                        #=> 41.022921
```

```ruby
Faker::Geolocation.lng                  #=> -115.120716573
                                        #=> -118.427610513239
                                        #=> -72.204989
```

## Faker::Internet
{: .-one-column}

```ruby
Faker::Internet.email                   #=> "dayna@auer.name"
                                        #=> "joy@nienowbradtke.info"
                                        #=> "bernhard@wyman.ca"
```

```ruby
Faker::Internet.user_name               #=> "emory"
                                        #=> "janelle_schamberger"
                                        #=> "brigitte.dooley"
```

```ruby
Faker::Internet.domain_name             #=> "langworth.biz"
                                        #=> "corkery.info"
                                        #=> "schroeder.uk"
```

```ruby
Faker::Internet.disposable_email        #=> "barrett_schroeder@spamherelots.com"
                                        #=> "nicholaus@suremail.info"
                                        #=> "gladys@safetymail.info"
```

```ruby
Faker::Internet.free_email              #=> "lemuel@yahoo.com"
                                        #=> "nickolas.gulgowski@gmail.com"
                                        #=> "isaac_ankunding@gmail.com"
```

```ruby
Faker::Internet.domain_word             #=> "purdykutch"
                                        #=> "sauer"
                                        #=> "trantowmaggio"
```

```ruby
Faker::Internet.domain_suffix           #=> "us"
                                        #=> "info"
                                        #=> "biz"
```

## Faker::Job
{: .-one-column}

```ruby
Faker::Job.title                        #=> "Future Data Assistant"
                                        #=> "Product Division Technician"
                                        #=> "Product Research Developer"
```

## Faker::Lorem
{: .-one-column}

```ruby
Faker::Lorem.word                       #=> "sint"
                                        #=> "sit"
                                        #=> "omnis"
```

```ruby
Faker::Lorem.sentence                   #=> "Expedita et aspernatur eum sit ipsam culpa."
                                        #=> "Rem sunt voluptatem laborum dolores."
                                        #=> "Ad explicabo atque culpa."
```

```ruby
Faker::Lorem.paragraph                  #=> "Quidem deserunt qui atque labore sunt quis laborum. Et iste
                                        #    laudantium nobis adipisci delectus. Quod vero repudiandae m
                                        #    agni repellat totam. Id ullam a aperiam et laboriosam. Volup
                                        #    tas aut perspiciatis o..."
                                        #=> "Dolor et quae quisquam placeat. Accusantium quidem totam no
                                        #    n et deleniti accusamus hic. Iure quidem inventore molestiae
                                        #    harum magni dolor. Deleniti ex a voluptas nihil temporibus.
                                        #    "
                                        #=> "Fugiat sapiente vero voluptatum natus assumenda quam beatae
                                        #    in. Nemo velit incidunt dolor perspiciatis. Ipsum minima oc
                                        #    caecati est laudantium ducimus libero. Et fugit et adipisci
                                        #    molestias. Cupiditate ..."
```

```ruby
Faker::Lorem.words(4)                   #=> ["repellat", "quos", "amet", "voluptatem"]
                                        #=> ["porro", "molestias", "ut", "qui"]
                                        #=> ["blanditiis", "soluta", "enim", "fugit"]
```

```ruby
Faker::Lorem.sentence(5)                #=> "Laborum sint voluptate voluptatem rem doloremque et incidun
                                        #    t itaque."
                                        #=> "Autem atque eum laborum alias perspiciatis debitis suscipit
                                        #    deserunt sint."
                                        #=> "Quaerat nam consectetur eum dolor deleniti tempore doloremq
                                        #    ue et aspernatur."
```

```ruby
Faker::Lorem.sentences(3)               #=> ["Culpa debitis architecto est.", "Quo et voluptatem distinc
                                        #    tio repellendus qui cupiditate.", "Quo repellendus ut eius."
                                        #    ]
                                        #=> ["Quos nihil dolorem quidem maxime.", "Expedita ab veniam do
                                        #    lorum at et placeat iure.", "In perspiciatis cupiditate amet
                                        #    non saepe consequatur molestias minus."]
                                        #=> ["Quasi velit et voluptas est.", "Dolores ut dolor aut repel
                                        #    lat fuga minima sed quia.", "Eum id minus atque ex modi."]
```

```ruby
Faker::Lorem.paragraphs(3)              #=> ["Iusto mollitia sequi nam perspiciatis fuga aut. Modi moles
                                        #    tiae consectetur architecto et dolorem aut perferendis. Cumq
                                        #    ue rerum aliquam sapiente. Dolorum quo reiciendis nemo vero.
                                        #    Quo earum explicabo pariatur.", "Possimus omnis accusamus f
                                        #    uga. Harum sint facere sed dolor itaque quia. Ullam optio at
                                        #    que vel nihil facilis quidem accusantium sint.", "Itaque per
                                        #    ferendis saepe pariatur maxime expedita laborum qui. Ea nemo
                                        #    dolor aut. In sed sit minus itaque sit."]
                                        #=> ["Ducimus non quo qui doloremque aperiam aspernatur. Consequ
                                        #    atur id qui sit occaecati. Incidunt tempora quia et. Esse vo
                                        #    luptatem debitis similique ab totam sit. Illo neque vel face
                                        #    re maxime voluptatum non voluptatem.", "Aut eveniet consequa
                                        #    tur laudantium veniam qui dolores. Provident pariatur perspi
                                        #    ciatis id. Eum iste id quasi. Esse nihil quis rerum laudanti
                                        #    um aliquam molestiae eum tempora.", "Quia porro sint numquam
                                        #    qui. Ut sint reiciendis quis pariatur veniam nesciunt optio
                                        #    . Officia unde fugit distinctio dolorem voluptatem incidunt.
                                        #    Ex omnis sit et non aut."]
                                        #=> ["Dicta consequatur sapiente saepe fugiat ut. Necessitatibus
                                        #    enim explicabo qui fugiat occaecati expedita quis. Quo iust
                                        #    o magnam facere nihil earum.", "In deleniti explicabo veniam
                                        #    dolorem temporibus enim. Delectus exercitationem ipsum dolo
                                        #    r modi. Aut quia voluptas velit sint aperiam sed eveniet.",
                                        #    "Quo doloribus explicabo ut magnam quasi. Voluptatem debitis
                                        #    quaerat aperiam. Accusantium quis voluptatem dolorem."]
```

## Faker::HipsterIpsum
{: .-one-column}

```ruby
Faker::HipsterIpsum.paragraph           #=> "Wayfarers mustache thundercats pitchfork messenger bag high
                                        #    life. Beard messenger bag wayfarers squid vinyl letterpress
                                        #    party iphone jean shorts. Lomo irony before they sold out e
                                        #    thical wayfarers scene..."
                                        #=> "Tofu stumptown cliche sartorial vhs letterpress keffiyeh wi
                                        #    lliamsburg. Whatever jean shorts williamsburg lomo salvia fo
                                        #    od truck 8-bit. Cosby sweater portland artisan wayfarers vhs
                                        #    photo booth."
                                        #=> "Skateboard fanny pack wes anderson sartorial cred gluten-fr
                                        #    ee vinyl marfa locavore. Messenger bag master cleanse mlkshk
                                        #    vegan thundercats beard wes anderson brunch. Helvetica mess
                                        #    enger bag lo-fi four l..."
```

## Faker::HTMLIpsum
{: .-one-column}

```ruby
Faker::HTMLIpsum.body                   #=> "<h1>Exercitationem et</h1><table><thead><tr><th>Eligendi</t
                                        #    h><th>Vel</th><th>Sed</th><th>At</th></tr></thead><tbody><tr
                                        #    ><..."
                                        #=> "<h1>Excepturi sequi</h1><table><thead><tr><th>Quam</th><th>
                                        #    Eius</th><th>Quibusdam</th><th>Totam</th></tr></thead><tbody
                                        #    ><tr>..."
                                        #=> "<h1>Iusto voluptatem</h1><p>Laborum velit ducimus eius. Mol
                                        #    estiae id vel ipsam a accusantium et ut. Sunt et fugiat qui
                                        #    sint ab quia. Eum ut molestiae cumque molestiae error volupt
                                        #    ates. Ipsum molestiae ..."
```

```ruby
Faker::HTMLIpsum.table                  #=> "<table><thead><tr><th>Voluptatem</th><th>Porro</th><th>Tene
                                        #    tur</th><th>Facilis</th></tr></thead><tbody><tr><td>Numquam<
                                        #    /t..."
                                        #=> "<table><thead><tr><th>Impedit</th><th>Voluptatem</th><th>Qu
                                        #    i</th><th>Est</th></tr></thead><tbody><tr><td>Nihil</td>..."
                                        #=> "<table><thead><tr><th>Iste</th><th>Et</th><th>Sequi</th><th
                                        #    >Et</th></tr></thead><tbody><tr><td>Blanditiis</td>..."
```

```ruby
Faker::HTMLIpsum.fancy_string           #=> "<a href=\"#distinctio\" title=\"Tenetur explicabo\">Velit e
                                        #    st</a> <code>aperiam reiciendis</code> Consectetur aut hic e
                                        #    um quisquam. Dolore aut rerum dolor accusantium ab repellend
                                        #    us magni. Deserunt optio o..."
                                        #=> "Et vel similique ullam accusantium laboriosam. Sit ut ea to
                                        #    tam. Iusto praesentium ut molestiae. Voluptatem laudantium a
                                        #    ut qui adipisci. Est saepe repellendus qui blanditiis volupt
                                        #    ates sed odit ullam. <..."
                                        #=> "Neque et omnis ipsam ad culpa maiores inventore. Laborum cu
                                        #    m est fugit libero repellendus vero. Modi pariatur sunt tene
                                        #    tur soluta inventore ratione. Iste consequuntur quia omnis n
                                        #    umquam excepturi quod ..."
```

## Faker::Name
{: .-one-column}

```ruby
Faker::Name.name                        #=> "Trevion Herman V"
                                        #=> "Aracely Balistreri"
                                        #=> "Daphnee Terry Sr."
```

```ruby
Faker::Name.first_name                  #=> "Aliza"
                                        #=> "Joseph"
                                        #=> "Orland"
```

```ruby
Faker::Name.last_name                   #=> "Hand"
                                        #=> "Macejkovic"
                                        #=> "Heller"
```

```ruby
Faker::Name.prefix                      #=> "Dr."
                                        #=> "Ms."
                                        #=> "Mr."
```

```ruby
Faker::Name.suffix                      #=> "I"
                                        #=> "III"
                                        #=> "DDS"
```

## Faker::PhoneNumber
{: .-one-column}

```ruby
Faker::PhoneNumber.phone_number         #=> "335-364-4549 x430"
                                        #=> "040-278-4021 x753"
                                        #=> "420.645.4382"
```

```ruby
Faker::PhoneNumber.short_phone_number   #=> "473-412-3192"
                                        #=> "353-084-1297"
                                        #=> "080-546-2356"
```

## Faker::Product
{: .-one-column}

```ruby
Faker::Product.brand                    #=> "Trouffeforge"
                                        #=> "VIG"
                                        #=> "NDZ"
```

```ruby
Faker::Product.product_name             #=> "Air HD Viewer"
                                        #=> "HD Kit"
                                        #=> "Air HD Bridge"
```

```ruby
Faker::Product.product                  #=> "Amnix Air HD Tuner"
                                        #=> "Panapod Audible Filter"
                                        #=> "Phuffe Disc Receiver"
```

```ruby
Faker::Product.model                    #=> "I-422"
                                        #=> "J89"
                                        #=> "L6"
```

## Faker::NameCN
{: .-one-column}

```ruby
Faker::NameCN.name                      #=> "姵书虞"
                                        #=> "修男嵇"
                                        #=> "瑜人军"
```

```ruby
Faker::NameCN.last_first                #=> "向坚舜"
                                        #=> "疏骏哲"
                                        #=> "秘合雪"
```

```ruby
Faker::NameCN.first_name                #=> "佑淑"
                                        #=> "燕谦"
                                        #=> "重生"
```

```ruby
Faker::NameCN.last_name                 #=> "释"
                                        #=> "巩"
                                        #=> "麻"
```

## Faker::NameDE
{: .-one-column}

```ruby
Faker::NameDE.name                      #=> "Noelle Schuster"
                                        #=> "Bendix Schmid"
                                        #=> "Azra Neumann"
```

```ruby
Faker::NameDE.first_name                #=> "Victoria"
                                        #=> "Lotta"
                                        #=> "Mads"
```

```ruby
Faker::NameDE.last_name                 #=> "Martin"
                                        #=> "Klein"
                                        #=> "Walter"
```

```ruby
Faker::NameDE.prefix                    #=> "Frau"
                                        #=> "Prof."
                                        #=> "Prof."
```

## Faker::NameJA
{: .-one-column}

```ruby
Faker::NameJA.name                      #=> "飛鳥田部"
                                        #=> "未杉浦"
                                        #=> "功本間"
```

```ruby
Faker::NameJA.last_first                #=> "青木杏子"
                                        #=> "棚原大貴"
                                        #=> "知名翔"
```

```ruby
Faker::NameJA.first_name                #=> "巴"
                                        #=> "浩子"
                                        #=> "沙耶"
```

```ruby
Faker::NameJA.last_name                 #=> "小栗"
                                        #=> "高江洲"
                                        #=> "友寄"
```

## Faker::NameRU
{: .-one-column}

```ruby
Faker::NameRU.name                      #=> "Стелла Карнилина"
                                        #=> "Евгения Мазовская"
                                        #=> "Кузьма Ваиренко"
```

```ruby
Faker::NameRU.last_name                 #=> "Манишева"
                                        #=> "Тюлева"
                                        #=> "Понченко"
```

```ruby
Faker::NameRU.first_name                #=> "Артур"
                                        #=> "Руслана"
                                        #=> "Зинаида"
```

```ruby
Faker::NameRU.patronymic                #=> "Мечеславович"
                                        #=> "Ионович"
                                        #=> "Исаевич"
```

```ruby
Faker::NameRU.name(:male)               #=> "Слежиков Роман Всеволодович"
                                        #=> "Осип Мугрузин"
                                        #=> "Джиджаев Гавриил Леванович"
```

```ruby
Faker::NameRU.name(:female)             #=> "Зиядтдинова Полина Людвиговна"
                                        #=> "Андреева Тереза Арсеновна"
                                        #=> "Дарина Минхазова"
```

## Faker::NameSN
{: .-one-column}

```ruby
Faker::NameSN.name_sn                   #=> "mame Djaly Mbodj"
                                        #=> "Hatab Samy"
                                        #=> "Niouma Dramé"
```

```ruby
Faker::NameSN.name_male                 #=> "serigne Yakou Diagne"
                                        #=> "serigne Sécouba Diagne"
                                        #=> "Sihalébé Badji"
```

```ruby
Faker::NameSN.name_female               #=> "Thiomba Niang"
                                        #=> "adjaratou Kiné Panduppy"
                                        #=> "Nini Gakou"
```

```ruby
Faker::NameSN.first_name_male           #=> "Khoudia"
                                        #=> "Sanokho"
                                        #=> "Diomaye"
```

```ruby
Faker::NameSN.first_name_female         #=> "Assa"
                                        #=> "Sahaba"
                                        #=> "Manthita"
```

```ruby
Faker::NameSN.prefix_male               #=> "eladji"
                                        #=> "eladji"
                                        #=> "serigne"
```

```ruby
Faker::NameSN.prefix_female             #=> "adjaratou"
                                        #=> "adja"
                                        #=> "adja"
```

## Faker::PhoneNumberAU
{: .-one-column}

```ruby
Faker::PhoneNumberAU.phone_number       #=> "0495 539 191"
                                        #=> "(05) 6838 2406"
                                        #=> "0496 013 652"
```

## Faker::PhoneNumberSN
{: .-one-column}

```ruby
Faker::PhoneNumberSN.phone_number       #=> "77-356-93-09"
                                        #=> "33-891-67-75"
                                        #=> "33-886-02-02"
```


id: fastify
git_filename: ./fastify.md
format: md
field_title: Fastify
field_category: JavaScript libraries
field_updated: 2017-09-23
field_updated___timezone: UTC
data:
{"title": "Fastify", "category": "JavaScript libraries", "updated": "2017-09-23", "body": "## Getting started\n\n### Introduction\n{: .-intro}\n\n[Fastify](https://github.com/fastify/fastify) lets you create HTTP servers in Node.js with good performance. This guide targets fastify v0.28.x.\n\n- [Fastify source code](https://github.com/fastify/fastify) _(github.com)_\n- [Documentation](https://github.com/fastify/fastify#documentation) _(github.com)_\n\n### Hello world\n{: .-prime}\n\n```js\nconst fastify = require('fastify')()\n\nfastify.get('/', (req, reply) => {\n  reply.send({ hello: 'world' })\n})\n\nfastify.listen(3000, err => {\n  if (err) throw err\n  const port = fastify.server.address().port\n  console.log(`server listening on ${port}`)\n})\n```\n\n### Plugins\n\n#### app.js\n\n```js\nfastify.register(require('./route'))\n```\n\n#### route.js\n\n```js\nfunction (fastify, opts, next) {\n  fastify.get('/', (req, reply) => {\n    reply.send({ hello: 'world' })\n  })\n\n  next()\n})\n```\n\nCompose your app functionality into plugins. Plugins are simply functions.\n\nSee: [Plugins](https://github.com/fastify/fastify/blob/master/docs/Plugins.md)\n\n## Routes\n\n### Writing routes\n\n```js\nfastify.route({\n  method: 'GET',\n  url: '/',\n  schema: { \u00b7\u00b7\u00b7 },\n  handler: (req, reply) => { \u00b7\u00b7\u00b7 }\n  beforeHandler: (req, reply, done) => { \u00b7\u00b7\u00b7 }\n})\n```\n\n### Shorthand declarations\n\n```js\nfastify.get(path, [options], handler)\nfastify.head(\u00b7\u00b7\u00b7)\nfastify.post(\u00b7\u00b7\u00b7)\nfastify.put(\u00b7\u00b7\u00b7)\nfastify.delete(\u00b7\u00b7\u00b7)\nfastify.options(\u00b7\u00b7\u00b7)\nfastify.patch(\u00b7\u00b7\u00b7)\n```\n\n### Async/await\n\n```js\nfastify.get('/', options, async (req, reply) => {\n  return data\n  // or\n  reply.send(data)\n})\n```\n\nWhen using async functions, you can either `return` data or use `reply.send`.\n\nRequest/reply\n-------------\n\n### Request\n\n```js\nrequest.query\nrequest.body\nrequest.params\nrequest.headers\nrequest.req  // Node.js core\nrequest.log.info('hello')\n```\n\nSee: [Request](https://github.com/fastify/fastify/blob/master/docs/Request.md)\n\n### Reply\n\n#### Response headers\n\n```js\nreply.code(404)\nreply.header('Content-Type', 'text/html')\nreply.type('text/html')\n```\n\n#### Redirects\n\n```js\nreply.redirect('/foo')\nreply.redirect(302, '/foo')\n```\n\n#### Sending\n\n```js\nreply.send(payload)\nreply.sent // \u2192 true|false\n```\n\nSee: [Reply](https://github.com/fastify/fastify/blob/master/docs/Reply.md)\n\n### JSON schema\n\n#### Define a JSON schema\n\n```js\nconst schema = {\n  querystring: {\n    name: { type: 'string' },\n    excitement: { type: 'integer' }\n  },\n  response: {\n    200: {\n      type: 'object',\n      properties: {\n        hello: { type: 'string' }\n      }\n    }\n  }\n}\n```\n\n#### Pass it to the route\n\n```js\nfastify.get('/', { schema }, (req, reply) => {\n  \u00b7\u00b7\u00b7\n})\n```\n{: data-line=\"1\"}\n\n#### or (same as above)\n\n```js\nfastify.route({\n  method: 'GET',\n  url: '/',\n  schema,\n  handler: (req, reply) => { \u00b7\u00b7\u00b7 }\n})\n```\n{: data-line=\"4\"}\n\nBy defining a JSON schema, you get validation and improved performance.\n\nSee: [Validation and serialization](https://github.com/fastify/fastify/blob/master/docs/Validation-and-Serialization.md)\n\nPlugins\n-------\n\n### With function\n\n```js\nfastify.register(\n  require('./route'),\n  err => { if (err) throw err }\n)\n```\n{: data-line=\"3\"}\n\n#### route.js\n\n```js\nmodule.exports = (fastify, options, next) => {\n  fastify.get('/', \u00b7\u00b7\u00b7)\n  next()\n}\n```\n\n\nSee: [Register](https://github.com/fastify/fastify/blob/master/docs/Getting-Started.md#register)\n\n### Multiple\n\n```js\nfastify.register([\n  require('./another-route'),\n  require('./yet-another-route')\n], opts, (err) => {\n  if (err) throw err\n})\n```\n\nYou can pass arrays to `register()`.\n\n### Register with prefix\n\n```js\nfastify.register(\n  require('./route'),\n  { prefix: '/v1' }\n)\n```\n\nThis prefixes all routes in that module.\n\n### Helmet\n\n```js\nconst helmet = require('fastify-helmet')\n\nfastify.register(helmet)\n```\n\nSee: [fastify-helmet](https://github.com/fastify/fastify-helmet)\n\n### fastify-plugin\n\n```js\nconst fp = require('fastify-plugin')\n\nmodule.exports = fp((fastify, opts, next) => {\n  // your plugin code\n  fastify.decorate('utility', () => {})\n\n  next()\n}, '0.x')\n```\n\nAllows you to limit Fastify versions via semver, and allows you not make a new Fastify scope.\n\nSee: [fastify-plugin](https://github.com/fastify/fastify-plugin)\n\n### Decorators\n\nMiddleware\n----------\n\n### Middleware\n\n```js\nfastify.use(require('cors')())\nfastify.use(require('dns-prefetch-control')())\nfastify.use(require('frameguard')())\nfastify.use(require('hide-powered-by')())\nfastify.use(require('hsts')())\nfastify.use(require('ienoopen')())\nfastify.use(require('x-xss-protection')())\n```\n\nCompatible with Express and Restify middlewares. (Don't use these middleware, these are covered by [fastify-helmet](https://github.com/fastify/fastify-helmet).)\n\nSee: [Middlewares](https://github.com/fastify/fastify/blob/master/docs/Middleware.md)\n\nTemplate rendering\n------------------\n\n### point-of-view\n\n```js\nconst fastify = require('fastify')()\n\nfastify.register(require('point-of-view'), {\n  engine: {\n    ejs: require('ejs')\n  }\n})\n```\n{: data-line=\"3\"}\n\n```js\nfastify.get('/', (req, reply) => {\n  reply.view('/templates/index.ejs', { text: 'text' })\n})\n```\n{: data-line=\"2\"}\n\nSupport `ejs`, `pug`, `handlebars` and `marko`.\n\nSee: [point-of-view](https://github.com/fastify/point-of-view)\n\n### Options\n\n```js\nfastify.register(require('point-of-view'), {\n  engine: {\n    ejs: require('ejs')\n  },\n  templates: '/templates',\n  options: {}\n})\n```\n\n`templates` lets you update the templates folder. `options` are options passed onto the template engines."}

field_body:
## Getting started

### Introduction
{: .-intro}

[Fastify](https://github.com/fastify/fastify) lets you create HTTP servers in Node.js with good performance. This guide targets fastify v0.28.x.

- [Fastify source code](https://github.com/fastify/fastify) _(github.com)_
- [Documentation](https://github.com/fastify/fastify#documentation) _(github.com)_

### Hello world
{: .-prime}

```js
const fastify = require('fastify')()

fastify.get('/', (req, reply) => {
  reply.send({ hello: 'world' })
})

fastify.listen(3000, err => {
  if (err) throw err
  const port = fastify.server.address().port
  console.log(`server listening on ${port}`)
})
```

### Plugins

#### app.js

```js
fastify.register(require('./route'))
```

#### route.js

```js
function (fastify, opts, next) {
  fastify.get('/', (req, reply) => {
    reply.send({ hello: 'world' })
  })

  next()
})
```

Compose your app functionality into plugins. Plugins are simply functions.

See: [Plugins](https://github.com/fastify/fastify/blob/master/docs/Plugins.md)

## Routes

### Writing routes

```js
fastify.route({
  method: 'GET',
  url: '/',
  schema: { ··· },
  handler: (req, reply) => { ··· }
  beforeHandler: (req, reply, done) => { ··· }
})
```

### Shorthand declarations

```js
fastify.get(path, [options], handler)
fastify.head(···)
fastify.post(···)
fastify.put(···)
fastify.delete(···)
fastify.options(···)
fastify.patch(···)
```

### Async/await

```js
fastify.get('/', options, async (req, reply) => {
  return data
  // or
  reply.send(data)
})
```

When using async functions, you can either `return` data or use `reply.send`.

Request/reply
-------------

### Request

```js
request.query
request.body
request.params
request.headers
request.req  // Node.js core
request.log.info('hello')
```

See: [Request](https://github.com/fastify/fastify/blob/master/docs/Request.md)

### Reply

#### Response headers

```js
reply.code(404)
reply.header('Content-Type', 'text/html')
reply.type('text/html')
```

#### Redirects

```js
reply.redirect('/foo')
reply.redirect(302, '/foo')
```

#### Sending

```js
reply.send(payload)
reply.sent // → true|false
```

See: [Reply](https://github.com/fastify/fastify/blob/master/docs/Reply.md)

### JSON schema

#### Define a JSON schema

```js
const schema = {
  querystring: {
    name: { type: 'string' },
    excitement: { type: 'integer' }
  },
  response: {
    200: {
      type: 'object',
      properties: {
        hello: { type: 'string' }
      }
    }
  }
}
```

#### Pass it to the route

```js
fastify.get('/', { schema }, (req, reply) => {
  ···
})
```
{: data-line="1"}

#### or (same as above)

```js
fastify.route({
  method: 'GET',
  url: '/',
  schema,
  handler: (req, reply) => { ··· }
})
```
{: data-line="4"}

By defining a JSON schema, you get validation and improved performance.

See: [Validation and serialization](https://github.com/fastify/fastify/blob/master/docs/Validation-and-Serialization.md)

Plugins
-------

### With function

```js
fastify.register(
  require('./route'),
  err => { if (err) throw err }
)
```
{: data-line="3"}

#### route.js

```js
module.exports = (fastify, options, next) => {
  fastify.get('/', ···)
  next()
}
```


See: [Register](https://github.com/fastify/fastify/blob/master/docs/Getting-Started.md#register)

### Multiple

```js
fastify.register([
  require('./another-route'),
  require('./yet-another-route')
], opts, (err) => {
  if (err) throw err
})
```

You can pass arrays to `register()`.

### Register with prefix

```js
fastify.register(
  require('./route'),
  { prefix: '/v1' }
)
```

This prefixes all routes in that module.

### Helmet

```js
const helmet = require('fastify-helmet')

fastify.register(helmet)
```

See: [fastify-helmet](https://github.com/fastify/fastify-helmet)

### fastify-plugin

```js
const fp = require('fastify-plugin')

module.exports = fp((fastify, opts, next) => {
  // your plugin code
  fastify.decorate('utility', () => {})

  next()
}, '0.x')
```

Allows you to limit Fastify versions via semver, and allows you not make a new Fastify scope.

See: [fastify-plugin](https://github.com/fastify/fastify-plugin)

### Decorators

Middleware
----------

### Middleware

```js
fastify.use(require('cors')())
fastify.use(require('dns-prefetch-control')())
fastify.use(require('frameguard')())
fastify.use(require('hide-powered-by')())
fastify.use(require('hsts')())
fastify.use(require('ienoopen')())
fastify.use(require('x-xss-protection')())
```

Compatible with Express and Restify middlewares. (Don't use these middleware, these are covered by [fastify-helmet](https://github.com/fastify/fastify-helmet).)

See: [Middlewares](https://github.com/fastify/fastify/blob/master/docs/Middleware.md)

Template rendering
------------------

### point-of-view

```js
const fastify = require('fastify')()

fastify.register(require('point-of-view'), {
  engine: {
    ejs: require('ejs')
  }
})
```
{: data-line="3"}

```js
fastify.get('/', (req, reply) => {
  reply.view('/templates/index.ejs', { text: 'text' })
})
```
{: data-line="2"}

Support `ejs`, `pug`, `handlebars` and `marko`.

See: [point-of-view](https://github.com/fastify/point-of-view)

### Options

```js
fastify.register(require('point-of-view'), {
  engine: {
    ejs: require('ejs')
  },
  templates: '/templates',
  options: {}
})
```

`templates` lets you update the templates folder. `options` are options passed onto the template engines.


id: factory_bot
git_filename: ./factory_bot.md
format: md
field_title: Factory Bot
field_category: Ruby libraries
field_tags: Featurable
field_updated: 2020-07-06
field_updated___timezone: UTC
data:
{"title": "Factory Bot", "category": "Ruby libraries", "weight": -3, "updated": "2020-07-06", "keywords": ["FactoryBot.define do", "factory :user", "first_name 'John'", "sequence(:username) { |n| \"user#{n}\" }"], "tags": ["Featurable"], "body": "## Factories\n{: .-three-column}\n\n### Introduction\n{: .-intro}\n\n[Factory Bot](http://www.rubydoc.info/gems/factory_bot/) is a helper for writing factories for Ruby tests. It was previously known as Factory Girl. For older versions, use `FactoryGirl` instead of `FactoryBot`.\n\n- [Factory Bot documentation](http://www.rubydoc.info/gems/factory_bot/) _(rubydoc.info)_\n- [Getting started](https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md) _(github.com)_\n- [Source code](https://github.com/thoughtbot/factory_bot) _(github.com)_\n\n### Defining factories\n\n```ruby\nFactoryBot.define do\n  factory :user do\n    first_name { 'John' }\n    last_name  { 'Doe' }\n    birthdate  { 21.years.ago }\n    admin { false }\n\n    sequence(:username) { |n| \"user#{n}\" }\n  end\nend\n```\n{: data-line=\"2\"}\n\nSee: [Defining factories](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Defining_factories)\n\n### Extra options\n\n#### Custom class names\n\n```ruby\nfactory :user, class: 'User' do\n  \u00b7\u00b7\u00b7\nend\n```\n\n#### Aliases\n\n```ruby\nfactory :user, aliases: [:author] do\n  \u00b7\u00b7\u00b7\nend\n```\n\n### Using\n\n#### Build a model\n\n```ruby\nFactoryBot.build(:user)\n```\n\n#### Other ways\n\n```ruby\nbuild(:user)           # \u2192 model (not saved)\ncreate(:user)          # \u2192 model (saved)\nattributes_for(:user)  # \u2192 hash\nbuild_stubbed(:user)   # stubbed out attributes\n```\n\n#### With options\n\n```ruby\nbuild(:user, name: 'John')\n```\n\n#### Lists\n\n```ruby\ncreate_list(:user, 3)\nbuild_list(:user, 3)\n```\n\n## Associations\n\n### Defining\n\n```ruby\nfactory :post do\n  association :author, factory: :user\n  association :author, factory: [:user, :admin]\nend\n```\n{: data-line=\"2,3\"}\n\n#### or\n\n```ruby\nfactory :post do\n  author  # assumes there's a factory :author\nend\n```\n\n### After-create hooks\n\n```ruby\nfactory :post do\n  after :create do |post|\n    create :theme, post: post             # has_one\n    create_list :comment, 3, post: post   # has_many\n  end\nend\n```\n{: data-line=\"2\"}\n\n## Other features\n{: .-three-column}\n\n### Traits\n\n```ruby\nfactory :user do\n  trait :admin do\n    admin { true }\n  end\nend\n```\n{: data-line=\"2,3,4\"}\n\n```ruby\ncreate :user, :admin\n```\n\nTraits allow you to group attributes together.\nSee: [Traits](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Traits)\n\n### Nested factories\n\n```ruby\nfactory :user do\n  first_name { 'John' }\n\n  factory :sample_user do\n    first_name { FFaker::Name.first_name }\n  end\nend\n```\n{: data-line=\"4,5,6\"}\n\n```ruby\ncreate :sample_user\n```\n\nSee: [Inheritance](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Inheritance)\n\n### Sub-factories\n\n```ruby\nfactory :user do\n  \u00b7\u00b7\u00b7\nend\n```\n\n```ruby\nfactory :sample_user, parent: :user do\n  first_name { FFaker::Name.first_name }\nend\n```\n{: data-line=\"1\"}\n\n```ruby\ncreate :sample_user\n```\n\nWorks the same as nested factories.\n\n### Options (transients)\n\n```ruby\nfactory :user do\n  transient do\n    upcased { true }\n  end\n\n  after :create do |user, options|\n    user.name.upcase! if options.upcased\n  end\nend\n```\n{: data-line=\"2,3,4\"}\n\n```ruby\ncreate(user, upcased: true)\n```\n\nTransient attributes will not get passed to the model, but will be available in after-create hooks.\nSee: [Transient attributes](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Transient_Attributes)\n\n### Paths\n\n* test/factories.rb\n* spec/factories.rb\n* test/factories/*.rb\n* spec/factories/*.rb\n\nPlace your factories in these locations.\n{: .-setup}\n\n## See also\n{: .-one-column}\n\n* <http://rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md>"}

field_body:
## Factories
{: .-three-column}

### Introduction
{: .-intro}

[Factory Bot](http://www.rubydoc.info/gems/factory_bot/) is a helper for writing factories for Ruby tests. It was previously known as Factory Girl. For older versions, use `FactoryGirl` instead of `FactoryBot`.

- [Factory Bot documentation](http://www.rubydoc.info/gems/factory_bot/) _(rubydoc.info)_
- [Getting started](https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md) _(github.com)_
- [Source code](https://github.com/thoughtbot/factory_bot) _(github.com)_

### Defining factories

```ruby
FactoryBot.define do
  factory :user do
    first_name { 'John' }
    last_name  { 'Doe' }
    birthdate  { 21.years.ago }
    admin { false }

    sequence(:username) { |n| "user#{n}" }
  end
end
```
{: data-line="2"}

See: [Defining factories](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Defining_factories)

### Extra options

#### Custom class names

```ruby
factory :user, class: 'User' do
  ···
end
```

#### Aliases

```ruby
factory :user, aliases: [:author] do
  ···
end
```

### Using

#### Build a model

```ruby
FactoryBot.build(:user)
```

#### Other ways

```ruby
build(:user)           # → model (not saved)
create(:user)          # → model (saved)
attributes_for(:user)  # → hash
build_stubbed(:user)   # stubbed out attributes
```

#### With options

```ruby
build(:user, name: 'John')
```

#### Lists

```ruby
create_list(:user, 3)
build_list(:user, 3)
```

## Associations

### Defining

```ruby
factory :post do
  association :author, factory: :user
  association :author, factory: [:user, :admin]
end
```
{: data-line="2,3"}

#### or

```ruby
factory :post do
  author  # assumes there's a factory :author
end
```

### After-create hooks

```ruby
factory :post do
  after :create do |post|
    create :theme, post: post             # has_one
    create_list :comment, 3, post: post   # has_many
  end
end
```
{: data-line="2"}

## Other features
{: .-three-column}

### Traits

```ruby
factory :user do
  trait :admin do
    admin { true }
  end
end
```
{: data-line="2,3,4"}

```ruby
create :user, :admin
```

Traits allow you to group attributes together.
See: [Traits](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Traits)

### Nested factories

```ruby
factory :user do
  first_name { 'John' }

  factory :sample_user do
    first_name { FFaker::Name.first_name }
  end
end
```
{: data-line="4,5,6"}

```ruby
create :sample_user
```

See: [Inheritance](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Inheritance)

### Sub-factories

```ruby
factory :user do
  ···
end
```

```ruby
factory :sample_user, parent: :user do
  first_name { FFaker::Name.first_name }
end
```
{: data-line="1"}

```ruby
create :sample_user
```

Works the same as nested factories.

### Options (transients)

```ruby
factory :user do
  transient do
    upcased { true }
  end

  after :create do |user, options|
    user.name.upcase! if options.upcased
  end
end
```
{: data-line="2,3,4"}

```ruby
create(user, upcased: true)
```

Transient attributes will not get passed to the model, but will be available in after-create hooks.
See: [Transient attributes](http://www.rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md#Transient_Attributes)

### Paths

* test/factories.rb
* spec/factories.rb
* test/factories/*.rb
* spec/factories/*.rb

Place your factories in these locations.
{: .-setup}

## See also
{: .-one-column}

* <http://rubydoc.info/gems/factory_bot/file/GETTING_STARTED.md>


id: exunit
git_filename: ./exunit.md
format: md
field_title: ExUnit
field_category: Elixir
field_updated: 2018-11-19
field_updated___timezone: UTC
data:
{"title": "ExUnit", "category": "Elixir", "updated": "2018-11-19", "body": "### Test cases\n\n```elixir\ndefmodule MyTest do\n  use ExUnit.Case\n  use ExUnit.Case, async: true  # for async\n\n  test \"the truth\" do\n    assert 1 + 1 == 2\n  end\nend\n```\n\n### Capture IO\n\n```elixir\nimport ExUnit.CaptureIO\n\ntest \"capture io\" do\n  result = capture_io(fn ->\n    IO.puts \"sup\"\n  end)\n\n  assert result == \"sup\\n\"\nend\n```\n\n### Capture logs\n\n```elixir\nconfig :ex_unit, capture_logs: true\n```\n\n### Async\n\n```elixir\ndefmodule AssertionTest do\n  # run concurrently with other test cases\n  use ExUnit.Case, async: true\nend\n```\n\n### Assertions\n\n```elixir\nassert x == y\nrefute x == y\n\nassert_raise ArithmeticError, fn ->\n  1 + \"test\"\nend\n\nassert_raise ArithmeticError, \"message\", fn -> ...\nassert_raise ArithmeticError, ~r/message/, fn -> ...\n\nflunk \"This should've been an error\"\n```\n\nSee: [Assertions](http://devdocs.io/elixir/ex_unit/exunit.assertions)\n\n## Setup\n\n### Pattern matching\n\n```elixir\nsetup do\n  {:ok, name: \"John\"}\nend\n```\n\n```elixir\ntest \"it works\", %{name: name} do\n  assert name == \"John\"\nend\n```\n\n### Setup\n\n\n```elixir\ndefp my_hook(_context) do\n  # Invoked in every block in \"a block\"\n  {:ok, name: \"John\", age: 54}\nend\n\ndescribe \"a block\" do\n  setup [:my_hook]\n  \n  test \"John's age\", context do\n    assert context[:name] == \"John\"\n    assert context[:age] == 54\n  end\nend\n```\n\n\n## Also see\n{: .-one-column}\n\n* [ExUnit Docs](http://devdocs.io/elixir/ex_unit/exunit#configure/1)"}

field_body:
### Test cases

```elixir
defmodule MyTest do
  use ExUnit.Case
  use ExUnit.Case, async: true  # for async

  test "the truth" do
    assert 1 + 1 == 2
  end
end
```

### Capture IO

```elixir
import ExUnit.CaptureIO

test "capture io" do
  result = capture_io(fn ->
    IO.puts "sup"
  end)

  assert result == "sup\n"
end
```

### Capture logs

```elixir
config :ex_unit, capture_logs: true
```

### Async

```elixir
defmodule AssertionTest do
  # run concurrently with other test cases
  use ExUnit.Case, async: true
end
```

### Assertions

```elixir
assert x == y
refute x == y

assert_raise ArithmeticError, fn ->
  1 + "test"
end

assert_raise ArithmeticError, "message", fn -> ...
assert_raise ArithmeticError, ~r/message/, fn -> ...

flunk "This should've been an error"
```

See: [Assertions](http://devdocs.io/elixir/ex_unit/exunit.assertions)

## Setup

### Pattern matching

```elixir
setup do
  {:ok, name: "John"}
end
```

```elixir
test "it works", %{name: name} do
  assert name == "John"
end
```

### Setup


```elixir
defp my_hook(_context) do
  # Invoked in every block in "a block"
  {:ok, name: "John", age: 54}
end

describe "a block" do
  setup [:my_hook]
  
  test "John's age", context do
    assert context[:name] == "John"
    assert context[:age] == 54
  end
end
```


## Also see
{: .-one-column}

* [ExUnit Docs](http://devdocs.io/elixir/ex_unit/exunit#configure/1)


id: express
git_filename: ./express.md
format: md
field_title: Express.js
field_category: JavaScript libraries
data:
{"title": "Express.js", "category": "JavaScript libraries", "body": "### Settings\n\n```js\napp.set('x', 'yyy')\napp.get('x') //=> 'yyy'\n\napp.enable('trust proxy')\napp.disable('trust proxy')\n\napp.enabled('trust proxy') //=> true\n```\n\n### Env\n\n```js\napp.get('env')\n```\n\n### Config\n\n```js\napp.configure('production', function() {\n  app.set...\n})\n```\n\n### Wares\n\n```js\napp.use(express.static(__dirname + '/public'))\napp.use(express.logger())\n```\n\n### Helpers\n\n```js\napp.locals({\n  title: \"MyApp\",\n})\n```\n\n## Request & response\n\n### Request\n\n```js\n// GET  /user/tj\nreq.path         //=> \"/user/tj\"\nreq.url          //=> \"/user/tj\"\nreq.xhr          //=> true|false\nreq.method       //=> \"GET\"\nreq.params\nreq.params.name  //=> \"tj\"\nreq.params[0]\n```\n\n```js\n// GET /search?q=tobi+ferret\nreq.query.q // => \"tobi ferret\"\n```\n\n```js\nreq.cookies\n```\n\n```js\nreq.accepted\n// [ { value: 'application/json', quality: 1, type: 'application', subtype: 'json' },\n//   { value: 'text/html', quality: 0.5, type: 'text',subtype: 'html' } ]\n```\n\n```js\nreq.is('html')\nreq.is('text/html')\n```\n\n```js\nreq.headers\nreq.headers['host']\nreq.headers['user-agent']\nreq.headers['accept-encoding']\nreq.headers['accept-language']\n```\n\n### Response\n\n```js\nres.redirect('/')\nres.redirect(301, '/')\n```\n\n```js\nres.set('Content-Type', 'text/html')\n```\n\n```js\nres.send('hi')\nres.send(200, 'hi')\n```\n\n```js\nres.json({ a: 2 })\n```"}

field_body:
### Settings

```js
app.set('x', 'yyy')
app.get('x') //=> 'yyy'

app.enable('trust proxy')
app.disable('trust proxy')

app.enabled('trust proxy') //=> true
```

### Env

```js
app.get('env')
```

### Config

```js
app.configure('production', function() {
  app.set...
})
```

### Wares

```js
app.use(express.static(__dirname + '/public'))
app.use(express.logger())
```

### Helpers

```js
app.locals({
  title: "MyApp",
})
```

## Request & response

### Request

```js
// GET  /user/tj
req.path         //=> "/user/tj"
req.url          //=> "/user/tj"
req.xhr          //=> true|false
req.method       //=> "GET"
req.params
req.params.name  //=> "tj"
req.params[0]
```

```js
// GET /search?q=tobi+ferret
req.query.q // => "tobi ferret"
```

```js
req.cookies
```

```js
req.accepted
// [ { value: 'application/json', quality: 1, type: 'application', subtype: 'json' },
//   { value: 'text/html', quality: 0.5, type: 'text',subtype: 'html' } ]
```

```js
req.is('html')
req.is('text/html')
```

```js
req.headers
req.headers['host']
req.headers['user-agent']
req.headers['accept-encoding']
req.headers['accept-language']
```

### Response

```js
res.redirect('/')
res.redirect(301, '/')
```

```js
res.set('Content-Type', 'text/html')
```

```js
res.send('hi')
res.send(200, 'hi')
```

```js
res.json({ a: 2 })
```


id: expectjs
git_filename: ./expectjs.md
format: md
field_title: expect.js
field_category: JavaScript libraries
field_updated: 2017-09-02
field_updated___timezone: UTC
data:
{"title": "expect.js", "category": "JavaScript libraries", "updated": "2017-09-02", "weight": -1, "body": "### Using\n\n```\nnpm install --save-dev expect\n```\n{: .-setup}\n\n```js\n// using ES6 modules\nimport expect, { createSpy, spyOn, isSpy } from 'expect'\n```\n\n```js\n// using CommonJS modules\nvar expect = require('expect')\nvar createSpy = expect.createSpy\nvar spyOn = expect.spyOn\nvar isSpy = expect.isSpy\n```\n\nExpect is a library for assertions in tests.\nSee: [mjackson/expect](https://github.com/mjackson/expect)\n\n### Assertions\n\n```js\nexpect(x).toBe(y)\n  .toBe(val)\n  .toEqual(val)\n  .toThrow(err)\n  .toExist()          // aka: toBeTruthy()\n  .toNotExist()       // aka: toBeFalsy()\n  .toBeA(constructor)\n  .toBeA('string')\n  .toMatch(/expr/)\n  .toBeLessThan(n)\n  .toBeGreaterThan(n)\n  .toBeLessThanOrEqualTo(n)\n  .toBeGreaterThanOrEqualTo(n)\n  .toInclude(val)     // aka: toContain(val)\n  .toExclude(val)\n  .toIncludeKey(key)\n  .toExcludeKey(key)\n```\n\nAlso: `toNotBe`, `toNotEqual`, etc for negatives.\n\n### Chaining assertions\n\n```js\nexpect(3.14)\n  .toExist()\n  .toBeLessThan(4)\n  .toBeGreaterThan(3)\n```\n\nAssertions can be chained.\n\n### Spies\n\n```js\nconst video = {\n  play: function () { \u00b7\u00b7\u00b7 }\n}\n```\n{: .-setup}\n\n```js\nspy = expect.spyOn(video, 'play')\n```\n\n```js\nspy = expect.spyOn(\u00b7\u00b7\u00b7)\n  .andCallThrough()      // pass through\n  .andCall(fn)\n  .andThrow(exception)\n  .andReturn(value)\n```\n\n### Assertions on spies\n\n```js\nexpect(spy.calls.length).toEqual(1)\nexpect(spy.calls[0].context).toBe(video)\nexpect(spy.calls[0].arguments).toEqual([ 'some', 'args' ])\nexpect(spy.getLastCall().arguments).toEqual(...)\n```\n\n```js\nexpect(spy).toHaveBeenCalled()\nexpect(spy).toHaveBeenCalledWith('some', 'args')\n```\n\n### References\n\n- <https://www.npmjs.com/package/expect>\n- <https://github.com/mjackson/expect>"}

field_body:
### Using

```
npm install --save-dev expect
```
{: .-setup}

```js
// using ES6 modules
import expect, { createSpy, spyOn, isSpy } from 'expect'
```

```js
// using CommonJS modules
var expect = require('expect')
var createSpy = expect.createSpy
var spyOn = expect.spyOn
var isSpy = expect.isSpy
```

Expect is a library for assertions in tests.
See: [mjackson/expect](https://github.com/mjackson/expect)

### Assertions

```js
expect(x).toBe(y)
  .toBe(val)
  .toEqual(val)
  .toThrow(err)
  .toExist()          // aka: toBeTruthy()
  .toNotExist()       // aka: toBeFalsy()
  .toBeA(constructor)
  .toBeA('string')
  .toMatch(/expr/)
  .toBeLessThan(n)
  .toBeGreaterThan(n)
  .toBeLessThanOrEqualTo(n)
  .toBeGreaterThanOrEqualTo(n)
  .toInclude(val)     // aka: toContain(val)
  .toExclude(val)
  .toIncludeKey(key)
  .toExcludeKey(key)
```

Also: `toNotBe`, `toNotEqual`, etc for negatives.

### Chaining assertions

```js
expect(3.14)
  .toExist()
  .toBeLessThan(4)
  .toBeGreaterThan(3)
```

Assertions can be chained.

### Spies

```js
const video = {
  play: function () { ··· }
}
```
{: .-setup}

```js
spy = expect.spyOn(video, 'play')
```

```js
spy = expect.spyOn(···)
  .andCallThrough()      // pass through
  .andCall(fn)
  .andThrow(exception)
  .andReturn(value)
```

### Assertions on spies

```js
expect(spy.calls.length).toEqual(1)
expect(spy.calls[0].context).toBe(video)
expect(spy.calls[0].arguments).toEqual([ 'some', 'args' ])
expect(spy.getLastCall().arguments).toEqual(...)
```

```js
expect(spy).toHaveBeenCalled()
expect(spy).toHaveBeenCalledWith('some', 'args')
```

### References

- <https://www.npmjs.com/package/expect>
- <https://github.com/mjackson/expect>


id: ets
git_filename: ./ets.md
format: md
field_title: Erlang ETS
field_category: Elixir
data:
{"title": "Erlang ETS", "category": "Elixir", "weight": -1, "body": "## ETS\n\n### Usage\n\n```elixir\niex> table = :ets.new(:my_table, [])\n     8211\n```\n\n```elixir\niex> :ets.insert(table, {:fruit, \"Apple\"})\niex> :ets.lookup(table, :fruit)\n     [{:fruit, \"Apple\"}]\n```\n\n```elixir\niex> :ets.delete(table)\niex> :ets.delete_all_objects(table)\n```\n\n### Flags\n\n```elixir\niex> table = :ets.new(:my_table, [:set, :protected])\n```\n{: .-setup}\n\n| `:set` | no duplicate keys (or: `:ordered_set`, `:bag`, `:duplicate_bag`) |\n| `:protected` | only this process can use it (or: `:public`, `:private`) |\n\n### Ordered sets\n\n```elixir\n:ets.first(table)\n:ets.last(table)\n:ets.next(table, key)\n:ets.prev(table, key)\n```\n\n## References\n{: .-one-column}\n\n* <http://erlang.org/doc/man/ets.html>\n* <http://learnyousomeerlang.com/ets>"}

field_body:
## ETS

### Usage

```elixir
iex> table = :ets.new(:my_table, [])
     8211
```

```elixir
iex> :ets.insert(table, {:fruit, "Apple"})
iex> :ets.lookup(table, :fruit)
     [{:fruit, "Apple"}]
```

```elixir
iex> :ets.delete(table)
iex> :ets.delete_all_objects(table)
```

### Flags

```elixir
iex> table = :ets.new(:my_table, [:set, :protected])
```
{: .-setup}

| `:set` | no duplicate keys (or: `:ordered_set`, `:bag`, `:duplicate_bag`) |
| `:protected` | only this process can use it (or: `:public`, `:private`) |

### Ordered sets

```elixir
:ets.first(table)
:ets.last(table)
:ets.next(table, key)
:ets.prev(table, key)
```

## References
{: .-one-column}

* <http://erlang.org/doc/man/ets.html>
* <http://learnyousomeerlang.com/ets>


id: es6
git_filename: ./es6.md
format: md
field_title: ES2015+
field_category: JavaScript
field_tags: Featured
field_intro: A quick overview of new JavaScript features in ES2015, ES2016, ES2017, ES2018 and beyond.
field_updated: 2019-11-14
field_updated___timezone: UTC
data:
{"title": "ES2015+", "category": "JavaScript", "tags": ["Featured"], "updated": "2019-11-14", "weight": -10, "intro": "A quick overview of new JavaScript features in ES2015, ES2016, ES2017, ES2018 and beyond.\n", "body": "### Block scoping\n\n#### Let\n\n```js\nfunction fn () {\n  let x = 0\n  if (true) {\n    let x = 1 // only inside this `if`\n  }\n}\n```\n{: data-line=\"2,4\"}\n\n#### Const\n\n```js\nconst a = 1\n```\n\n`let` is the new `var`. Constants work just like `let`, but can't be reassigned.\nSee: [Let and const](https://babeljs.io/learn-es2015/#let--const)\n\n### Backtick strings\n\n#### Interpolation\n\n```js\nconst message = `Hello ${name}`\n```\n\n#### Multiline strings\n\n```js\nconst str = `\nhello\nworld\n`\n```\n\nTemplates and multiline strings.\nSee: [Template strings](https://babeljs.io/learn-es2015/#template-strings)\n\n### Binary and octal literals\n\n```js\nlet bin = 0b1010010\nlet oct = 0o755\n```\n\nSee: [Binary and octal literals](https://babeljs.io/learn-es2015/#binary-and-octal-literals)\n\n### New methods\n\n#### New string methods\n\n```js\n\"hello\".repeat(3)\n\"hello\".includes(\"ll\")\n\"hello\".startsWith(\"he\")\n\"hello\".padStart(8) // \"   hello\"\n\"hello\".padEnd(8) // \"hello   \" \n\"hello\".padEnd(8, '!') // hello!!!\n\"\\u1E9B\\u0323\".normalize(\"NFC\")\n```\n\nSee: [New methods](https://babeljs.io/learn-es2015/#math--number--string--object-apis)\n\n### Classes\n\n```js\nclass Circle extends Shape {\n```\n\n#### Constructor\n\n```js\n  constructor (radius) {\n    this.radius = radius\n  }\n```\n{: data-line=\"1\"}\n\n#### Methods\n\n```js\n  getArea () {\n    return Math.PI * 2 * this.radius\n  }\n```\n{: data-line=\"1\"}\n\n#### Calling superclass methods\n\n```js\n  expand (n) {\n    return super.expand(n) * Math.PI\n  }\n```\n{: data-line=\"2\"}\n\n#### Static methods\n\n```js\n  static createFromDiameter(diameter) {\n    return new Circle(diameter / 2)\n  }\n}\n```\n{: data-line=\"1\"}\n\nSyntactic sugar for prototypes.\nSee: [Classes](https://babeljs.io/learn-es2015/#classes)\n\n### Exponent operator\n\n```js\nconst byte = 2 ** 8\n// Same as: Math.pow(2, 8)\n```\n{: data-line=\"1\"}\n\nPromises\n--------\n{: .-three-column}\n\n### Making promises\n\n```js\nnew Promise((resolve, reject) => {\n  if (ok) { resolve(result) }\n  else { reject(error) }\n})\n```\n{: data-line=\"1\"}\n\nFor asynchronous programming.\nSee: [Promises](https://babeljs.io/learn-es2015/#promises)\n\n### Using promises\n\n```js\npromise\n  .then((result) => { \u00b7\u00b7\u00b7 })\n  .catch((error) => { \u00b7\u00b7\u00b7 })\n```\n{: data-line=\"2,3\"}\n\n\n### Using promises with finally\n\n```js\npromise\n  .then((result) => { \u00b7\u00b7\u00b7 })\n  .catch((error) => { \u00b7\u00b7\u00b7 })\n  .finally(() => { // logic independent of success/error })\n```\n{: data-line=\"4\"}\n\nThe handler is called when the promise is fulfilled or rejected.\n\n\n### Promise functions\n\n```js\nPromise.all(\u00b7\u00b7\u00b7)\nPromise.race(\u00b7\u00b7\u00b7)\nPromise.reject(\u00b7\u00b7\u00b7)\nPromise.resolve(\u00b7\u00b7\u00b7)\n```\n\n### Async-await\n\n```js\nasync function run () {\n  const user = await getUser()\n  const tweets = await getTweets(user)\n  return [user, tweets]\n}\n```\n{: data-line=\"2,3\"}\n\n`async` functions are another way of using functions.\n\nSee: [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)\n\nDestructuring\n-------------\n{: .-three-column}\n\n### Destructuring assignment\n\n#### Arrays\n\n```js\nconst [first, last] = ['Nikola', 'Tesla']\n```\n{: data-line=\"1\"}\n\n#### Objects\n\n```js\nlet {title, author} = {\n  title: 'The Silkworm',\n  author: 'R. Galbraith'\n}\n```\n{: data-line=\"1\"}\n\nSupports for matching arrays and objects.\nSee: [Destructuring](https://babeljs.io/learn-es2015/#destructuring)\n\n### Default values\n\n```js\nconst scores = [22, 33]\nconst [math = 50, sci = 50, arts = 50] = scores\n```\n\n```js\n// Result:\n// math === 22, sci === 33, arts === 50\n```\n\nDefault values can be assigned while destructuring arrays or objects.\n\n### Function arguments\n\n```js\nfunction greet({ name, greeting }) {\n  console.log(`${greeting}, ${name}!`)\n}\n```\n{: data-line=\"1\"}\n\n```js\ngreet({ name: 'Larry', greeting: 'Ahoy' })\n```\n\nDestructuring of objects and arrays can also be done in function arguments.\n\n### Default values\n\n```js\nfunction greet({ name = 'Rauno' } = {})\u00a0{\n  console.log(`Hi ${name}!`);\n}\n```\n{: data-line=\"1\"}\n\n```js\ngreet() // Hi Rauno!\ngreet({ name: 'Larry' }) // Hi Larry!\n```\n\n### Reassigning keys\n\n```js\nfunction printCoordinates({ left: x, top: y }) {\n  console.log(`x: ${x}, y: ${y}`)\n}\n```\n{: data-line=\"1\"}\n\n```js\nprintCoordinates({ left: 25, top: 90 })\n```\n\nThis example assigns `x` to the value of the `left` key.\n\n### Loops\n\n```js\nfor (let {title, artist} of songs) {\n  \u00b7\u00b7\u00b7\n}\n```\n{: data-line=\"1\"}\n\nThe assignment expressions work in loops, too.\n\n\n### Object destructuring\n\n```js\nconst { id, ...detail } = song;\n```\n{: data-line=\"1\"}\n\nExtract some keys individually and remaining keys in the object using rest (...) operator\n\n\nSpread\n------\n\n### Object spread\n\n#### with Object spread\n\n```js\nconst options = {\n  ...defaults,\n  visible: true\n}\n```\n{: data-line=\"2\"}\n\n#### without Object spread\n\n```js\nconst options = Object.assign(\n  {}, defaults,\n  { visible: true })\n```\n\nThe Object spread operator lets you build new objects from other objects.\n\nSee: [Object spread](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)\n\n### Array spread\n\n#### with Array spread\n\n```js\nconst users = [\n  ...admins,\n  ...editors,\n  'rstacruz'\n]\n```\n{: data-line=\"2,3\"}\n\n#### without Array spread\n\n```js\nconst users = admins\n  .concat(editors)\n  .concat([ 'rstacruz' ])\n```\n\nThe spread operator lets you build new arrays in the same way.\n\nSee: [Spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)\n\nFunctions\n---------\n\n### Function arguments\n\n#### Default arguments\n\n```js\nfunction greet (name = 'Jerry') {\n  return `Hello ${name}`\n}\n```\n{: data-line=\"1\"}\n\n#### Rest arguments\n\n```js\nfunction fn(x, ...y) {\n  // y is an Array\n  return x * y.length\n}\n```\n{: data-line=\"1\"}\n\n#### Spread\n\n```js\nfn(...[1, 2, 3])\n// same as fn(1, 2, 3)\n```\n{: data-line=\"1\"}\n\nDefault, rest, spread.\nSee: [Function arguments](https://babeljs.io/learn-es2015/#default--rest--spread)\n\n### Fat arrows\n\n#### Fat arrows\n\n```js\nsetTimeout(() => {\n  \u00b7\u00b7\u00b7\n})\n```\n{: data-line=\"1\"}\n\n#### With arguments\n\n```js\nreadFile('text.txt', (err, data) => {\n  ...\n})\n```\n{: data-line=\"1\"}\n\n#### Implicit return\n```js\nnumbers.map(n => n * 2)\n// No curly braces = implicit return\n// Same as: numbers.map(function (n) { return n * 2 })\nnumbers.map(n => ({\n  result: n * 2\n}))\n// Implicitly returning objects requires parentheses around the object\n```\n{: data-line=\"1,4,5,6\"}\n\nLike functions but with `this` preserved.\nSee: [Fat arrows](https://babeljs.io/learn-es2015/#arrows-and-lexical-this)\n\nObjects\n-------\n\n### Shorthand syntax\n\n```js\nmodule.exports = { hello, bye }\n// Same as: module.exports = { hello: hello, bye: bye }\n```\n\nSee: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)\n\n### Methods\n\n```js\nconst App = {\n  start () {\n    console.log('running')\n  }\n}\n// Same as: App = { start: function () {\u00b7\u00b7\u00b7} }\n```\n{: data-line=\"2\"}\n\nSee: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)\n\n### Getters and setters\n\n```js\nconst App = {\n  get closed () {\n    return this.status === 'closed'\n  },\n  set closed (value) {\n    this.status = value ? 'closed' : 'open'\n  }\n}\n```\n{: data-line=\"2,5\"}\n\nSee: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)\n\n### Computed property names\n\n```js\nlet event = 'click'\nlet handlers = {\n  [`on${event}`]: true\n}\n// Same as: handlers = { 'onclick': true }\n```\n{: data-line=\"3\"}\n\nSee: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)\n\n\n### Extract values\n\n```js\nconst fatherJS = { age: 57, name: \"Brendan Eich\" }\n\nObject.values(fatherJS)\n// [57, \"Brendan Eich\"]\nObject.entries(fatherJS)\n// [[\"age\", 57], [\"name\", \"Brendan Eich\"]]\n```\n{: data-line=\"3,5\"}\n\n\nModules\n-------\n\n### Imports\n\n```js\nimport 'helpers'\n// aka: require('\u00b7\u00b7\u00b7')\n```\n\n```js\nimport Express from 'express'\n// aka: const Express = require('\u00b7\u00b7\u00b7').default || require('\u00b7\u00b7\u00b7')\n```\n\n```js\nimport { indent } from 'helpers'\n// aka: const indent = require('\u00b7\u00b7\u00b7').indent\n```\n\n```js\nimport * as Helpers from 'helpers'\n// aka: const Helpers = require('\u00b7\u00b7\u00b7')\n```\n\n```js\nimport { indentSpaces as indent } from 'helpers'\n// aka: const indent = require('\u00b7\u00b7\u00b7').indentSpaces\n```\n\n`import` is the new `require()`.\nSee: [Module imports](https://babeljs.io/learn-es2015/#modules)\n\n### Exports\n\n```js\nexport default function () { \u00b7\u00b7\u00b7 }\n// aka: module.exports.default = \u00b7\u00b7\u00b7\n```\n\n```js\nexport function mymethod () { \u00b7\u00b7\u00b7 }\n// aka: module.exports.mymethod = \u00b7\u00b7\u00b7\n```\n\n```js\nexport const pi = 3.14159\n// aka: module.exports.pi = \u00b7\u00b7\u00b7\n```\n\n`export` is the new `module.exports`.\nSee: [Module exports](https://babeljs.io/learn-es2015/#modules)\n\nGenerators\n----------\n\n### Generators\n\n```js\nfunction* idMaker () {\n  let id = 0\n  while (true) { yield id++ }\n}\n```\n\n```js\nlet gen = idMaker()\ngen.next().value  // \u2192 0\ngen.next().value  // \u2192 1\ngen.next().value  // \u2192 2\n```\n\nIt's complicated.\nSee: [Generators](https://babeljs.io/learn-es2015/#generators)\n\n### For..of iteration\n\n```js\nfor (let i of iterable) {\n  \u00b7\u00b7\u00b7\n}\n```\n\nFor iterating through generators and arrays.\nSee: [For..of iteration](https://babeljs.io/learn-es2015/#iterators--forof)"}

field_body:
### Block scoping

#### Let

```js
function fn () {
  let x = 0
  if (true) {
    let x = 1 // only inside this `if`
  }
}
```
{: data-line="2,4"}

#### Const

```js
const a = 1
```

`let` is the new `var`. Constants work just like `let`, but can't be reassigned.
See: [Let and const](https://babeljs.io/learn-es2015/#let--const)

### Backtick strings

#### Interpolation

```js
const message = `Hello ${name}`
```

#### Multiline strings

```js
const str = `
hello
world
`
```

Templates and multiline strings.
See: [Template strings](https://babeljs.io/learn-es2015/#template-strings)

### Binary and octal literals

```js
let bin = 0b1010010
let oct = 0o755
```

See: [Binary and octal literals](https://babeljs.io/learn-es2015/#binary-and-octal-literals)

### New methods

#### New string methods

```js
"hello".repeat(3)
"hello".includes("ll")
"hello".startsWith("he")
"hello".padStart(8) // "   hello"
"hello".padEnd(8) // "hello   " 
"hello".padEnd(8, '!') // hello!!!
"\u1E9B\u0323".normalize("NFC")
```

See: [New methods](https://babeljs.io/learn-es2015/#math--number--string--object-apis)

### Classes

```js
class Circle extends Shape {
```

#### Constructor

```js
  constructor (radius) {
    this.radius = radius
  }
```
{: data-line="1"}

#### Methods

```js
  getArea () {
    return Math.PI * 2 * this.radius
  }
```
{: data-line="1"}

#### Calling superclass methods

```js
  expand (n) {
    return super.expand(n) * Math.PI
  }
```
{: data-line="2"}

#### Static methods

```js
  static createFromDiameter(diameter) {
    return new Circle(diameter / 2)
  }
}
```
{: data-line="1"}

Syntactic sugar for prototypes.
See: [Classes](https://babeljs.io/learn-es2015/#classes)

### Exponent operator

```js
const byte = 2 ** 8
// Same as: Math.pow(2, 8)
```
{: data-line="1"}

Promises
--------
{: .-three-column}

### Making promises

```js
new Promise((resolve, reject) => {
  if (ok) { resolve(result) }
  else { reject(error) }
})
```
{: data-line="1"}

For asynchronous programming.
See: [Promises](https://babeljs.io/learn-es2015/#promises)

### Using promises

```js
promise
  .then((result) => { ··· })
  .catch((error) => { ··· })
```
{: data-line="2,3"}


### Using promises with finally

```js
promise
  .then((result) => { ··· })
  .catch((error) => { ··· })
  .finally(() => { // logic independent of success/error })
```
{: data-line="4"}

The handler is called when the promise is fulfilled or rejected.


### Promise functions

```js
Promise.all(···)
Promise.race(···)
Promise.reject(···)
Promise.resolve(···)
```

### Async-await

```js
async function run () {
  const user = await getUser()
  const tweets = await getTweets(user)
  return [user, tweets]
}
```
{: data-line="2,3"}

`async` functions are another way of using functions.

See: [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)

Destructuring
-------------
{: .-three-column}

### Destructuring assignment

#### Arrays

```js
const [first, last] = ['Nikola', 'Tesla']
```
{: data-line="1"}

#### Objects

```js
let {title, author} = {
  title: 'The Silkworm',
  author: 'R. Galbraith'
}
```
{: data-line="1"}

Supports for matching arrays and objects.
See: [Destructuring](https://babeljs.io/learn-es2015/#destructuring)

### Default values

```js
const scores = [22, 33]
const [math = 50, sci = 50, arts = 50] = scores
```

```js
// Result:
// math === 22, sci === 33, arts === 50
```

Default values can be assigned while destructuring arrays or objects.

### Function arguments

```js
function greet({ name, greeting }) {
  console.log(`${greeting}, ${name}!`)
}
```
{: data-line="1"}

```js
greet({ name: 'Larry', greeting: 'Ahoy' })
```

Destructuring of objects and arrays can also be done in function arguments.

### Default values

```js
function greet({ name = 'Rauno' } = {}) {
  console.log(`Hi ${name}!`);
}
```
{: data-line="1"}

```js
greet() // Hi Rauno!
greet({ name: 'Larry' }) // Hi Larry!
```

### Reassigning keys

```js
function printCoordinates({ left: x, top: y }) {
  console.log(`x: ${x}, y: ${y}`)
}
```
{: data-line="1"}

```js
printCoordinates({ left: 25, top: 90 })
```

This example assigns `x` to the value of the `left` key.

### Loops

```js
for (let {title, artist} of songs) {
  ···
}
```
{: data-line="1"}

The assignment expressions work in loops, too.


### Object destructuring

```js
const { id, ...detail } = song;
```
{: data-line="1"}

Extract some keys individually and remaining keys in the object using rest (...) operator


Spread
------

### Object spread

#### with Object spread

```js
const options = {
  ...defaults,
  visible: true
}
```
{: data-line="2"}

#### without Object spread

```js
const options = Object.assign(
  {}, defaults,
  { visible: true })
```

The Object spread operator lets you build new objects from other objects.

See: [Object spread](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)

### Array spread

#### with Array spread

```js
const users = [
  ...admins,
  ...editors,
  'rstacruz'
]
```
{: data-line="2,3"}

#### without Array spread

```js
const users = admins
  .concat(editors)
  .concat([ 'rstacruz' ])
```

The spread operator lets you build new arrays in the same way.

See: [Spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)

Functions
---------

### Function arguments

#### Default arguments

```js
function greet (name = 'Jerry') {
  return `Hello ${name}`
}
```
{: data-line="1"}

#### Rest arguments

```js
function fn(x, ...y) {
  // y is an Array
  return x * y.length
}
```
{: data-line="1"}

#### Spread

```js
fn(...[1, 2, 3])
// same as fn(1, 2, 3)
```
{: data-line="1"}

Default, rest, spread.
See: [Function arguments](https://babeljs.io/learn-es2015/#default--rest--spread)

### Fat arrows

#### Fat arrows

```js
setTimeout(() => {
  ···
})
```
{: data-line="1"}

#### With arguments

```js
readFile('text.txt', (err, data) => {
  ...
})
```
{: data-line="1"}

#### Implicit return
```js
numbers.map(n => n * 2)
// No curly braces = implicit return
// Same as: numbers.map(function (n) { return n * 2 })
numbers.map(n => ({
  result: n * 2
}))
// Implicitly returning objects requires parentheses around the object
```
{: data-line="1,4,5,6"}

Like functions but with `this` preserved.
See: [Fat arrows](https://babeljs.io/learn-es2015/#arrows-and-lexical-this)

Objects
-------

### Shorthand syntax

```js
module.exports = { hello, bye }
// Same as: module.exports = { hello: hello, bye: bye }
```

See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)

### Methods

```js
const App = {
  start () {
    console.log('running')
  }
}
// Same as: App = { start: function () {···} }
```
{: data-line="2"}

See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)

### Getters and setters

```js
const App = {
  get closed () {
    return this.status === 'closed'
  },
  set closed (value) {
    this.status = value ? 'closed' : 'open'
  }
}
```
{: data-line="2,5"}

See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)

### Computed property names

```js
let event = 'click'
let handlers = {
  [`on${event}`]: true
}
// Same as: handlers = { 'onclick': true }
```
{: data-line="3"}

See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)


### Extract values

```js
const fatherJS = { age: 57, name: "Brendan Eich" }

Object.values(fatherJS)
// [57, "Brendan Eich"]
Object.entries(fatherJS)
// [["age", 57], ["name", "Brendan Eich"]]
```
{: data-line="3,5"}


Modules
-------

### Imports

```js
import 'helpers'
// aka: require('···')
```

```js
import Express from 'express'
// aka: const Express = require('···').default || require('···')
```

```js
import { indent } from 'helpers'
// aka: const indent = require('···').indent
```

```js
import * as Helpers from 'helpers'
// aka: const Helpers = require('···')
```

```js
import { indentSpaces as indent } from 'helpers'
// aka: const indent = require('···').indentSpaces
```

`import` is the new `require()`.
See: [Module imports](https://babeljs.io/learn-es2015/#modules)

### Exports

```js
export default function () { ··· }
// aka: module.exports.default = ···
```

```js
export function mymethod () { ··· }
// aka: module.exports.mymethod = ···
```

```js
export const pi = 3.14159
// aka: module.exports.pi = ···
```

`export` is the new `module.exports`.
See: [Module exports](https://babeljs.io/learn-es2015/#modules)

Generators
----------

### Generators

```js
function* idMaker () {
  let id = 0
  while (true) { yield id++ }
}
```

```js
let gen = idMaker()
gen.next().value  // → 0
gen.next().value  // → 1
gen.next().value  // → 2
```

It's complicated.
See: [Generators](https://babeljs.io/learn-es2015/#generators)

### For..of iteration

```js
for (let i of iterable) {
  ···
}
```

For iterating through generators and arrays.
See: [For..of iteration](https://babeljs.io/learn-es2015/#iterators--forof)


id: enzyme@2
git_filename: ./enzyme@2.md
format: md
field_title: Enzyme v2
field_category: React
field_updated: 2017-10-12
field_updated___timezone: UTC
data:
{"title": "Enzyme v2", "category": "React", "updated": "2017-10-12", "weight": -1, "deprecated_by": "/enzyme", "body": "## Getting started\n{: .-three-column}\n\n### Introduction\n{: .-intro}\n\n**(Deprecated)** [Enzyme](http://airbnb.io/enzyme) lets you write unit tests for React components. This guide covers a previous version (v2.x).\n\n### Mounting\n{: .-prime}\n\n```js\nimport {shallow, mount} from 'enzyme'\n```\n{: .-setup}\n\n```js\nwrap = shallow(<MyComponent />)\n```\n\n```js\nwrap = mount(<MyComponent />)\n```\n\nShallow wrapping doesn't descend down to sub-components.\nA full mount also mounts sub-components.\nSee: [Shallow rendering](http://airbnb.io/enzyme/docs/api/shallow.html),\n[Full rendering](http://airbnb.io/enzyme/docs/api/mount.html)\n\n### Jest\n\n```js\nimport toJson from 'enzyme-to-json'\n```\n{: .-setup}\n\n```js\nit('works', () => {\n  wrap = mount(<MyComponent />)\n  expect(toJson(wrap)).toMatchSnapshot()\n})\n```\n\nConverts an Enzyme wrapper to a format compatible with Jest snapshots. See: [enzyme-to-json](https://www.npmjs.com/package/enzyme-to-json)\n\n### Debugging\n\n```js\nconsole.log(wrap.debug())\n```\n\nShows HTML for debugging purposes. See: [debug()](http://airbnb.io/enzyme/docs/api/ReactWrapper/debug.html)\n\n## ReactWrapper\n\n### Traversing\n\n```js\nwrap.find('button')   // => ReactWrapper\nwrap.filter('button') // => ReactWrapper\nwrap.not('span')      // => ReactWrapper (inverse of filter())\nwrap.children()       // => ReactWrapper\nwrap.parent()         // => ReactWrapper\nwrap.closest('div')   // => ReactWrapper\nwrap.childAt(0)       // => ReactWrapper\nwrap.at(0)            // => ReactWrapper\nwrap.first()          // => ReactWrapper\nwrap.last()           // => ReactWrapper\n```\n\n```js\nwrap.get(0)           // => ReactElement\nwrap.getNode()        // => ReactElement\nwrap.getNodes()       // => Array<ReactElement>\nwrap.getDOMNode()     // => DOMComponent\n```\n\nSee: [Full rendering API](http://airbnb.io/enzyme/docs/api/mount.html)\n\n### Actions\n\n```js\nwrap.simulate('click')\n```\n\n### React components\n\n```js\nwrap.setState({ ... })\nwrap.setProps({ ... })\nwrap.setContext({ ... })\n\nwrap.state()            // => Any (get state)\nwrap.props()            // => object (get props)\nwrap.context()          // => Any (get context)\n\nwrap.instance()         // => ReactComponent\n```\n\n### Mount\n\n```js\nwrap.mount()\nwrap.unmount()\nwrap.update()      // calls forceUpdate()\n```\n\n### Tests\n\n```js\nwrap.debug()               // => string\nwrap.html()                // => string\nwrap.text()                // => string\nwrap.type()                // => string | function\nwrap.name()                // => string\nwrap.is('.classname')      // => boolean\nwrap.hasClass('class')     // => boolean\nwrap.exists()              // => boolean\nwrap.contains(<div />)     // => boolean\nwrap.contains([ <div /> ]) // => boolean\n\nwrap.containsMatchingElement(<div />)         // => boolean\nwrap.containsAllMatchingElements([ <div /> ]) // => boolean\nwrap.containsAnyMatchingElements([ <div /> ]) // => boolean\n```\n\n## References\n\n- <https://airbnb.io/enzyme>"}

field_body:
## Getting started
{: .-three-column}

### Introduction
{: .-intro}

**(Deprecated)** [Enzyme](http://airbnb.io/enzyme) lets you write unit tests for React components. This guide covers a previous version (v2.x).

### Mounting
{: .-prime}

```js
import {shallow, mount} from 'enzyme'
```
{: .-setup}

```js
wrap = shallow(<MyComponent />)
```

```js
wrap = mount(<MyComponent />)
```

Shallow wrapping doesn't descend down to sub-components.
A full mount also mounts sub-components.
See: [Shallow rendering](http://airbnb.io/enzyme/docs/api/shallow.html),
[Full rendering](http://airbnb.io/enzyme/docs/api/mount.html)

### Jest

```js
import toJson from 'enzyme-to-json'
```
{: .-setup}

```js
it('works', () => {
  wrap = mount(<MyComponent />)
  expect(toJson(wrap)).toMatchSnapshot()
})
```

Converts an Enzyme wrapper to a format compatible with Jest snapshots. See: [enzyme-to-json](https://www.npmjs.com/package/enzyme-to-json)

### Debugging

```js
console.log(wrap.debug())
```

Shows HTML for debugging purposes. See: [debug()](http://airbnb.io/enzyme/docs/api/ReactWrapper/debug.html)

## ReactWrapper

### Traversing

```js
wrap.find('button')   // => ReactWrapper
wrap.filter('button') // => ReactWrapper
wrap.not('span')      // => ReactWrapper (inverse of filter())
wrap.children()       // => ReactWrapper
wrap.parent()         // => ReactWrapper
wrap.closest('div')   // => ReactWrapper
wrap.childAt(0)       // => ReactWrapper
wrap.at(0)            // => ReactWrapper
wrap.first()          // => ReactWrapper
wrap.last()           // => ReactWrapper
```

```js
wrap.get(0)           // => ReactElement
wrap.getNode()        // => ReactElement
wrap.getNodes()       // => Array<ReactElement>
wrap.getDOMNode()     // => DOMComponent
```

See: [Full rendering API](http://airbnb.io/enzyme/docs/api/mount.html)

### Actions

```js
wrap.simulate('click')
```

### React components

```js
wrap.setState({ ... })
wrap.setProps({ ... })
wrap.setContext({ ... })

wrap.state()            // => Any (get state)
wrap.props()            // => object (get props)
wrap.context()          // => Any (get context)

wrap.instance()         // => ReactComponent
```

### Mount

```js
wrap.mount()
wrap.unmount()
wrap.update()      // calls forceUpdate()
```

### Tests

```js
wrap.debug()               // => string
wrap.html()                // => string
wrap.text()                // => string
wrap.type()                // => string | function
wrap.name()                // => string
wrap.is('.classname')      // => boolean
wrap.hasClass('class')     // => boolean
wrap.exists()              // => boolean
wrap.contains(<div />)     // => boolean
wrap.contains([ <div /> ]) // => boolean

wrap.containsMatchingElement(<div />)         // => boolean
wrap.containsAllMatchingElements([ <div /> ]) // => boolean
wrap.containsAnyMatchingElements([ <div /> ]) // => boolean
```

## References

- <https://airbnb.io/enzyme>


id: enzyme
git_filename: ./enzyme.md
format: md
field_title: Enzyme
field_category: React
field_tags: Featured
field_updated: 2020-02-12
field_updated___timezone: UTC
data:
{"title": "Enzyme", "category": "React", "updated": "2020-02-12", "tags": ["Featured"], "weight": -1, "keywords": ["shallow()", "mount()", "wrap.setProps()", "wrap.find().simulate('click')", "wrap.contains(<div/>)"], "body": "## Getting started\n\n### Introduction\n{: .-intro}\n\n[Enzyme](https://airbnb.io/enzyme) lets you write unit tests for React components. This guide covers Enzyme 3.x.\n\n- [Enzyme website](https://enzymejs.github.io/enzyme/) _(enzymejs.github.io)_\n\n### Mounting\n{: .-prime}\n\n```js\nimport {shallow, mount} from 'enzyme'\n```\n{: .-setup}\n\n```js\nwrap = shallow(<MyComponent />)\n```\n\n```js\nwrap = mount(<MyComponent />)\n```\n\nShallow wrapping doesn't descend down to sub-components.\nA full mount also mounts sub-components.\n\nSee: [Shallow rendering](https://airbnb.io/enzyme/docs/api/shallow.html),\n[Full rendering](https://airbnb.io/enzyme/docs/api/mount.html)\n\n### Debugging\n\n```js\nconsole.log(wrap.debug())\n```\n\nShows HTML for debugging purposes.\n\nSee: [debug()](https://airbnb.io/enzyme/docs/api/ReactWrapper/debug.html)\n\n## Examples\n{: .-three-column}\n\n### Basic example\n{: .-prime}\n\n```js\nimport { shallow } from 'enzyme'\nimport MyComponent from '../MyComponent'\n```\n{: .-setup}\n\n```js\nit('works', () => {\n  const wrap = shallow(\n    <MyComponent name='Groot' />\n  )\n\n  expect(wrap.text()).toEqual('I am Groot')\n})\n```\n\n### Props and state\n\n#### Setting\n\n```js\nwrap.setProps({ name: 'Moe' })\nwrap.setState({ show: true })\n```\n\n#### Asserting\n\n```js\nexpect(wrap.prop('name')).toEqual('Moe')\nexpect(wrap.state('show')).toEqual(true)\n```\n\n```js\nexpect('name' in wrap.props()).toEqual('Moe')\nexpect('show' in wrap.state()).toEqual(true)\n```\n\n### Matching elements\n\n```js\nexpect(\n  wrap.containsMatchingElement(\n    <span>I am groot</span>\n  )\n).toBeTruthy()\n```\n\n`containsMatchingElement()` is probably the most useful assertion in Jest.\n\n### Snapshots\n\n```js\nexpect(wrap).toMatchSnapshot()\n```\n\nBe sure you've set up enzyme-to-json for snapshots (see [Installing](#installing) below).\n\n### Traversions\n\n```js\nexpect(\n  wrap.find('button').text()\n).toEqual('Submit')\n```\n\nUse `.find()` to traverse down to nodes. It will return wrapper objects, too.\n\n### Simulating events\n\n```js\nwrap.find('input').simulate('click')\n```\n\n#### With event object props\n\n```js\nwrap.find('input').simulate('change', {\n  target: { value: 'hello' }\n})\n```\n\n## Installing\n\n### Initial setup\n\n```\nnpm install --save-dev enzyme \\\n  enzyme-adapter-react-16 \\\n  react-test-renderer\n```\n{: .-setup}\n\n#### test/setup.js\n\n```js\nimport Enzyme from 'enzyme'\nimport Adapter from 'enzyme-adapter-react-16'\n\nEnzyme.configure({ adapter: new Adapter() })\n```\n\n#### package.json\n\n```js\n\"jest\": {\n  \"setupFiles\": [\n    \"test/setup.js\"\n  ]\n}\n```\n\nThis configures Enzyme for React v16, and Jest to automatically configure Enzyme for you. There are other adapters in Enzyme's installation instructions.\n\nSee: [Installation](https://airbnb.io/enzyme/#installation)\n\n### Jest snapshots\n\n```\nnpm install --save-dev enzyme-to-json\n```\n{: .-setup}\n\n#### package.json\n\n```js\n\"jest\": {\n  \"snapshotSerializers\": [\n    \"enzyme-to-json/serializer\"\n  ]\n}\n```\n\n#### Test\n\n```js\nit('works', () => {\n  wrap = mount(<MyComponent />)\n  expect(wrap).toMatchSnapshot()\n})\n```\n\nOptional, but recommended: This allows you to use Enzyme wrappers with Jest snapshots.\n\nSee: [enzyme-to-json](https://www.npmjs.com/package/enzyme-to-json)\n\n## ReactWrapper\n\n### Traversing\n\n```js\nwrap.find('button')   // \u2192 ReactWrapper\nwrap.filter('button') // \u2192 ReactWrapper\nwrap.not('span')      // \u2192 ReactWrapper (inverse of filter())\nwrap.children()       // \u2192 ReactWrapper\nwrap.parent()         // \u2192 ReactWrapper\nwrap.closest('div')   // \u2192 ReactWrapper\nwrap.childAt(0)       // \u2192 ReactWrapper\nwrap.at(0)            // \u2192 ReactWrapper\nwrap.first()          // \u2192 ReactWrapper\nwrap.last()           // \u2192 ReactWrapper\n```\n\n```js\nwrap.get(0)           // \u2192 ReactElement\nwrap.getElement()     // \u2192 ReactElement\nwrap.getElements()    // \u2192 Array<ReactElement>\nwrap.getDOMNode()     // \u2192 DOMComponent\n```\n\nSee: [Full rendering API](https://airbnb.io/enzyme/docs/api/mount.html)\n\n### Actions\n\n```js\nwrap.simulate('click')\n```\n\n### React components\n\n```js\nwrap.setState({ \u00b7\u00b7\u00b7 })\nwrap.setProps({ \u00b7\u00b7\u00b7 })\nwrap.setContext({ \u00b7\u00b7\u00b7 })\n```\n\n```js\nwrap.state()         // get full state\nwrap.props()         // get full props\nwrap.context()       // get full context\n```\n\n```js\nwrap.state('key')    // \u2192 any\nwrap.prop('key')     // \u2192 any\nwrap.context('key')  // \u2192 any\n```\n\n```js\nwrap.instance()      // \u2192 ReactComponent\n```\n\n### Mount\n\n```js\nwrap.mount()\nwrap.unmount()\nwrap.update()      // calls forceUpdate()\n```\n\n### Tests\n\n```js\nwrap.debug()               // \u2192 string\nwrap.html()                // \u2192 string\nwrap.text()                // \u2192 string\nwrap.type()                // \u2192 string | function\nwrap.name()                // \u2192 string\nwrap.is('.classname')      // \u2192 boolean\nwrap.hasClass('class')     // \u2192 boolean\nwrap.exists()              // \u2192 boolean\nwrap.contains(<div />)     // \u2192 boolean\nwrap.contains([ <div /> ]) // \u2192 boolean\nwrap.some('.child')        // \u2192 boolean\n\nwrap.someWhere(n => n.hasClass('foo'))\n\nwrap.containsMatchingElement(<div />)         // \u2192 boolean\nwrap.containsAllMatchingElements([ <div /> ]) // \u2192 boolean\nwrap.containsAnyMatchingElements([ <div /> ]) // \u2192 boolean\n```\n\n## References\n\n- [Enzyme website](https://airbnb.io/enzyme) _(airbnb.io)_\n- [Enzyme v2 cheatsheet](./enzyme@2) _(devhints.io)_ (old version)"}

field_body:
## Getting started

### Introduction
{: .-intro}

[Enzyme](https://airbnb.io/enzyme) lets you write unit tests for React components. This guide covers Enzyme 3.x.

- [Enzyme website](https://enzymejs.github.io/enzyme/) _(enzymejs.github.io)_

### Mounting
{: .-prime}

```js
import {shallow, mount} from 'enzyme'
```
{: .-setup}

```js
wrap = shallow(<MyComponent />)
```

```js
wrap = mount(<MyComponent />)
```

Shallow wrapping doesn't descend down to sub-components.
A full mount also mounts sub-components.

See: [Shallow rendering](https://airbnb.io/enzyme/docs/api/shallow.html),
[Full rendering](https://airbnb.io/enzyme/docs/api/mount.html)

### Debugging

```js
console.log(wrap.debug())
```

Shows HTML for debugging purposes.

See: [debug()](https://airbnb.io/enzyme/docs/api/ReactWrapper/debug.html)

## Examples
{: .-three-column}

### Basic example
{: .-prime}

```js
import { shallow } from 'enzyme'
import MyComponent from '../MyComponent'
```
{: .-setup}

```js
it('works', () => {
  const wrap = shallow(
    <MyComponent name='Groot' />
  )

  expect(wrap.text()).toEqual('I am Groot')
})
```

### Props and state

#### Setting

```js
wrap.setProps({ name: 'Moe' })
wrap.setState({ show: true })
```

#### Asserting

```js
expect(wrap.prop('name')).toEqual('Moe')
expect(wrap.state('show')).toEqual(true)
```

```js
expect('name' in wrap.props()).toEqual('Moe')
expect('show' in wrap.state()).toEqual(true)
```

### Matching elements

```js
expect(
  wrap.containsMatchingElement(
    <span>I am groot</span>
  )
).toBeTruthy()
```

`containsMatchingElement()` is probably the most useful assertion in Jest.

### Snapshots

```js
expect(wrap).toMatchSnapshot()
```

Be sure you've set up enzyme-to-json for snapshots (see [Installing](#installing) below).

### Traversions

```js
expect(
  wrap.find('button').text()
).toEqual('Submit')
```

Use `.find()` to traverse down to nodes. It will return wrapper objects, too.

### Simulating events

```js
wrap.find('input').simulate('click')
```

#### With event object props

```js
wrap.find('input').simulate('change', {
  target: { value: 'hello' }
})
```

## Installing

### Initial setup

```
npm install --save-dev enzyme \
  enzyme-adapter-react-16 \
  react-test-renderer
```
{: .-setup}

#### test/setup.js

```js
import Enzyme from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'

Enzyme.configure({ adapter: new Adapter() })
```

#### package.json

```js
"jest": {
  "setupFiles": [
    "test/setup.js"
  ]
}
```

This configures Enzyme for React v16, and Jest to automatically configure Enzyme for you. There are other adapters in Enzyme's installation instructions.

See: [Installation](https://airbnb.io/enzyme/#installation)

### Jest snapshots

```
npm install --save-dev enzyme-to-json
```
{: .-setup}

#### package.json

```js
"jest": {
  "snapshotSerializers": [
    "enzyme-to-json/serializer"
  ]
}
```

#### Test

```js
it('works', () => {
  wrap = mount(<MyComponent />)
  expect(wrap).toMatchSnapshot()
})
```

Optional, but recommended: This allows you to use Enzyme wrappers with Jest snapshots.

See: [enzyme-to-json](https://www.npmjs.com/package/enzyme-to-json)

## ReactWrapper

### Traversing

```js
wrap.find('button')   // → ReactWrapper
wrap.filter('button') // → ReactWrapper
wrap.not('span')      // → ReactWrapper (inverse of filter())
wrap.children()       // → ReactWrapper
wrap.parent()         // → ReactWrapper
wrap.closest('div')   // → ReactWrapper
wrap.childAt(0)       // → ReactWrapper
wrap.at(0)            // → ReactWrapper
wrap.first()          // → ReactWrapper
wrap.last()           // → ReactWrapper
```

```js
wrap.get(0)           // → ReactElement
wrap.getElement()     // → ReactElement
wrap.getElements()    // → Array<ReactElement>
wrap.getDOMNode()     // → DOMComponent
```

See: [Full rendering API](https://airbnb.io/enzyme/docs/api/mount.html)

### Actions

```js
wrap.simulate('click')
```

### React components

```js
wrap.setState({ ··· })
wrap.setProps({ ··· })
wrap.setContext({ ··· })
```

```js
wrap.state()         // get full state
wrap.props()         // get full props
wrap.context()       // get full context
```

```js
wrap.state('key')    // → any
wrap.prop('key')     // → any
wrap.context('key')  // → any
```

```js
wrap.instance()      // → ReactComponent
```

### Mount

```js
wrap.mount()
wrap.unmount()
wrap.update()      // calls forceUpdate()
```

### Tests

```js
wrap.debug()               // → string
wrap.html()                // → string
wrap.text()                // → string
wrap.type()                // → string | function
wrap.name()                // → string
wrap.is('.classname')      // → boolean
wrap.hasClass('class')     // → boolean
wrap.exists()              // → boolean
wrap.contains(<div />)     // → boolean
wrap.contains([ <div /> ]) // → boolean
wrap.some('.child')        // → boolean

wrap.someWhere(n => n.hasClass('foo'))

wrap.containsMatchingElement(<div />)         // → boolean
wrap.containsAllMatchingElements([ <div /> ]) // → boolean
wrap.containsAnyMatchingElements([ <div /> ]) // → boolean
```

## References

- [Enzyme website](https://airbnb.io/enzyme) _(airbnb.io)_
- [Enzyme v2 cheatsheet](./enzyme@2) _(devhints.io)_ (old version)


id: emmet
git_filename: ./emmet.md
format: md
field_title: Emmet
field_category: Markup
field_prism_languages: html, css
field_intro: Emmet is a markup language for expanding CSS rules into HTML
field_updated: 2020-07-03
field_updated___timezone: UTC
data:
{"title": "Emmet", "category": "Markup", "prism_languages": ["html", "css"], "updated": "2020-07-03", "intro": "Emmet is a markup language for expanding CSS rules into HTML\n", "body": "### Child: >\n\n```css\nnav>ul>li\n```\nExpands to\n```html\n<nav>\n  <ul>\n    <li></li>\n  </ul>\n</nav>\n```\n\n\n### Sibling: +\n\n```css\nsection>p+p+p\n```\nExpands to\n```html\n<section>\n  <p></p>\n  <p></p>\n  <p></p>\n</section>\n```\n\n### Climb Up: ^\n\n```css\nsection>header>h1^footer\n```\nExpands to\n```html\n<section>\n  <header>\n    <h1></h1>\n  </header>\n  <footer></footer>\n</section>\n```\n\n### Grouping: ()\n\n```css\nsection>(header>nav>ul>li)+footer>p\n```\nExpands to\n```html\n<section>\n  <header>\n    <nav>\n      <ul>\n        <li></li>\n      </ul>\n    </nav>\n  </header>\n  <footer>\n    <p></p>\n  </footer>\n</section>\n```\n\n### Multiplication: \\*\n\n```css\nul>li*3\n```\nExpands to\n```html\n<ul>\n  <li></li>\n  <li></li>\n  <li></li>\n</ul>\n```\n\n### IDs and Classes: . #\n\n```css\nul.menu>li.menu__item+li#id_item+li.menu__item#id_2\n```\nExpands to\n```html\n<ul class=\"menu\">\n  <li class=\"menu__item\"></li>\n  <li id=\"id_item\"></li>\n  <li class=\"menu__item\" id=\"id_2\"></li>\n</ul>\n```\n\n### Numbering: $\n\n```css\nul>li.item$*3\nul>li.item$$*3\nul>li.item$@-*3\nul>li.item$@3*5\n```\nExpands to\n```html\n<ul>\n  <li class=\"item1\"></li>\n  <li class=\"item2\"></li>\n  <li class=\"item3\"></li>\n</ul>\n<ul>\n  <li class=\"item01\"></li>\n  <li class=\"item02\"></li>\n  <li class=\"item03\"></li>\n</ul>\n<ul>\n  <li class=\"item3\"></li>\n  <li class=\"item2\"></li>\n  <li class=\"item1\"></li>\n</ul>\n<ul>\n  <li class=\"item3\"></li>\n  <li class=\"item4\"></li>\n  <li class=\"item5\"></li>\n</ul>\n<ul>\n  <li class=\"item3\"></li>\n  <li class=\"item4\"></li>\n  <li class=\"item5\"></li>\n  <li class=\"item6\"></li>\n  <li class=\"item7\"></li>\n</ul>\n```\n\n### Attributes: []\n\n```css\ninput[type=\"text\"]\ndiv[data-attr=\"test\"]\n```\nExpands to\n```html\n<input type=\"text\" />\n<div data-attr=\"test\"></div>\n```\n\n### Text: {}\n\n```css\np{Lorem ipsum}\n```\nExpands to\n```html\n<p>Lorem ipsum</p>\n```\n\n### Implicit tags\n\n```css\n.default-block\nem>.default-inline\nul>.default-list\ntable>.default-table-row>.default-table-column\n```\nExpands to\n```html\n<div class=\"default-block\"></div>\n<em><span class=\"default-inline\"></span></em>\n<ul>\n  <li class=\"default-list\"></li>\n</ul>\n<table>\n  <tr class=\"default-table-row\">\n    <td class=\"default-table-column\"></td>\n  </tr>\n</table>\n```"}

field_body:
### Child: >

```css
nav>ul>li
```
Expands to
```html
<nav>
  <ul>
    <li></li>
  </ul>
</nav>
```


### Sibling: +

```css
section>p+p+p
```
Expands to
```html
<section>
  <p></p>
  <p></p>
  <p></p>
</section>
```

### Climb Up: ^

```css
section>header>h1^footer
```
Expands to
```html
<section>
  <header>
    <h1></h1>
  </header>
  <footer></footer>
</section>
```

### Grouping: ()

```css
section>(header>nav>ul>li)+footer>p
```
Expands to
```html
<section>
  <header>
    <nav>
      <ul>
        <li></li>
      </ul>
    </nav>
  </header>
  <footer>
    <p></p>
  </footer>
</section>
```

### Multiplication: \*

```css
ul>li*3
```
Expands to
```html
<ul>
  <li></li>
  <li></li>
  <li></li>
</ul>
```

### IDs and Classes: . #

```css
ul.menu>li.menu__item+li#id_item+li.menu__item#id_2
```
Expands to
```html
<ul class="menu">
  <li class="menu__item"></li>
  <li id="id_item"></li>
  <li class="menu__item" id="id_2"></li>
</ul>
```

### Numbering: $

```css
ul>li.item$*3
ul>li.item$$*3
ul>li.item$@-*3
ul>li.item$@3*5
```
Expands to
```html
<ul>
  <li class="item1"></li>
  <li class="item2"></li>
  <li class="item3"></li>
</ul>
<ul>
  <li class="item01"></li>
  <li class="item02"></li>
  <li class="item03"></li>
</ul>
<ul>
  <li class="item3"></li>
  <li class="item2"></li>
  <li class="item1"></li>
</ul>
<ul>
  <li class="item3"></li>
  <li class="item4"></li>
  <li class="item5"></li>
</ul>
<ul>
  <li class="item3"></li>
  <li class="item4"></li>
  <li class="item5"></li>
  <li class="item6"></li>
  <li class="item7"></li>
</ul>
```

### Attributes: []

```css
input[type="text"]
div[data-attr="test"]
```
Expands to
```html
<input type="text" />
<div data-attr="test"></div>
```

### Text: {}

```css
p{Lorem ipsum}
```
Expands to
```html
<p>Lorem ipsum</p>
```

### Implicit tags

```css
.default-block
em>.default-inline
ul>.default-list
table>.default-table-row>.default-table-column
```
Expands to
```html
<div class="default-block"></div>
<em><span class="default-inline"></span></em>
<ul>
  <li class="default-list"></li>
</ul>
<table>
  <tr class="default-table-row">
    <td class="default-table-column"></td>
  </tr>
</table>
```


id: ember
git_filename: ./ember.md
format: md
field_title: Ember.js
field_category: JavaScript libraries
field_tags: Archived
data:
{"title": "Ember.js", "category": "JavaScript libraries", "tags": ["Archived"], "archived": "This sheet describes an older version of Ember.", "body": "{% raw %}\n\n### Routes\n\n    Router.map(function() {\n      this.route('trips', function() {\n          this.route('item', { path: '/:tripId' });\n      });\n\n      this.route('upcoming');\n      this.route('about', { path: '/aboutus' });\n      this.route('schedules');\n      this.route('history');\n      this.route('post', { path: '/post/:postId' });\n    });\n\n### A route\n\n    import Route from '@ember/routing/route';\n    \n    export default PostRoute extends Route {\n      model({ postId }) {\n        // Post will be accessible as `this.model` in the controller\n        // or `{{@model}}` in the template.\n        return this.store.find('post', postId);\n      }\n    }\n\n### Component\n    \n    import Component from '@glimmer/component';\n    import { tracked } from '@glimmer/tracking';\n    \n    export default PostEditor extends Component {\n      @tracked title;\n     \n      get fullTitle() {\n        return `Post: ${title}`;\n      }\n      \n      titleUpdate(event) {\n        this.title = event.target.value;\n      }\n    }\n\n### Template\n\n    <div ...attributes>\n        <label for=\"title\">Title</label>\n        <input\n            id=\"title\"\n            value={{@post.title}}\n            {{on 'input' this.updateTitle}}\n        />\n\n        <p>\n            {{this.fullTitle}}\n        </p>\n    </div>\n\nInvoking the component:\n\n    <PostEditor class='my-post' @post={{@model}} />\n\n\n{% endraw %}"}

field_body:
{% raw %}

### Routes

    Router.map(function() {
      this.route('trips', function() {
          this.route('item', { path: '/:tripId' });
      });

      this.route('upcoming');
      this.route('about', { path: '/aboutus' });
      this.route('schedules');
      this.route('history');
      this.route('post', { path: '/post/:postId' });
    });

### A route

    import Route from '@ember/routing/route';
    
    export default PostRoute extends Route {
      model({ postId }) {
        // Post will be accessible as `this.model` in the controller
        // or `{{@model}}` in the template.
        return this.store.find('post', postId);
      }
    }

### Component
    
    import Component from '@glimmer/component';
    import { tracked } from '@glimmer/tracking';
    
    export default PostEditor extends Component {
      @tracked title;
     
      get fullTitle() {
        return `Post: ${title}`;
      }
      
      titleUpdate(event) {
        this.title = event.target.value;
      }
    }

### Template

    <div ...attributes>
        <label for="title">Title</label>
        <input
            id="title"
            value={{@post.title}}
            {{on 'input' this.updateTitle}}
        />

        <p>
            {{this.fullTitle}}
        </p>
    </div>

Invoking the component:

    <PostEditor class='my-post' @post={{@model}} />


{% endraw %}


id: emacs
git_filename: ./emacs.md
format: md
field_title: Emacs
field_category: CLI
data:
{"title": "Emacs", "category": "CLI", "body": "### Movements\n\n   ^n ^p    # up/down\n   ^f ^b    # left/right\n\n   ^v Mv    # up/down page\n\n   ^a ^e    # begin/end of line\n   Ma Me    # begin/end of sentence\n\n### Basic\n\n   ^x ^f    # find file\n   ^x ^s    # save file\n\n### Command line\n\n   Mx\n\n### Packages\n\n   Mx package-install RET evil RET"}

field_body:
### Movements

   ^n ^p    # up/down
   ^f ^b    # left/right

   ^v Mv    # up/down page

   ^a ^e    # begin/end of line
   Ma Me    # begin/end of sentence

### Basic

   ^x ^f    # find file
   ^x ^s    # save file

### Command line

   Mx

### Packages

   Mx package-install RET evil RET


id: elixir
git_filename: ./elixir.md
format: md
field_title: Elixir
field_category: Elixir
field_tags: New
field_updated: 2018-07-04
field_updated___timezone: UTC
data:
{"title": "Elixir", "category": "Elixir", "tags": ["New"], "updated": "2018-07-04", "weight": -10, "body": "## Getting started\n{: .-three-column}\n\n### Hello world\n{: .-prime}\n\n```elixir\n# hello.exs\ndefmodule Greeter do\n  def greet(name) do\n    message = \"Hello, \" <> name <> \"!\"\n    IO.puts message\n  end\nend\n\nGreeter.greet(\"world\")\n```\n\n```bash\nelixir hello.exs\n# Hello, world!\n```\n{: .-setup}\n\n### Variables\n\n```elixir\nage = 23\n```\n\n### Maps\n\n```elixir\nuser = %{\n  name: \"John\",\n  city: \"Melbourne\"\n}\n```\n\n```elixir\nIO.puts \"Hello, \" <> user.name\n```\n{: .-setup}\n\n### Lists\n\n```elixir\nusers = [ \"Tom\", \"Dick\", \"Harry\" ]\n```\n{: data-line=\"1\"}\n\n```elixir\nEnum.map(users, fn user ->\n  IO.puts \"Hello \" <> user\nend)\n```\n\n### Piping\n\n```elixir\nsource\n|> transform(:hello)\n|> print()\n```\n{: data-line=\"2,3\"}\n\n```elixir\n# Same as:\nprint(transform(source, :hello))\n```\n\nThese two are equivalent.\n\n### Pattern matching\n\n```elixir\nuser = %{name: \"Tom\", age: 23}\n%{name: username} = user\n```\n{: data-line=\"2\"}\n\nThis sets `username` to `\"Tom\"`.\n\n### Pattern matching in functions\n\n```elixir\ndef greet(%{name: username}) do\n  IO.puts \"Hello, \" <> username\nend\n\nuser = %{name: \"Tom\", age: 23}\n```\n{: data-line=\"1\"}\n\nPattern matching works in function parameters too.\n\nControl flow\n------------\n{: .-three-column}\n\n### If\n\n```elixir\nif false do\n  \"This will never be seen\"\nelse\n  \"This will\"\nend\n```\n### Case\n\n```elixir\ncase {1, 2, 3} do\n  {4, 5, 6} ->\n    \"This clause won't match\"\n  {1, x, 3} ->\n    \"This will match and bind x to 2\"\n  _ ->\n   \"This will match any value\"\nend\n```\n\n### Cond\n\n```elixir\ncond do\n  1 + 1 == 3 ->\n    \"I will never be seen\"\n  2 * 5 == 12 ->\n    \"Me neither\"\n  true ->\n    \"But I will (this is essentially an else)\"\nend\n```\n\n### With\n\n```elixir\nwith {:ok, {int, _asdf}} <- Integer.parse(\"123asdf\"),\n     {:ok, datetime, _utc_offset} <- DateTime.from_iso8601(\"2021-10-27T12:00:00Z\") do\n  DateTime.add(datetime, int, :second)\n  # optional else clause. if not provided and an error occurs, the error is returned\nelse\n  :error -> \"couldn't parse integer string\"\n  {:error, :invalid_format} -> \"couldn't parse date string\"\n  _ -> \"this will never get hit because all errors are handled\"\nend\n```\n\n### Errors\n\n```elixir\ntry do\n  throw(:hello)\ncatch\n  message -> \"Got #{message}.\"\nafter\n  IO.puts(\"I'm the after clause.\")\nend\n```\n\n## Types\n\n### Primitives\n\n| Sample                  | Type            |\n| ---                     | ---             |\n| `nil`                   | Nil/null        |\n| `true` _/_ `false`      | Boolean         |\n| ---                     | ---             |\n| `?a`                    | Integer (ASCII) |\n| `23`                    | Integer         |\n| `3.14`                  | Float           |\n| ---                     | ---             |\n| `'hello'`               | Charlist        |\n| `<<2, 3>>`              | Binary          |\n| `\"hello\"`               | Binary string   |\n| `:hello`                | Atom            |\n| ---                     | ---             |\n| `[a, b]`                | List            |\n| `{a, b}`                | Tuple           |\n| ---                     | ---             |\n| `%{a: \"hello\"}`         | Map             |\n| `%MyStruct{a: \"hello\"}` | Struct          |\n| `fn -> ... end`         | Function        |\n\n### Type checks\n\n```elixir\nis_atom/1\nis_bitstring/1\nis_boolean/1\nis_function/1\nis_function/2\nis_integer/1\nis_float/1\n```\n\n```elixir\nis_binary/1\nis_list/1\nis_map/1\nis_tuple/1\n```\n\n```elixir\nis_nil/1\nis_number/1\nis_pid/1\nis_port/1\nis_reference/1\n```\n\n### Operators\n\n```elixir\nleft != right   # equal\nleft !== right  # match\nleft ++ right   # concat lists\nleft <> right   # concat string/binary\nleft =~ right   # regexp\n```\n\nModules\n-------\n\n### Importing\n\n```elixir\nrequire Redux   # compiles a module\nimport Redux    # compiles, and you can use without the `Redux.` prefix\n\nuse Redux       # compiles, and runs Redux.__using__/1\nuse Redux, async: true\n\nimport Redux, only: [duplicate: 2]\nimport Redux, only: :functions\nimport Redux, only: :macros\n\nimport Foo.{Bar, Baz}\n```\n\n### Aliases\n\n```elixir\nalias Foo.Bar, as: Bar\nalias Foo.Bar   # same as above\n\nalias Foo.{Bar, Baz}\n```\n\n## String\n\n### Functions\n\n```elixir\nimport String\n```\n{: .-setup}\n\n```elixir\nstr = \"hello\"\nstr |> length()        # \u2192 5\nstr |> codepoints()    # \u2192 [\"h\", \"e\", \"l\", \"l\", \"o\"]\nstr |> slice(2..-1)    # \u2192 \"llo\"\nstr |> split(\" \")      # \u2192 [\"hello\"]\nstr |> capitalize()    # \u2192 \"Hello\"\nstr |> match(regex)\n```\n\n### Inspecting objects\n\n```elixir\ninspect(object, opts \\\\ [])\n```\n```elixir\nvalue |> IO.inspect()\n```\n```elixir\nvalue |> IO.inspect(label: \"value\")\n```\n\n## Numbers\n\n### Operations\n\n```elixir\nabs(n)\nround(n)\nrem(a, b)   # remainder (modulo)\ndiv(a, b)   # integer division\n```\n\n### Float\n\n```elixir\nimport Float\n```\n{: .-setup}\n\n```elixir\nn = 10.3\n```\n{: .-setup}\n\n```elixir\nn |> ceil()            # \u2192 11.0\nn |> ceil(2)           # \u2192 11.30\nn |> to_string()       # \u2192 \"1.030000+e01\"\nn |> to_string([decimals: 2, compact: true])\n```\n\n```elixir\nFloat.parse(\"34\")  # \u2192 { 34.0, \"\" }\n```\n\n### Integer\n\n```elixir\nimport Integer\n```\n{: .-setup}\n\n```elixir\nn = 12\n```\n{: .-setup}\n\n```elixir\nn |> digits()         # \u2192 [1, 2]\nn |> to_charlist()    # \u2192 '12'\nn |> to_string()      # \u2192 \"12\"\nn |> is_even()\nn |> is_odd()\n```\n\n```elixir\n# Different base:\nn |> digits(2)        # \u2192 [1, 1, 0, 0]\nn |> to_charlist(2)   # \u2192 '1100'\nn |> to_string(2)     # \u2192 \"1100\"\n```\n\n```elixir\nparse(\"12\")           # \u2192 {12, \"\"}\nundigits([1, 2])      # \u2192 12\n```\n\n### Type casting\n\n```elixir\nFloat.parse(\"34.1\")    # \u2192 {34.1, \"\"}\nInteger.parse(\"34\")    # \u2192 {34, \"\"}\n```\n\n```elixir\nFloat.to_string(34.1)  # \u2192 \"3.4100e+01\"\nFloat.to_string(34.1, [decimals: 2, compact: true])  # \u2192 \"34.1\"\n```\n\n## Map\n\n### Defining\n\n```elixir\nm = %{name: \"hi\"}       # atom keys (:name)\nm = %{\"name\" => \"hi\"}   # string keys (\"name\")\n```\n\n### Updating\n\n```elixir\nimport Map\n```\n{: .-setup}\n\n```elixir\nm = %{m | name: \"yo\"}  # key must exist\n```\n\n```elixir\nm |> put(:id, 2)      # \u2192 %{id: 2, name: \"hi\"}\nm |> put_new(:id, 2)  # only if `id` doesn't exist (`||=`)\n```\n\n```elixir\nm |> put(:b, \"Banana\")\nm |> merge(%{b: \"Banana\"})\nm |> update(:a, &(&1 + 1))\nm |> update(:a, fun a -> a + 1 end)\n```\n\n```elixir\nm |> get_and_update(:a, &(&1 || \"default\"))\n# \u2192 {old, new}\n```\n\n### Deleting\n\n```elixir\nm |> delete(:name)  # \u2192 %{}\nm |> pop(:name)     # \u2192 {\"John\", %{}}\n```\n\n### Reading\n\n```elixir\nm |> get(:id)       # \u2192 1\nm |> keys()         # \u2192 [:id, :name]\nm |> values()       # \u2192 [1, \"hi\"]\n```\n\n```elixir\nm |> to_list()      # \u2192 [id: 1, name: \"hi\"]\n                    # \u2192 [{:id, 1}, {:name, \"hi\"}]\n```\n\n### Deep\n\n```elixir\nput_in(map, [:b, :c], \"Banana\")\nput_in(map[:b][:c], \"Banana\")    # via macros\n```\n\n```elixir\nget_and_update_in(users, [\"john\", :age], &{&1, &1 + 1})\n```\n\n### Constructing from lists\n\n```elixir\nMap.new([{:b, 1}, {:a, 2}])\nMap.new([a: 1, b: 2])\nMap.new([:a, :b], fn x -> {x, x} end)  # \u2192 %{a: :a, b: :b}\n```\n\n### Working with structs\n\n#### Struct to map\n\n```elixir\nMap.from_struct(%AnyStruct{a: \"b\"})  # \u2192 %{a: \"b\"}\n```\n\n#### Map to struct\n\n```elixir\nstruct(AnyStruct, %{a: \"b\"})  # \u2192 %AnyStruct{a: \"b\"}\n```\n\n## List\n\n```elixir\nimport List\n```\n{: .-setup}\n\n```elixir\nl = [ 1, 2, 3, 4 ]\n```\n{: .-setup}\n\n```elixir\nl = l ++ [5]         # push (append)\nl = [ 0 | list ]     # unshift (prepend)\n```\n\n```elixir\nl |> first()\nl |> last()\n```\n\n```elixir\nl |> flatten()\nl |> flatten(tail)\n```\n\nAlso see [Enum](#enum).\n\n\n## Enum\n\n### Usage\n\n```elixir\nimport Enum\n```\n{: .-setup}\n\n```elixir\nlist = [:a, :b, :c]\n```\n{: .-setup}\n\n```elixir\nlist |> at(0)         # \u2192 :a\nlist |> count()       # \u2192 3\nlist |> empty?()      # \u2192 false\nlist |> any?()        # \u2192 true\n```\n\n```elixir\nlist |> concat([:d])  # \u2192 [:a, :b, :c, :d]\n```\n\nAlso, consider streams instead.\n\n### Map/reduce\n\n```elixir\nlist |> reduce(fn)\nlist |> reduce(acc, fn)\nlist |> map(fn)\nlist |> reject(fn)\nlist |> any?(fn)\nlist |> empty?(fn)\n```\n\n```elixir\n[1, 2, 3, 4]\n|> Enum.reduce(0, fn(x, acc) -> x + acc end)\n```\n\n## Tuple\n\n### Tuples\n\n```elixir\nimport Tuple\n```\n{: .-setup}\n\n```elixir\nt = { :a, :b }\n```\n\n```elixir\nt |> elem(1)    # like tuple[1]\nt |> put_elem(index, value)\nt |> tuple_size()\n```\n\n### Keyword lists\n\n```elixir\nlist = [{ :name, \"John\" }, { :age, 15 }]\nlist[:name]\n```\n\n```elixir\n# For string-keyed keyword lists\nlist = [{\"size\", 2}, {\"type\", \"shoe\"}]\nList.keyfind(list, \"size\", 0)  # \u2192 {\"size\", 2}\n```\n\n## Functions\n\n### Lambdas\n\n```elixir\nsquare = fn n -> n*n end\nsquare.(20)\n```\n\n### & syntax\n\n```elixir\nsquare = &(&1 * &1)\nsquare.(20)\n\nsquare = &Math.square/1\n```\n\n### Running\n\n```elixir\nfun.(args)\napply(fun, args)\napply(module, fun, args)\n```\n\n### Function heads\n\n```elixir\ndef join(a, b \\\\ nil)\ndef join(a, b) when is_nil(b) do: a\ndef join(a, b) do: a <> b\n```\n\n## Structs\n\n### Structs\n\n```elixir\ndefmodule User do\n  defstruct name: \"\", age: nil\nend\n\n%User{name: \"John\", age: 20}\n\n%User{}.struct  # \u2192 User\n```\n\nSee: [Structs](http://elixir-lang.org/getting-started/structs.html)\n\n## Protocols\n\n### Defining protocols\n\n```elixir\ndefprotocol Blank do\n  @doc \"Returns true if data is considered blank/empty\"\n  def blank?(data)\nend\n```\n\n```elixir\ndefimpl Blank, for: List do\n  def blank?([]), do: true\n  def blank?(_), do: false\nend\n\nBlank.blank?([])  # \u2192 true\n```\n\n### Any\n\n```elixir\ndefimpl Blank, for: Any do ... end\n\ndefmodule User do\n  @derive Blank     # Falls back to Any\n  defstruct name: \"\"\nend\n```\n\n### Examples\n\n- `Enumerable` and `Enum.map()`\n- `Inspect` and `inspect()`\n\n## Comprehensions\n\n### For\n\n```elixir\nfor n <- [1, 2, 3, 4], do: n * n\nfor n <- 1..4, do: n * n\n```\n\n```elixir\nfor {key, val} <- %{a: 10, b: 20}, do: val\n# \u2192 [10, 20]\n```\n\n```elixir\nfor {key, val} <- %{a: 10, b: 20}, into: %{}, do: {key, val*val}\n```\n\n### Conditions\n\n```elixir\nfor n <- 1..10, rem(n, 2) == 0, do: n\n# \u2192 [2, 4, 6, 8, 10]\n```\n\n### Complex\n\n```elixir\nfor dir <- dirs,\n    file <- File.ls!(dir),          # nested comprehension\n    path = Path.join(dir, file),    # invoked\n    File.regular?(path) do          # condition\n  IO.puts(file)\nend\n```\n\n## Misc\n\n### Metaprogramming\n\n```elixir\n__MODULE__\n__MODULE__.__info__\n\n@after_compile __MODULE__\ndef __before_compile__(env)\ndef __after_compile__(env, _bytecode)\ndef __using__(opts)    # invoked on `use`\n\n@on_definition {__MODULE__, :on_def}\ndef on_def(_env, kind, name, args, guards, body)\n\n@on_load :load_check\ndef load_check\n```\n\n### Regexp\n\n```elixir\nexp = ~r/hello/\nexp = ~r/hello/i\n\"hello world\" =~ exp\n```\n\n### Sigils\n\n```elixir\n~r/regexp/\n~w(list of strings)\n~s|strings with #{interpolation} and \\x20 escape codes|\n~S|no interpolation and no escapes|\n~c(charlist)\n```\n\nAllowed chars: `/` `|` `\"` `'` `(` `[` `{` `<` `\"\"\"`.\nSee: [Sigils](http://elixir-lang.org/getting-started/sigils.html)\n\n### Type specs\n\n```elixir\n@spec round(number) :: integer\n\n@type number_with_remark :: {number, String.t}\n@spec add(number, number) :: number_with_remark\n```\n\nUseful for [dialyzer](http://www.erlang.org/doc/man/dialyzer.html).\nSee: [Typespecs](http://elixir-lang.org/getting-started/typespecs-and-behaviours.html)\n\n### Behaviours\n\n```elixir\ndefmodule Parser do\n  @callback parse(String.t) :: any\n  @callback extensions() :: [String.t]\nend\n```\n\n```elixir\ndefmodule JSONParser do\n  @behaviour Parser\n\n  def parse(str), do: # ... parse JSON\n  def extensions, do: [\"json\"]\nend\n```\n\nSee: [Module](http://elixir-lang.org/docs/stable/elixir/Module.html)\n\n## References\n{: .-one-column}\n\n- [Learn Elixir in Y minutes](https://learnxinyminutes.com/docs/elixir/)"}

field_body:
## Getting started
{: .-three-column}

### Hello world
{: .-prime}

```elixir
# hello.exs
defmodule Greeter do
  def greet(name) do
    message = "Hello, " <> name <> "!"
    IO.puts message
  end
end

Greeter.greet("world")
```

```bash
elixir hello.exs
# Hello, world!
```
{: .-setup}

### Variables

```elixir
age = 23
```

### Maps

```elixir
user = %{
  name: "John",
  city: "Melbourne"
}
```

```elixir
IO.puts "Hello, " <> user.name
```
{: .-setup}

### Lists

```elixir
users = [ "Tom", "Dick", "Harry" ]
```
{: data-line="1"}

```elixir
Enum.map(users, fn user ->
  IO.puts "Hello " <> user
end)
```

### Piping

```elixir
source
|> transform(:hello)
|> print()
```
{: data-line="2,3"}

```elixir
# Same as:
print(transform(source, :hello))
```

These two are equivalent.

### Pattern matching

```elixir
user = %{name: "Tom", age: 23}
%{name: username} = user
```
{: data-line="2"}

This sets `username` to `"Tom"`.

### Pattern matching in functions

```elixir
def greet(%{name: username}) do
  IO.puts "Hello, " <> username
end

user = %{name: "Tom", age: 23}
```
{: data-line="1"}

Pattern matching works in function parameters too.

Control flow
------------
{: .-three-column}

### If

```elixir
if false do
  "This will never be seen"
else
  "This will"
end
```
### Case

```elixir
case {1, 2, 3} do
  {4, 5, 6} ->
    "This clause won't match"
  {1, x, 3} ->
    "This will match and bind x to 2"
  _ ->
   "This will match any value"
end
```

### Cond

```elixir
cond do
  1 + 1 == 3 ->
    "I will never be seen"
  2 * 5 == 12 ->
    "Me neither"
  true ->
    "But I will (this is essentially an else)"
end
```

### With

```elixir
with {:ok, {int, _asdf}} <- Integer.parse("123asdf"),
     {:ok, datetime, _utc_offset} <- DateTime.from_iso8601("2021-10-27T12:00:00Z") do
  DateTime.add(datetime, int, :second)
  # optional else clause. if not provided and an error occurs, the error is returned
else
  :error -> "couldn't parse integer string"
  {:error, :invalid_format} -> "couldn't parse date string"
  _ -> "this will never get hit because all errors are handled"
end
```

### Errors

```elixir
try do
  throw(:hello)
catch
  message -> "Got #{message}."
after
  IO.puts("I'm the after clause.")
end
```

## Types

### Primitives

| Sample                  | Type            |
| ---                     | ---             |
| `nil`                   | Nil/null        |
| `true` _/_ `false`      | Boolean         |
| ---                     | ---             |
| `?a`                    | Integer (ASCII) |
| `23`                    | Integer         |
| `3.14`                  | Float           |
| ---                     | ---             |
| `'hello'`               | Charlist        |
| `<<2, 3>>`              | Binary          |
| `"hello"`               | Binary string   |
| `:hello`                | Atom            |
| ---                     | ---             |
| `[a, b]`                | List            |
| `{a, b}`                | Tuple           |
| ---                     | ---             |
| `%{a: "hello"}`         | Map             |
| `%MyStruct{a: "hello"}` | Struct          |
| `fn -> ... end`         | Function        |

### Type checks

```elixir
is_atom/1
is_bitstring/1
is_boolean/1
is_function/1
is_function/2
is_integer/1
is_float/1
```

```elixir
is_binary/1
is_list/1
is_map/1
is_tuple/1
```

```elixir
is_nil/1
is_number/1
is_pid/1
is_port/1
is_reference/1
```

### Operators

```elixir
left != right   # equal
left !== right  # match
left ++ right   # concat lists
left <> right   # concat string/binary
left =~ right   # regexp
```

Modules
-------

### Importing

```elixir
require Redux   # compiles a module
import Redux    # compiles, and you can use without the `Redux.` prefix

use Redux       # compiles, and runs Redux.__using__/1
use Redux, async: true

import Redux, only: [duplicate: 2]
import Redux, only: :functions
import Redux, only: :macros

import Foo.{Bar, Baz}
```

### Aliases

```elixir
alias Foo.Bar, as: Bar
alias Foo.Bar   # same as above

alias Foo.{Bar, Baz}
```

## String

### Functions

```elixir
import String
```
{: .-setup}

```elixir
str = "hello"
str |> length()        # → 5
str |> codepoints()    # → ["h", "e", "l", "l", "o"]
str |> slice(2..-1)    # → "llo"
str |> split(" ")      # → ["hello"]
str |> capitalize()    # → "Hello"
str |> match(regex)
```

### Inspecting objects

```elixir
inspect(object, opts \\ [])
```
```elixir
value |> IO.inspect()
```
```elixir
value |> IO.inspect(label: "value")
```

## Numbers

### Operations

```elixir
abs(n)
round(n)
rem(a, b)   # remainder (modulo)
div(a, b)   # integer division
```

### Float

```elixir
import Float
```
{: .-setup}

```elixir
n = 10.3
```
{: .-setup}

```elixir
n |> ceil()            # → 11.0
n |> ceil(2)           # → 11.30
n |> to_string()       # → "1.030000+e01"
n |> to_string([decimals: 2, compact: true])
```

```elixir
Float.parse("34")  # → { 34.0, "" }
```

### Integer

```elixir
import Integer
```
{: .-setup}

```elixir
n = 12
```
{: .-setup}

```elixir
n |> digits()         # → [1, 2]
n |> to_charlist()    # → '12'
n |> to_string()      # → "12"
n |> is_even()
n |> is_odd()
```

```elixir
# Different base:
n |> digits(2)        # → [1, 1, 0, 0]
n |> to_charlist(2)   # → '1100'
n |> to_string(2)     # → "1100"
```

```elixir
parse("12")           # → {12, ""}
undigits([1, 2])      # → 12
```

### Type casting

```elixir
Float.parse("34.1")    # → {34.1, ""}
Integer.parse("34")    # → {34, ""}
```

```elixir
Float.to_string(34.1)  # → "3.4100e+01"
Float.to_string(34.1, [decimals: 2, compact: true])  # → "34.1"
```

## Map

### Defining

```elixir
m = %{name: "hi"}       # atom keys (:name)
m = %{"name" => "hi"}   # string keys ("name")
```

### Updating

```elixir
import Map
```
{: .-setup}

```elixir
m = %{m | name: "yo"}  # key must exist
```

```elixir
m |> put(:id, 2)      # → %{id: 2, name: "hi"}
m |> put_new(:id, 2)  # only if `id` doesn't exist (`||=`)
```

```elixir
m |> put(:b, "Banana")
m |> merge(%{b: "Banana"})
m |> update(:a, &(&1 + 1))
m |> update(:a, fun a -> a + 1 end)
```

```elixir
m |> get_and_update(:a, &(&1 || "default"))
# → {old, new}
```

### Deleting

```elixir
m |> delete(:name)  # → %{}
m |> pop(:name)     # → {"John", %{}}
```

### Reading

```elixir
m |> get(:id)       # → 1
m |> keys()         # → [:id, :name]
m |> values()       # → [1, "hi"]
```

```elixir
m |> to_list()      # → [id: 1, name: "hi"]
                    # → [{:id, 1}, {:name, "hi"}]
```

### Deep

```elixir
put_in(map, [:b, :c], "Banana")
put_in(map[:b][:c], "Banana")    # via macros
```

```elixir
get_and_update_in(users, ["john", :age], &{&1, &1 + 1})
```

### Constructing from lists

```elixir
Map.new([{:b, 1}, {:a, 2}])
Map.new([a: 1, b: 2])
Map.new([:a, :b], fn x -> {x, x} end)  # → %{a: :a, b: :b}
```

### Working with structs

#### Struct to map

```elixir
Map.from_struct(%AnyStruct{a: "b"})  # → %{a: "b"}
```

#### Map to struct

```elixir
struct(AnyStruct, %{a: "b"})  # → %AnyStruct{a: "b"}
```

## List

```elixir
import List
```
{: .-setup}

```elixir
l = [ 1, 2, 3, 4 ]
```
{: .-setup}

```elixir
l = l ++ [5]         # push (append)
l = [ 0 | list ]     # unshift (prepend)
```

```elixir
l |> first()
l |> last()
```

```elixir
l |> flatten()
l |> flatten(tail)
```

Also see [Enum](#enum).


## Enum

### Usage

```elixir
import Enum
```
{: .-setup}

```elixir
list = [:a, :b, :c]
```
{: .-setup}

```elixir
list |> at(0)         # → :a
list |> count()       # → 3
list |> empty?()      # → false
list |> any?()        # → true
```

```elixir
list |> concat([:d])  # → [:a, :b, :c, :d]
```

Also, consider streams instead.

### Map/reduce

```elixir
list |> reduce(fn)
list |> reduce(acc, fn)
list |> map(fn)
list |> reject(fn)
list |> any?(fn)
list |> empty?(fn)
```

```elixir
[1, 2, 3, 4]
|> Enum.reduce(0, fn(x, acc) -> x + acc end)
```

## Tuple

### Tuples

```elixir
import Tuple
```
{: .-setup}

```elixir
t = { :a, :b }
```

```elixir
t |> elem(1)    # like tuple[1]
t |> put_elem(index, value)
t |> tuple_size()
```

### Keyword lists

```elixir
list = [{ :name, "John" }, { :age, 15 }]
list[:name]
```

```elixir
# For string-keyed keyword lists
list = [{"size", 2}, {"type", "shoe"}]
List.keyfind(list, "size", 0)  # → {"size", 2}
```

## Functions

### Lambdas

```elixir
square = fn n -> n*n end
square.(20)
```

### & syntax

```elixir
square = &(&1 * &1)
square.(20)

square = &Math.square/1
```

### Running

```elixir
fun.(args)
apply(fun, args)
apply(module, fun, args)
```

### Function heads

```elixir
def join(a, b \\ nil)
def join(a, b) when is_nil(b) do: a
def join(a, b) do: a <> b
```

## Structs

### Structs

```elixir
defmodule User do
  defstruct name: "", age: nil
end

%User{name: "John", age: 20}

%User{}.struct  # → User
```

See: [Structs](http://elixir-lang.org/getting-started/structs.html)

## Protocols

### Defining protocols

```elixir
defprotocol Blank do
  @doc "Returns true if data is considered blank/empty"
  def blank?(data)
end
```

```elixir
defimpl Blank, for: List do
  def blank?([]), do: true
  def blank?(_), do: false
end

Blank.blank?([])  # → true
```

### Any

```elixir
defimpl Blank, for: Any do ... end

defmodule User do
  @derive Blank     # Falls back to Any
  defstruct name: ""
end
```

### Examples

- `Enumerable` and `Enum.map()`
- `Inspect` and `inspect()`

## Comprehensions

### For

```elixir
for n <- [1, 2, 3, 4], do: n * n
for n <- 1..4, do: n * n
```

```elixir
for {key, val} <- %{a: 10, b: 20}, do: val
# → [10, 20]
```

```elixir
for {key, val} <- %{a: 10, b: 20}, into: %{}, do: {key, val*val}
```

### Conditions

```elixir
for n <- 1..10, rem(n, 2) == 0, do: n
# → [2, 4, 6, 8, 10]
```

### Complex

```elixir
for dir <- dirs,
    file <- File.ls!(dir),          # nested comprehension
    path = Path.join(dir, file),    # invoked
    File.regular?(path) do          # condition
  IO.puts(file)
end
```

## Misc

### Metaprogramming

```elixir
__MODULE__
__MODULE__.__info__

@after_compile __MODULE__
def __before_compile__(env)
def __after_compile__(env, _bytecode)
def __using__(opts)    # invoked on `use`

@on_definition {__MODULE__, :on_def}
def on_def(_env, kind, name, args, guards, body)

@on_load :load_check
def load_check
```

### Regexp

```elixir
exp = ~r/hello/
exp = ~r/hello/i
"hello world" =~ exp
```

### Sigils

```elixir
~r/regexp/
~w(list of strings)
~s|strings with #{interpolation} and \x20 escape codes|
~S|no interpolation and no escapes|
~c(charlist)
```

Allowed chars: `/` `|` `"` `'` `(` `[` `{` `<` `"""`.
See: [Sigils](http://elixir-lang.org/getting-started/sigils.html)

### Type specs

```elixir
@spec round(number) :: integer

@type number_with_remark :: {number, String.t}
@spec add(number, number) :: number_with_remark
```

Useful for [dialyzer](http://www.erlang.org/doc/man/dialyzer.html).
See: [Typespecs](http://elixir-lang.org/getting-started/typespecs-and-behaviours.html)

### Behaviours

```elixir
defmodule Parser do
  @callback parse(String.t) :: any
  @callback extensions() :: [String.t]
end
```

```elixir
defmodule JSONParser do
  @behaviour Parser

  def parse(str), do: # ... parse JSON
  def extensions, do: ["json"]
end
```

See: [Module](http://elixir-lang.org/docs/stable/elixir/Module.html)

## References
{: .-one-column}

- [Learn Elixir in Y minutes](https://learnxinyminutes.com/docs/elixir/)


id: elixir-metaprogramming
git_filename: ./elixir-metaprogramming.md
format: md
field_title: Elixir metaprogramming
field_category: Elixir
data:
{"title": "Elixir metaprogramming", "category": "Elixir", "body": "### Kernel\n\nMost of these magic is defined in [Kernel.SpecialForms](http://devdocs.io/elixir/elixir/kernel.specialforms).\n\n### Pseudo-variables\n\n```elixir\n__DIR__     # current dir\n__MODULE__  # current module\n__CALLER__  # caller of the function\n```\n\n### [`__ENV__`](http://devdocs.io/elixir/elixir/kernel.specialforms#__ENV__/0)\n\n```elixir\nMap.keys(__ENV__)\n[:__struct__, :aliases, :context, :context_modules, :export_vars, :file,\n :function, :functions, :lexical_tracker, :line, :macro_aliases, :macros,\n :module, :requires, :vars]\n```\n\n```elixir\n__CALLER__.module |> Module.definitions_in |> IO.inspect\n```\n\n```elixir\napply(Enum, :reverse, [[1, 2, 3]])\n```"}

field_body:
### Kernel

Most of these magic is defined in [Kernel.SpecialForms](http://devdocs.io/elixir/elixir/kernel.specialforms).

### Pseudo-variables

```elixir
__DIR__     # current dir
__MODULE__  # current module
__CALLER__  # caller of the function
```

### [`__ENV__`](http://devdocs.io/elixir/elixir/kernel.specialforms#__ENV__/0)

```elixir
Map.keys(__ENV__)
[:__struct__, :aliases, :context, :context_modules, :export_vars, :file,
 :function, :functions, :lexical_tracker, :line, :macro_aliases, :macros,
 :module, :requires, :vars]
```

```elixir
__CALLER__.module |> Module.definitions_in |> IO.inspect
```

```elixir
apply(Enum, :reverse, [[1, 2, 3]])
```


id: editorconfig
git_filename: ./editorconfig.md
format: md
field_title: editorconfig
field_category: Apps
field_prism_languages: ini
field_updated: 2019-09-25
field_updated___timezone: UTC
data:
{"title": "editorconfig", "prism_languages": ["ini"], "weight": -1, "updated": "2019-09-25", "category": "Apps", "body": "### Short example\n{: .-prime}\n\n```ini\n# editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\ntab_width = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n```\n\nThis example should be fine for most projects indented by 2 spaces. See: [animate.css editorconfig](https://github.com/daneden/animate.css/blob/master/.editorconfig)\n\n### Properties\n\n```ini\nindent_style = {space|tab}\nindent_size = {4|tab}\ntab_width = 2\nend_of_line = {cr|lf|crlf}\ncharset = {utf-8|utf-16be|utf-16le|latin1}\ntrim_trailing_whitespace = false\ninsert_final_newline = true\nmax_line_length = 80\n```\n\n### Full example\n\n```ini\n# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines with a newline ending every file\n[*]\nend_of_line = lf\ninsert_final_newline = true\n\n# 4 space indentation\n[*.py]\nindent_style = space\nindent_size = 4\n\n# Tab indentation (no size specified)\n[*.js]\nindent_style = tab\n\n# Indentation override for all JS under lib directory\n[lib/**.js]\nindent_style = space\nindent_size = 2\n\n# Matches the exact files either package.json or .travis.yml\n[{package.json,.travis.yml}]\nindent_style = space\nindent_size = 2\n```\n\n### References\n\n- <https://EditorConfig.org>"}

field_body:
### Short example
{: .-prime}

```ini
# editorconfig.org
root = true

[*]
indent_style = space
indent_size = 2
tab_width = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
```

This example should be fine for most projects indented by 2 spaces. See: [animate.css editorconfig](https://github.com/daneden/animate.css/blob/master/.editorconfig)

### Properties

```ini
indent_style = {space|tab}
indent_size = {4|tab}
tab_width = 2
end_of_line = {cr|lf|crlf}
charset = {utf-8|utf-16be|utf-16le|latin1}
trim_trailing_whitespace = false
insert_final_newline = true
max_line_length = 80
```

### Full example

```ini
# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

# 4 space indentation
[*.py]
indent_style = space
indent_size = 4

# Tab indentation (no size specified)
[*.js]
indent_style = tab

# Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2

# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2
```

### References

- <https://EditorConfig.org>


id: dom-selection
git_filename: ./dom-selection.md
format: md
field_title: DOM Selection
field_category: JavaScript
field_intro: Quick introduction to the HTML [DOM selection API](https://devdocs.io/dom/selection).
data:
{"title": "DOM Selection", "category": "JavaScript", "intro": "Quick introduction to the HTML [DOM selection API](https://devdocs.io/dom/selection).\n", "body": "## Reference\n{: .-three-column}\n\n### Selection\n\n```js\nvar sel = document.getSelection()\n```\n\nSee: <https://devdocs.io/dom/selection>\n\n### Methods\n\n```js\nsel.removeAllRanges() //  deselects\nsel.addRange(range) //    sets a selection\nsel.removeRange(range) // remove a range\n```\n\n```js\nsel.rangeCount\nsel.getRangeAt(0) // get the 0th range\n```\n\n### Collapsing\n\n```js\nsel.collapse(parent, offset)\nsel.collapseToEnd()\nsel.collapseToStart()\nsel.isCollapsed\n```\n\n```js\nsel.containsNode(node)\n```\n\n### Deleting\n\n```js\nsel.deleteFromDocument()\n```\n\n### Events\n\n```js\ndocument.addEventListener('selectionchange', () => {})\n```"}

field_body:
## Reference
{: .-three-column}

### Selection

```js
var sel = document.getSelection()
```

See: <https://devdocs.io/dom/selection>

### Methods

```js
sel.removeAllRanges() //  deselects
sel.addRange(range) //    sets a selection
sel.removeRange(range) // remove a range
```

```js
sel.rangeCount
sel.getRangeAt(0) // get the 0th range
```

### Collapsing

```js
sel.collapse(parent, offset)
sel.collapseToEnd()
sel.collapseToStart()
sel.isCollapsed
```

```js
sel.containsNode(node)
```

### Deleting

```js
sel.deleteFromDocument()
```

### Events

```js
document.addEventListener('selectionchange', () => {})
```


id: dom-range
git_filename: ./dom-range.md
format: md
field_title: DOM Range
field_category: JavaScript
field_intro: Quick reference to the HTML [DOM createRange API](https://devdocs.io/dom/range).
data:
{"title": "DOM Range", "category": "JavaScript", "intro": "Quick reference to the HTML [DOM createRange API](https://devdocs.io/dom/range).\n", "body": "## Reference\n{:.-three-column}\n\n### Creating ranges\n\n```js\nvar range = document.createRange()\n```\n\nSee: <https://devdocs.io/dom/document/createrange>\n\n## Methods\n\n```js\nrange\n  .setStart(startNode, startOffset)\n  .setEnd(endNode, endOffset)\n\n  .setStartBefore(node)\n  .setStartAfter(node)\n  .setEndBefore(node)\n  .setEndAfter(node)\n\n  .selectNode(node)\n  .selectNodeContents(node)\n```\n\nSee: <https://devdocs.io/dom/range>\n\n### Collapsing\n\n```js\nrange.collapse() // to end (a single point)\nrange.collapse(true) // to start (a single point)\nrange.collapsed // true | false\n```\n\n### Operations\n\n```js\nrange.cloneContents() // copy => DocumentFragment\nrange.extractContents() // cut  => DocumentFragment\nrange.deleteContents() // delete\n```\n\n```js\nrange.insertNode(node)\n```\n\n### String\n\n```js\nrange.toString()\n```\n\n### Read-only attributes\n\n```js\nrange.collapsed //       => true/false\nrange.startContainer //  => Node\nrange.startOffset\nrange.endContainer //    => Node\nrange.endOffset\nrange.commonAncestorContainer // closest of start and end containers\n```"}

field_body:
## Reference
{:.-three-column}

### Creating ranges

```js
var range = document.createRange()
```

See: <https://devdocs.io/dom/document/createrange>

## Methods

```js
range
  .setStart(startNode, startOffset)
  .setEnd(endNode, endOffset)

  .setStartBefore(node)
  .setStartAfter(node)
  .setEndBefore(node)
  .setEndAfter(node)

  .selectNode(node)
  .selectNodeContents(node)
```

See: <https://devdocs.io/dom/range>

### Collapsing

```js
range.collapse() // to end (a single point)
range.collapse(true) // to start (a single point)
range.collapsed // true | false
```

### Operations

```js
range.cloneContents() // copy => DocumentFragment
range.extractContents() // cut  => DocumentFragment
range.deleteContents() // delete
```

```js
range.insertNode(node)
```

### String

```js
range.toString()
```

### Read-only attributes

```js
range.collapsed //       => true/false
range.startContainer //  => Node
range.startOffset
range.endContainer //    => Node
range.endOffset
range.commonAncestorContainer // closest of start and end containers
```


id: dockerfile
git_filename: ./dockerfile.md
format: md
field_title: Dockerfile
field_category: Devops
field_prism_languages: docker
field_updated: 2019-10-20
field_updated___timezone: UTC
data:
{"title": "Dockerfile", "category": "Devops", "prism_languages": ["docker"], "updated": "2019-10-20", "body": "## Reference\n{: .-three-column}\n\n### Inheritance\n\n```docker\nFROM ruby:2.2.2\n```\n\n### Variables\n\n```docker\nENV APP_HOME /myapp\nRUN mkdir $APP_HOME\n```\n\n```docker\nARG APP_HOME=\"\"\nRUN mkdir $APP_HOME\n```\n\n### Initialization\n\n```docker\nRUN bundle install\n```\n\n```docker\nWORKDIR /myapp\n```\n\n```docker\nVOLUME [\"/data\"]\n# Specification for mount point\n```\n\n```docker\nADD file.xyz /file.xyz\nCOPY --chown=user:group host_file.xyz /path/container_file.xyz\n```\n\n### Run commands in strict shell\n\n```docker\nENV my_var\nSHELL [\"/bin/bash\", \"-euo\", \"pipefail\", \"-c\"]\n\n# With strict mode:\nRUN false # fails build like using &&\nRUN echo \"$myvar\" # will throw error due to typo\nRUN true | false # will bail out of pipe\n```\n\nUsing `shell` will turn on strict mode for shell commands.\n\n### Onbuild\n\n```docker\nONBUILD RUN bundle install\n# when used with another file\n```\n\n### Commands\n\n```docker\nEXPOSE 5900\nCMD    [\"bundle\", \"exec\", \"rails\", \"server\"]\n```\n\n### Entrypoint\n\n```docker\nENTRYPOINT [\"executable\", \"param1\", \"param2\"]\nENTRYPOINT command param1 param2\n```\n\nConfigures a container that will run as an executable.\n\n```docker\nENTRYPOINT exec top -b\n```\n\nThis will use shell processing to substitute shell variables, and will ignore any `CMD` or `docker run` command line arguments.\n\n### Metadata\n\n```docker\nLABEL version=\"1.0\"\n```\n\n```docker\nLABEL \"com.example.vendor\"=\"ACME Incorporated\"\nLABEL com.example.label-with-value=\"foo\"\n```\n\n```docker\nLABEL description=\"This text illustrates \\\nthat label-values can span multiple lines.\"\n```\n\n## See also\n{: .-one-column}\n\n- <https://docs.docker.com/engine/reference/builder/>"}

field_body:
## Reference
{: .-three-column}

### Inheritance

```docker
FROM ruby:2.2.2
```

### Variables

```docker
ENV APP_HOME /myapp
RUN mkdir $APP_HOME
```

```docker
ARG APP_HOME=""
RUN mkdir $APP_HOME
```

### Initialization

```docker
RUN bundle install
```

```docker
WORKDIR /myapp
```

```docker
VOLUME ["/data"]
# Specification for mount point
```

```docker
ADD file.xyz /file.xyz
COPY --chown=user:group host_file.xyz /path/container_file.xyz
```

### Run commands in strict shell

```docker
ENV my_var
SHELL ["/bin/bash", "-euo", "pipefail", "-c"]

# With strict mode:
RUN false # fails build like using &&
RUN echo "$myvar" # will throw error due to typo
RUN true | false # will bail out of pipe
```

Using `shell` will turn on strict mode for shell commands.

### Onbuild

```docker
ONBUILD RUN bundle install
# when used with another file
```

### Commands

```docker
EXPOSE 5900
CMD    ["bundle", "exec", "rails", "server"]
```

### Entrypoint

```docker
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
```

Configures a container that will run as an executable.

```docker
ENTRYPOINT exec top -b
```

This will use shell processing to substitute shell variables, and will ignore any `CMD` or `docker run` command line arguments.

### Metadata

```docker
LABEL version="1.0"
```

```docker
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
```

```docker
LABEL description="This text illustrates \
that label-values can span multiple lines."
```

## See also
{: .-one-column}

- <https://docs.docker.com/engine/reference/builder/>


id: docker
git_filename: ./docker.md
format: md
field_title: Docker CLI
field_category: Devops
data:
{"title": "Docker CLI", "category": "Devops", "body": "Manage images\n-------------\n\n### `docker build`\n\n```yml\ndocker build [options] .\n  -t \"app/container_name\"    # name\n  --build-arg APP_HOME=$APP_HOME    # Set build-time variables\n```\n\nCreate an `image` from a Dockerfile.\n\n\n### `docker run`\n\n```yml\ndocker run [options] IMAGE\n  # see `docker create` for options\n```\n\n#### Example\n\n```\n$ docker run -it debian:buster /bin/bash\n```\nRun a command in an `image`.\n\nManage containers\n-----------------\n\n### `docker create`\n\n```yml\ndocker create [options] IMAGE\n  -a, --attach               # attach stdout/err\n  -i, --interactive          # attach stdin (interactive)\n  -t, --tty                  # pseudo-tty\n      --name NAME            # name your image\n  -p, --publish 5000:5000    # port map (host:container)\n      --expose 5432          # expose a port to linked containers\n  -P, --publish-all          # publish all ports\n      --link container:alias # linking\n  -v, --volume `pwd`:/app    # mount (absolute paths needed)\n  -e, --env NAME=hello       # env vars\n```\n\n#### Example\n\n```\n$ docker create --name app_redis_1 \\\n  --expose 6379 \\\n  redis:3.0.2\n```\n\nCreate a `container` from an `image`.\n\n### `docker exec`\n\n```yml\ndocker exec [options] CONTAINER COMMAND\n  -d, --detach        # run in background\n  -i, --interactive   # stdin\n  -t, --tty           # interactive\n```\n\n#### Example\n\n```\n$ docker exec app_web_1 tail logs/development.log\n$ docker exec -t -i app_web_1 rails c\n```\n\nRun commands in a `container`.\n\n\n### `docker start`\n\n```yml\ndocker start [options] CONTAINER\n  -a, --attach        # attach stdout/err\n  -i, --interactive   # attach stdin\n\ndocker stop [options] CONTAINER\n```\n\nStart/stop a `container`.\n\n\n### `docker ps`\n\n```\n$ docker ps\n$ docker ps -a\n$ docker kill $ID\n```\n\nManage `container`s using ps/kill.\n\n\n### `docker logs`\n\n```\n$ docker logs $ID\n$ docker logs $ID 2>&1 | less\n$ docker logs -f $ID # Follow log output\n```\n\nSee what's being logged in an `container`.\n\n\nImages\n------\n\n### `docker images`\n\n```sh\n$ docker images\n  REPOSITORY   TAG        ID\n  ubuntu       12.10      b750fe78269d\n  me/myapp     latest     7b2431a8d968\n```\n\n```sh\n$ docker images -a   # also show intermediate\n```\n\nManages `image`s.\n\n### `docker rmi`\n\n```yml\ndocker rmi b750fe78269d\n```\n\nDeletes `image`s.\n\n## Clean up\n\n### Clean all\n\n```sh\ndocker system prune\n```\n\nCleans up dangling images, containers, volumes, and networks (ie, not associated with a container)\n\n```sh\ndocker system prune -a\n```\n\nAdditionally remove any stopped containers and all unused images (not just dangling images)\n\n### Containers\n\n```sh\n# Stop all running containers\ndocker stop $(docker ps -a -q)\n\n# Delete stopped containers\ndocker container prune\n```\n\n### Images\n\n```sh\ndocker image prune [-a]\n```\n\nDelete all the images\n\n### Volumes\n\n```sh\ndocker volume prune\n```\n\nDelete all the volumes\n\n### Systems\n\n```sh\ndocker system df\n```\n\nShow docker disk usage\n\n```sh\ndocker system events\n```\n\nGet real time events from the server\n\n```sh\ndocker system info\n```\n\nDisplay system-wide information\n\n\n\nAlso see\n--------\n\n * [Getting Started](https://www.docker.io/gettingstarted/) _(docker.io)_"}

field_body:
Manage images
-------------

### `docker build`

```yml
docker build [options] .
  -t "app/container_name"    # name
  --build-arg APP_HOME=$APP_HOME    # Set build-time variables
```

Create an `image` from a Dockerfile.


### `docker run`

```yml
docker run [options] IMAGE
  # see `docker create` for options
```

#### Example

```
$ docker run -it debian:buster /bin/bash
```
Run a command in an `image`.

Manage containers
-----------------

### `docker create`

```yml
docker create [options] IMAGE
  -a, --attach               # attach stdout/err
  -i, --interactive          # attach stdin (interactive)
  -t, --tty                  # pseudo-tty
      --name NAME            # name your image
  -p, --publish 5000:5000    # port map (host:container)
      --expose 5432          # expose a port to linked containers
  -P, --publish-all          # publish all ports
      --link container:alias # linking
  -v, --volume `pwd`:/app    # mount (absolute paths needed)
  -e, --env NAME=hello       # env vars
```

#### Example

```
$ docker create --name app_redis_1 \
  --expose 6379 \
  redis:3.0.2
```

Create a `container` from an `image`.

### `docker exec`

```yml
docker exec [options] CONTAINER COMMAND
  -d, --detach        # run in background
  -i, --interactive   # stdin
  -t, --tty           # interactive
```

#### Example

```
$ docker exec app_web_1 tail logs/development.log
$ docker exec -t -i app_web_1 rails c
```

Run commands in a `container`.


### `docker start`

```yml
docker start [options] CONTAINER
  -a, --attach        # attach stdout/err
  -i, --interactive   # attach stdin

docker stop [options] CONTAINER
```

Start/stop a `container`.


### `docker ps`

```
$ docker ps
$ docker ps -a
$ docker kill $ID
```

Manage `container`s using ps/kill.


### `docker logs`

```
$ docker logs $ID
$ docker logs $ID 2>&1 | less
$ docker logs -f $ID # Follow log output
```

See what's being logged in an `container`.


Images
------

### `docker images`

```sh
$ docker images
  REPOSITORY   TAG        ID
  ubuntu       12.10      b750fe78269d
  me/myapp     latest     7b2431a8d968
```

```sh
$ docker images -a   # also show intermediate
```

Manages `image`s.

### `docker rmi`

```yml
docker rmi b750fe78269d
```

Deletes `image`s.

## Clean up

### Clean all

```sh
docker system prune
```

Cleans up dangling images, containers, volumes, and networks (ie, not associated with a container)

```sh
docker system prune -a
```

Additionally remove any stopped containers and all unused images (not just dangling images)

### Containers

```sh
# Stop all running containers
docker stop $(docker ps -a -q)

# Delete stopped containers
docker container prune
```

### Images

```sh
docker image prune [-a]
```

Delete all the images

### Volumes

```sh
docker volume prune
```

Delete all the volumes

### Systems

```sh
docker system df
```

Show docker disk usage

```sh
docker system events
```

Get real time events from the server

```sh
docker system info
```

Display system-wide information



Also see
--------

 * [Getting Started](https://www.docker.io/gettingstarted/) _(docker.io)_


id: docker-compose
git_filename: ./docker-compose.md
format: md
field_title: docker-compose
field_category: Devops
field_prism_languages: yaml
field_updated: 2024-04-03
field_updated___timezone: UTC
data:
{"title": "docker-compose", "category": "Devops", "prism_languages": ["yaml"], "weight": -1, "updated": "2024-04-03", "body": "### Basic example\n\n```yaml\n# docker-compose.yml\nversion: '2'\n\nservices:\n  web:\n    build:\n    # build from Dockerfile\n      context: ./Path\n      dockerfile: Dockerfile\n    ports:\n     - \"5000:5000\"\n    volumes:\n     - .:/code\n  redis:\n    image: redis\n```\n\n\n### Version 1 to 2\n\nDocker compose is now integrated into the official Docker installation. The functionality only improved over that change, and the simple syntax change is : V1 : `docker-compose ARG` to V2 `docker compose ARG`\nMore on that here : [Docker Compose](https://docs.docker.com/compose/) [Migrate to V2](https://docs.docker.com/compose/migrate/)\n\n### Commands\n\n\n```sh\ndocker compose version \ndocker compose config    \n```\n\n```sh\ndocker compose start\ndocker compose stop\ndocker compose restart\ndocker compose run    \n```\n\n```sh\ndocker compose create  \ndocker compose attach      \ndocker compose pause\ndocker compose unpause\n```\n\n```sh\ndocker compose wait   \ndocker compose up\ndocker compose down\n```\n\n```sh \ndocker compose ps\ndocker compose top \ndocker compose events   \ndocker compose logs\n```\n\n\n```sh\ndocker compose images\ndocker compose build      \ndocker compose push  \ndocker compose cp       \ndocker compose exec \n```\n\n## Reference\n{: .-three-column}\n\n### Building\n\n```yaml\nweb:\n  # build from Dockerfile\n  build: .\n  args:     # Add build arguments\n    APP_HOME: app\n```\n\n```yaml\n  # build from custom Dockerfile\n  build:\n    context: ./dir\n    dockerfile: Dockerfile.dev\n```\n\n```yaml\n  # build from image\n  image: ubuntu\n  image: ubuntu:14.04\n  image: tutum/influxdb\n  image: example-registry:4000/postgresql\n  image: a4bc65fd\n```\n\n### Ports\n\n```yaml\n  ports:\n    - \"3000\"\n    - \"8000:80\"  # host:container\n```\n\n```yaml\n  # expose ports to linked services (not to host)\n  expose: [\"3000\"]\n```\n\n### Commands\n\n```yaml\n  # command to execute\n  command: bundle exec thin -p 3000\n  command: [bundle, exec, thin, -p, 3000]\n```\n\n```yaml\n  # override the entrypoint\n  entrypoint: /app/start.sh\n  entrypoint: [php, -d, vendor/bin/phpunit]\n```\n\n### Environment variables\n\n```yaml\n  # environment vars\n  environment:\n    RACK_ENV: development\n  environment:\n    - RACK_ENV=development\n```\n\n```yaml\n  # environment vars from file\n  env_file: .env\n  env_file: [.env, .development.env]\n```\n\n### Dependencies\n\n```yaml\n  # makes the `db` service available as the hostname `database`\n  # (implies depends_on)\n  links:\n    - db:database\n    - redis\n```\n\n```yaml\n  # make sure `db` is alive before starting\n  depends_on:\n    - db\n```\n\n```yaml\n  # make sure `db` is healty before starting\n  # and db-init completed without failure\n  depends_on:\n    db:\n      condition: service_healthy\n    db-init:\n      condition: service_completed_successfully\n```\n\n### Other options\n\n```yaml\n  # make this service extend another\n  extends:\n    file: common.yml  # optional\n    service: webapp\n```\n\n```yaml\n  volumes:\n    - /var/lib/mysql\n    - ./_data:/var/lib/mysql\n```\n\n```yaml\n  # automatically restart container\n  restart: unless-stopped\n  # always, on-failure, no (default)\n```\n\n## Advanced features\n{: .-three-column}\n\n### Labels\n\n```yaml\nservices:\n  web:\n    labels:\n      com.example.description: \"Accounting web app\"\n```\n\n### DNS servers\n\n```yaml\nservices:\n  web:\n    dns: 8.8.8.8\n    dns:\n      - 8.8.8.8\n      - 8.8.4.4\n```\n\n### Devices\n\n```yaml\nservices:\n  web:\n    devices:\n    - \"/dev/ttyUSB0:/dev/ttyUSB0\"\n```\n\n### External links\n\n```yaml\nservices:\n  web:\n    external_links:\n      - redis_1\n      - project_db_1:mysql\n```\n\n### Healthcheck\n\n```yaml\n    # declare service healthy when `test` command succeed\n    healthcheck:\n      test: [\"CMD\", \"curl\", \"-f\", \"http://localhost\"]\n      interval: 1m30s\n      timeout: 10s\n      retries: 3\n      start_period: 40s\n```\n\n### Hosts\n\n```yaml\nservices:\n  web:\n    extra_hosts:\n      - \"somehost:192.168.1.100\"\n```\n\n### Network\n\n```yaml\n# creates a custom network called `frontend`\nnetworks:\n  frontend:\n```\n\n### External network\n\n```yaml\n# join a pre-existing network\nnetworks:\n  default:\n    external:\n      name: frontend\n```\n\n### Volume\n\n```yaml\n# mount host paths or named volumes, specified as sub-options to a service\n  db:\n    image: postgres:latest\n    volumes:\n      - \"/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock\"\n      - \"dbdata:/var/lib/postgresql/data\"\n\nvolumes:\n  dbdata:\n```\n\n### User\n\n```yaml\n# specifying user\nuser: root\n```\n\n```yaml\n# specifying both user and group with ids\nuser: 0:0\n```"}

field_body:
### Basic example

```yaml
# docker-compose.yml
version: '2'

services:
  web:
    build:
    # build from Dockerfile
      context: ./Path
      dockerfile: Dockerfile
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: redis
```


### Version 1 to 2

Docker compose is now integrated into the official Docker installation. The functionality only improved over that change, and the simple syntax change is : V1 : `docker-compose ARG` to V2 `docker compose ARG`
More on that here : [Docker Compose](https://docs.docker.com/compose/) [Migrate to V2](https://docs.docker.com/compose/migrate/)

### Commands


```sh
docker compose version 
docker compose config    
```

```sh
docker compose start
docker compose stop
docker compose restart
docker compose run    
```

```sh
docker compose create  
docker compose attach      
docker compose pause
docker compose unpause
```

```sh
docker compose wait   
docker compose up
docker compose down
```

```sh 
docker compose ps
docker compose top 
docker compose events   
docker compose logs
```


```sh
docker compose images
docker compose build      
docker compose push  
docker compose cp       
docker compose exec 
```

## Reference
{: .-three-column}

### Building

```yaml
web:
  # build from Dockerfile
  build: .
  args:     # Add build arguments
    APP_HOME: app
```

```yaml
  # build from custom Dockerfile
  build:
    context: ./dir
    dockerfile: Dockerfile.dev
```

```yaml
  # build from image
  image: ubuntu
  image: ubuntu:14.04
  image: tutum/influxdb
  image: example-registry:4000/postgresql
  image: a4bc65fd
```

### Ports

```yaml
  ports:
    - "3000"
    - "8000:80"  # host:container
```

```yaml
  # expose ports to linked services (not to host)
  expose: ["3000"]
```

### Commands

```yaml
  # command to execute
  command: bundle exec thin -p 3000
  command: [bundle, exec, thin, -p, 3000]
```

```yaml
  # override the entrypoint
  entrypoint: /app/start.sh
  entrypoint: [php, -d, vendor/bin/phpunit]
```

### Environment variables

```yaml
  # environment vars
  environment:
    RACK_ENV: development
  environment:
    - RACK_ENV=development
```

```yaml
  # environment vars from file
  env_file: .env
  env_file: [.env, .development.env]
```

### Dependencies

```yaml
  # makes the `db` service available as the hostname `database`
  # (implies depends_on)
  links:
    - db:database
    - redis
```

```yaml
  # make sure `db` is alive before starting
  depends_on:
    - db
```

```yaml
  # make sure `db` is healty before starting
  # and db-init completed without failure
  depends_on:
    db:
      condition: service_healthy
    db-init:
      condition: service_completed_successfully
```

### Other options

```yaml
  # make this service extend another
  extends:
    file: common.yml  # optional
    service: webapp
```

```yaml
  volumes:
    - /var/lib/mysql
    - ./_data:/var/lib/mysql
```

```yaml
  # automatically restart container
  restart: unless-stopped
  # always, on-failure, no (default)
```

## Advanced features
{: .-three-column}

### Labels

```yaml
services:
  web:
    labels:
      com.example.description: "Accounting web app"
```

### DNS servers

```yaml
services:
  web:
    dns: 8.8.8.8
    dns:
      - 8.8.8.8
      - 8.8.4.4
```

### Devices

```yaml
services:
  web:
    devices:
    - "/dev/ttyUSB0:/dev/ttyUSB0"
```

### External links

```yaml
services:
  web:
    external_links:
      - redis_1
      - project_db_1:mysql
```

### Healthcheck

```yaml
    # declare service healthy when `test` command succeed
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3
      start_period: 40s
```

### Hosts

```yaml
services:
  web:
    extra_hosts:
      - "somehost:192.168.1.100"
```

### Network

```yaml
# creates a custom network called `frontend`
networks:
  frontend:
```

### External network

```yaml
# join a pre-existing network
networks:
  default:
    external:
      name: frontend
```

### Volume

```yaml
# mount host paths or named volumes, specified as sub-options to a service
  db:
    image: postgres:latest
    volumes:
      - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
      - "dbdata:/var/lib/postgresql/data"

volumes:
  dbdata:
```

### User

```yaml
# specifying user
user: root
```

```yaml
# specifying both user and group with ids
user: 0:0
```


id: do
git_filename: ./do.md
format: md
field_title: Do gem
field_category: Ruby libraries
data:
{"title": "Do gem", "category": "Ruby libraries", "body": "### About\n{: .-intro}\n\n * [DAddYE/do](https://github.com/DAddYE/do)\n\n### Connection\n\n    server = DO::Server.new('srv1', 'srv1.domain.local', 'root', :key => \n        %w[srv1.pem]\n    \n### Run\n    server.run 'uname'\n    # root@srv1 ~ # uname\n    # Linux\n    \n    server.run 'uname', '-a'\n    # root@srv1 ~ # uname -a\n    # Linux srv1.lipsiasoft.net 2.6.18-194.32.1.el5  x86_64 x86_64 x86_64 GNU/Linux\n    \n    server.run 'mysqladmin -u root -p password \"oldone\"', 'newpassword'\n    # root@srv1 ~ # mysqladmin -u root -p password 'oldone'\n    # Enter password: oldone\n    # mysqladmin: connect to server at 'localhost' failed\n    # error: 'Access denied for user 'root'@'localhost' (using password: YES)'\n    \n### Files\n\n    server.exist?('~/.ssh')\n    # root@srv1 ~ # test -e ~/.ssh && echo True\n    # => true\n    \n    server.read('/etc/redhat-release')\n    # root@srv1 ~ # cat /etc/redhat-release\n    # => \"CentOS release 5.5 (Final)\"\n\n### Upload/download\n\n    server.upload '/tmp/file', '/tmp/foo'\n    # root@srv1 ~ # upload from '/tmp/file' to '/tmp/foo'\n    \n    server.download '/tmp/foo', '/tmp/file2'\n    # root@srv1 ~ # download from '/tmp/foo' to '/tmp/file2'\n    \n### Replace\n\n    server.replace :all, 'new content', '/tmp/file'\n    # root@srv1 ~ # replace all in '/tmp/foo'\n    \n    server.read('/tmp/foo')\n    # root@srv1 ~ # cat /tmp/foo\n    # => \"new content\"\n    \n### Replace via regex\n\n    server.replace /content$/, 'changed content', '/tmp/foo'\n    # root@srv1 ~ # replace /content$/ in '/tmp/foo'\n    \n    server.read('/tmp/foo')\n    # root@srv1 ~ # cat /tmp/foo\n    # => \"new changed content\"\n    \n### Append\n\n    server.append('appended', '/tmp/foo')\n    # root@srv1 ~ # append to 'bottom' in '/tmp/foo'\n    \n    server.read('/tmp/foo')\n    # root@srv1 ~ # cat /tmp/foo\n    # => \"new changed contentappended\"\n    \n### Append to top\n\n    server.append('---', '/tmp/foo', :top)\n    # root@srv1 ~ # append to 'top' in '/tmp/foo'\n    \n    server.read('/tmp/foo')\n    # root@srv1 ~ # cat /tmp/foo\n    # => \"---new changed contentappended\"\n    \n### Prompt\n    \n    server.ask \"Please choose\"\n    # root@srv1 ~ # Please choose: foo\n    # => \"foo\"\n    \n    server.yes? \"Do you want to proceed\"\n    # root@srv1 ~ # Do you want to proceed? (y/n): y\n    # => 0\n    \n    server.wait\n    # Press ENTER to continue..."}

field_body:
### About
{: .-intro}

 * [DAddYE/do](https://github.com/DAddYE/do)

### Connection

    server = DO::Server.new('srv1', 'srv1.domain.local', 'root', :key => 
        %w[srv1.pem]
    
### Run
    server.run 'uname'
    # root@srv1 ~ # uname
    # Linux
    
    server.run 'uname', '-a'
    # root@srv1 ~ # uname -a
    # Linux srv1.lipsiasoft.net 2.6.18-194.32.1.el5  x86_64 x86_64 x86_64 GNU/Linux
    
    server.run 'mysqladmin -u root -p password "oldone"', 'newpassword'
    # root@srv1 ~ # mysqladmin -u root -p password 'oldone'
    # Enter password: oldone
    # mysqladmin: connect to server at 'localhost' failed
    # error: 'Access denied for user 'root'@'localhost' (using password: YES)'
    
### Files

    server.exist?('~/.ssh')
    # root@srv1 ~ # test -e ~/.ssh && echo True
    # => true
    
    server.read('/etc/redhat-release')
    # root@srv1 ~ # cat /etc/redhat-release
    # => "CentOS release 5.5 (Final)"

### Upload/download

    server.upload '/tmp/file', '/tmp/foo'
    # root@srv1 ~ # upload from '/tmp/file' to '/tmp/foo'
    
    server.download '/tmp/foo', '/tmp/file2'
    # root@srv1 ~ # download from '/tmp/foo' to '/tmp/file2'
    
### Replace

    server.replace :all, 'new content', '/tmp/file'
    # root@srv1 ~ # replace all in '/tmp/foo'
    
    server.read('/tmp/foo')
    # root@srv1 ~ # cat /tmp/foo
    # => "new content"
    
### Replace via regex

    server.replace /content$/, 'changed content', '/tmp/foo'
    # root@srv1 ~ # replace /content$/ in '/tmp/foo'
    
    server.read('/tmp/foo')
    # root@srv1 ~ # cat /tmp/foo
    # => "new changed content"
    
### Append

    server.append('appended', '/tmp/foo')
    # root@srv1 ~ # append to 'bottom' in '/tmp/foo'
    
    server.read('/tmp/foo')
    # root@srv1 ~ # cat /tmp/foo
    # => "new changed contentappended"
    
### Append to top

    server.append('---', '/tmp/foo', :top)
    # root@srv1 ~ # append to 'top' in '/tmp/foo'
    
    server.read('/tmp/foo')
    # root@srv1 ~ # cat /tmp/foo
    # => "---new changed contentappended"
    
### Prompt
    
    server.ask "Please choose"
    # root@srv1 ~ # Please choose: foo
    # => "foo"
    
    server.yes? "Do you want to proceed"
    # root@srv1 ~ # Do you want to proceed? (y/n): y
    # => 0
    
    server.wait
    # Press ENTER to continue...


id: divshot
git_filename: ./divshot.md
format: md
field_title: Divshot
field_tags: Archived
data:
{"title": "Divshot", "tags": ["Archived"], "archived": "Divshot is no longer in operation.", "body": "## Getting started\n\n### About\n\nDivshot was a static hosting platform.\n\n- <https://divshot.com/>\n\n### Install divshot-cli\n\n```\n$ npm install -g divshot-cli\n$ divshot login\n```\n\n### Create divshot.json\n\n```json\n{\n  \"name\": \"yourapp\",\n  \"root\": \"./app\"\n}\n```\n\n### Push your app\n\n```\n$ divshot push\n```\n\n## Configuration\n\nSee [configuration reference](https://docs.divshot.com/guides/configuration) and [routing guide](https://docs.divshot.com/guides/routing).\n\n```json\n{\n  \"name\": \"yourapp\",\n  \"root\": \"./app\",\n  \"clean_urls\": true,\n  \"clean_urls\": [\"/app/**\", \"/!components/**\"],,\n  \"error_page\": \"error.html\",\n  \"exclude\": [ \"Gruntfile.js\" ],\n  \"cache_control\": {},\n  \"routes\": {\n    \"/*.html\": \"index.html\",\n    \"/app/**/*.html\": \"app.html\",\n    \"**\": \"index.html\"\n  },\n  \"redirects\": {\n    \"/old/:segment/path\": \"/new/path/:segment\",\n    \"/some/old/path\": {\n      \"status\": 302,\n      \"url\": \"/some/new/path\"\n    }\n  },\n  \"headers\": {\n    \"/cors-stuff/**\": {\n      \"Access-Control-Allow-Origin\": \"*\"\n    },\n    \"/scripts/**\": {\n      \"content-type\": \"text/javascript\"\n    }\n  }\n}\n```\n\n## CLI\n\n```sh\ndivshot s   # server\n\ndivshot push [staging|production|development]\ndivshot pull [staging|production|development]\ndivshot purge   # cleans cache\ndivshot files\n\ndivshot promote development production\n\ndivshot open [<env>]\n```\n\n### Config\nEdits `divshot.json`\n\n```\n\ndivshot config:add name your-app-name\ndivshot config:remove name\n```\n\n### Environment vars\n\n```\ndivshot env:add <env> KEY=value\ndivshot env:remove <env> KEY\ndivshot env:pull <env>\n```\n\n### App management\n\n```\ndivshot create <appname>\ndivshot rename <newname>\ndivshot status\ndivshot destroy\n```\n\ndivshot apps\ndivshot account\n```\n\n### Password protect\n\n```sh\ndivshot protect <env> <username:password>\n```\n\n## Custom domains\n\nSee [custom domains guide](http://docs.divshot.com/guides/domains).\n\n```sh\ndivshot domains:add foo.bar.com\n```\n\nIn your DNS create a `CNAME`: (no apex domains are supported)\n\n```\nwww.    CNAME    yourname.divshot.io\n```"}

field_body:
## Getting started

### About

Divshot was a static hosting platform.

- <https://divshot.com/>

### Install divshot-cli

```
$ npm install -g divshot-cli
$ divshot login
```

### Create divshot.json

```json
{
  "name": "yourapp",
  "root": "./app"
}
```

### Push your app

```
$ divshot push
```

## Configuration

See [configuration reference](https://docs.divshot.com/guides/configuration) and [routing guide](https://docs.divshot.com/guides/routing).

```json
{
  "name": "yourapp",
  "root": "./app",
  "clean_urls": true,
  "clean_urls": ["/app/**", "/!components/**"],,
  "error_page": "error.html",
  "exclude": [ "Gruntfile.js" ],
  "cache_control": {},
  "routes": {
    "/*.html": "index.html",
    "/app/**/*.html": "app.html",
    "**": "index.html"
  },
  "redirects": {
    "/old/:segment/path": "/new/path/:segment",
    "/some/old/path": {
      "status": 302,
      "url": "/some/new/path"
    }
  },
  "headers": {
    "/cors-stuff/**": {
      "Access-Control-Allow-Origin": "*"
    },
    "/scripts/**": {
      "content-type": "text/javascript"
    }
  }
}
```

## CLI

```sh
divshot s   # server

divshot push [staging|production|development]
divshot pull [staging|production|development]
divshot purge   # cleans cache
divshot files

divshot promote development production

divshot open [<env>]
```

### Config
Edits `divshot.json`

```

divshot config:add name your-app-name
divshot config:remove name
```

### Environment vars

```
divshot env:add <env> KEY=value
divshot env:remove <env> KEY
divshot env:pull <env>
```

### App management

```
divshot create <appname>
divshot rename <newname>
divshot status
divshot destroy
```

divshot apps
divshot account
```

### Password protect

```sh
divshot protect <env> <username:password>
```

## Custom domains

See [custom domains guide](http://docs.divshot.com/guides/domains).

```sh
divshot domains:add foo.bar.com
```

In your DNS create a `CNAME`: (no apex domains are supported)

```
www.    CNAME    yourname.divshot.io
```


id: devise
git_filename: ./devise.md
format: md
field_title: Devise
data:
{"title": "Devise", "body": "### About\n{: .-intro}\n\n[Devise](https://github.com/plataformatec/devise) is a flexible authentication \ngem.\n\n- <https://github.com/plataformatec/devise>\n\n### Installation\n\nRails 3: Add the following to your Gemfile\n\n    gem \"devise\"\n    gem \"hpricot\"\n    gem \"ruby_parser\"\n\nInstall devise in your project\n\n    $ rails generate devise:install\n\nGenerate devise for your model\n\n    $ rails generate devise MODEL\n    $ rake db:migrate\n\n(Optional) Generate devise views\n\n    $ rails generate devise:views\n\n### Helpers\n\n    user_signed_in?\n    current_user\n    user_session\n    destroy_user_session_path (Logout)\n    new_user_session_path (Login)\n    edit_user_registration_path (Edit registration)\n    new_user_registration_path (Register new user)\n\n### Controller stuff\n\n    before_filter :authenticate_user!\n\nModel\n-----\n\n### Model options\n\n    class User < ActiveRecord::Base\n      devise :database_authenticatable,\n        :registerable,\n        :confirmable,\n        :recoverable,\n        :rememberable,\n        :trackable,\n        :validatable\n    end\n\n### Migration helpers\n\n    create_table :users do |t|\n      t.database_authenticatable\n      t.confirmable\n      t.recoverable\n      t.rememberable\n      t.trackable\n      t.timestamps\n    end\n\nRouting\n-------\n\n### Authenticated and unauthenticated routes\n\n    unauthenticated do\n       root :to => 'home#index'\n    end\n\n    authenticated do\n      root :to => 'dashboard#index'\n    end\n\n### As\n    as :user do\n      get 'sign_in', :to => 'devise/sessions#new'\n    end\n\n### Devise_for magic\n  \n    devise_for :users\n\n        # Session routes for Authenticatable (default)\n             new_user_session GET  /users/sign_in                    {:controller=>\"devise/sessions\", :action=>\"new\"}\n                 user_session POST /users/sign_in                    {:controller=>\"devise/sessions\", :action=>\"create\"}\n         destroy_user_session GET  /users/sign_out                   {:controller=>\"devise/sessions\", :action=>\"destroy\"}\n       \n        # Password routes for Recoverable, if User model has :recoverable configured\n            new_user_password GET  /users/password/new(.:format)     {:controller=>\"devise/passwords\", :action=>\"new\"}\n           edit_user_password GET  /users/password/edit(.:format)    {:controller=>\"devise/passwords\", :action=>\"edit\"}\n                user_password PUT  /users/password(.:format)         {:controller=>\"devise/passwords\", :action=>\"update\"}\n                              POST /users/password(.:format)         {:controller=>\"devise/passwords\", :action=>\"create\"}\n       \n        # Confirmation routes for Confirmable, if User model has :confirmable configured\n        new_user_confirmation GET  /users/confirmation/new(.:format) {:controller=>\"devise/confirmations\", :action=>\"new\"}\n            user_confirmation GET  /users/confirmation(.:format)     {:controller=>\"devise/confirmations\", :action=>\"show\"}\n                              POST /users/confirmation(.:format)     {:controller=>\"devise/confirmations\", :action=>\"create\"}\n\n### Customizing devise_for\n\n    devise_for :users,\n      :path => \"usuarios\",\n      :path_names => {\n        :sign_in => 'login',\n        :sign_out => 'logout',\n        :password => 'secret',\n        :confirmation => 'verification',\n        :unlock => 'unblock',\n        :registration => 'register',\n        :sign_up => 'cmon_let_me_in' }\n\nTest helpers\n------------\n\n### Test helpers\n\n    include Devise::TestHelpers\n\n    sign_in @user\n    sign_out @user\n\nSee: <https://github.com/plataformatec/devise/blob/1094ba65aac1d37713f2cba71f9edad76b5ca274/lib/devise/test_helpers.rb>"}

field_body:
### About
{: .-intro}

[Devise](https://github.com/plataformatec/devise) is a flexible authentication 
gem.

- <https://github.com/plataformatec/devise>

### Installation

Rails 3: Add the following to your Gemfile

    gem "devise"
    gem "hpricot"
    gem "ruby_parser"

Install devise in your project

    $ rails generate devise:install

Generate devise for your model

    $ rails generate devise MODEL
    $ rake db:migrate

(Optional) Generate devise views

    $ rails generate devise:views

### Helpers

    user_signed_in?
    current_user
    user_session
    destroy_user_session_path (Logout)
    new_user_session_path (Login)
    edit_user_registration_path (Edit registration)
    new_user_registration_path (Register new user)

### Controller stuff

    before_filter :authenticate_user!

Model
-----

### Model options

    class User < ActiveRecord::Base
      devise :database_authenticatable,
        :registerable,
        :confirmable,
        :recoverable,
        :rememberable,
        :trackable,
        :validatable
    end

### Migration helpers

    create_table :users do |t|
      t.database_authenticatable
      t.confirmable
      t.recoverable
      t.rememberable
      t.trackable
      t.timestamps
    end

Routing
-------

### Authenticated and unauthenticated routes

    unauthenticated do
       root :to => 'home#index'
    end

    authenticated do
      root :to => 'dashboard#index'
    end

### As
    as :user do
      get 'sign_in', :to => 'devise/sessions#new'
    end

### Devise_for magic
  
    devise_for :users

        # Session routes for Authenticatable (default)
             new_user_session GET  /users/sign_in                    {:controller=>"devise/sessions", :action=>"new"}
                 user_session POST /users/sign_in                    {:controller=>"devise/sessions", :action=>"create"}
         destroy_user_session GET  /users/sign_out                   {:controller=>"devise/sessions", :action=>"destroy"}
       
        # Password routes for Recoverable, if User model has :recoverable configured
            new_user_password GET  /users/password/new(.:format)     {:controller=>"devise/passwords", :action=>"new"}
           edit_user_password GET  /users/password/edit(.:format)    {:controller=>"devise/passwords", :action=>"edit"}
                user_password PUT  /users/password(.:format)         {:controller=>"devise/passwords", :action=>"update"}
                              POST /users/password(.:format)         {:controller=>"devise/passwords", :action=>"create"}
       
        # Confirmation routes for Confirmable, if User model has :confirmable configured
        new_user_confirmation GET  /users/confirmation/new(.:format) {:controller=>"devise/confirmations", :action=>"new"}
            user_confirmation GET  /users/confirmation(.:format)     {:controller=>"devise/confirmations", :action=>"show"}
                              POST /users/confirmation(.:format)     {:controller=>"devise/confirmations", :action=>"create"}

### Customizing devise_for

    devise_for :users,
      :path => "usuarios",
      :path_names => {
        :sign_in => 'login',
        :sign_out => 'logout',
        :password => 'secret',
        :confirmation => 'verification',
        :unlock => 'unblock',
        :registration => 'register',
        :sign_up => 'cmon_let_me_in' }

Test helpers
------------

### Test helpers

    include Devise::TestHelpers

    sign_in @user
    sign_out @user

See: <https://github.com/plataformatec/devise/blob/1094ba65aac1d37713f2cba71f9edad76b5ca274/lib/devise/test_helpers.rb>


id: deku@1
git_filename: ./deku@1.md
format: md
field_title: Deku v1
field_category: JavaScript libraries
data:
{"title": "Deku v1", "category": "JavaScript libraries", "intro": "Quick reference for [Deku](https://www.npmjs.com/package/deku), a minimal virtual DOM library. **Deprecated:** This is for Deku v1. See [deku](./deku) for a more updated cheatsheet.\n", "body": "### Example\n\n```js\n/** @jsx element */\nimport element from 'virtual-element' // replacement for React.createElement\nimport { render, tree } from 'deku'\n\nvar app = <div class='my-app'>Hello World!</div>\n\nrender(tree(app), document.body)\n```\n\n### Components\n\n```js\nButton = {\n  render() {\n    return <button>Submit</button>\n  }\n}\n\nApp = {\n  render() {\n    return (\n      <div>\n        <Button />\n      </div>\n    )\n  }\n}\n\nrender(tree(<App />), document.body)\nrender(tree(element(App)), document.body)\n```\n\n### Component props/state\n\n```js\nApp = {\n  render ({ props, state }) {\n    return <div>{ /*...use state.store here*/ }</div>\n  }\n\n  initialState (props) {\n    return { store: store.getState() }\n  },\n\n  afterMount (comp, el, setState) {\n    store.subscribe(() => setState({ store: store.getState() }))\n  }\n}\n\nrender(tree(<App />), document.body)\n```\n\n### Events\n\n```js\n<a onClick={onClick}>{props.text}</a>\n```\n\n### Magic virtual element\n\nUse [magic-virtual-element](https://github.com/dekujs/magic-virtual-element) to enable nice classnames.\n\n```\nimport element from 'magic-virtual-element'\n<div style={style} class={[ 'button', '-active' ]}>\n```\n\n### Reference\n\n```\nname = 'MyComponent'\n\n// Defaults\ninitialState (props) {...} // return initial state\ndefaultProps = { hi: 'hello' }\n\n// Render\nrender ({props, state}, setState) {...}\n\n// Lifecycle\nbeforeUpdate  ({props, state, id}, nextProps, nextState) {}\nafterRender   ({props, state, id}, el) {}\nafterUpdate   ({props, state, id}, prevProps, prevState, setState) {}\nafterMount    ({props, state, id}, el, setState) {}\nbeforeUnmount ({props, state, id}, el) {}\n```\n\nSee: <https://www.npmjs.com/package/deku>"}

field_intro:
Quick reference for [Deku](https://www.npmjs.com/package/deku), a minimal virtual DOM library. **Deprecated:** This is for Deku v1. See [deku](./deku) for a more updated cheatsheet.

field_body:
### Example

```js
/** @jsx element */
import element from 'virtual-element' // replacement for React.createElement
import { render, tree } from 'deku'

var app = <div class='my-app'>Hello World!</div>

render(tree(app), document.body)
```

### Components

```js
Button = {
  render() {
    return <button>Submit</button>
  }
}

App = {
  render() {
    return (
      <div>
        <Button />
      </div>
    )
  }
}

render(tree(<App />), document.body)
render(tree(element(App)), document.body)
```

### Component props/state

```js
App = {
  render ({ props, state }) {
    return <div>{ /*...use state.store here*/ }</div>
  }

  initialState (props) {
    return { store: store.getState() }
  },

  afterMount (comp, el, setState) {
    store.subscribe(() => setState({ store: store.getState() }))
  }
}

render(tree(<App />), document.body)
```

### Events

```js
<a onClick={onClick}>{props.text}</a>
```

### Magic virtual element

Use [magic-virtual-element](https://github.com/dekujs/magic-virtual-element) to enable nice classnames.

```
import element from 'magic-virtual-element'
<div style={style} class={[ 'button', '-active' ]}>
```

### Reference

```
name = 'MyComponent'

// Defaults
initialState (props) {...} // return initial state
defaultProps = { hi: 'hello' }

// Render
render ({props, state}, setState) {...}

// Lifecycle
beforeUpdate  ({props, state, id}, nextProps, nextState) {}
afterRender   ({props, state, id}, el) {}
afterUpdate   ({props, state, id}, prevProps, prevState, setState) {}
afterMount    ({props, state, id}, el, setState) {}
beforeUnmount ({props, state, id}, el) {}
```

See: <https://www.npmjs.com/package/deku>


id: deku
git_filename: ./deku.md
format: md
field_title: Deku v2
field_category: JavaScript libraries
field_intro: Quick reference for [Deku](https://www.npmjs.com/package/deku), a minimal virtual DOM library.
data:
{"title": "Deku v2", "category": "JavaScript libraries", "intro": "Quick reference for [Deku](https://www.npmjs.com/package/deku), a minimal virtual DOM library.\n", "body": "### Components\n\n```js\n/** @jsx element */\nimport { element } from 'deku'\n\nfunction render ({ props, children, context, path }) {\n  // props    = properties object\n  // children = children array\n  // path     = path to current component (like 0.1.5.2)\n  // context  = common properties in all components\n  return (\n    <div class='App' hidden={props.hidden} color={context.theme.color}>\n      {children}\n    </div>\n  }\n}\n\nfunction onCreate ({ props, dispatch, path }) { ... }\nfunction onUpdate ({ props, dispatch, path }) { ... }\nfunction onRemove ({ props, dispatch, path }) { ... }\n// actually { children, props, path, context }\n\nexport default { render, onCreate, onRemove }\n```\n\n### Rendering\n\n```js\nimport { createStore } from 'redux'\nimport { dom, element } from 'deku'\n\n// Create a Redux store to handle all UI actions and side-effects\nlet store = createStore(reducer)\n\n// Create a renderer that can turn vnodes into real DOM elements\nlet render = createRenderer(document.body, store.dispatch)\n\n// Update the page and add redux state to the context\nrender(<MyButton>Hello World!</MyButton>, store.getState())\n```"}

field_body:
### Components

```js
/** @jsx element */
import { element } from 'deku'

function render ({ props, children, context, path }) {
  // props    = properties object
  // children = children array
  // path     = path to current component (like 0.1.5.2)
  // context  = common properties in all components
  return (
    <div class='App' hidden={props.hidden} color={context.theme.color}>
      {children}
    </div>
  }
}

function onCreate ({ props, dispatch, path }) { ... }
function onUpdate ({ props, dispatch, path }) { ... }
function onRemove ({ props, dispatch, path }) { ... }
// actually { children, props, path, context }

export default { render, onCreate, onRemove }
```

### Rendering

```js
import { createStore } from 'redux'
import { dom, element } from 'deku'

// Create a Redux store to handle all UI actions and side-effects
let store = createStore(reducer)

// Create a renderer that can turn vnodes into real DOM elements
let render = createRenderer(document.body, store.dispatch)

// Update the page and add redux state to the context
render(<MyButton>Hello World!</MyButton>, store.getState())
```


id: deis
git_filename: ./deis.md
format: md
field_title: Deis
field_category: Devops
data:
{"title": "Deis", "category": "Devops", "body": "### Deploy\n\n```\ndeis create app-name\ngit push deis master\ndeis open\n```\n\n### Deploy dockerfile\n\n```sh\n$ deis create app-name\n$ deis pull redis:latest\n  Creating build...  done, v2\n# default process type is `cmd`\n```\n\n### Config\n\n```\ndeis config:list\ndeis config:set FOO=bar BAZ=foo\ndeis config:unset FOO\ndeis config:pull  # writes to .env\ndeis config:push  # reads from .env\n```\n\n### Managing instances\n\n```\ndeis logs\ndeis run rake db:migrate\ndeis ps\n```\n\n### Custom domains\n\n```\ndeis domains:list\ndeis domains:add www.myapp.com\ndeis domains:remove www.myapp.com\n```\n\n### Limits\n\n```sh\ndeis limits:set web=1G\ndeis limits:set web=1024 --cpu\n# (`web` is a process type)\n```\n\n### Sharing\n\n```\ndeis perms:create otheruser\n```\n\n### SSL\n\n```\ndeis certs:add server.crt server.key\n```\n\nSee: [SSL](http://docs.deis.io/en/latest/using_deis/app-ssl/)"}

field_body:
### Deploy

```
deis create app-name
git push deis master
deis open
```

### Deploy dockerfile

```sh
$ deis create app-name
$ deis pull redis:latest
  Creating build...  done, v2
# default process type is `cmd`
```

### Config

```
deis config:list
deis config:set FOO=bar BAZ=foo
deis config:unset FOO
deis config:pull  # writes to .env
deis config:push  # reads from .env
```

### Managing instances

```
deis logs
deis run rake db:migrate
deis ps
```

### Custom domains

```
deis domains:list
deis domains:add www.myapp.com
deis domains:remove www.myapp.com
```

### Limits

```sh
deis limits:set web=1G
deis limits:set web=1024 --cpu
# (`web` is a process type)
```

### Sharing

```
deis perms:create otheruser
```

### SSL

```
deis certs:add server.crt server.key
```

See: [SSL](http://docs.deis.io/en/latest/using_deis/app-ssl/)


id: datetime
git_filename: ./datetime.md
format: md
field_title: Date & time formats
field_tags: Featurable
field_updated: 2017-11-27
field_updated___timezone: UTC
data:
{"title": "Date & time formats", "weight": -5, "updated": "2017-11-27", "tags": ["Featurable"], "body": "## Common time formats\n{: .-one-column}\n\n- [UNIX strftime](./strftime) - Used by Ruby, `date`, and more\n- [Moment.js](./moment#formatting) - Used by Moment.js, date-fns, and more\n\n{% include common/strftime_format.md title=\"strftime format\" %}\n\n{% include common/moment_format.md title=\"Moment.js format\" %}"}

field_body:
## Common time formats
{: .-one-column}

- [UNIX strftime](./strftime) - Used by Ruby, `date`, and more
- [Moment.js](./moment#formatting) - Used by Moment.js, date-fns, and more

{% include common/strftime_format.md title="strftime format" %}

{% include common/moment_format.md title="Moment.js format" %}


id: curl
git_filename: ./curl.md
format: md
field_title: Curl
field_category: CLI
field_updated: 2020-03-09
field_updated___timezone: UTC
data:
{"title": "Curl", "category": "CLI", "updated": "2020-03-09", "body": "## Options\n\n### Options\n\n```bash\n-o <file>    # --output: write to file\n-u user:pass # --user: Authentication\n```\n\n```bash\n-v           # --verbose\n-vv          # Even more verbose\n-s           # --silent: don't show progress meter or errors\n-S           # --show-error: when used with --silent (-sS), show errors but no progress meter\n```\n\n```bash\n-i           # --include: Include the HTTP-header in the output\n-I           # --head: headers only\n```\n\n### Request\n\n```bash\n-X POST          # --request\n-L               # follow link if page redirects\n-F               # --form: HTTP POST data for multipart/form-data\n```\n\n### Data\n\n```bash\n-d 'data'    # --data: HTTP post data, URL encoded (eg, status=\"Hello\")\n-d @file     # --data via file\n-G           # --get: send -d data via get\n```\n\n### Headers\n\n```bash\n-A <str>         # --user-agent\n-b name=val      # --cookie\n-b FILE          # --cookie\n-H \"X-Foo: y\"    # --header\n--compressed     # use deflate/gzip\n```\n\n### SSL\n\n```bash\n    --cacert <file>\n    --capath <dir>\n```\n\n```bash\n-E, --cert <cert>     # --cert: Client cert file\n    --cert-type       # der/pem/eng\n-k, --insecure        # for self-signed certs\n```\n\n## Examples\n{: .-one-column}\n\n```bash\n# Post data:\ncurl -d password=x http://x.com/y\n```\n\n```bash\n# Auth/data:\ncurl -u user:pass -d status=\"Hello\" http://twitter.com/statuses/update.xml\n```\n\n```bash\n# multipart file upload\ncurl -v --include --form key1=value1 --form upload=@localfilename URL\n\n# multipart form: send data from text field and upload file\ncurl -F person=anonymous -F secret=@file.txt http://example.com/submit.cgi\n```\n\n```bash\n# Use Curl to Check if a remote resource is available\n# details: https://matthewsetter.com/check-if-file-is-available-with-curl/\ncurl -o /dev/null --silent -Iw \"%{http_code}\" https://example.com/my.remote.tarball.gz\n```"}

field_body:
## Options

### Options

```bash
-o <file>    # --output: write to file
-u user:pass # --user: Authentication
```

```bash
-v           # --verbose
-vv          # Even more verbose
-s           # --silent: don't show progress meter or errors
-S           # --show-error: when used with --silent (-sS), show errors but no progress meter
```

```bash
-i           # --include: Include the HTTP-header in the output
-I           # --head: headers only
```

### Request

```bash
-X POST          # --request
-L               # follow link if page redirects
-F               # --form: HTTP POST data for multipart/form-data
```

### Data

```bash
-d 'data'    # --data: HTTP post data, URL encoded (eg, status="Hello")
-d @file     # --data via file
-G           # --get: send -d data via get
```

### Headers

```bash
-A <str>         # --user-agent
-b name=val      # --cookie
-b FILE          # --cookie
-H "X-Foo: y"    # --header
--compressed     # use deflate/gzip
```

### SSL

```bash
    --cacert <file>
    --capath <dir>
```

```bash
-E, --cert <cert>     # --cert: Client cert file
    --cert-type       # der/pem/eng
-k, --insecure        # for self-signed certs
```

## Examples
{: .-one-column}

```bash
# Post data:
curl -d password=x http://x.com/y
```

```bash
# Auth/data:
curl -u user:pass -d status="Hello" http://twitter.com/statuses/update.xml
```

```bash
# multipart file upload
curl -v --include --form key1=value1 --form upload=@localfilename URL

# multipart form: send data from text field and upload file
curl -F person=anonymous -F secret=@file.txt http://example.com/submit.cgi
```

```bash
# Use Curl to Check if a remote resource is available
# details: https://matthewsetter.com/check-if-file-is-available-with-curl/
curl -o /dev/null --silent -Iw "%{http_code}" https://example.com/my.remote.tarball.gz
```


id: cssnext
git_filename: ./cssnext.md
format: md
field_title: cssnext
field_category: CSS
field_tags: Featurable
field_updated: 2017-10-30
field_updated___timezone: UTC
data:
{"title": "cssnext", "category": "CSS", "updated": "2017-10-30", "tags": ["Featurable"], "weight": -3, "body": "### Variables\n\n```scss\n:root {\n  --text-color: #30333a;\n}\n```\n\n```scss\nbody {\n  background: var(--text-color);\n  background: color(var(--text-color) shade(30%));\n}\n```\n\n### Colors\n\n```scss\na {\n  /* Adjustments */\n  color: color(red alpha(-10%));\n  color: color(red tint(-10%));    /* lighten */\n  color: color(red shade(-10%));   /* darken */\n\n  /* Absolute */\n  color: color(red alpha(50%));\n  color: color(red hue(225));\n  color: color(red saturation(100%));\n  color: color(red lightness(50%));\n\n  color: gray(33);       /* rgb(33, 33, 33) */\n  color: gray(33%);      /* rgb(84, 84, 84) */\n  color: gray(33%, 50%); /* rgba(84, 84, 84, 0.5) */\n  color: #0000ff80;      /* rgba(0, 0, 255, 0.5) */\n\n  color: hwb(90, 0%, 0%, 0.5);     /* like hsl() but easier for humans */\n  color: hsl(90deg 90% 70%);       /* hsl(180, 90%, 70%) -- supports deg */\n  color: hsl(90deg 90% 70% / 30%); /* hsla(180, 90%, 70%, 0.3) */\n  color: rgb(30 60 90 / 30%);      /* rgba(30, 60, 90, 0.3) */\n}\n```\n\nAlso see [colorme.io](http://colorme.io/).\n\n### Mixins\n\n```scss\n:root {\n  --centered: {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  };\n}\n\n.centered {\n  @apply --centered;\n}\n```\n\nSelectors\n---------\n\n### Nesting\n\n```scss\n.class-name {\n  & .nesting { \u00b7\u00b7\u00b7 }      /* direct nesting starts with & */\n  @nest span & { \u00b7\u00b7\u00b7 }    /* complex nesting */\n  @media (min-width: 30em) { \u00b7\u00b7\u00b7 }\n}\n```\n\n### Custom selectors\n\n```scss\n@custom-selector :--button input[type='submit'], input[type='button'];\n@custom-selector :--enter :hover, :focus;\n```\n\n```scss\n:--button { \u00b7\u00b7\u00b7 }\n:--button:--enter { \u00b7\u00b7\u00b7 }\n```\n{: .-setup}\n\n### Future selectors\n\n```scss\n:any-link { \u00b7\u00b7\u00b7 }         /* :link, :visited */\np:matches(.a, .b) { \u00b7\u00b7\u00b7 } /* p.a, p.b */\np:not(.a, .b) { \u00b7\u00b7\u00b7 }     /* p:not(.a), p:not(.b) */\na::before { \u00b7\u00b7\u00b7 }         /* a:before -- for IE compatibility */\n[frame=hsides i] { \u00b7\u00b7\u00b7 }  /* [frame=hsides] -- but case insensitive */\n```\n\nMedia queries\n-------------\n\n### Custom media queries\n\n```scss\n@custom-media --viewport-medium (width <= 50rem);\n```\n\n```scss\n@media (--viewport-medium) { \u00b7\u00b7\u00b7 }\n```\n\n### Media query ranges\n\n```scss\n@media (width >= 500px) { \u00b7\u00b7\u00b7 }    /* (min-width: 500px) */\n```\n\nProperties\n----------\n\n### Property fallbacks\n\n```scss\n/* font-feature-settings fallback */\nh2 { font-variant-caps: small-caps; }\ntable { font-variant-numeric: lining-nums; }\n```\n\n```scss\ndiv { filter: blur(4px); }          /* svg filter fallback */\ndiv { overflow-wrap: break-word; }  /* word-wrap fallback */\n```\n\n### Autoprefixing\n\n```scss\ndiv {\n  display: flex;\n}\n```\n\n```scss\n/*\n * display: -webkit-box;\n * display: -ms-flexbox;\n * display: flex;\n */\n```\n\n### Reset\n\n```scss\ndiv {\n  all: initial;\n}\n```\n\nSets animation, background, margin, padding, and so on.\n\n## References\n{: .-one-column}\n\n- Based on cssnext 2.9.0.\n- <http://cssnext.io/features/>"}

field_body:
### Variables

```scss
:root {
  --text-color: #30333a;
}
```

```scss
body {
  background: var(--text-color);
  background: color(var(--text-color) shade(30%));
}
```

### Colors

```scss
a {
  /* Adjustments */
  color: color(red alpha(-10%));
  color: color(red tint(-10%));    /* lighten */
  color: color(red shade(-10%));   /* darken */

  /* Absolute */
  color: color(red alpha(50%));
  color: color(red hue(225));
  color: color(red saturation(100%));
  color: color(red lightness(50%));

  color: gray(33);       /* rgb(33, 33, 33) */
  color: gray(33%);      /* rgb(84, 84, 84) */
  color: gray(33%, 50%); /* rgba(84, 84, 84, 0.5) */
  color: #0000ff80;      /* rgba(0, 0, 255, 0.5) */

  color: hwb(90, 0%, 0%, 0.5);     /* like hsl() but easier for humans */
  color: hsl(90deg 90% 70%);       /* hsl(180, 90%, 70%) -- supports deg */
  color: hsl(90deg 90% 70% / 30%); /* hsla(180, 90%, 70%, 0.3) */
  color: rgb(30 60 90 / 30%);      /* rgba(30, 60, 90, 0.3) */
}
```

Also see [colorme.io](http://colorme.io/).

### Mixins

```scss
:root {
  --centered: {
    display: flex;
    align-items: center;
    justify-content: center;
  };
}

.centered {
  @apply --centered;
}
```

Selectors
---------

### Nesting

```scss
.class-name {
  & .nesting { ··· }      /* direct nesting starts with & */
  @nest span & { ··· }    /* complex nesting */
  @media (min-width: 30em) { ··· }
}
```

### Custom selectors

```scss
@custom-selector :--button input[type='submit'], input[type='button'];
@custom-selector :--enter :hover, :focus;
```

```scss
:--button { ··· }
:--button:--enter { ··· }
```
{: .-setup}

### Future selectors

```scss
:any-link { ··· }         /* :link, :visited */
p:matches(.a, .b) { ··· } /* p.a, p.b */
p:not(.a, .b) { ··· }     /* p:not(.a), p:not(.b) */
a::before { ··· }         /* a:before -- for IE compatibility */
[frame=hsides i] { ··· }  /* [frame=hsides] -- but case insensitive */
```

Media queries
-------------

### Custom media queries

```scss
@custom-media --viewport-medium (width <= 50rem);
```

```scss
@media (--viewport-medium) { ··· }
```

### Media query ranges

```scss
@media (width >= 500px) { ··· }    /* (min-width: 500px) */
```

Properties
----------

### Property fallbacks

```scss
/* font-feature-settings fallback */
h2 { font-variant-caps: small-caps; }
table { font-variant-numeric: lining-nums; }
```

```scss
div { filter: blur(4px); }          /* svg filter fallback */
div { overflow-wrap: break-word; }  /* word-wrap fallback */
```

### Autoprefixing

```scss
div {
  display: flex;
}
```

```scss
/*
 * display: -webkit-box;
 * display: -ms-flexbox;
 * display: flex;
 */
```

### Reset

```scss
div {
  all: initial;
}
```

Sets animation, background, margin, padding, and so on.

## References
{: .-one-column}

- Based on cssnext 2.9.0.
- <http://cssnext.io/features/>


id: css
git_filename: ./css.md
format: md
field_title: CSS
field_category: CSS
data:
{"title": "CSS", "category": "CSS", "weight": -1, "keywords": ["margin, padding, border", "div, .class, #id, [attr]", "font, background", "display: block, inline, flex", "Selectors", "Properties"], "body": "## Basics\n{: .-three-column}\n\n### Selectors\n\n```css\n.class {\n  font-weight: bold;\n}\n```\n{: .-setup}\n\n| Selector          | Description  |\n| ----------------- | ------------ |\n| `*`               | All elements |\n| `div`             | Element      |\n| `.class`          | Class        |\n| `#id`             | ID           |\n| `[disabled]`      | Attribute    |\n| `[role=\"dialog\"]` | Attribute    |\n\n### Combinators\n\n| Selector            | Description       |\n| ------------------- | ----------------- |\n| `.parent .child`    | Descendant        |\n| `.parent > .child`  | Direct descendant |\n| `.child + .sibling` | Adjacent sibling  |\n| `.child ~ .sibling` | Far sibling       |\n| `.class1.class2`    | Have both classes |\n\n### Attribute selectors\n\n| Selector           | Description                         |\n| ------------------ | ----------------------------------- |\n| `[role=\"dialog\"]`  | `=` Exact                           |\n| `[class~=\"box\"]`   | `~=` Has word                       |\n| `[class|=\"box\"]`   | `|=` Exact or prefix (eg, `value-`) |\n| `[href$=\".doc\"]`   | `$=` Ends in                        |\n| `[href^=\"/index\"]` | `^=` Begins with                    |\n| `[class*=\"-is-\"]`  | `*=` Contains                       |\n\n### Pseudo-classes\n\n| Selector             | Description                                |\n| -------------------- | ------------------------------------------ |\n| `:target`            | eg, `h2#foo:target`                        |\n| ---                  | ---                                        |\n| `:focus`             |                                            |\n| `:active`            |                                            |\n| ---                  | ---                                        |\n| `:nth-child(3)`      | 3rd child                                  |\n| `:nth-child(3n+2)`   | 2nd child in groups of 3                   |\n| `:nth-child(-n+4)`   |                                            |\n| ---                  | ---                                        |\n| `:nth-last-child(2)` |                                            |\n| `:nth-of-type(2)`    |                                            |\n| ---                  | ---                                        |\n| `:checked`           | Checked inputs                             |\n| `:disabled`          | Disabled elements                          |\n| `:default`           | Default element in a group                 |\n| ---                  | ---                                        |\n| `:empty`             | Elements without children                  |\n\n### Pseudo-class variations\n\n| Selector          |\n| ----------------- |\n| `:first-of-type`  |\n| `:last-of-type`   |\n| `:nth-of-type(2)` |\n| `:only-of-type`   |\n| ---               |\n| `:first-child`    |\n| `:last-child`     |\n| `:nth-child(2)`   |\n| `:only-child`     |\n{: .-left-align}\n\n## Fonts\n{: .-left-reference}\n\n### Properties\n\n| Property           | Description                          |\n| ------------------ | ------------------------------------ |\n| `font-family:`     | `<font>, <fontN>`                    |\n| `font-size:`       | `<size>`                             |\n| `letter-spacing:`  | `<size>`                             |\n| `line-height:`     | `<number>`                           |\n| ---                | ---                                  |\n| `font-weight:`     | `bold` `normal`                      |\n| `font-style:`      | `italic` `normal`                    |\n| `text-decoration:` | `underline` `none`                   |\n| ---                | ---                                  |\n| `text-align:`      | `left` `right` `center` `justify`    |\n| `text-transform:`  | `capitalize` `uppercase` `lowercase` |\n{: .-key-values}\n\n### Shorthand\n{: .-prime}\n\n|         | style    | weight | size (required) |     | line-height | family            |\n| ------- | -------- | ------ | --------------- | --- | ----------- | ----------------- |\n| `font:` | `italic` | `400`  | `14px`          | `/` | `1.5`       | `sans-serif`      |\n|         | style    | weight | size (required) |     | line-height | family (required) |\n{: .-css-breakdown}\n\n### Example\n\n```css\nfont-family: Arial;\nfont-size: 12pt;\nline-height: 1.5;\nletter-spacing: 0.02em;\ncolor: #aa3322;\n```\n\n### Case\n\n```css\ntext-transform: capitalize; /* Hello */\ntext-transform: uppercase; /* HELLO */\ntext-transform: lowercase; /* hello */\n```\n\n## Background\n{: .-left-reference}\n\n### Properties\n\n| Property                 | Description                              |\n| ------------------------ | ---------------------------------------- |\n| `background:`            | _(Shorthand)_                            |\n| ---                      | ---                                      |\n| `background-color:`      | `<color>`                                |\n| `background-image:`      | `url(...)`                               |\n| `background-position:`   | `left/center/right` `top/center/bottom`  |\n| `background-size:`       | `cover` `X Y`                            |\n| `background-clip:`       | `border-box` `padding-box` `content-box` |\n| `background-repeat:`     | `no-repeat` `repeat-x` `repeat-y`        |\n| `background-attachment:` | `scroll` `fixed` `local`                 |\n{: .-key-values}\n\n### Shorthand\n\n|               | color  | image         | positionX | positionY |     | size           | repeat      | attachment |\n| ------------- | ------ | ------------- | --------- | --------- | --- | -------------- | ----------- | ---------- |\n| `background:` | `#ff0` | `url(bg.jpg)` | `left`    | `top`     | `/` | `100px` `auto` | `no-repeat` | `fixed;`   |\n| `background:` | `#abc` | `url(bg.png)` | `center`  | `center`  | `/` | `cover`        | `repeat-x`  | `local;`   |\n|               | color  | image         | positionX | positionY |     | size           | repeat      | attachment |\n{: .-css-breakdown}\n\n### Multiple backgrounds\n\n```css\nbackground: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),\n  url('background.jpg') center center / cover, #333;\n```\n\n## Animation\n{: .-left-reference}\n\n### Properties\n\n| Property                     | Value                                                    |\n| ---------------------------- | -------------------------------------------------------- |\n| `animation:`                 | _(shorthand)_                                            |\n| `animation-name:`            | `<name>`                                                 |\n| `animation-duration:`        | `<time>ms`                                               |\n| `animation-timing-function:` | `ease` `linear` `ease-in` `ease-out` `ease-in-out`       |\n| `animation-delay:`           | `<time>ms`                                               |\n| `animation-iteration-count:` | `infinite` `<number>`                                    |\n| `animation-direction:`       | `normal` `reverse` `alternate` `alternate-reverse`       |\n| `animation-fill-mode:`       | `none` `forwards` `backwards` `both` `initial` `inherit` |\n| `animation-play-state:`      | `normal` `reverse` `alternate` `alternate-reverse`       |\n{: .-key-values}\n\n### Shorthand\n\n|              | name     | duration | timing-function | delay   | count      | direction           | fill-mode | play-state |\n| ------------ | -------- | -------- | --------------- | ------- | ---------- | ------------------- | --------- | ---------- |\n| `animation:` | `bounce` | `300ms`  | `linear`        | `100ms` | `infinite` | `alternate-reverse` | `both`    | `reverse`  |\n|              | name     | duration | timing-function | delay   | count      | direction           | fill-mode | play-state |\n{: .-css-breakdown}\n\n### Example\n\n```css\nanimation: bounce 300ms linear 0s infinite normal;\nanimation: bounce 300ms linear infinite;\nanimation: bounce 300ms linear infinite alternate-reverse;\nanimation: bounce 300ms linear 2s infinite alternate-reverse forwards normal;\n```\n\n### Event\n\n```js\n.one('webkitAnimationEnd oanimationend msAnimationEnd animationend')\n```"}

field_body:
## Basics
{: .-three-column}

### Selectors

```css
.class {
  font-weight: bold;
}
```
{: .-setup}

| Selector          | Description  |
| ----------------- | ------------ |
| `*`               | All elements |
| `div`             | Element      |
| `.class`          | Class        |
| `#id`             | ID           |
| `[disabled]`      | Attribute    |
| `[role="dialog"]` | Attribute    |

### Combinators

| Selector            | Description       |
| ------------------- | ----------------- |
| `.parent .child`    | Descendant        |
| `.parent > .child`  | Direct descendant |
| `.child + .sibling` | Adjacent sibling  |
| `.child ~ .sibling` | Far sibling       |
| `.class1.class2`    | Have both classes |

### Attribute selectors

| Selector           | Description                         |
| ------------------ | ----------------------------------- |
| `[role="dialog"]`  | `=` Exact                           |
| `[class~="box"]`   | `~=` Has word                       |
| `[class|="box"]`   | `|=` Exact or prefix (eg, `value-`) |
| `[href$=".doc"]`   | `$=` Ends in                        |
| `[href^="/index"]` | `^=` Begins with                    |
| `[class*="-is-"]`  | `*=` Contains                       |

### Pseudo-classes

| Selector             | Description                                |
| -------------------- | ------------------------------------------ |
| `:target`            | eg, `h2#foo:target`                        |
| ---                  | ---                                        |
| `:focus`             |                                            |
| `:active`            |                                            |
| ---                  | ---                                        |
| `:nth-child(3)`      | 3rd child                                  |
| `:nth-child(3n+2)`   | 2nd child in groups of 3                   |
| `:nth-child(-n+4)`   |                                            |
| ---                  | ---                                        |
| `:nth-last-child(2)` |                                            |
| `:nth-of-type(2)`    |                                            |
| ---                  | ---                                        |
| `:checked`           | Checked inputs                             |
| `:disabled`          | Disabled elements                          |
| `:default`           | Default element in a group                 |
| ---                  | ---                                        |
| `:empty`             | Elements without children                  |

### Pseudo-class variations

| Selector          |
| ----------------- |
| `:first-of-type`  |
| `:last-of-type`   |
| `:nth-of-type(2)` |
| `:only-of-type`   |
| ---               |
| `:first-child`    |
| `:last-child`     |
| `:nth-child(2)`   |
| `:only-child`     |
{: .-left-align}

## Fonts
{: .-left-reference}

### Properties

| Property           | Description                          |
| ------------------ | ------------------------------------ |
| `font-family:`     | `<font>, <fontN>`                    |
| `font-size:`       | `<size>`                             |
| `letter-spacing:`  | `<size>`                             |
| `line-height:`     | `<number>`                           |
| ---                | ---                                  |
| `font-weight:`     | `bold` `normal`                      |
| `font-style:`      | `italic` `normal`                    |
| `text-decoration:` | `underline` `none`                   |
| ---                | ---                                  |
| `text-align:`      | `left` `right` `center` `justify`    |
| `text-transform:`  | `capitalize` `uppercase` `lowercase` |
{: .-key-values}

### Shorthand
{: .-prime}

|         | style    | weight | size (required) |     | line-height | family            |
| ------- | -------- | ------ | --------------- | --- | ----------- | ----------------- |
| `font:` | `italic` | `400`  | `14px`          | `/` | `1.5`       | `sans-serif`      |
|         | style    | weight | size (required) |     | line-height | family (required) |
{: .-css-breakdown}

### Example

```css
font-family: Arial;
font-size: 12pt;
line-height: 1.5;
letter-spacing: 0.02em;
color: #aa3322;
```

### Case

```css
text-transform: capitalize; /* Hello */
text-transform: uppercase; /* HELLO */
text-transform: lowercase; /* hello */
```

## Background
{: .-left-reference}

### Properties

| Property                 | Description                              |
| ------------------------ | ---------------------------------------- |
| `background:`            | _(Shorthand)_                            |
| ---                      | ---                                      |
| `background-color:`      | `<color>`                                |
| `background-image:`      | `url(...)`                               |
| `background-position:`   | `left/center/right` `top/center/bottom`  |
| `background-size:`       | `cover` `X Y`                            |
| `background-clip:`       | `border-box` `padding-box` `content-box` |
| `background-repeat:`     | `no-repeat` `repeat-x` `repeat-y`        |
| `background-attachment:` | `scroll` `fixed` `local`                 |
{: .-key-values}

### Shorthand

|               | color  | image         | positionX | positionY |     | size           | repeat      | attachment |
| ------------- | ------ | ------------- | --------- | --------- | --- | -------------- | ----------- | ---------- |
| `background:` | `#ff0` | `url(bg.jpg)` | `left`    | `top`     | `/` | `100px` `auto` | `no-repeat` | `fixed;`   |
| `background:` | `#abc` | `url(bg.png)` | `center`  | `center`  | `/` | `cover`        | `repeat-x`  | `local;`   |
|               | color  | image         | positionX | positionY |     | size           | repeat      | attachment |
{: .-css-breakdown}

### Multiple backgrounds

```css
background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
  url('background.jpg') center center / cover, #333;
```

## Animation
{: .-left-reference}

### Properties

| Property                     | Value                                                    |
| ---------------------------- | -------------------------------------------------------- |
| `animation:`                 | _(shorthand)_                                            |
| `animation-name:`            | `<name>`                                                 |
| `animation-duration:`        | `<time>ms`                                               |
| `animation-timing-function:` | `ease` `linear` `ease-in` `ease-out` `ease-in-out`       |
| `animation-delay:`           | `<time>ms`                                               |
| `animation-iteration-count:` | `infinite` `<number>`                                    |
| `animation-direction:`       | `normal` `reverse` `alternate` `alternate-reverse`       |
| `animation-fill-mode:`       | `none` `forwards` `backwards` `both` `initial` `inherit` |
| `animation-play-state:`      | `normal` `reverse` `alternate` `alternate-reverse`       |
{: .-key-values}

### Shorthand

|              | name     | duration | timing-function | delay   | count      | direction           | fill-mode | play-state |
| ------------ | -------- | -------- | --------------- | ------- | ---------- | ------------------- | --------- | ---------- |
| `animation:` | `bounce` | `300ms`  | `linear`        | `100ms` | `infinite` | `alternate-reverse` | `both`    | `reverse`  |
|              | name     | duration | timing-function | delay   | count      | direction           | fill-mode | play-state |
{: .-css-breakdown}

### Example

```css
animation: bounce 300ms linear 0s infinite normal;
animation: bounce 300ms linear infinite;
animation: bounce 300ms linear infinite alternate-reverse;
animation: bounce 300ms linear 2s infinite alternate-reverse forwards normal;
```

### Event

```js
.one('webkitAnimationEnd oanimationend msAnimationEnd animationend')
```


id: css-tricks
git_filename: ./css-tricks.md
format: md
field_title: CSS tricks
field_category: CSS
data:
{"title": "CSS tricks", "category": "CSS", "body": "### Heading kerning pairs and ligature\n\n```css\nh1, h2, h3 {\n  text-rendering: optimizeLegibility;\n}\n```\n\n### Native-like iOS scrolling\n\n```css\n-webkit-overflow-scrolling: touch;\noverflow-y: auto;\n```\n\n### Gradient text\n\n```css\nbackground: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#333));\n-webkit-background-clip: text;\n-webkit-text-fill-color: transparent;\n```\n\n### Text stroke\n\n```css\n-webkit-text-stroke: 3px black;\n```\n\nSee: [Introducing text stroke](http://www.webkit.org/blog/85/introducing-text-stroke/)\n\n### iOS Scrolling prevention\n\n```css\ndocument.ontouchstart = (e) ->\n  $pane = $(e.target).closest('.scrollable>div')\n  if $pane.length is 0 or $pane[0].scrollHeight <= $pane.innerHeight()\n    e.preventDefault()\n```\n\n```scss\n%ios-scrollable {\n  &, >div {\n    -webkit-overflow-scrolling: touch;\n    overflow: auto;\n  }\n\n  >div {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n  }\n}\n```\n\nRelevant in iOS6, but maybe not anymore.\n\n### UIWebView optimizations\n\n```css\n* {\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n  -webkit-user-select: none;                /* disable text select */\n  -webkit-touch-callout: none;              /* disable callout, image save panel (popup) */\n  -webkit-tap-highlight-color: transparent; /* \"turn off\" link highlight */\n}\n\na:focus {\n  outline: 0; // Firefox (remove border on link click)\n}\n```\n\nSee: <http://www.bitsandpix.com/entry/ios-webkit-uiwebview-remove-tapclick-highlightborder-with-css/>\n\nSee: <http://www.yuiblog.com/blog/2010/10/01/quick-tip-customizing-the-mobile-safari-tap-highlight-color/>\n\nBrowser hacks\n-------------\n{: .-three-column}\n\n### Disclaimer\n\nNot recommended, but here they are if you ever need them. Note that vendor\nprefixes may go away eventually.\n\n### Mozilla-only\n\n```css\n@-moz-document url-prefix() {\n  .box { color: blue; }\n}\n```\n\n### Webkit-only\n\n```css\n@media all and (-webkit-min-device-pixel-ratio: 1) {\n}\n```"}

field_body:
### Heading kerning pairs and ligature

```css
h1, h2, h3 {
  text-rendering: optimizeLegibility;
}
```

### Native-like iOS scrolling

```css
-webkit-overflow-scrolling: touch;
overflow-y: auto;
```

### Gradient text

```css
background: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#333));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
```

### Text stroke

```css
-webkit-text-stroke: 3px black;
```

See: [Introducing text stroke](http://www.webkit.org/blog/85/introducing-text-stroke/)

### iOS Scrolling prevention

```css
document.ontouchstart = (e) ->
  $pane = $(e.target).closest('.scrollable>div')
  if $pane.length is 0 or $pane[0].scrollHeight <= $pane.innerHeight()
    e.preventDefault()
```

```scss
%ios-scrollable {
  &, >div {
    -webkit-overflow-scrolling: touch;
    overflow: auto;
  }

  >div {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
  }
}
```

Relevant in iOS6, but maybe not anymore.

### UIWebView optimizations

```css
* {
  -webkit-tap-highlight-color: rgba(0,0,0,0);
  -webkit-user-select: none;                /* disable text select */
  -webkit-touch-callout: none;              /* disable callout, image save panel (popup) */
  -webkit-tap-highlight-color: transparent; /* "turn off" link highlight */
}

a:focus {
  outline: 0; // Firefox (remove border on link click)
}
```

See: <http://www.bitsandpix.com/entry/ios-webkit-uiwebview-remove-tapclick-highlightborder-with-css/>

See: <http://www.yuiblog.com/blog/2010/10/01/quick-tip-customizing-the-mobile-safari-tap-highlight-color/>

Browser hacks
-------------
{: .-three-column}

### Disclaimer

Not recommended, but here they are if you ever need them. Note that vendor
prefixes may go away eventually.

### Mozilla-only

```css
@-moz-document url-prefix() {
  .box { color: blue; }
}
```

### Webkit-only

```css
@media all and (-webkit-min-device-pixel-ratio: 1) {
}
```


id: css-system-font-stack
git_filename: ./css-system-font-stack.md
format: md
field_title: CSS system fonts
field_category: CSS
field_tags: Featurable
data:
{"title": "CSS system fonts", "category": "CSS", "weight": -3, "tags": ["Featurable"], "body": "### System fonts\n\n```css\nfont-family: -apple-system, BlinkMacSystemFont,\n    \"Segoe UI\", \"Roboto\", \"Oxygen\",\n    \"Ubuntu\", \"Cantarell\", \"Fira Sans\",\n    \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n```\n\nThis uses whatever system font is available. See: [System shock - Designing Medium](https://medium.design/system-shock-6b1dc6d6596f?gi=90078e194544) _(medium.com)_\n\n### Explanation\n\n| Font                 | OS                      |\n| ----                 | --                      |\n| `-apple-system`      | OS X (10.11+), iOS (9+) |\n| `BlinkMacSystemFont` | OS X, Chrome            |\n| `Segoe UI`           | Windows                 |\n| `Roboto`             | Android 4.0+            |\n| `Oxygen`             | Linux, KDE              |\n| `Ubuntu`             | Linux, Ubuntu           |\n| `Cantarell`          | Linux, GNOME            |\n| `Fira Sans`          | Firefox OS              |\n| `Droid Sans`         | Android (until 3.2)     |\n| `Helvetica Neue`     | OS X (10.9)             |"}

field_body:
### System fonts

```css
font-family: -apple-system, BlinkMacSystemFont,
    "Segoe UI", "Roboto", "Oxygen",
    "Ubuntu", "Cantarell", "Fira Sans",
    "Droid Sans", "Helvetica Neue", sans-serif;
```

This uses whatever system font is available. See: [System shock - Designing Medium](https://medium.design/system-shock-6b1dc6d6596f?gi=90078e194544) _(medium.com)_

### Explanation

| Font                 | OS                      |
| ----                 | --                      |
| `-apple-system`      | OS X (10.11+), iOS (9+) |
| `BlinkMacSystemFont` | OS X, Chrome            |
| `Segoe UI`           | Windows                 |
| `Roboto`             | Android 4.0+            |
| `Oxygen`             | Linux, KDE              |
| `Ubuntu`             | Linux, Ubuntu           |
| `Cantarell`          | Linux, GNOME            |
| `Fira Sans`          | Firefox OS              |
| `Droid Sans`         | Android (until 3.2)     |
| `Helvetica Neue`     | OS X (10.9)             |


id: css-grid
git_filename: ./css-grid.md
format: md
field_title: CSS Grid
field_category: CSS
field_prism_languages: css
field_updated: 2019-08-23
field_updated___timezone: UTC
data:
{"title": "CSS Grid", "category": "CSS", "updated": "2019-08-23", "prism_languages": ["css"], "body": "### Container\n\n```css\n.grid-container {\n```\n{: .-setup}\n\n```css\n  /* Display properties */\n  display: grid;\n  display: inline-grid;\n```\n\n```css\n  /* Columns and rows */\n  grid-template-columns: 1rem 2rem 1rem; /* Measurement units */\n  grid-template-columns: 25% 50% 25%; /* Percentage units */\n  grid-template-columns: 1rem auto 1rem 2fr; /* Fill remaining widths with auto or fr units */\n  grid-template-columns: repeat(12, 1fr); /* Repeat columns without needing to write them */\n  grid-template-columns: subgrid; /* Use column tracks defined on parent grid */\n  \n  grid-template-rows: 1rem 10% auto repeat(5, 10px); /* Mix any group, same rules work for rows */\n  grid-template-rows: subgrid; /* Use row tracks defined on parent grid */\n```\n\n```css\n  /* Automatic columns and rows */\n\n  grid-auto-columns: 10px; /* No matter how many columns of content end up in the grid, each column will be this same width */\n  grid-auto-rows: 1rem; /* No matter how many rows of content end up in the grid, each row will be this same height */\n```\n\n```css\n  /* Areas */\n  grid-template-areas:\n    \"header header\"\n    \"main aside\"\n    \"footer footer\"; /* Grid-style */\n\n  grid-template-areas: \"header header\" \"main aside\" \"footer footer\"; /* Inline-style */\n```\n\n```css\n  /* Template shorthand */\n  grid-template:\n    \"header header\" auto\n    \"main aside\" 100vh\n    \"footer footer\" 10rem\n    / 80% 20%;\n\n  /* The above is the same as below long-hand */\n  grid-template-columns: 80% 20%;\n  grid-template-rows: auto 100vh 10rem;\n  grid-template-areas:\n    \"header header\"\n    \"main aside\"\n    \"footer footer\";\n```\n\n```css\n  /* Gaps */\n  grid-row-gap: 1rem;\n  grid-column-gap: 0.5rem; /* Define values separately */\n\n  grid-gap: 1rem 0.5rem; /* Short-hand for row / column */\n  grid-gap: 1rem; /* Gap in both dimensions */\n```\n\n```css\n  /* Item justification (horizontal or column alignment) */\n  justify-items: start; /* Align items to the left */\n  justify-items: center; /* Align items centered within its column */\n  justify-items: end; /* Align items to the right */\n  justify-items: stretch; /* (default) Fills available area (horizontally) */\n```\n\n```css\n  /* Item alignment (vertical or row alignment) */\n  align-items: start; /* Align items to the top */\n  align-items: center; /* Align items centered within its row */\n  align-items: end; /* Align items to the bottom */\n  align-items: stretch; /* (default) Fills available area (vertically) */\n```\n\n```css\n  /* Place item shorthand */\n  place-items: start stretch;\n\n  /* The above is the same as below long-hand */\n  align-items: start;\n  justify-items: stretch;\n```\n\n```css\n  /* Content justification (horizontal or column alignment) */\n  justify-content: start; /* Align content to the left */\n  justify-content: center; /* Align content centered horizontally within the grid */\n  justify-content: end; /* Align content to the right */\n  justify-content: stretch; /* (default) Fills available area (horizontally) */\n\n  justify-content: space-around; /* Chooses a space for both sides of the columns like a left and right margin */\n  justify-content: space-between; /* Chooses a space to go between columns, no margins on outside of content */\n  justify-content: space-evenly; /* Chooses a space that goes between all columns and edges consistently */\n```\n\n```css\n  /* Content alignment (horizontal or column alignment) */\n  align-content: start; /* Align content to the top */\n  align-content: center; /* Align content centered vertically within the grid */\n  align-content: end; /* Align content to the bottom */\n  align-content: stretch; /* (default) Fills available area (vertically) */\n\n  align-content: space-around; /* Chooses a space for the top and bottom of the rows like a top and bottom margin */\n  align-content: space-between; /* Chooses a space to go between rows, no margins on outside of content */\n  align-content: space-evenly; /* Chooses a space that goes between all rows and edges consistently */\n```\n\n```css\n  /* Place item shorthand */\n  place-content: center start;\n\n  /* The above is the same as below long-hand */\n  align-content: center;\n  justify-content: start;\n```\n\n```css\n  /* Automatic grid positioning */\n\n  grid-auto-flow: row; /* Left-to-right rows, then top-to-bottom*/\n  grid-auto-flow: column; /* Top-to-bottom columns, then left-to-right */\n  grid-auto-flow: dense; /* Responds with best-guess on left-to-right, top-to-bottom order with advanced layouts */\n```\n\n```css\n  /* There is one final shorthand for all container properties in one */\n\n  /* Explicit grid columns, rows, and areas */\n  grid:\n    \"header header\" auto\n    \"main aside\" 100vh\n    \"footer footer\" 10rem\n    / 80% 20%; /* You can include a template as the only value, which is equivalent to below */\n  grid-template:\n    \"header header\" auto\n    \"main aside\" 100vh\n    \"footer footer\" 10rem\n    / 80% 20%; /* Which is again equivalent to below */\n  grid-template-columns: 80% 20%;\n  grid-template-rows: auto 100vh 10rem;\n  grid-template-areas:\n    \"header header\"\n    \"main aside\"\n    \"footer footer\";\n\n  /* Automatic grid flows */\n  grid: 1rem / auto-flow dense 1fr; /* You can include rows, a flow, and automatic columns, which is equivalent to below */\n  grid-template-rows: 1rem;\n  grid-auto-flow: dense;\n  grid-auto-columns: 1fr;\n\n  grid: auto-flow dense 1rem / repeat(10, 10%); /* Conversely, you can do the same thing with automatic rows, and defined columns */\n  grid-auto-flow: dense;\n  grid-auto-rows: 1rem;\n  grid-template-columns: repeat(10, 10%);\n```\n\n```css\n}\n```\n{: .-setup}\n\n### Child\n\n```css\n.grid-child {\n```\n{: .-setup}\n\n```css\n  /* Column position */\n  grid-column-start: 1;\n  grid-column-end: 2;\n\n  grid-column: 1 / 2; /* Short hand */\n  grid-column: 1 / span 2; /* Span 2 columns without explicitly defining an endpoint */\n  grid-column: 1; /* Start in and occupy a single column */\n```\n\n```css\n  /* Row position */\n  grid-row-start: 2;\n  grid-row-end: 4;\n\n  grid-row: 2 / 4; /* Short hand */\n  grid-row: 2 / span 3;/* Span 3 rows without explicitly defining an endpoint */\n  grid-row: 1; /* Start in and occupy a single row */\n```\n\n```css\n  /* Area positioning */\n  grid-area: header; /* You can use a named grid area from the container */\n\n  grid-area: 2 / 1 / 4 / 2; /* Or you can use positioning. This is equivalent to... */\n  grid-row-start: 2;\n  grid-column-start: 1;\n  grid-row-end: 4;\n  grid-column-end: 2;\n```\n\n```css\n  /* Self justification (horizontal or column alignment) */\n  justify-self: start; /* Align item to the left */\n  justify-self: center; /* Align item centered within its column */\n  justify-self: end; /* Align item to the right */\n  justify-self: stretch; /* (default) Fills available area (horizontally) */\n```\n\n```css\n  /* Self alignment (vertical or row alignment) */\n  align-self: start; /* Align item to the top */\n  align-self: center; /* Align item centered within its row */\n  align-self: end; /* Align item to the bottom */\n  align-self: stretch; /* (default) Fills available area (vertically) */\n```\n\n```css\n  /* Placement shorthand */\n  place-self: start stretch;\n\n  /* The above is the same as below long-hand */\n  align-self: start;\n  justify-self: stretch;\n```\n\n```css\n}\n```\n{: .-setup}\n\n\n## References\n{: .-one-column}\n\n * [GRID: A simple visual cheatsheet](http://grid.malven.co/)\n * [CSS Tricks: A Complete Guide to Grid](https://css-tricks.com/snippets/css/complete-guide-grid/)\n * [Browser support](https://caniuse.com/#feat=css-grid)"}

field_body:
### Container

```css
.grid-container {
```
{: .-setup}

```css
  /* Display properties */
  display: grid;
  display: inline-grid;
```

```css
  /* Columns and rows */
  grid-template-columns: 1rem 2rem 1rem; /* Measurement units */
  grid-template-columns: 25% 50% 25%; /* Percentage units */
  grid-template-columns: 1rem auto 1rem 2fr; /* Fill remaining widths with auto or fr units */
  grid-template-columns: repeat(12, 1fr); /* Repeat columns without needing to write them */
  grid-template-columns: subgrid; /* Use column tracks defined on parent grid */
  
  grid-template-rows: 1rem 10% auto repeat(5, 10px); /* Mix any group, same rules work for rows */
  grid-template-rows: subgrid; /* Use row tracks defined on parent grid */
```

```css
  /* Automatic columns and rows */

  grid-auto-columns: 10px; /* No matter how many columns of content end up in the grid, each column will be this same width */
  grid-auto-rows: 1rem; /* No matter how many rows of content end up in the grid, each row will be this same height */
```

```css
  /* Areas */
  grid-template-areas:
    "header header"
    "main aside"
    "footer footer"; /* Grid-style */

  grid-template-areas: "header header" "main aside" "footer footer"; /* Inline-style */
```

```css
  /* Template shorthand */
  grid-template:
    "header header" auto
    "main aside" 100vh
    "footer footer" 10rem
    / 80% 20%;

  /* The above is the same as below long-hand */
  grid-template-columns: 80% 20%;
  grid-template-rows: auto 100vh 10rem;
  grid-template-areas:
    "header header"
    "main aside"
    "footer footer";
```

```css
  /* Gaps */
  grid-row-gap: 1rem;
  grid-column-gap: 0.5rem; /* Define values separately */

  grid-gap: 1rem 0.5rem; /* Short-hand for row / column */
  grid-gap: 1rem; /* Gap in both dimensions */
```

```css
  /* Item justification (horizontal or column alignment) */
  justify-items: start; /* Align items to the left */
  justify-items: center; /* Align items centered within its column */
  justify-items: end; /* Align items to the right */
  justify-items: stretch; /* (default) Fills available area (horizontally) */
```

```css
  /* Item alignment (vertical or row alignment) */
  align-items: start; /* Align items to the top */
  align-items: center; /* Align items centered within its row */
  align-items: end; /* Align items to the bottom */
  align-items: stretch; /* (default) Fills available area (vertically) */
```

```css
  /* Place item shorthand */
  place-items: start stretch;

  /* The above is the same as below long-hand */
  align-items: start;
  justify-items: stretch;
```

```css
  /* Content justification (horizontal or column alignment) */
  justify-content: start; /* Align content to the left */
  justify-content: center; /* Align content centered horizontally within the grid */
  justify-content: end; /* Align content to the right */
  justify-content: stretch; /* (default) Fills available area (horizontally) */

  justify-content: space-around; /* Chooses a space for both sides of the columns like a left and right margin */
  justify-content: space-between; /* Chooses a space to go between columns, no margins on outside of content */
  justify-content: space-evenly; /* Chooses a space that goes between all columns and edges consistently */
```

```css
  /* Content alignment (horizontal or column alignment) */
  align-content: start; /* Align content to the top */
  align-content: center; /* Align content centered vertically within the grid */
  align-content: end; /* Align content to the bottom */
  align-content: stretch; /* (default) Fills available area (vertically) */

  align-content: space-around; /* Chooses a space for the top and bottom of the rows like a top and bottom margin */
  align-content: space-between; /* Chooses a space to go between rows, no margins on outside of content */
  align-content: space-evenly; /* Chooses a space that goes between all rows and edges consistently */
```

```css
  /* Place item shorthand */
  place-content: center start;

  /* The above is the same as below long-hand */
  align-content: center;
  justify-content: start;
```

```css
  /* Automatic grid positioning */

  grid-auto-flow: row; /* Left-to-right rows, then top-to-bottom*/
  grid-auto-flow: column; /* Top-to-bottom columns, then left-to-right */
  grid-auto-flow: dense; /* Responds with best-guess on left-to-right, top-to-bottom order with advanced layouts */
```

```css
  /* There is one final shorthand for all container properties in one */

  /* Explicit grid columns, rows, and areas */
  grid:
    "header header" auto
    "main aside" 100vh
    "footer footer" 10rem
    / 80% 20%; /* You can include a template as the only value, which is equivalent to below */
  grid-template:
    "header header" auto
    "main aside" 100vh
    "footer footer" 10rem
    / 80% 20%; /* Which is again equivalent to below */
  grid-template-columns: 80% 20%;
  grid-template-rows: auto 100vh 10rem;
  grid-template-areas:
    "header header"
    "main aside"
    "footer footer";

  /* Automatic grid flows */
  grid: 1rem / auto-flow dense 1fr; /* You can include rows, a flow, and automatic columns, which is equivalent to below */
  grid-template-rows: 1rem;
  grid-auto-flow: dense;
  grid-auto-columns: 1fr;

  grid: auto-flow dense 1rem / repeat(10, 10%); /* Conversely, you can do the same thing with automatic rows, and defined columns */
  grid-auto-flow: dense;
  grid-auto-rows: 1rem;
  grid-template-columns: repeat(10, 10%);
```

```css
}
```
{: .-setup}

### Child

```css
.grid-child {
```
{: .-setup}

```css
  /* Column position */
  grid-column-start: 1;
  grid-column-end: 2;

  grid-column: 1 / 2; /* Short hand */
  grid-column: 1 / span 2; /* Span 2 columns without explicitly defining an endpoint */
  grid-column: 1; /* Start in and occupy a single column */
```

```css
  /* Row position */
  grid-row-start: 2;
  grid-row-end: 4;

  grid-row: 2 / 4; /* Short hand */
  grid-row: 2 / span 3;/* Span 3 rows without explicitly defining an endpoint */
  grid-row: 1; /* Start in and occupy a single row */
```

```css
  /* Area positioning */
  grid-area: header; /* You can use a named grid area from the container */

  grid-area: 2 / 1 / 4 / 2; /* Or you can use positioning. This is equivalent to... */
  grid-row-start: 2;
  grid-column-start: 1;
  grid-row-end: 4;
  grid-column-end: 2;
```

```css
  /* Self justification (horizontal or column alignment) */
  justify-self: start; /* Align item to the left */
  justify-self: center; /* Align item centered within its column */
  justify-self: end; /* Align item to the right */
  justify-self: stretch; /* (default) Fills available area (horizontally) */
```

```css
  /* Self alignment (vertical or row alignment) */
  align-self: start; /* Align item to the top */
  align-self: center; /* Align item centered within its row */
  align-self: end; /* Align item to the bottom */
  align-self: stretch; /* (default) Fills available area (vertically) */
```

```css
  /* Placement shorthand */
  place-self: start stretch;

  /* The above is the same as below long-hand */
  align-self: start;
  justify-self: stretch;
```

```css
}
```
{: .-setup}


## References
{: .-one-column}

 * [GRID: A simple visual cheatsheet](http://grid.malven.co/)
 * [CSS Tricks: A Complete Guide to Grid](https://css-tricks.com/snippets/css/complete-guide-grid/)
 * [Browser support](https://caniuse.com/#feat=css-grid)


id: css-flexbox
git_filename: ./css-flexbox.md
format: md
field_title: CSS flexbox
field_category: CSS
field_prism_languages: css
field_updated: 2020-06-13
field_updated___timezone: UTC
data:
{"title": "CSS flexbox", "category": "CSS", "updated": "2020-06-13", "prism_languages": ["css"], "weight": -3, "body": "### Simple example\n\n```css\n.container {\n  display: flex;\n}\n```\n\n```css\n.container > div {\n  flex: 1 1 auto;\n}\n```\n\n### Container\n\n```css\n.container {\n```\n{: .-setup}\n\n```css\n  display: flex;\n  display: inline-flex;\n```\n\n```css\n  flex-direction: row;            /* ltr - default */\n  flex-direction: row-reverse;    /* rtl */\n  flex-direction: column;         /* top-bottom */\n  flex-direction: column-reverse; /* bottom-top */\n```\n\n```css\n  flex-wrap: nowrap; /* one-line */\n  flex-wrap: wrap;   /* multi-line */\n```\n\n```css\n  align-items: flex-start; /* vertical-align to top */\n  align-items: flex-end;   /* vertical-align to bottom */\n  align-items: center;     /* vertical-align to center */\n  align-items: stretch;    /* same height on all (default) */\n```\n\n```css\n  justify-content: flex-start;    /* [xxx        ] */\n  justify-content: center;        /* [    xxx    ] */\n  justify-content: flex-end;      /* [        xxx] */\n  justify-content: space-between; /* [x    x    x] */\n  justify-content: space-around;  /* [ x   x   x ] */\n  justify-content: space-evenly;  /* [  x  x  x  ] */\n```\n\n```css\n}\n```\n{: .-setup}\n\n### Child\n\n```css\n.container > div {\n```\n{: .-setup}\n\n```css\n  /* This: */\n  flex: 1 0 auto;\n\n  /* Is equivalent to this: */\n  flex-grow: 1;\n  flex-shrink: 0;\n  flex-basis: auto;\n```\n\n```css\n  order: 1;\n```\n\n```css\n  align-self: flex-start;  /* left */\n  margin-left: auto;       /* right */\n```\n\n```css\n}\n```\n{: .-setup}\n\n\n## Tricks\n\n### Vertical center\n\n```css\n.container {\n  display: flex;\n}\n\n.container > div {\n  width: 100px;\n  height: 100px;\n  margin: auto;\n}\n```\n\n### Vertical center (2)\n\n```css\n.container {\n  display: flex;\n  align-items: center;     /* vertical */\n  justify-content: center; /* horizontal */\n}\n```\n\n### Reordering\n\n```css\n.container > .top {\n order: 1;\n}\n\n.container > .bottom {\n order: 2;\n}\n```\n\n### Mobile layout\n\n\n```css\n.container {\n  display: flex;\n  flex-direction: column;\n}\n\n.container > .top {\n  flex: 0 0 100px;\n}\n\n.container > .content {\n  flex: 1 0 auto;\n}\n```\n\nA fixed-height top bar and a dynamic-height content area.\n\n### Table-like\n\n```css\n.container {\n  display: flex;\n}\n\n/* the 'px' values here are just suggested percentages */\n.container > .checkbox { flex: 1 0 20px; }\n.container > .subject  { flex: 1 0 400px; }\n.container > .date     { flex: 1 0 120px; }\n```\n\nThis creates columns that have different widths, but size accordingly according\nto the circumstances.\n\n### Vertical\n\n\n```css\n.container {\n  align-items: center;\n}\n```\n\nVertically-center all items.\n\n### Left and right\n\n```css\n.menu > .left  { align-self: flex-start; }\n.menu > .right { align-self: flex-end; }\n```\n\n## References\n{: .-one-column}\n\n * [MDN: Using CSS flexbox](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes)\n * [Ultimate flexbox cheatsheet](https://www.sketchingwithcss.com/samplechapter/cheatsheet.html)"}

field_body:
### Simple example

```css
.container {
  display: flex;
}
```

```css
.container > div {
  flex: 1 1 auto;
}
```

### Container

```css
.container {
```
{: .-setup}

```css
  display: flex;
  display: inline-flex;
```

```css
  flex-direction: row;            /* ltr - default */
  flex-direction: row-reverse;    /* rtl */
  flex-direction: column;         /* top-bottom */
  flex-direction: column-reverse; /* bottom-top */
```

```css
  flex-wrap: nowrap; /* one-line */
  flex-wrap: wrap;   /* multi-line */
```

```css
  align-items: flex-start; /* vertical-align to top */
  align-items: flex-end;   /* vertical-align to bottom */
  align-items: center;     /* vertical-align to center */
  align-items: stretch;    /* same height on all (default) */
```

```css
  justify-content: flex-start;    /* [xxx        ] */
  justify-content: center;        /* [    xxx    ] */
  justify-content: flex-end;      /* [        xxx] */
  justify-content: space-between; /* [x    x    x] */
  justify-content: space-around;  /* [ x   x   x ] */
  justify-content: space-evenly;  /* [  x  x  x  ] */
```

```css
}
```
{: .-setup}

### Child

```css
.container > div {
```
{: .-setup}

```css
  /* This: */
  flex: 1 0 auto;

  /* Is equivalent to this: */
  flex-grow: 1;
  flex-shrink: 0;
  flex-basis: auto;
```

```css
  order: 1;
```

```css
  align-self: flex-start;  /* left */
  margin-left: auto;       /* right */
```

```css
}
```
{: .-setup}


## Tricks

### Vertical center

```css
.container {
  display: flex;
}

.container > div {
  width: 100px;
  height: 100px;
  margin: auto;
}
```

### Vertical center (2)

```css
.container {
  display: flex;
  align-items: center;     /* vertical */
  justify-content: center; /* horizontal */
}
```

### Reordering

```css
.container > .top {
 order: 1;
}

.container > .bottom {
 order: 2;
}
```

### Mobile layout


```css
.container {
  display: flex;
  flex-direction: column;
}

.container > .top {
  flex: 0 0 100px;
}

.container > .content {
  flex: 1 0 auto;
}
```

A fixed-height top bar and a dynamic-height content area.

### Table-like

```css
.container {
  display: flex;
}

/* the 'px' values here are just suggested percentages */
.container > .checkbox { flex: 1 0 20px; }
.container > .subject  { flex: 1 0 400px; }
.container > .date     { flex: 1 0 120px; }
```

This creates columns that have different widths, but size accordingly according
to the circumstances.

### Vertical


```css
.container {
  align-items: center;
}
```

Vertically-center all items.

### Left and right

```css
.menu > .left  { align-self: flex-start; }
.menu > .right { align-self: flex-end; }
```

## References
{: .-one-column}

 * [MDN: Using CSS flexbox](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes)
 * [Ultimate flexbox cheatsheet](https://www.sketchingwithcss.com/samplechapter/cheatsheet.html)


id: css-antialias
git_filename: ./css-antialias.md
format: md
field_title: CSS antialiasing
field_category: CSS
field_intro: Here's a 4-line snippet on how to get beautiful, antialiased text with CSS.
field_updated: 2017-10-13
field_updated___timezone: UTC
data:
{"title": "CSS antialiasing", "category": "CSS", "updated": "2017-10-13", "intro": "Here's a 4-line snippet on how to get beautiful, antialiased text with CSS.\n", "body": "### Antialias\n{: .-prime}\n\n```css\n* {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n```\n\n### Support\n\n * Firefox 25+ on OSX\n * Webkits (Chrome, Safari, etc)\n\n## References\n{: .-one-column}\n\n * [maxvoltar.com](http://maxvoltar.com/archive/-webkit-font-smoothing)\n * [maximilianhoffman.com](http://maximilianhoffmann.com/posts/better-font-rendering-on-osx)\n * [ilikekillnerds.com](http://ilikekillnerds.com/2010/12/a-solution-to-stop-font-face-fonts-looking-bold-on-mac-browsers/)\n{: .-also-see}"}

field_body:
### Antialias
{: .-prime}

```css
* {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
```

### Support

 * Firefox 25+ on OSX
 * Webkits (Chrome, Safari, etc)

## References
{: .-one-column}

 * [maxvoltar.com](http://maxvoltar.com/archive/-webkit-font-smoothing)
 * [maximilianhoffman.com](http://maximilianhoffmann.com/posts/better-font-rendering-on-osx)
 * [ilikekillnerds.com](http://ilikekillnerds.com/2010/12/a-solution-to-stop-font-face-fonts-looking-bold-on-mac-browsers/)
{: .-also-see}


id: csharp7
git_filename: ./csharp7.md
format: md
field_title: C# 7
field_category: C-like
field_prism_languages: csharp
field_updated: 2018-12-06
field_updated___timezone: UTC
data:
{"title": "C# 7", "category": "C-like", "updated": "2018-12-06", "prism_languages": ["csharp"], "description": "A quick overview of C# 7\n", "body": "### Out Variables\n\n```csharp\npublic void PrintCoordinates(Point p)\n{\n    p.GetCoordinates(out int x, out int y);\n    WriteLine($\"({x}, {y})\");\n}\n```\n\n`out` is used to declare a variable at the point where it is passed as an argument.\n\n### Pattern Matching\n\n#### Is-expressions with patterns\n\n```csharp\npublic void PrintStars(object o)\n{\n    if (o is null) return;     // constant pattern \"null\"\n    if (!(o is int i)) return; // type pattern \"int i\"\n    WriteLine(new string('*', i));\n}\n```\n\n#### Switch statements with patterns\n\n```csharp\nswitch(shape)\n{\n    case Circle c:\n        WriteLine($\"circle with radius {c.Radius}\");\n        break;\n    case Rectangle s when (s.Length == s.Height):\n        WriteLine($\"{s.Length} x {s.Height} square\");\n        break;\n    case Rectangle r:\n        WriteLine($\"{r.Length} x {r.Height} rectangle\");\n        break;\n    default:\n        WriteLine(\"<unknown shape>\");\n        break;\n    case null:\n        throw new ArgumentNullException(nameof(shape));\n}\n```\n\n### Tuples\n\n#### Tuple type\n\n```csharp\n(string, string, string) LookupName(long id) // tuple return type\n{\n    ... // retrieve first, middle and last from data storage\n    return (first, middle, last); // tuple literal\n}\n```\n\n```csharp\nvar names = LookupName(id);\nWriteLine($\"found {names.Item1} {names.Item3}.\");\n```\n\n#### Tuple elements with name\n\n```csharp\n(string first, string middle, string last) LookupName(long id) // tuple elements have names\n```\n\n```csharp\nvar names = LookupName(id);\nWriteLine($\"found {names.first} {names.last}.\");\n```\n\n#### Tuple Literals\n\n```csharp\n   return (first: first, middle: middle, last: last); // named tuple elements in a literal\n```\n\n#### Tuple Deconstruction\n\n```csharp\n(var first, var middle, var last) = LookupName(id1);\nWriteLine($\"found {first} {last}.\");\n```\nor\n```csharp\nvar (first, middle, last) = LookupName(id1); // var outside\n```\nor\n```csharp\n(first, middle, last) = LookupName(id2); // assign onto existing variables\n```\n\n\n### Local Functions\n\n```csharp\npublic int Fibonacci(int x)\n{\n    if (x < 0) throw new ArgumentException(\"Less negativity please!\", nameof(x));\n    return Fib(x).current;\n\n    (int current, int previous) Fib(int i)\n    {\n        if (i == 0) return (1, 0);\n        var (p, pp) = Fib(i - 1);\n        return (p + pp, p);\n    }\n}\n```\n\n### Literal Improvements\n\n#### Digit Separator inside numbers literals\n\n```csharp\nvar d = 123_456;\nvar x = 0xAB_CD_EF;\n```\n\n#### Binary Literals\n\n```csharp\nvar b = 0b1010_1011_1100_1101_1110_1111;\n```\n\n### Ref Returns and Locals\n\n```csharp\npublic ref int Find(int number, int[] numbers)\n{\n    for (int i = 0; i < numbers.Length; i++)\n    {\n        if (numbers[i] == number) \n        {\n            return ref numbers[i]; // return the storage location, not the value\n        }\n    }\n    throw new IndexOutOfRangeException($\"{nameof(number)} not found\");\n}\n\nint[] array = { 1, 15, -39, 0, 7, 14, -12 };\nref int place = ref Find(7, array); // aliases 7's place in the array\nplace = 9; // replaces 7 with 9 in the array\nWriteLine(array[4]); // prints 9\n```\n\n### More Expression Bodied Members\n\nC# 7.0 adds accessors, constructors and finalizers to the list of things that can have expression bodies:\n\n```csharp\nclass Person\n{\n    private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>();\n    private int id = GetId();\n\n    public Person(string name) => names.TryAdd(id, name); // constructors\n    ~Person() => names.TryRemove(id, out *);              // destructors\n    public string Name\n    {\n        get => names[id];                                 // getters\n        set => names[id] = value;                         // setters\n    }\n}\n```\n\n### Throw Expressions \n\n```csharp\nclass Person\n{\n    public string Name { get; }\n    public Person(string name) => Name = name ?? throw new ArgumentNullException(name);\n    public string GetFirstName()\n    {\n        var parts = Name.Split(\" \");\n        return (parts.Length > 0) ? parts[0] : throw new InvalidOperationException(\"No name!\");\n    }\n    public string GetLastName() => throw new NotImplementedException();\n}\n```"}

field_body:
### Out Variables

```csharp
public void PrintCoordinates(Point p)
{
    p.GetCoordinates(out int x, out int y);
    WriteLine($"({x}, {y})");
}
```

`out` is used to declare a variable at the point where it is passed as an argument.

### Pattern Matching

#### Is-expressions with patterns

```csharp
public void PrintStars(object o)
{
    if (o is null) return;     // constant pattern "null"
    if (!(o is int i)) return; // type pattern "int i"
    WriteLine(new string('*', i));
}
```

#### Switch statements with patterns

```csharp
switch(shape)
{
    case Circle c:
        WriteLine($"circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    default:
        WriteLine("<unknown shape>");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
}
```

### Tuples

#### Tuple type

```csharp
(string, string, string) LookupName(long id) // tuple return type
{
    ... // retrieve first, middle and last from data storage
    return (first, middle, last); // tuple literal
}
```

```csharp
var names = LookupName(id);
WriteLine($"found {names.Item1} {names.Item3}.");
```

#### Tuple elements with name

```csharp
(string first, string middle, string last) LookupName(long id) // tuple elements have names
```

```csharp
var names = LookupName(id);
WriteLine($"found {names.first} {names.last}.");
```

#### Tuple Literals

```csharp
   return (first: first, middle: middle, last: last); // named tuple elements in a literal
```

#### Tuple Deconstruction

```csharp
(var first, var middle, var last) = LookupName(id1);
WriteLine($"found {first} {last}.");
```
or
```csharp
var (first, middle, last) = LookupName(id1); // var outside
```
or
```csharp
(first, middle, last) = LookupName(id2); // assign onto existing variables
```


### Local Functions

```csharp
public int Fibonacci(int x)
{
    if (x < 0) throw new ArgumentException("Less negativity please!", nameof(x));
    return Fib(x).current;

    (int current, int previous) Fib(int i)
    {
        if (i == 0) return (1, 0);
        var (p, pp) = Fib(i - 1);
        return (p + pp, p);
    }
}
```

### Literal Improvements

#### Digit Separator inside numbers literals

```csharp
var d = 123_456;
var x = 0xAB_CD_EF;
```

#### Binary Literals

```csharp
var b = 0b1010_1011_1100_1101_1110_1111;
```

### Ref Returns and Locals

```csharp
public ref int Find(int number, int[] numbers)
{
    for (int i = 0; i < numbers.Length; i++)
    {
        if (numbers[i] == number) 
        {
            return ref numbers[i]; // return the storage location, not the value
        }
    }
    throw new IndexOutOfRangeException($"{nameof(number)} not found");
}

int[] array = { 1, 15, -39, 0, 7, 14, -12 };
ref int place = ref Find(7, array); // aliases 7's place in the array
place = 9; // replaces 7 with 9 in the array
WriteLine(array[4]); // prints 9
```

### More Expression Bodied Members

C# 7.0 adds accessors, constructors and finalizers to the list of things that can have expression bodies:

```csharp
class Person
{
    private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>();
    private int id = GetId();

    public Person(string name) => names.TryAdd(id, name); // constructors
    ~Person() => names.TryRemove(id, out *);              // destructors
    public string Name
    {
        get => names[id];                                 // getters
        set => names[id] = value;                         // setters
    }
}
```

### Throw Expressions 

```csharp
class Person
{
    public string Name { get; }
    public Person(string name) => Name = name ?? throw new ArgumentNullException(name);
    public string GetFirstName()
    {
        var parts = Name.Split(" ");
        return (parts.Length > 0) ? parts[0] : throw new InvalidOperationException("No name!");
    }
    public string GetLastName() => throw new NotImplementedException();
}
```


id: cron
git_filename: ./cron.md
format: md
field_title: Cron
field_category: CLI
field_updated: 2024-03-17
field_updated___timezone: UTC
data:
{"title": "Cron", "category": "CLI", "updated": "2024-03-17", "weight": -3, "body": "## Format\n{: .-two-column}\n\n### Format\n\n```\nMin  Hour Day  Mon  Weekday\n```\n{: .-setup}\n\n```\n*    *    *    *    *  command to be executed\n```\n\n```\n\u252c    \u252c    \u252c    \u252c    \u252c\n\u2502    \u2502    \u2502    \u2502    \u2514\u2500  Weekday  (0=Sun .. 6=Sat)\n\u2502    \u2502    \u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500  Month    (1..12)\n\u2502    \u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500  Day      (1..31)\n\u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500  Hour     (0..23)\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500  Minute   (0..59)\n```\n{: .-setup.-box-chars}\n\n### Operators\n\n| Operator | Description                |\n| ---      | ---                        |\n| `*`      | all values                 |\n| `,`      | separate individual values |\n| `-`      | a range of values          |\n| `/`      | divide a value into steps  |\n\n### Special strings\n\n| String       | Description                            |\n| ---          | ---                                    |\n| `@reboot`    | every rebot                            |\n| `@hourly`    | once every hour - same as `0 * * * *`  |\n| `@daily`     | once every day - same as `0 0 * * *`   |\n| `@midnight`  | once every midnight - same as `@daily` |\n| `@weekly`    | once every week - same as `0 0 * * 0`  |\n| `@monthly`   | once every month - same as `0 0 1 * *` |\n| `@yearly`    | once every year - same as `0 0 1 1 *`  |\n\n### Examples\n\n| Example        | Description                 |\n| ---            | ---                         |\n| `0 * * * *`    | every hour                  |\n| `*/15 * * * *` | every 15 mins               |\n| `0 */2 * * *`  | every 2 hours               |\n| `0 18 * * 0-6` | every week Mon-Sat at 6pm   |\n| `10 2 * * 6,7` | every Sat and Sun on 2:10am |\n| `0 0 * * 0`    | every Sunday midnight       |\n\n### Crontab\n\n```bash\n# Adding tasks easily\necho \"@reboot echo hi\" | crontab\n\n# Open in editor - optional for another user\ncrontab -e [-u user]\n\n# List tasks - optional for another user\ncrontab -l [-u user]\n\n# Delete crontab file - optional for another user\ncrontab -r [-u user]\n```"}

field_body:
## Format
{: .-two-column}

### Format

```
Min  Hour Day  Mon  Weekday
```
{: .-setup}

```
*    *    *    *    *  command to be executed
```

```
┬    ┬    ┬    ┬    ┬
│    │    │    │    └─  Weekday  (0=Sun .. 6=Sat)
│    │    │    └──────  Month    (1..12)
│    │    └───────────  Day      (1..31)
│    └────────────────  Hour     (0..23)
└─────────────────────  Minute   (0..59)
```
{: .-setup.-box-chars}

### Operators

| Operator | Description                |
| ---      | ---                        |
| `*`      | all values                 |
| `,`      | separate individual values |
| `-`      | a range of values          |
| `/`      | divide a value into steps  |

### Special strings

| String       | Description                            |
| ---          | ---                                    |
| `@reboot`    | every rebot                            |
| `@hourly`    | once every hour - same as `0 * * * *`  |
| `@daily`     | once every day - same as `0 0 * * *`   |
| `@midnight`  | once every midnight - same as `@daily` |
| `@weekly`    | once every week - same as `0 0 * * 0`  |
| `@monthly`   | once every month - same as `0 0 1 * *` |
| `@yearly`    | once every year - same as `0 0 1 1 *`  |

### Examples

| Example        | Description                 |
| ---            | ---                         |
| `0 * * * *`    | every hour                  |
| `*/15 * * * *` | every 15 mins               |
| `0 */2 * * *`  | every 2 hours               |
| `0 18 * * 0-6` | every week Mon-Sat at 6pm   |
| `10 2 * * 6,7` | every Sat and Sun on 2:10am |
| `0 0 * * 0`    | every Sunday midnight       |

### Crontab

```bash
# Adding tasks easily
echo "@reboot echo hi" | crontab

# Open in editor - optional for another user
crontab -e [-u user]

# List tasks - optional for another user
crontab -l [-u user]

# Delete crontab file - optional for another user
crontab -r [-u user]
```


id: cordova
git_filename: ./cordova.md
format: md
field_title: Apache Cordova
field_intro: A quick reference to common [Apache Cordova](https://cordova.apache.org/) commands.
data:
{"title": "Apache Cordova", "intro": "A quick reference to common [Apache Cordova](https://cordova.apache.org/) commands.\n", "body": "### Common commands\n\n```\ncordova plugin ls\ncordova plugin search facebook\ncordova plugin add com.phonegap.plugins.facebookconnect\n```\n\n```\ncordova platform add ios\ncordova platform ls\ncordova platform update ios\ncordova platform check\n```\n\n### Common plugins\n\nSome commonly-used plugins:\n\n- [org.apache.cordova.console](https://github.com/apache/cordova-plugin-console)\n- [org.apache.cordova.inappbrowser](https://github.com/apache/cordova-plugin-inappbrowser)\n- [org.apache.cordova.statusbar](https://github.com/apache/cordova-plugin-statusbar)\n- org.apache.cordova.splashscreen\n\nAlso:\n\n- com.phonegap.plugins.facebookconnect"}

field_body:
### Common commands

```
cordova plugin ls
cordova plugin search facebook
cordova plugin add com.phonegap.plugins.facebookconnect
```

```
cordova platform add ios
cordova platform ls
cordova platform update ios
cordova platform check
```

### Common plugins

Some commonly-used plugins:

- [org.apache.cordova.console](https://github.com/apache/cordova-plugin-console)
- [org.apache.cordova.inappbrowser](https://github.com/apache/cordova-plugin-inappbrowser)
- [org.apache.cordova.statusbar](https://github.com/apache/cordova-plugin-statusbar)
- org.apache.cordova.splashscreen

Also:

- com.phonegap.plugins.facebookconnect


id: composer
git_filename: ./composer.md
format: md
field_title: composer
field_category: CLI
field_updated: 2020-02-23
field_updated___timezone: UTC
data:
{"title": "composer", "category": "CLI", "weight": -1, "authors": [{"github": "benolot"}], "updated": "2020-02-23", "description": "Basic guide on how to use Composer, the PHP Package manager.\n", "body": "All composer commands, depending on your install, may need to use `php composer.phar` in the install folder for composer, instead of global/plain `composer`.\n\n### Installing dependencies\n    \n| Command                                | Description                                                  |\n| ---                                    | ---                                                          |\n| `composer install`                     | Downloads and installs all the libraries and dependencies outlined in the `composer.lock` file. If the file does not exist it will look for composer.json and do the same, creating a `composer.lock` file.                          |\n| ---                                    | ---                                                          |\n| `composer install --dry-run`           | Simulates the install without installing anything            |\n\nThis command doesn't change any file. If `composer.lock` is not present, it will create it.\n\n`composer.lock` **should always** be committed to the repository. It has all the information needed to bring the \nlocal dependencies to the last committed state. If that file is modified on the repository, you will need to run \n`composer install` again after fetching the changes to update your local dependencies to those on that file.\n\n### Updating packages\n\n| Command                                       | Description                     |\n| ---                                           | ---                             |\n| `composer update`                             | Updates all packages             |\n| `composer update --with-dependencies`         | Updates all packages and its dependencies             |\n| ---                                           | ---                             |\n| `composer update vendor/package`              | Updates a certain `package` from `vendor`        |\n| `composer update vendor/*`                    | Updates all packages from `vendor` |\n| `composer update --lock`                      | Updates `composer.lock` hash without updating any packages |\n\nThis command changes only the `composer.lock` file.\n\n### Updating autoloader\n\n| Command                    | Description                        |\n| ---                        | ---                                |\n| `composer dumpautoload -o` | Generates optimized autoload files |\n\n### Adding packages\n\n| Command                          | Description                                                 |\n| ---                              | ---                                                         |\n| `composer require vendor/package`      | Adds `package` from `vendor` to composer.json's `require` section and installs it             |\n| ---                              | ---                                                         |\n| `composer require vendor/package --dev` | Adds `package` from `vendor` to composer.json's `require-dev` section and installs it.            |\n\nThis command changes both the `composer.json` and `composer.lock` files.\n\n### Passing versions\n\n| Command                                         | Description                              |\n| ----------------------------------------------- | ---------------------------------------- |\n| `composer require vendor/pkg \"1.3.2\"`           | Installs `1.3.2`                         |\n| `composer require vendor/pkg \">=1.3.2\"`         | Above or equal `1.3.2`                   |\n| `composer require vendor/pkg \"<1.3.2\"`          | Below `1.3.2`                            |\n| `composer require vendor/pkg \"1.3.*\"`           | Latest of `>=1.3.0 <1.4.0`               |\n| `composer require vendor/pkg \"~1.3.2\"`          | Latest of `>=1.3.2 <1.4.0`               |\n| `composer require vendor/pkg \"~1.3\"`            | Latest of `>=1.3.0 <2.0.0`               |\n| `composer require vendor/pkg \"^1.3.2\"`          | Latest of `>=1.3.2 <2.0.0`               |\n| `composer require vendor/pkg \"^1.3\"`            | Latest of `>=1.3.0 <2.0.0`               |\n| `composer require vendor/pkg \"^0.3.2\"`          | Latest of `>=0.3.0 <0.4.0` (for pre-1.0) |\n| `composer require vendor/pkg \"dev-BRANCH_NAME\"` | From the branch `BRANCH_NAME`            |\n\n### Removing packages\n\n| Command                   | Description                                                 |\n| ---                       | ---                                                         |\n| `composer remove vendor/package` | Removes `vendor/package` from composer.json and uninstalls it      |\n\nThis command changes both the `composer.json` and `composer.lock` files.\n\n### Verifying\n\n| Command                      | Description                                                                |\n| ---------------------------- | -------------------------------------------------------------------------- |\n| `composer outdated --direct` | Show only packages that are outdated directly required by the root package |"}

field_body:
All composer commands, depending on your install, may need to use `php composer.phar` in the install folder for composer, instead of global/plain `composer`.

### Installing dependencies
    
| Command                                | Description                                                  |
| ---                                    | ---                                                          |
| `composer install`                     | Downloads and installs all the libraries and dependencies outlined in the `composer.lock` file. If the file does not exist it will look for composer.json and do the same, creating a `composer.lock` file.                          |
| ---                                    | ---                                                          |
| `composer install --dry-run`           | Simulates the install without installing anything            |

This command doesn't change any file. If `composer.lock` is not present, it will create it.

`composer.lock` **should always** be committed to the repository. It has all the information needed to bring the 
local dependencies to the last committed state. If that file is modified on the repository, you will need to run 
`composer install` again after fetching the changes to update your local dependencies to those on that file.

### Updating packages

| Command                                       | Description                     |
| ---                                           | ---                             |
| `composer update`                             | Updates all packages             |
| `composer update --with-dependencies`         | Updates all packages and its dependencies             |
| ---                                           | ---                             |
| `composer update vendor/package`              | Updates a certain `package` from `vendor`        |
| `composer update vendor/*`                    | Updates all packages from `vendor` |
| `composer update --lock`                      | Updates `composer.lock` hash without updating any packages |

This command changes only the `composer.lock` file.

### Updating autoloader

| Command                    | Description                        |
| ---                        | ---                                |
| `composer dumpautoload -o` | Generates optimized autoload files |

### Adding packages

| Command                          | Description                                                 |
| ---                              | ---                                                         |
| `composer require vendor/package`      | Adds `package` from `vendor` to composer.json's `require` section and installs it             |
| ---                              | ---                                                         |
| `composer require vendor/package --dev` | Adds `package` from `vendor` to composer.json's `require-dev` section and installs it.            |

This command changes both the `composer.json` and `composer.lock` files.

### Passing versions

| Command                                         | Description                              |
| ----------------------------------------------- | ---------------------------------------- |
| `composer require vendor/pkg "1.3.2"`           | Installs `1.3.2`                         |
| `composer require vendor/pkg ">=1.3.2"`         | Above or equal `1.3.2`                   |
| `composer require vendor/pkg "<1.3.2"`          | Below `1.3.2`                            |
| `composer require vendor/pkg "1.3.*"`           | Latest of `>=1.3.0 <1.4.0`               |
| `composer require vendor/pkg "~1.3.2"`          | Latest of `>=1.3.2 <1.4.0`               |
| `composer require vendor/pkg "~1.3"`            | Latest of `>=1.3.0 <2.0.0`               |
| `composer require vendor/pkg "^1.3.2"`          | Latest of `>=1.3.2 <2.0.0`               |
| `composer require vendor/pkg "^1.3"`            | Latest of `>=1.3.0 <2.0.0`               |
| `composer require vendor/pkg "^0.3.2"`          | Latest of `>=0.3.0 <0.4.0` (for pre-1.0) |
| `composer require vendor/pkg "dev-BRANCH_NAME"` | From the branch `BRANCH_NAME`            |

### Removing packages

| Command                   | Description                                                 |
| ---                       | ---                                                         |
| `composer remove vendor/package` | Removes `vendor/package` from composer.json and uninstalls it      |

This command changes both the `composer.json` and `composer.lock` files.

### Verifying

| Command                      | Description                                                                |
| ---------------------------- | -------------------------------------------------------------------------- |
| `composer outdated --direct` | Show only packages that are outdated directly required by the root package |


id: commander.js
git_filename: ./commander.js.md
format: md
field_title: Commander.js
field_category: JavaScript libraries
data:
{"title": "Commander.js", "category": "JavaScript libraries", "body": "### About\n{: .-intro}\n\n- <https://github.com/tj/commander.js/>\n\n### Initialize\n\n    var cli = require('commander');\n\n### Options\n\n    cli\n      .version(require('../package').version)\n      .usage('[options] <command>')\n      .option('-w, --words <n>', 'generate <n> words')\n      .option('-i, --interval <n>', 'interval [1000]', 1000)\n      .option('-s, --symbols', 'include symbols')\n      .parse(process.argv);\n\n### Help\n\n    .on('--help', function() {\n      console.log('');\n    })\n\n### Commands\n\n    cli.outputHelp();\n    cli.args == [\"hello\"];\n\n### Other useful things\n\n    process.exit(0);"}

field_body:
### About
{: .-intro}

- <https://github.com/tj/commander.js/>

### Initialize

    var cli = require('commander');

### Options

    cli
      .version(require('../package').version)
      .usage('[options] <command>')
      .option('-w, --words <n>', 'generate <n> words')
      .option('-i, --interval <n>', 'interval [1000]', 1000)
      .option('-s, --symbols', 'include symbols')
      .parse(process.argv);

### Help

    .on('--help', function() {
      console.log('');
    })

### Commands

    cli.outputHelp();
    cli.args == ["hello"];

### Other useful things

    process.exit(0);


id: command_line
git_filename: ./command_line.md
format: md
field_title: Command line stuff
data:
{"title": "Command line stuff", "body": "## List (ls)\n{: .-three-column}\n\n### Usage\n\n    ls [options] [paths]\n\n### Format\n\n| Switch | Description |\n|---|---|\n| `-1` | One entry per line |\n| `-l` | Long view |\n| `-o` | Long view (without groups) |\n| `-C` | Multicolumn (sorted horizontally) |\n| `-x` | Multicolumn (sorted vertically) |\n|---\n| `-F` | Add / after directories |\n| `-G` | Color |\n\n### Options\n\n| `-R` | Recurse |\n| `-a` | Include hidden (dotfiles) |\n| `-A` | Include hidden (but not . and ..) |\n\n### Sorting\n\n| Switch | Description |\n|---|---|\n| `-r` | reverse order |\n| `-S` | sort by size |\n| `-t` | sort by time modified |\n| `-u` | sort by time accessed |\n| `-U` | sort by time created |\n| `-c` | sort by time status was changed |\n|---\n| `-h` | Human-readable size (3k) |\n\n## Tail\n{: .-three-column}\n\n### Usage\n\n    tail [-F | -f | -r] [-bN | -cN | -nN] [file ...]\n\n### Modes\n\n| `-f` | follow |\n| `-F` | follow by filename (accounts for log rotation) |\n| `-r` | Reverse order |\n\n### Options\n\n| `-bN` | N*512 bytes |\n| `-cN` | N bytes |\n| `-nN` | N lines |\n| `+N`  | Start from line N |\n\n<br>\n\n## Sudo\n{: .-three-column}\n\n### Usage\n\n```\nsudo [options] <command>\n```\n\n### Listing\n\n| `-l` | List allowed commands |\n\n### Options\n\n| `-A` | Use $SUDO_ASKPASS |\n| `-b` | Run in background |\n| `-E` | Preserve environment |\n| `-H` | use target's $HOME |\n| `-n` | Don't prompt for password |\n| `-P` | Preserve group vector |\n| `-S` | Read password from stdin |\n\n### File descriptors\n\n| `-C fd` | Close all open file descriptors |\n\n### Prompt\n\n| `-p prompt` | Custom prompt (-p \"%p password:\") |\n\n### Interactive\n\n| Switch | Description |\n|---|---|\n| `-i [cmd]` | Interactive shell without variables |\n| `-s [cmd]` | Interactive shell |\n|----\n| `-u user` | run as this user |\n| `-g group` | run as this group |\n\n### Timestamp\n\n| `-v` | revalidate timestamp for 5 mins |\n| `-k` | invalidate timestamp |\n| `-K` | just like -k |\n\n## wc (Word count)\n{: .-three-column}\n\n### wc\n\n```\n... | wc [options]\n```\n\n### Options\n\n| `-c` | Bytes |\n| `-l` | Lines |\n| `-m` | Characters (incl multi-byte) |\n| `-w` | Words |\n\n## Grep\n{: .-three-column}\n\n### Usage\n\n```\ngrep [options] [pattern] [file ...]\n```\n\n### Options\n\n| Switch | Description |\n|---|---|\n| `-A num` | Print `num` lines of training context |\n|----\n| `-G` | --basic-regexp (default) |\n| `-E` | --extended-regexp |\n| `-P` | --perl-regexp |\n|----\n| `-f file` | --file (Get patterns for file) |\n| `-F` | --fixed-strings |\n|----\n| `-h` | --no-filename |\n| `-H` | --with-filename |\n|----\n| `-l` | --files-with-matches (just print filenames) |\n| `-L` | --files-without-match |\n|----\n| `-r, -R` | --recursive |\n| `-v` | --invert-match |\n| `-i` | --ignore-case |\n\n### Synonyms\n\n    egrep  =>  grep -E\n    fgrep  =>  grep -F\n\n## Other recipes\n{: .-three-column}\n\n### Search-and-replace in all files\n\n    perl -p -i -e 's/hello/HELLO/g' **/*"}

field_body:
## List (ls)
{: .-three-column}

### Usage

    ls [options] [paths]

### Format

| Switch | Description |
|---|---|
| `-1` | One entry per line |
| `-l` | Long view |
| `-o` | Long view (without groups) |
| `-C` | Multicolumn (sorted horizontally) |
| `-x` | Multicolumn (sorted vertically) |
|---
| `-F` | Add / after directories |
| `-G` | Color |

### Options

| `-R` | Recurse |
| `-a` | Include hidden (dotfiles) |
| `-A` | Include hidden (but not . and ..) |

### Sorting

| Switch | Description |
|---|---|
| `-r` | reverse order |
| `-S` | sort by size |
| `-t` | sort by time modified |
| `-u` | sort by time accessed |
| `-U` | sort by time created |
| `-c` | sort by time status was changed |
|---
| `-h` | Human-readable size (3k) |

## Tail
{: .-three-column}

### Usage

    tail [-F | -f | -r] [-bN | -cN | -nN] [file ...]

### Modes

| `-f` | follow |
| `-F` | follow by filename (accounts for log rotation) |
| `-r` | Reverse order |

### Options

| `-bN` | N*512 bytes |
| `-cN` | N bytes |
| `-nN` | N lines |
| `+N`  | Start from line N |

<br>

## Sudo
{: .-three-column}

### Usage

```
sudo [options] <command>
```

### Listing

| `-l` | List allowed commands |

### Options

| `-A` | Use $SUDO_ASKPASS |
| `-b` | Run in background |
| `-E` | Preserve environment |
| `-H` | use target's $HOME |
| `-n` | Don't prompt for password |
| `-P` | Preserve group vector |
| `-S` | Read password from stdin |

### File descriptors

| `-C fd` | Close all open file descriptors |

### Prompt

| `-p prompt` | Custom prompt (-p "%p password:") |

### Interactive

| Switch | Description |
|---|---|
| `-i [cmd]` | Interactive shell without variables |
| `-s [cmd]` | Interactive shell |
|----
| `-u user` | run as this user |
| `-g group` | run as this group |

### Timestamp

| `-v` | revalidate timestamp for 5 mins |
| `-k` | invalidate timestamp |
| `-K` | just like -k |

## wc (Word count)
{: .-three-column}

### wc

```
... | wc [options]
```

### Options

| `-c` | Bytes |
| `-l` | Lines |
| `-m` | Characters (incl multi-byte) |
| `-w` | Words |

## Grep
{: .-three-column}

### Usage

```
grep [options] [pattern] [file ...]
```

### Options

| Switch | Description |
|---|---|
| `-A num` | Print `num` lines of training context |
|----
| `-G` | --basic-regexp (default) |
| `-E` | --extended-regexp |
| `-P` | --perl-regexp |
|----
| `-f file` | --file (Get patterns for file) |
| `-F` | --fixed-strings |
|----
| `-h` | --no-filename |
| `-H` | --with-filename |
|----
| `-l` | --files-with-matches (just print filenames) |
| `-L` | --files-without-match |
|----
| `-r, -R` | --recursive |
| `-v` | --invert-match |
| `-i` | --ignore-case |

### Synonyms

    egrep  =>  grep -E
    fgrep  =>  grep -F

## Other recipes
{: .-three-column}

### Search-and-replace in all files

    perl -p -i -e 's/hello/HELLO/g' **/*


id: co
git_filename: ./co.md
format: md
field_title: co
field_category: JavaScript libraries
field_intro: [co](https://github.com/tj/co) allows you to use generators to manage async flow.
field_updated: 2017-10-27
field_updated___timezone: UTC
data:
{"title": "co", "category": "JavaScript libraries", "updated": "2017-10-27", "weight": -1, "intro": "[co](https://github.com/tj/co) allows you to use generators to manage async flow.\n", "body": "[co]: https://github.com/tj/co\n[thunkify]: https://github.com/visionmedia/node-thunkify\n[unyield]: https://github.com/MatthewMueller/unyield\n[thenify]: https://www.npmjs.com/package/thenify\n[mz]: https://www.npmjs.com/package/mz\n\n### Running generators\n\n```js\nco(function * () {\n  yield Promise.resolve(true)\n}).then(...)\n```\n\nA generator can `yield` a thunk or promise. Using `co()` will immediately invoke the block inside it.\n\n### Generator \u2192 Promise\n\n```js\nvar fn = co.wrap(function * (val) {\n  return yield Promise.resolve(val)\n})\n\nfn().then(...)\n```\n\nUse `co.wrap()`. Most of the time, you'll be using co.wrap.\n\n### Generator \u2192 Node callback\n\n```js\nvar get = unyield(function * () {\n})\n\nget(function (err, res) { ... })\n```\n\nUse [unyield]. (You can [thunkify] this later)\n\n\n### Node callback \u2192 Thunk\n\n```js\nvar readFile = thunkify(fs.readFile)\n\nco(function * () {\n  var data = yield readFile('index.txt', 'utf-8')\n})\n```\n\nUse [thunkify]. You can yield this. You can also use [thenify] too.\n\n### Using Node.js API\n\n```js\nvar readFile = require('mz/fs').readFile\n\nvar getLines = co.wrap(function * (filename) {\n  var data = yield readFile(filename, 'utf-8')\n  return data.split('\\n')\n})\n\ngetLines('file.txt').then((lines) => { ... })\n```\n\nUse [mz] for async Node.js API. You can also either [thunkify] or [thenify] them instead."}

field_body:
[co]: https://github.com/tj/co
[thunkify]: https://github.com/visionmedia/node-thunkify
[unyield]: https://github.com/MatthewMueller/unyield
[thenify]: https://www.npmjs.com/package/thenify
[mz]: https://www.npmjs.com/package/mz

### Running generators

```js
co(function * () {
  yield Promise.resolve(true)
}).then(...)
```

A generator can `yield` a thunk or promise. Using `co()` will immediately invoke the block inside it.

### Generator → Promise

```js
var fn = co.wrap(function * (val) {
  return yield Promise.resolve(val)
})

fn().then(...)
```

Use `co.wrap()`. Most of the time, you'll be using co.wrap.

### Generator → Node callback

```js
var get = unyield(function * () {
})

get(function (err, res) { ... })
```

Use [unyield]. (You can [thunkify] this later)


### Node callback → Thunk

```js
var readFile = thunkify(fs.readFile)

co(function * () {
  var data = yield readFile('index.txt', 'utf-8')
})
```

Use [thunkify]. You can yield this. You can also use [thenify] too.

### Using Node.js API

```js
var readFile = require('mz/fs').readFile

var getLines = co.wrap(function * (filename) {
  var data = yield readFile(filename, 'utf-8')
  return data.split('\n')
})

getLines('file.txt').then((lines) => { ... })
```

Use [mz] for async Node.js API. You can also either [thunkify] or [thenify] them instead.


id: clip
git_filename: ./clip.md
format: md
field_title: Command Line Interface Pages
field_category: CLI
field_updated: 2023-02-23
field_updated___timezone: UTC
data:
{"title": "Command Line Interface Pages", "category": "CLI", "updated": "2023-02-23", "keywords": ["CLI"], "body": "### Page layout\n\n```md\n# command\n\n> Some command description\n> More information: https://some/link/to/url\n\n- Some code description:\n\n`command argument1 argument2`\n```\n\n### [Primitive placeholders](https://github.com/command-line-interface-pages/syntax/blob/main/type-specific/cli.md#primitive-placeholders)\n\n```md\n- Delay in [s]econds:\n\n`sleep {int seconds: 2}s`\n```\n\n### [Primitive repeated placeholders](https://github.com/command-line-interface-pages/syntax/blob/main/type-specific/cli.md#repeated-primitive-placeholders)\n\n```md\n- [c]reate an archive and write it to a [f]ile:\n\n`tar {option mode: --create, -c} {option: --file, -f} {/?file archive: target.tar} {/?path+ input}`\n```\n\n### Also see\n{: .-one-column}\n\n* [Render](https://github.com/command-line-interface-pages/v2-tooling/tree/main/clip-view)\n* [Page's repository](https://github.com/command-line-interface-pages/cli-pages)\n* [Syntax](https://github.com/command-line-interface-pages/syntax/blob/main/base.md)"}

field_body:
### Page layout

```md
# command

> Some command description
> More information: https://some/link/to/url

- Some code description:

`command argument1 argument2`
```

### [Primitive placeholders](https://github.com/command-line-interface-pages/syntax/blob/main/type-specific/cli.md#primitive-placeholders)

```md
- Delay in [s]econds:

`sleep {int seconds: 2}s`
```

### [Primitive repeated placeholders](https://github.com/command-line-interface-pages/syntax/blob/main/type-specific/cli.md#repeated-primitive-placeholders)

```md
- [c]reate an archive and write it to a [f]ile:

`tar {option mode: --create, -c} {option: --file, -f} {/?file archive: target.tar} {/?path+ input}`
```

### Also see
{: .-one-column}

* [Render](https://github.com/command-line-interface-pages/v2-tooling/tree/main/clip-view)
* [Page's repository](https://github.com/command-line-interface-pages/cli-pages)
* [Syntax](https://github.com/command-line-interface-pages/syntax/blob/main/base.md)


id: claude-code
git_filename: ./claude-code.md
format: md
field_title: Claude Code
field_category: AI
field_tags: Featured
field_updated: 2025-01-08
field_updated___timezone: UTC
data:
{"title": "Claude Code", "category": "AI", "tags": ["Featured"], "updated": "2025-01-08", "keywords": ["AI assistant", "CLI", "Code generation", "File operations", "Interactive mode", "Memory management"], "body": "## Getting started\n{: .-three-column}\n\n### Introduction\n{: .-intro}\n\n[Claude Code](https://claude.ai/code) is an AI-powered CLI assistant for software engineering tasks. This reference covers the most commonly used commands and features.\n\n- [Claude Code docs](https://docs.anthropic.com/en/docs/claude-code) _(docs.anthropic.com)_\n- [GitHub repository](https://github.com/anthropics/claude-code) _(github.com)_\n\n### Installation & Setup\n\n```bash\n# Install Claude Code\nnpm install -g @anthropics/claude-code\n\n# Login with API key\nclaude auth login\n\n# Check authentication status\nclaude auth status\n```\n\n### Quick Start\n\n```bash\n# Start interactive session\nclaude\n\n# Run a single command\nclaude \"help me write a Python function\"\n\n# Resume previous session\nclaude --resume\n```\n\n## Core Commands\n{: .-three-column}\n\n### Interactive Mode\n{: .-prime}\n\n| Command                    | Description                        |\n| -------------------------- | ---------------------------------- |\n| `claude`                   | Start interactive session          |\n| `claude --resume`          | Resume last session                |\n| `claude --memory`          | Start with memory enabled          |\n| `/help`                    | Show help and available commands   |\n| `/clear`                   | Clear current conversation         |\n| `/exit`                    | Exit interactive mode              |\n{: .-shortcuts}\n\n### File Operations\n\n| Command                    | Description                        |\n| -------------------------- | ---------------------------------- |\n| `claude \"read file.py\"`    | Read and analyze a file            |\n| `claude \"edit file.py\"`    | Edit an existing file              |\n| `claude \"create file.py\"`  | Create a new file                  |\n| `claude \"fix tests\"`       | Fix failing tests                  |\n| `claude \"refactor code\"`   | Refactor existing code             |\n{: .-shortcuts}\n\n### Git Integration\n\n| Command                         | Description                        |\n| ------------------------------- | ---------------------------------- |\n| `claude \"create commit\"`        | Create git commit with message     |\n| `claude \"create PR\"`            | Create pull request                |\n| `claude \"review changes\"`       | Review git changes                 |\n| `claude \"fix merge conflicts\"`  | Help resolve merge conflicts       |\n{: .-shortcuts}\n\n## Advanced Features\n{: .-three-column}\n\n### Memory Management\n\n```bash\n# Enable memory for current session\nclaude --memory\n\n# View memory contents\nclaude \"show memory\"\n\n# Clear memory\nclaude \"clear memory\"\n```\n\n### Extended Thinking\n\n```bash\n# Enable deeper analysis\nclaude --think\n\n# Complex problem solving\nclaude \"analyze this codebase and suggest improvements\"\n```\n\n### Image Analysis\n\n```bash\n# Analyze screenshot or diagram\nclaude \"analyze this screenshot\" --image path/to/image.png\n\n# Paste image from clipboard\nclaude \"explain this diagram\" # then paste image\n```\n\n## Slash Commands\n{: .-three-column}\n\n### Session Management\n\n| Command      | Description                          |\n| ------------ | ------------------------------------ |\n| `/help`      | Show available commands              |\n| `/clear`     | Clear conversation history           |\n| `/reset`     | Reset conversation state             |\n| `/exit`      | Exit interactive mode                |\n| `/version`   | Show Claude Code version             |\n{: .-shortcuts}\n\n### Settings\n\n| Command        | Description                        |\n| -------------- | ---------------------------------- |\n| `/settings`    | Show current settings              |\n| `/model`       | Change AI model                    |\n| `/memory on`   | Enable memory                      |\n| `/memory off`  | Disable memory                     |\n{: .-shortcuts}\n\n### Productivity\n\n| Command        | Description                        |\n| -------------- | ---------------------------------- |\n| `/save`        | Save conversation                  |\n| `/load`        | Load previous conversation         |\n| `/export`      | Export conversation to file        |\n{: .-shortcuts}\n\n## Common Workflows\n{: .-three-column}\n\n### Code Review\n\n```bash\n# Review specific file\nclaude \"review this code for bugs\" file.py\n\n# Review all changes\nclaude \"review my git changes\"\n\n# Check code quality\nclaude \"suggest improvements\" src/\n```\n\n### Testing\n\n```bash\n# Generate tests\nclaude \"write tests for this function\"\n\n# Fix failing tests\nclaude \"fix these test failures\"\n\n# Test coverage analysis\nclaude \"analyze test coverage\"\n```\n\n### Documentation\n\n```bash\n# Generate README\nclaude \"create README for this project\"\n\n# Add code comments\nclaude \"add documentation to this function\"\n\n# API documentation\nclaude \"generate API docs\"\n```\n\n### Debugging\n\n```bash\n# Debug error\nclaude \"help debug this error: [error message]\"\n\n# Performance analysis\nclaude \"why is this code slow?\"\n\n# Code explanation\nclaude \"explain how this works\" complex_function.py\n```\n\n## IDE Integrations\n{: .-three-column}\n\n### VS Code\n\n```bash\n# Install VS Code extension\ncode --install-extension anthropic.claude-code\n\n# Open in VS Code\nclaude --vscode\n\n# VS Code commands\nCtrl+Shift+P -> \"Claude: Ask\"\nCtrl+Shift+P -> \"Claude: Review\"\n```\n\n### Configuration\n\n```bash\n# Set default editor\nclaude config set editor code\n\n# Set working directory\nclaude config set workdir /path/to/project\n\n# View all settings\nclaude config list\n```\n\n## Best Practices\n{: .-three-column}\n\n### Effective Prompting\n\n```bash\n# Be specific about requirements\nclaude \"write a Python function that validates email addresses with regex\"\n\n# Provide context\nclaude \"in this Django project, add user authentication\"\n\n# Ask for explanations\nclaude \"explain this code and suggest improvements\"\n```\n\n### Project Structure\n\n```bash\n# Analyze entire project\nclaude \"analyze project structure and suggest improvements\"\n\n# Focus on specific areas\nclaude \"review the database models in models.py\"\n\n# Architecture decisions\nclaude \"should I use async here?\"\n```\n\n### Security\n\n```bash\n# Security review\nclaude \"check this code for security vulnerabilities\"\n\n# Best practices\nclaude \"make this code more secure\"\n\n# Audit dependencies\nclaude \"review package.json for security issues\"\n```\n\n## CLI Options\n{: .-three-column}\n\n### Global Options\n\n| Option              | Description                        |\n| ------------------- | ---------------------------------- |\n| `--help`            | Show help information              |\n| `--version`         | Show version number                |\n| `--resume`          | Resume previous session            |\n| `--memory`          | Enable memory                      |\n| `--think`           | Enable extended thinking           |\n| `--no-color`        | Disable colored output             |\n| `--verbose`         | Verbose logging                    |\n{: .-shortcuts}\n\n### Authentication\n\n| Command              | Description                        |\n| -------------------- | ---------------------------------- |\n| `claude auth login`  | Login with API key                 |\n| `claude auth logout` | Logout current session             |\n| `claude auth status` | Check authentication status        |\n| `claude auth whoami` | Show current user info             |\n{: .-shortcuts}\n\n### Configuration\n\n| Command                | Description                      |\n| ---------------------- | -------------------------------- |\n| `claude config set`    | Set configuration value          |\n| `claude config get`    | Get configuration value          |\n| `claude config list`   | List all configuration           |\n| `claude config reset`  | Reset to default configuration   |\n{: .-shortcuts}\n\n## Troubleshooting\n{: .-three-column}\n\n### Common Issues\n\n```bash\n# Clear authentication\nclaude auth logout && claude auth login\n\n# Reset configuration\nclaude config reset\n\n# Clear cache\nclaude --clear-cache\n\n# Debug mode\nclaude --verbose --debug\n```\n\n### Network Issues\n\n```bash\n# Check connectivity\nclaude \"test connection\"\n\n# Use proxy\nclaude --proxy http://proxy:8080\n\n# Timeout settings\nclaude config set timeout 30\n```\n\n### Memory Issues\n\n```bash\n# Clear memory\nclaude \"clear memory\"\n\n# Disable memory\nclaude --no-memory\n\n# Memory usage\nclaude \"show memory usage\"\n```\n\n## Environment Variables\n\n| Variable              | Description                        |\n| --------------------- | ---------------------------------- |\n| `CLAUDE_API_KEY`      | API key for authentication         |\n| `CLAUDE_MODEL`        | Default model to use               |\n| `CLAUDE_MEMORY`       | Enable memory by default           |\n| `CLAUDE_EDITOR`       | Default text editor                |\n| `CLAUDE_WORKDIR`      | Default working directory          |\n| `NO_COLOR`            | Disable colored output             |\n\n## Also see\n{: .-one-column}\n\n- [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code) _(docs.anthropic.com)_\n- [GitHub repository](https://github.com/anthropics/claude-code) _(github.com)_\n- [Claude API docs](https://docs.anthropic.com/en/api) _(docs.anthropic.com)_\n- [Community discussions](https://github.com/anthropics/claude-code/discussions) _(github.com)_"}

field_body:
## Getting started
{: .-three-column}

### Introduction
{: .-intro}

[Claude Code](https://claude.ai/code) is an AI-powered CLI assistant for software engineering tasks. This reference covers the most commonly used commands and features.

- [Claude Code docs](https://docs.anthropic.com/en/docs/claude-code) _(docs.anthropic.com)_
- [GitHub repository](https://github.com/anthropics/claude-code) _(github.com)_

### Installation & Setup

```bash
# Install Claude Code
npm install -g @anthropics/claude-code

# Login with API key
claude auth login

# Check authentication status
claude auth status
```

### Quick Start

```bash
# Start interactive session
claude

# Run a single command
claude "help me write a Python function"

# Resume previous session
claude --resume
```

## Core Commands
{: .-three-column}

### Interactive Mode
{: .-prime}

| Command                    | Description                        |
| -------------------------- | ---------------------------------- |
| `claude`                   | Start interactive session          |
| `claude --resume`          | Resume last session                |
| `claude --memory`          | Start with memory enabled          |
| `/help`                    | Show help and available commands   |
| `/clear`                   | Clear current conversation         |
| `/exit`                    | Exit interactive mode              |
{: .-shortcuts}

### File Operations

| Command                    | Description                        |
| -------------------------- | ---------------------------------- |
| `claude "read file.py"`    | Read and analyze a file            |
| `claude "edit file.py"`    | Edit an existing file              |
| `claude "create file.py"`  | Create a new file                  |
| `claude "fix tests"`       | Fix failing tests                  |
| `claude "refactor code"`   | Refactor existing code             |
{: .-shortcuts}

### Git Integration

| Command                         | Description                        |
| ------------------------------- | ---------------------------------- |
| `claude "create commit"`        | Create git commit with message     |
| `claude "create PR"`            | Create pull request                |
| `claude "review changes"`       | Review git changes                 |
| `claude "fix merge conflicts"`  | Help resolve merge conflicts       |
{: .-shortcuts}

## Advanced Features
{: .-three-column}

### Memory Management

```bash
# Enable memory for current session
claude --memory

# View memory contents
claude "show memory"

# Clear memory
claude "clear memory"
```

### Extended Thinking

```bash
# Enable deeper analysis
claude --think

# Complex problem solving
claude "analyze this codebase and suggest improvements"
```

### Image Analysis

```bash
# Analyze screenshot or diagram
claude "analyze this screenshot" --image path/to/image.png

# Paste image from clipboard
claude "explain this diagram" # then paste image
```

## Slash Commands
{: .-three-column}

### Session Management

| Command      | Description                          |
| ------------ | ------------------------------------ |
| `/help`      | Show available commands              |
| `/clear`     | Clear conversation history           |
| `/reset`     | Reset conversation state             |
| `/exit`      | Exit interactive mode                |
| `/version`   | Show Claude Code version             |
{: .-shortcuts}

### Settings

| Command        | Description                        |
| -------------- | ---------------------------------- |
| `/settings`    | Show current settings              |
| `/model`       | Change AI model                    |
| `/memory on`   | Enable memory                      |
| `/memory off`  | Disable memory                     |
{: .-shortcuts}

### Productivity

| Command        | Description                        |
| -------------- | ---------------------------------- |
| `/save`        | Save conversation                  |
| `/load`        | Load previous conversation         |
| `/export`      | Export conversation to file        |
{: .-shortcuts}

## Common Workflows
{: .-three-column}

### Code Review

```bash
# Review specific file
claude "review this code for bugs" file.py

# Review all changes
claude "review my git changes"

# Check code quality
claude "suggest improvements" src/
```

### Testing

```bash
# Generate tests
claude "write tests for this function"

# Fix failing tests
claude "fix these test failures"

# Test coverage analysis
claude "analyze test coverage"
```

### Documentation

```bash
# Generate README
claude "create README for this project"

# Add code comments
claude "add documentation to this function"

# API documentation
claude "generate API docs"
```

### Debugging

```bash
# Debug error
claude "help debug this error: [error message]"

# Performance analysis
claude "why is this code slow?"

# Code explanation
claude "explain how this works" complex_function.py
```

## IDE Integrations
{: .-three-column}

### VS Code

```bash
# Install VS Code extension
code --install-extension anthropic.claude-code

# Open in VS Code
claude --vscode

# VS Code commands
Ctrl+Shift+P -> "Claude: Ask"
Ctrl+Shift+P -> "Claude: Review"
```

### Configuration

```bash
# Set default editor
claude config set editor code

# Set working directory
claude config set workdir /path/to/project

# View all settings
claude config list
```

## Best Practices
{: .-three-column}

### Effective Prompting

```bash
# Be specific about requirements
claude "write a Python function that validates email addresses with regex"

# Provide context
claude "in this Django project, add user authentication"

# Ask for explanations
claude "explain this code and suggest improvements"
```

### Project Structure

```bash
# Analyze entire project
claude "analyze project structure and suggest improvements"

# Focus on specific areas
claude "review the database models in models.py"

# Architecture decisions
claude "should I use async here?"
```

### Security

```bash
# Security review
claude "check this code for security vulnerabilities"

# Best practices
claude "make this code more secure"

# Audit dependencies
claude "review package.json for security issues"
```

## CLI Options
{: .-three-column}

### Global Options

| Option              | Description                        |
| ------------------- | ---------------------------------- |
| `--help`            | Show help information              |
| `--version`         | Show version number                |
| `--resume`          | Resume previous session            |
| `--memory`          | Enable memory                      |
| `--think`           | Enable extended thinking           |
| `--no-color`        | Disable colored output             |
| `--verbose`         | Verbose logging                    |
{: .-shortcuts}

### Authentication

| Command              | Description                        |
| -------------------- | ---------------------------------- |
| `claude auth login`  | Login with API key                 |
| `claude auth logout` | Logout current session             |
| `claude auth status` | Check authentication status        |
| `claude auth whoami` | Show current user info             |
{: .-shortcuts}

### Configuration

| Command                | Description                      |
| ---------------------- | -------------------------------- |
| `claude config set`    | Set configuration value          |
| `claude config get`    | Get configuration value          |
| `claude config list`   | List all configuration           |
| `claude config reset`  | Reset to default configuration   |
{: .-shortcuts}

## Troubleshooting
{: .-three-column}

### Common Issues

```bash
# Clear authentication
claude auth logout && claude auth login

# Reset configuration
claude config reset

# Clear cache
claude --clear-cache

# Debug mode
claude --verbose --debug
```

### Network Issues

```bash
# Check connectivity
claude "test connection"

# Use proxy
claude --proxy http://proxy:8080

# Timeout settings
claude config set timeout 30
```

### Memory Issues

```bash
# Clear memory
claude "clear memory"

# Disable memory
claude --no-memory

# Memory usage
claude "show memory usage"
```

## Environment Variables

| Variable              | Description                        |
| --------------------- | ---------------------------------- |
| `CLAUDE_API_KEY`      | API key for authentication         |
| `CLAUDE_MODEL`        | Default model to use               |
| `CLAUDE_MEMORY`       | Enable memory by default           |
| `CLAUDE_EDITOR`       | Default text editor                |
| `CLAUDE_WORKDIR`      | Default working directory          |
| `NO_COLOR`            | Disable colored output             |

## Also see
{: .-one-column}

- [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code) _(docs.anthropic.com)_
- [GitHub repository](https://github.com/anthropics/claude-code) _(github.com)_
- [Claude API docs](https://docs.anthropic.com/en/api) _(docs.anthropic.com)_
- [Community discussions](https://github.com/anthropics/claude-code/discussions) _(github.com)_


id: circle
git_filename: ./circle.md
format: md
field_title: CircleCI
field_category: Devops
data:
{"title": "CircleCI", "category": "Devops", "body": "### About\n{: .-intro}\n\n- <https://circleci.com/docs/config-sample>\n\n### circle.yml\n\n* __machine__: adjusting the VM to your preferences and requirements\n* __checkout__: checking out and cloning your git repo\n* __dependencies__: setting up your project's language-specific dependencies\n* __database__: preparing the databases for your tests\n* __test__: running your tests\n* __deployment__: deploying your code to your web servers\n\nSee: <https://circleci.com/docs/configuration>\n\n### Sample\n\n```yml\n## Customize the test machine\nmachine:\n\n  timezone:\n    America/Los_Angeles # Set the timezone\n\n  # Version of ruby to use\n  ruby:\n    version:\n      1.8.7-p358-falcon-perf\n\n  # Override /etc/hosts\n  hosts:\n    circlehost: 127.0.0.1\n    dev.mycompany.com: 127.0.0.1\n\n  # Add some environment variables\n  environment:\n    CIRCLE_ENV: test\n    DATABASE_URL: postgres://ubuntu:@127.0.0.1:5432/circle_test\n\n## Customize checkout\ncheckout:\n  post:\n    - git submodule sync\n    - git submodule update --init # use submodules\n\n## Customize dependencies\ndependencies:\n  pre:\n    - npm install coffeescript # install from a different package manager\n    - gem uninstall bundler # use a custom version of bundler\n    - gem install bundler --pre\n\n  override:\n    - bundle install: # note ':' here\n        timeout: 180 # fail if command has no output for 3 minutes\n\n  # we automatically cache and restore many dependencies between\n  # builds. If you need to, you can add custom paths to cache:\n  cache_directories:\n    - \"custom_1\"   # relative to the build directory\n    - \"~/custom_2\" # relative to the user's home directory\n\n## Customize database setup\ndatabase:\n  override:\n    # replace CircleCI's generated database.yml\n    - cp config/database.yml.ci config/database.yml\n    - bundle exec rake db:create db:schema:load\n\n## Customize test commands\ntest:\n  override:\n    - phpunit test/unit-tests # use PHPunit for testing\n  post:\n    - bundle exec rake jasmine:ci: # add an extra test type\n        environment:\n          RAILS_ENV: test\n          RACK_ENV: test\n\n## Customize deployment commands\ndeployment:\n  staging:\n    branch: master\n    heroku:\n      appname: foo-bar-123\n\n## Custom notifications\nnotify:\n  webhooks:\n    # A list of hashes representing hooks. Only the url field is supported.\n    - url: https://someurl.com/hooks/circle\n```"}

field_body:
### About
{: .-intro}

- <https://circleci.com/docs/config-sample>

### circle.yml

* __machine__: adjusting the VM to your preferences and requirements
* __checkout__: checking out and cloning your git repo
* __dependencies__: setting up your project's language-specific dependencies
* __database__: preparing the databases for your tests
* __test__: running your tests
* __deployment__: deploying your code to your web servers

See: <https://circleci.com/docs/configuration>

### Sample

```yml
## Customize the test machine
machine:

  timezone:
    America/Los_Angeles # Set the timezone

  # Version of ruby to use
  ruby:
    version:
      1.8.7-p358-falcon-perf

  # Override /etc/hosts
  hosts:
    circlehost: 127.0.0.1
    dev.mycompany.com: 127.0.0.1

  # Add some environment variables
  environment:
    CIRCLE_ENV: test
    DATABASE_URL: postgres://ubuntu:@127.0.0.1:5432/circle_test

## Customize checkout
checkout:
  post:
    - git submodule sync
    - git submodule update --init # use submodules

## Customize dependencies
dependencies:
  pre:
    - npm install coffeescript # install from a different package manager
    - gem uninstall bundler # use a custom version of bundler
    - gem install bundler --pre

  override:
    - bundle install: # note ':' here
        timeout: 180 # fail if command has no output for 3 minutes

  # we automatically cache and restore many dependencies between
  # builds. If you need to, you can add custom paths to cache:
  cache_directories:
    - "custom_1"   # relative to the build directory
    - "~/custom_2" # relative to the user's home directory

## Customize database setup
database:
  override:
    # replace CircleCI's generated database.yml
    - cp config/database.yml.ci config/database.yml
    - bundle exec rake db:create db:schema:load

## Customize test commands
test:
  override:
    - phpunit test/unit-tests # use PHPunit for testing
  post:
    - bundle exec rake jasmine:ci: # add an extra test type
        environment:
          RAILS_ENV: test
          RACK_ENV: test

## Customize deployment commands
deployment:
  staging:
    branch: master
    heroku:
      appname: foo-bar-123

## Custom notifications
notify:
  webhooks:
    # A list of hashes representing hooks. Only the url field is supported.
    - url: https://someurl.com/hooks/circle
```


id: cidr
git_filename: ./cidr.md
format: md
field_title: CIDR
field_category: Misc
field_updated: 2018-05-14
field_updated___timezone: UTC
data:
{"title": "CIDR", "category": "Misc", "updated": "2018-05-14", "body": "### CIDR ranges\n\n| Range           | First IP | Last IP        |\n| ---             | ---      | ---            |\n| **10.0.0.0/24** | 10.0.0.0 | 10.0.0.255     |\n| **10.0.0.0/16** | 10.0.0.0 | 10.0.255.255   |\n| **10.0.0.0/8**  | 10.0.0.0 | 10.255.255.255 |\n| **0.0.0.0/0**   | (all)    | (all)          |\n\n### Resources\n\n- [CIDR range calculator](http://ipaddressguide.com/cidr#range) _(ipaddressguide.com)_"}

field_body:
### CIDR ranges

| Range           | First IP | Last IP        |
| ---             | ---      | ---            |
| **10.0.0.0/24** | 10.0.0.0 | 10.0.0.255     |
| **10.0.0.0/16** | 10.0.0.0 | 10.0.255.255   |
| **10.0.0.0/8**  | 10.0.0.0 | 10.255.255.255 |
| **0.0.0.0/0**   | (all)    | (all)          |

### Resources

- [CIDR range calculator](http://ipaddressguide.com/cidr#range) _(ipaddressguide.com)_


id: chunky_png
git_filename: ./chunky_png.md
format: md
field_title: Chunky PNG
field_category: Ruby libraries
data:
{"title": "Chunky PNG", "category": "Ruby libraries", "body": "### Loading\n\n```ruby\nimage = ChunkyPNG::Image.from_file('file.png')\n```\n\n#### Alternate ways\n\n```ruby\nimage = ChunkyPNG::Image.from_blob(File.read('file.png'))\nimage = ChunkyPNG::Image.from_io(io) \n```\n\nLoads from `file.png`.\n\n### Saving\n\n```ruby\nimage.save('filename.png')\n```\n\n#### Alternate ways\n\n```ruby\nFile.open('newfile.png', 'wb') { |io| image.write(io) }\nbinary_string = image.to_blob\n```\n\nWrites an image to `newfile.png`.\n\n### Drawing\n\n```ruby\nimage[0, 0] = ChunkyPNG::Color.rgba(255, 0,0, 128)\nimage.line(1, 1, 10, 1, ChunkyPNG::Color.from_hex('#aa007f'))\n```\n\n### Canvas\n\n```ruby\ncrop(x, y, w, h)\n```\n\n### Transforms\n\n```ruby\nnew_image = image.flip_horizontally.rotate_right\n```"}

field_body:
### Loading

```ruby
image = ChunkyPNG::Image.from_file('file.png')
```

#### Alternate ways

```ruby
image = ChunkyPNG::Image.from_blob(File.read('file.png'))
image = ChunkyPNG::Image.from_io(io) 
```

Loads from `file.png`.

### Saving

```ruby
image.save('filename.png')
```

#### Alternate ways

```ruby
File.open('newfile.png', 'wb') { |io| image.write(io) }
binary_string = image.to_blob
```

Writes an image to `newfile.png`.

### Drawing

```ruby
image[0, 0] = ChunkyPNG::Color.rgba(255, 0,0, 128)
image.line(1, 1, 10, 1, ChunkyPNG::Color.from_hex('#aa007f'))
```

### Canvas

```ruby
crop(x, y, w, h)
```

### Transforms

```ruby
new_image = image.flip_horizontally.rotate_right
```


id: chef
git_filename: ./chef.md
format: md
field_title: Chef
field_category: Devops
data:
{"title": "Chef", "category": "Devops", "body": "### Install\n\nIn your server:\n{: .-setup}\n\n```bash\n$ sudo apt-get install curl\n```\n\n```bash\n$ curl -L https://omnitruck.chef.io/install.sh | sudo bash\nThank you for installing Chef!\n```\n\n```bash\n$ chef-solo -v\n...\nChef: 14.5.33\n```\n\n### Start the cookbook\n\n```bash\n wget http://github.com/chef-cookbooks/chef-repo/tarball/master -O - | tar xzf - --strip-components=1\n```\n\n### Knife\n\n```bash\n$ knife supermarket download mysql\n```\n\n### Invoking chef-solo\n\n```bash\n$ chef-solo -c solo.rb -j web.json\n```\n\n## Examples\n\n### Simple compile-from-source\n\n```ruby\nexecute \"tar --no-same-owner -zxf hi.tar.gz\" do\n  cwd \"/usr/local/src\"\n  creates \"/usr/local/src/node-v#{version}\"\nend\n```\n\n```ruby\nbash \"compile\" do\n  cwd \"/usr/local/src/node-v#{version}\"\n  code %[\n    PATH=/usr/local/bin:$PATH\n    ./configure\n    make\n  ]\n  creates \"/usr/local/src/node-v#{version}/node\"\nend\n```\n\n### remote file\n\n```ruby\nremote_file \"/usr/local/src/hi.tar.gz\" do\n  source \"http://...\"\n  checksum \"ab83be...\"\n  mode 0644\n  action :create_if_missing\nend\n```\n\n### ruby_block\n\n```ruby\nruby_block \"name\" do\n  block { File.read ... }\n  not_if { File.exists?(...) }\nend\n```\n\n### Execute\n\n```ruby\nexecute \"name\" do\n  cwd \"...\"\n  environment({ \"PATH\" => \"...\" })\n  command \"make install\"\n  creates \"...\"\nend\n```\n\n### Conditions\n\n```ruby\n  creates \"/usr/local/src/node-v#{version}/node\"\n  not_if { File.exists?('...') }\n```\n\n## Also see\n\n* [Learn Chef Rally](https://learn.chef.io) _(learn.chef.io)_\n* [install_from_source.rb recipe](https://github.com/mdxp/nodejs-cookbook/blob/master/recipes/install_from_source.rb) _(github.com)_"}

field_body:
### Install

In your server:
{: .-setup}

```bash
$ sudo apt-get install curl
```

```bash
$ curl -L https://omnitruck.chef.io/install.sh | sudo bash
Thank you for installing Chef!
```

```bash
$ chef-solo -v
...
Chef: 14.5.33
```

### Start the cookbook

```bash
 wget http://github.com/chef-cookbooks/chef-repo/tarball/master -O - | tar xzf - --strip-components=1
```

### Knife

```bash
$ knife supermarket download mysql
```

### Invoking chef-solo

```bash
$ chef-solo -c solo.rb -j web.json
```

## Examples

### Simple compile-from-source

```ruby
execute "tar --no-same-owner -zxf hi.tar.gz" do
  cwd "/usr/local/src"
  creates "/usr/local/src/node-v#{version}"
end
```

```ruby
bash "compile" do
  cwd "/usr/local/src/node-v#{version}"
  code %[
    PATH=/usr/local/bin:$PATH
    ./configure
    make
  ]
  creates "/usr/local/src/node-v#{version}/node"
end
```

### remote file

```ruby
remote_file "/usr/local/src/hi.tar.gz" do
  source "http://..."
  checksum "ab83be..."
  mode 0644
  action :create_if_missing
end
```

### ruby_block

```ruby
ruby_block "name" do
  block { File.read ... }
  not_if { File.exists?(...) }
end
```

### Execute

```ruby
execute "name" do
  cwd "..."
  environment({ "PATH" => "..." })
  command "make install"
  creates "..."
end
```

### Conditions

```ruby
  creates "/usr/local/src/node-v#{version}/node"
  not_if { File.exists?('...') }
```

## Also see

* [Learn Chef Rally](https://learn.chef.io) _(learn.chef.io)_
* [install_from_source.rb recipe](https://github.com/mdxp/nodejs-cookbook/blob/master/recipes/install_from_source.rb) _(github.com)_


id: cheatsheet-styles
git_filename: ./cheatsheet-styles.md
format: md
field_title: Cheatsheet styles
field_tags: WIP
field_updated: 2017-10-26
field_updated___timezone: UTC
data:
{"title": "Cheatsheet styles", "tags": ["WIP"], "updated": "2017-10-26", "intro": "This is a reference of styles that you can use on Devhints cheatsheets. How\nmeta!\nYou can refer to this when contributing your own cheatsheets to the [GitHub repo](https://github.com/rstacruz/cheatsheets/).\n", "body": "Intro\n-----\n\nVariants\n--------\n{: .-three-column}\n\n### H2 sections\n\n| `-one-column` | |\n| `-two-column` | _(default)_|\n| `-three-column` | |\n| `-left-reference` | 3 columns<br>_(short first column)_ |\n\nSee: [H2 sections](#two-columns)\n\n### H3 sections\n\n| `-prime` | Highlight |\n\nSee: [H3 sections](#h3-sections-1)\n\n### Tables\n\n| `-bold-first` | Bold first column |\n| `-headers` | Show headers |\n| `-left-align` | Don't right align last column |\n| `-mute-em` | Lower opacity for italics |\n| `-no-wrap` | Don't wrap text |\n| `-shortcuts` | Shortcut keys |\n\nSee: [Tables](#tables-1)\n\n### Code\n\n| `-box-chars` | Less line height<br>_for box drawing chars_ |\n| `-setup` | Gray background |\n| `-wrap` | Enables line-wrapping |\n\nSee: [Code](#code-1)\n\n### Paragraphs\n\n| `-setup` | Gray background |\n| `-crosslink` | Has arrow on the link |\n{: .-gray}\n\nSee: [Paragraphs](#paragraphs-1)\n\n### Lists\n\n| `-also-see` | Lighter background |\n| `-four-column` | |\n| `-six-column` | |\n\nSee: [Lists](#lists-1)\n\n### Adding variants\n{: .-prime}\n\n```\n## Section\n{: .-two-column}\n```\n\nDevhints uses Kramdown, and supports adding classes via Kramdown's syntax.\n\nH3 sections\n-----------\n{: .-three-column}\n\n### Supported\n\nEach section can have the following children:\n\n#### White\n\n- `pre`\n- `ul`\n- `table`\n\n#### Gray\n\n- `p`\n- `h4`\n\n### Prime section\n{: .-prime}\n\nThis is a section with `{: .-prime}`. Notice the fancy highlight! Great for \"getting started\" kind of snippets.\n\n### H3 section\n\nEvery box is an H3 section. The box will encompass everything inside the body of the H3.\n\nThis is a basic section with paragraphs in it.\n\nCode\n----\n{: .-three-column}\n\n### Basic code\n\n```js\nhere.is(() => {\n  some.code()\n})\n```\n\n```js\nhere.is.some.more()\n```\n\nCode blocks can be placed one after the other.\n\nSee: [Cheatsheets](/)\n\n### Code with headings\n\n#### index.js\n{: .-file}\n\n```js\nhere.is(() => {\n  some.code()\n})\n```\n\n#### other.js\n{: .-file}\n\n```js\nhere.is.some.more()\n```\n\nCode blocks can have headings.\n\n### Highlighted lines\n\n```js\napp.start(() => {\n  const port = app.server.port\n  console.log(`Started at ${port}`)\n})\n```\n{: data-line=\"3\"}\n\nAdd `{: data-line=\"3\"}` to add line highlights.\n\n### Multiple highlights\n\n```js\napp.start(() => {\n  const port = app.server.port\n  console.log(`Started at ${port}`)\n})\n```\n{: data-line=\"2,3\"}\n\nAdd `{: data-line=\"2,3\"}` to add multiple line highlights.\n\n### Setup blocks\n\n```js\nimport React from 'react'\n```\n{: .-setup}\n\n```js\nclass Hello extends React.Component {\n  render () {\n    return <span>Hello</span>\n  }\n}\n```\n\nAdd `{: .-setup}` to a `pre` or `table` or `ul`.\n\n### Long lines\n\n```js\nfunction createNode(nodeName: string, options: { key: string }) {\n  return true\n}\n```\n\nLong lines will have scrollbars.\n\n### Line wrapping\n\n```js\n<script>(function(d,s){if(window.Promise&&[].includes&&Object.assign&&window.Map)return;var js,sc=d.getElementsByTagName(s)[0];js=d.createElement(s);js.src='https://cdn.polyfill.io/v2/polyfill.min.js';sc.parentNode.insertBefore(js, sc);}(document,'script'))</script>\n```\n{: .-wrap}\n\nAdd `-wrap` to wrap long lines.\n\n## Lists\n{: .-three-column}\n\n### Lists\n\n- This is\n- a list\n- with a few items\n\nHere's an extra paragraph after the list.\n\n### Lists with headings\n\n#### Part 1\n\n- `createElement()`\n- `componentDidMount()`\n- `componentWillUnmount()`\n\n#### Part 2\n\n- `shouldComponentUpdate()`\n- `componentWillReceiveProps()`\n\n\nHere's an extra paragraph after the list.\n\n## List columns\n{: .-one-column}\n\n### Six columns\n\n- One\n- Two\n- Three\n- Four\n- Five\n- Six\n- Seven\n- Eight\n- Nine\n- Ten\n- Eleven\n{: .-six-column}\n\nAdd `{: .-six-column}` to make large lists.\n\n### Four columns\n\n- One\n- Two\n- Three\n- Four\n- Five\n- Six\n- Seven\n- Eight\n- Nine\n- Ten\n- Eleven\n{: .-four-column}\n\nAdd `{: .-four-column}` to make large lists.\n\n### Also see\n\n- One\n- Two\n- Three\n- Four\n- Five\n- Six\n- Seven\n- Eight\n- Nine\n- Ten\n{: .-also-see}\n\nAdd `{: .-also-see}`.\n\n## Paragraphs\n{: .-three-column}\n\n### Basic paragraphs\n\nThis is a basic section with paragraphs in it. When paragraphs are the first elements in an H3 section's body, they appear as white.\n\n### Basic paragraphs\n\n```\n\u00b7\u00b7\u00b7\n```\n\nWhen paragraphs appear after `pre`/`table`/`ul`, they appear with a gray background.\n\n### Preludes\n\nHere's a prelude paragraph. Add `{: .-setup}` to make paragraphs appear with a gray background.\n{: .-setup}\n\n```\n\u00b7\u00b7\u00b7\n```\n\n### Crosslink\n\nAdd `{: .-crosslink}` to make big loud external links:\n\n```\n\u00b7\u00b7\u00b7\n```\n\n[Home](/)\n{: .-crosslink}\n\n## Tables\n{: .-three-column}\n\n### Basic table\n\n#### Date\n\n| Example         | Output                 |\n| ---             | ---                    |\n| `%m/%d/%Y`      | `06/05/2013`           |\n| `%A, %B %e, %Y` | `Sunday, June 5, 2013` |\n| `%b %e %a`      | `Jun 5 Sun`            |\n\n#### Time\n\n| Example         | Output                 |\n| ---             | ---                    |\n| `%H:%M`         | `23:05`                |\n| `%I:%M %p`      | `11:05 PM`             |\n\nThis is a basic table with h4's.\n\n### Shortcuts\n\n| `V` | Vector |\n| `P` | Pencil |\n| `T` | Text |\n| `L` | Line |\n| `R` | Rectangle |\n| `O` | Oval |\n| `U` | Rounded |\n{: .-shortcuts}\n\nAdd `{: .-shortcuts}` to tables.\n\n### With headers\n\n| Prefix | Example               | What     |\n| ---    | ---                   | ---      |\n| `//`   | `//hr[@class='edge']` | Anywhere |\n| `./`   | `./a`                 | Relative |\n| `/`    | `/html/body/div`      | Root     |\n{: .-headers}\n\nAdd `{: .-headers}` to add headers.\n\n## Two columns\n\n### One\n\n```\n\u00b7\u00b7\u00b7\n```\n\n### Two\n\n```\n\u00b7\u00b7\u00b7\n```\n\n## Left reference\n{: .-left-reference}\n\n### One\n\n```\n\u00b7\u00b7\u00b7\n\u00b7\u00b7\u00b7\n\u00b7\u00b7\u00b7\n\u00b7\u00b7\u00b7\n\u00b7\u00b7\u00b7\n\u00b7\u00b7\u00b7\n\u00b7\u00b7\u00b7\n\u00b7\u00b7\u00b7\n```\n\n### Two\n\n```\n\u00b7\u00b7\u00b7\n```\n\n### Three\n\n```\n\u00b7\u00b7\u00b7\n```\n\n## One column\n{: .-one-column}\n\n### One\n\n```\n\u00b7\u00b7\u00b7\n```"}

field_intro:
This is a reference of styles that you can use on Devhints cheatsheets. How
meta!
You can refer to this when contributing your own cheatsheets to the [GitHub repo](https://github.com/rstacruz/cheatsheets/).

field_body:
Intro
-----

Variants
--------
{: .-three-column}

### H2 sections

| `-one-column` | |
| `-two-column` | _(default)_|
| `-three-column` | |
| `-left-reference` | 3 columns<br>_(short first column)_ |

See: [H2 sections](#two-columns)

### H3 sections

| `-prime` | Highlight |

See: [H3 sections](#h3-sections-1)

### Tables

| `-bold-first` | Bold first column |
| `-headers` | Show headers |
| `-left-align` | Don't right align last column |
| `-mute-em` | Lower opacity for italics |
| `-no-wrap` | Don't wrap text |
| `-shortcuts` | Shortcut keys |

See: [Tables](#tables-1)

### Code

| `-box-chars` | Less line height<br>_for box drawing chars_ |
| `-setup` | Gray background |
| `-wrap` | Enables line-wrapping |

See: [Code](#code-1)

### Paragraphs

| `-setup` | Gray background |
| `-crosslink` | Has arrow on the link |
{: .-gray}

See: [Paragraphs](#paragraphs-1)

### Lists

| `-also-see` | Lighter background |
| `-four-column` | |
| `-six-column` | |

See: [Lists](#lists-1)

### Adding variants
{: .-prime}

```
## Section
{: .-two-column}
```

Devhints uses Kramdown, and supports adding classes via Kramdown's syntax.

H3 sections
-----------
{: .-three-column}

### Supported

Each section can have the following children:

#### White

- `pre`
- `ul`
- `table`

#### Gray

- `p`
- `h4`

### Prime section
{: .-prime}

This is a section with `{: .-prime}`. Notice the fancy highlight! Great for "getting started" kind of snippets.

### H3 section

Every box is an H3 section. The box will encompass everything inside the body of the H3.

This is a basic section with paragraphs in it.

Code
----
{: .-three-column}

### Basic code

```js
here.is(() => {
  some.code()
})
```

```js
here.is.some.more()
```

Code blocks can be placed one after the other.

See: [Cheatsheets](/)

### Code with headings

#### index.js
{: .-file}

```js
here.is(() => {
  some.code()
})
```

#### other.js
{: .-file}

```js
here.is.some.more()
```

Code blocks can have headings.

### Highlighted lines

```js
app.start(() => {
  const port = app.server.port
  console.log(`Started at ${port}`)
})
```
{: data-line="3"}

Add `{: data-line="3"}` to add line highlights.

### Multiple highlights

```js
app.start(() => {
  const port = app.server.port
  console.log(`Started at ${port}`)
})
```
{: data-line="2,3"}

Add `{: data-line="2,3"}` to add multiple line highlights.

### Setup blocks

```js
import React from 'react'
```
{: .-setup}

```js
class Hello extends React.Component {
  render () {
    return <span>Hello</span>
  }
}
```

Add `{: .-setup}` to a `pre` or `table` or `ul`.

### Long lines

```js
function createNode(nodeName: string, options: { key: string }) {
  return true
}
```

Long lines will have scrollbars.

### Line wrapping

```js
<script>(function(d,s){if(window.Promise&&[].includes&&Object.assign&&window.Map)return;var js,sc=d.getElementsByTagName(s)[0];js=d.createElement(s);js.src='https://cdn.polyfill.io/v2/polyfill.min.js';sc.parentNode.insertBefore(js, sc);}(document,'script'))</script>
```
{: .-wrap}

Add `-wrap` to wrap long lines.

## Lists
{: .-three-column}

### Lists

- This is
- a list
- with a few items

Here's an extra paragraph after the list.

### Lists with headings

#### Part 1

- `createElement()`
- `componentDidMount()`
- `componentWillUnmount()`

#### Part 2

- `shouldComponentUpdate()`
- `componentWillReceiveProps()`


Here's an extra paragraph after the list.

## List columns
{: .-one-column}

### Six columns

- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
- Eleven
{: .-six-column}

Add `{: .-six-column}` to make large lists.

### Four columns

- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
- Eleven
{: .-four-column}

Add `{: .-four-column}` to make large lists.

### Also see

- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
{: .-also-see}

Add `{: .-also-see}`.

## Paragraphs
{: .-three-column}

### Basic paragraphs

This is a basic section with paragraphs in it. When paragraphs are the first elements in an H3 section's body, they appear as white.

### Basic paragraphs

```
···
```

When paragraphs appear after `pre`/`table`/`ul`, they appear with a gray background.

### Preludes

Here's a prelude paragraph. Add `{: .-setup}` to make paragraphs appear with a gray background.
{: .-setup}

```
···
```

### Crosslink

Add `{: .-crosslink}` to make big loud external links:

```
···
```

[Home](/)
{: .-crosslink}

## Tables
{: .-three-column}

### Basic table

#### Date

| Example         | Output                 |
| ---             | ---                    |
| `%m/%d/%Y`      | `06/05/2013`           |
| `%A, %B %e, %Y` | `Sunday, June 5, 2013` |
| `%b %e %a`      | `Jun 5 Sun`            |

#### Time

| Example         | Output                 |
| ---             | ---                    |
| `%H:%M`         | `23:05`                |
| `%I:%M %p`      | `11:05 PM`             |

This is a basic table with h4's.

### Shortcuts

| `V` | Vector |
| `P` | Pencil |
| `T` | Text |
| `L` | Line |
| `R` | Rectangle |
| `O` | Oval |
| `U` | Rounded |
{: .-shortcuts}

Add `{: .-shortcuts}` to tables.

### With headers

| Prefix | Example               | What     |
| ---    | ---                   | ---      |
| `//`   | `//hr[@class='edge']` | Anywhere |
| `./`   | `./a`                 | Relative |
| `/`    | `/html/body/div`      | Root     |
{: .-headers}

Add `{: .-headers}` to add headers.

## Two columns

### One

```
···
```

### Two

```
···
```

## Left reference
{: .-left-reference}

### One

```
···
···
···
···
···
···
···
···
```

### Two

```
···
```

### Three

```
···
```

## One column
{: .-one-column}

### One

```
···
```


id: chai
git_filename: ./chai.md
format: md
field_title: Chai.js
field_category: JavaScript libraries
field_updated: 2018-06-25
field_updated___timezone: UTC
data:
{"title": "Chai.js", "category": "JavaScript libraries", "weight": -3, "updated": "2018-06-25", "version": "chai v4.x", "description": "expect(x).to.be.equal(y) \u232a assert.equal(x, y) \u232a .to.be.true \u232a jQuery, assertions, TDD and BDD, and other Chai examples.\n", "body": "### Assert\n\n```js\nconst { assert } = require('chai')\n```\n{: .-setup}\n\n```js\nassert(val)\nassert.fail(actual, expected)\nassert.ok(val)                        // is truthy\nassert.equal(actual, expected)        // compare with ==\nassert.strictEqual(actual, expected)  // compare with ===\nassert.deepEqual(actual, expected)    // deep equal check\n```\n\n```js\nassert.isTrue(val)\nassert.isFalse(val)\n```\n\n```js\nassert.isNull(val)\nassert.isNotNull(val)\nassert.isUndefined(val)\nassert.isDefined(val)\nassert.isFunction(val)\nassert.isObject(val)\nassert.isArray(val)\nassert.isString(val)\nassert.isNumber(val)\nassert.isBoolean(val)\n```\n\n```js\nassert.typeOf(/tea/, 'regexp') // Object.prototype.toString()\nassert.instanceOf(chai, Tea)\nassert.include([ a,b,c ], a)\nassert.match(val, /regexp/)\nassert.property(obj, 'tea') // 'tea' in object\nassert.deepProperty(obj, 'tea.green')\nassert.propertyVal(person, 'name', 'John')\nassert.deepPropertyVal(post, 'author.name', 'John')\n```\n\n```js\nassert.lengthOf(object, 3)\nassert.throws(function() { ... })\nassert.throws(function() { ... }, /reference error/)\nassert.doesNotThrow\n```\n\n```js\nassert.operator(1, '<', 2)\nassert.closeTo(actual, expected)\n```\n\nSee: [Assert API](http://chaijs.com/api/assert/) _(chaijs.com)_\n\n### BDD syntax\n\n```js\nconst { expect } = require('chai')\n```\n{: .-setup}\n\n```js\nexpect(object)\n  .to.equal(expected)\n  .to.eql(expected)        // deep equality\n  .to.deep.equal(expected) // same as .eql\n  .to.be.a('string')\n  .to.include(val)\n```\n\n```js\n  .be.ok(val)\n  .be.true\n  .be.false\n  .to.exist\n```\n\n```js\n  .to.be.null\n  .to.be.undefined\n  .to.be.empty\n  .to.be.arguments\n  .to.be.function\n  .to.be.instanceOf\n```\n\n```js\n  .to.be.gt(5)  // aka: .above .greaterThan\n  .to.be.gte(5) // aka: .at.least\n  .to.be.lt(5)  // aka: .below\n```\n\n```js\n  .to.respondTo('bar')\n  .to.satisfy((n) => n > 0)\n```\n\n```js\n  .to.have.members([2, 3, 4])\n  .to.have.keys(['foo'])\n  .to.have.key('foo')\n  .to.have.lengthOf(3)\n```\n\n```js\nexpect(() => { \u00b7\u00b7\u00b7 })\n  .to.throw(/not a function/)\n```\n\nSee: [BDD](http://chaijs.com/api/bdd/) _(chaijs.com)_\n\n### Should: chains\n\n    .to .be .been .is .that .and .have .with .at .of .same\n\nThese don't do anything and can be chained.\n\n### Should not\n\n```js\nexpect(object).not.equal('x')\n```\n\n## Chai with jQuery\n\n### Using chai-jquery\n\n```js\nglobal.jQuery = \u00b7\u00b7\u00b7\nchai.use(require('chai-jquery'))\n```\n{: .-setup}\n\n```js\nexpect($body)\n  .have.attr('foo')\n  .have.prop('disabled')\n  .have.css('background')\n  .have.css('background-color', '#ffffff')\n  .have.data('foo')\n```\n\n```js\n  .have.class('active')\n  .have.id('id')\n```\n\n```js\n  .have.html('<em>hi</em>')\n  .have.text('hello')\n  .have.value('2013')\n```\n\n### Continued\n\n```js\nexpect($body)\n```\n\n```js\n  .be.visible\n  .be.hidden\n```\n\n```js\n  .be.checked\n  .be.selected\n```\n\n```js\n  .be.enabled\n  .be.disabled\n```\n\n```js\n  .be.empty\n  .to.exist\n  .to.contain('text')\n  .to.have('.selector')\n```"}

field_body:
### Assert

```js
const { assert } = require('chai')
```
{: .-setup}

```js
assert(val)
assert.fail(actual, expected)
assert.ok(val)                        // is truthy
assert.equal(actual, expected)        // compare with ==
assert.strictEqual(actual, expected)  // compare with ===
assert.deepEqual(actual, expected)    // deep equal check
```

```js
assert.isTrue(val)
assert.isFalse(val)
```

```js
assert.isNull(val)
assert.isNotNull(val)
assert.isUndefined(val)
assert.isDefined(val)
assert.isFunction(val)
assert.isObject(val)
assert.isArray(val)
assert.isString(val)
assert.isNumber(val)
assert.isBoolean(val)
```

```js
assert.typeOf(/tea/, 'regexp') // Object.prototype.toString()
assert.instanceOf(chai, Tea)
assert.include([ a,b,c ], a)
assert.match(val, /regexp/)
assert.property(obj, 'tea') // 'tea' in object
assert.deepProperty(obj, 'tea.green')
assert.propertyVal(person, 'name', 'John')
assert.deepPropertyVal(post, 'author.name', 'John')
```

```js
assert.lengthOf(object, 3)
assert.throws(function() { ... })
assert.throws(function() { ... }, /reference error/)
assert.doesNotThrow
```

```js
assert.operator(1, '<', 2)
assert.closeTo(actual, expected)
```

See: [Assert API](http://chaijs.com/api/assert/) _(chaijs.com)_

### BDD syntax

```js
const { expect } = require('chai')
```
{: .-setup}

```js
expect(object)
  .to.equal(expected)
  .to.eql(expected)        // deep equality
  .to.deep.equal(expected) // same as .eql
  .to.be.a('string')
  .to.include(val)
```

```js
  .be.ok(val)
  .be.true
  .be.false
  .to.exist
```

```js
  .to.be.null
  .to.be.undefined
  .to.be.empty
  .to.be.arguments
  .to.be.function
  .to.be.instanceOf
```

```js
  .to.be.gt(5)  // aka: .above .greaterThan
  .to.be.gte(5) // aka: .at.least
  .to.be.lt(5)  // aka: .below
```

```js
  .to.respondTo('bar')
  .to.satisfy((n) => n > 0)
```

```js
  .to.have.members([2, 3, 4])
  .to.have.keys(['foo'])
  .to.have.key('foo')
  .to.have.lengthOf(3)
```

```js
expect(() => { ··· })
  .to.throw(/not a function/)
```

See: [BDD](http://chaijs.com/api/bdd/) _(chaijs.com)_

### Should: chains

    .to .be .been .is .that .and .have .with .at .of .same

These don't do anything and can be chained.

### Should not

```js
expect(object).not.equal('x')
```

## Chai with jQuery

### Using chai-jquery

```js
global.jQuery = ···
chai.use(require('chai-jquery'))
```
{: .-setup}

```js
expect($body)
  .have.attr('foo')
  .have.prop('disabled')
  .have.css('background')
  .have.css('background-color', '#ffffff')
  .have.data('foo')
```

```js
  .have.class('active')
  .have.id('id')
```

```js
  .have.html('<em>hi</em>')
  .have.text('hello')
  .have.value('2013')
```

### Continued

```js
expect($body)
```

```js
  .be.visible
  .be.hidden
```

```js
  .be.checked
  .be.selected
```

```js
  .be.enabled
  .be.disabled
```

```js
  .be.empty
  .to.exist
  .to.contain('text')
  .to.have('.selector')
```


id: cask-index
git_filename: ./cask-index.md
format: md
field_title: Caskroom index
field_tags: Archived
data:
{"title": "Caskroom index", "tags": ["Archived"], "archived": "This sheet may have outdated information.", "body": "#### A\n\n- [a-better-finder-attributes](http://www.publicspace.net/ABetterFinderAttributes/)\n- [a-better-finder-rename](http://www.publicspace.net/ABetterFinderRename/)\n- [a-slower-speed-of-light](http://gamelab.mit.edu/games/a-slower-speed-of-light/)\n- [abgx360](http://abgx360.net/)\n- [abscissa](http://rbruehl.macbay.de/Abscissa)\n- [accessmenubarapps](http://www.ortisoft.de/accessmenubarapps/)\n- [acorn](http://flyingmeat.com/acorn/)\n- [actions-server](http://getactionsapp.com)\n- [actiontastic](http://actiontastic.com)\n- [activity-audit](https://www.dssw.co.uk/activityaudit)\n- [actotracker](http://onflapp.wordpress.com/actotracker)\n- [actprinter](http://houdah.com/ACTPrinter/)\n- [actual-odbc-pack](http://www.actualtech.com/products.php)\n- [adapter](http://www.macroplant.com/adapter/)\n- [adium](https://www.adium.im/)\n- [adobe-air](https://get.adobe.com/air/)\n- [adobe-arh](http://help.adobe.com/en_US/air/redist/WS485a42d56cd19641-70d979a8124ef20a34b-8000.html)\n- [adobe-creative-cloud](https://creative.adobe.com/products/creative-cloud)\n- [adobe-digital-editions](http://www.adobe.com/pt/products/digital-editions.html)\n- [adobe-dng-converter](http://www.adobe.com/support/downloads/product.jsp?product=106&platform=Macintosh)\n- [adobe-photoshop-lightroom](http://www.adobe.com/products/photoshop-lightroom.html)\n- [adobe-reader](http://www.adobe.com/products/reader.html)\n- [adventure](http://www.lobotomo.com/products/Adventure/index.html)\n- [aegisub](http://www.aegisub.org/)\n- [aerofs](https://www.aerofs.com/)\n- [affinity-designer](https://affinity.serif.com/)\n- [air-connect](http://www.avatron.com/get-air-connect/)\n- [air-video-server-hd](http://www.inmethod.com/airvideohd)\n- [air-video-server](http://www.inmethod.com/air-video/)\n- [airdisplay](http://avatron.com/apps/air-display/)\n- [airfoil](http://www.rogueamoeba.com/airfoil/mac/)\n- [airmail-amt](http://airmailapp.com/amt/)\n- [airparrot](http://www.airsquirrels.com/airparrot/)\n- [airserver](http://www.airserver.com)\n- [airstream](http://airstream.io/download/)\n- [alarm-clock](http://wayback.archive.org/web/20130123192255/http://www.robbiehanson.com/alarmclock/index.html)\n- [alfred](http://www.alfredapp.com/)\n- [alib1](http://presstube.com/blog/2011/alib1/)\n- [alinof-timer](http://www.alinofsoftware.ch/en/products/products-timer/index.html)\n- [aliwangwang](http://wangwang.taobao.com)\n- [all-the-gifs](https://github.com/orta/GIFs)\n- [all2mp3](http://www.tresrrr.com/All2MP3/ENGLISH.html)\n- [amadeus-pro](http://www.hairersoft.com/pro.html)\n- [amazon-cloud-drive](https://www.amazon.com/clouddrive)\n- [amazon-music](https://www.amazon.com/gp/feature.html/ref=dm_mo_cpw_fb_lm?docId=1001067901)\n- [amethyst](http://ianyh.com/amethyst)\n- [ampps](http://www.ampps.com)\n- [android-file-transfer](http://www.android.com/filetransfer/)\n- [android-studio-bundle](http://developer.android.com/sdk/installing/studio.html)\n- [android-studio](https://developer.android.com/sdk/installing/studio.html)\n- [angry-ip-scanner](http://angryip.org)\n- [anki](http://ankisrs.net/)\n- [anonym](http://www.hanynet.com/anonym/index.html)\n- [antetype](http://antetype.com)\n- [antirsi](http://sabi.net/nriley/software/#antirsi)\n- [anvil](http://anvilformac.com/)\n- [anxiety](http://www.anxietyapp.com/)\n- [anypass](http://icyblaze.com/anypass)\n- [ap-grapher](https://www.macupdate.com/app/mac/11859/ap-grapher)\n- [apache-directory-studio](http://directory.apache.org/studio/)\n- [apikitchen](http://apikitchen.com/)\n- [apns-pusher](https://github.com/blommegard/APNS-Pusher)\n- [appcleaner](http://www.freemacsoft.net/appcleaner/)\n- [appcode](http://www.jetbrains.com/objc/)\n- [appdelete](http://www.reggieashworth.com/appdelete)\n- [appfresh](http://metaquark.de/appfresh/mac)\n- [appium](http://appium.io)\n- [appmenuboy](https://code.google.com/p/appmenuboy/)\n- [apptivate](http://www.apptivateapp.com)\n- [apptrap](http://onnati.net/apptrap)\n- [appzapper](http://www.appzapper.com/)\n- [aptanastudio](http://www.aptana.com/)\n- [aquamacs](http://aquamacs.org/)\n- [aquaterm](http://aquaterm.sourceforge.net/)\n- [araxis-merge](http://www.araxis.com/merge)\n- [archiver](http://archiverapp.com/)\n- [arduino-galileo](https://communities.intel.com/docs/DOC-22226)\n- [arduino](http://arduino.cc/)\n- [aria-maestosa](http://ariamaestosa.sourceforge.net)\n- [armitage](http://www.fastandeasyhacking.com/)\n- [armory](https://bitcoinarmory.com/)\n- [arora](https://code.google.com/p/arora/)\n- [arq](http://www.haystacksoftware.com/arq/)\n- [arranger](http://bucketomac.de/arranger/arranger/)\n- [arrsync](http://arrsync.sourceforge.net)\n- [aseprite](http://www.aseprite.org)\n- [asepsis](http://asepsis.binaryage.com/)\n- [asteroid](http://www.asteroidapp.com/)\n- [atext](http://www.trankynam.com/atext/)\n- [atlantis](http://www.riverdark.net/atlantis/)\n- [atmonitor](http://www.atpurpose.com/atMonitor/)\n- [atom](http://atom.io)\n- [atraci](https://github.com/Atraci/Atraci)\n- [au-lab](http://www.apple.com/itunes/mastered-for-itunes/)\n- [audacity](http://audacity.sourceforge.net/)\n- [audio-editor](http://www.macsome.com/audio-editor-mac/index.html)\n- [audio-hijack-pro](http://www.rogueamoeba.com/audiohijackpro/)\n- [audio-mate](http://audiomateapp.com/)\n- [audiobookbinder](http://bluezbox.com/audiobookbinder.html)\n- [audioscrobbler](https://github.com/mxcl/Audioscrobbler.app)\n- [audioslicer](http://audioslicer.sourceforge.net)\n- [aurora](http://www.oneperiodic.com/products/aurora/)\n- [authbuddy](https://www.dssw.co.uk/authbuddy)\n- [authoxy](http://www.hrsoftworks.net)\n- [authy-bluetooth](https://www.authy.com)\n- [autodmg](https://github.com/MagerValp/AutoDMG)\n- [automatic](http://codingcurious.com/automatic/)\n- [aviator](https://www.whitehatsec.com/aviator/)\n- [avidemux](http://www.avidemux.org/)\n- [avogadro](http://avogadro.openmolecules.net/)\n- [awareness](http://iamfutureproof.com/tools/awareness/)\n- [ax88179](http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=131;71;112&PLine=71)\n- [ax88772](http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=86;71;101&PLine=71)\n- [axure-rp-pro](http://www.axure.com/)\n\n#### B\n\n- [b2designer](http://www.flymaster-avionics.com/Support/Downloads/ForMacOSX/tabid/199/Default.aspx)\n- [back-in-time](http://www.tri-edre.fr/english/backintime.html)\n- [backblaze-downloader](http://www.backblaze.com/)\n- [backblaze](https://www.backblaze.com/)\n- [backtobed](http://backtobed.dadiugames.dk/)\n- [backuploupe](http://www.soma-zone.com/BackupLoupe/)\n- [bahamut](https://github.com/sdegutis/bahamut)\n- [baiducloud](http://pan.baidu.com)\n- [baiduinput](http://wuxian.baidu.com/input/mac.html)\n- [baidumusic](http://music.baidu.com/)\n- [balsamiq-mockups](http://balsamiq.com/)\n- [bankid](http://www.bankid.com/)\n- [banshee](http://banshee.fm)\n- [bar-magnet](http://qata.cc/Site/Bar_Magnet.html)\n- [baretorrent](http://baretorrent.org)\n- [bartender](http://www.macbartender.com/)\n- [base](http://menial.co.uk/base/)\n- [basecamp](http://www.garmin.com/en-US/shop/downloads/basecamp)\n- [basex](http://basex.org/home/)\n- [basictex](http://www.tug.org/mactex/morepackages.html)\n- [bassjump](http://www.twelvesouth.com/product/bassjump-2-for-macbook)\n- [bassshapes](http://yellquietly.com/bass-shapes/)\n- [bathyscaphe](http://bathyscaphe.sourceforge.jp/)\n- [battery-guardian](https://www.dssw.co.uk/batteryguardian)\n- [battery-report](https://www.dssw.co.uk/batteryreport)\n- [battery-time-remaining](http://yap.nu/battery-time-remaining/)\n- [baygenie](http://www.baygenie.com/)\n- [bbc-iplayer-downloads](http://www.bbc.co.uk/iplayer/install)\n- [bbedit](http://www.barebones.com/products/bbedit/)\n- [beacon-scanner](https://github.com/mlwelles/BeaconScanner/)\n- [beamer](http://beamer-app.com)\n- [bean](http://www.bean-osx.com)\n- [beardedspice](http://www.beardedspice.com)\n- [beatport-pro](http://pro.beatport.com/)\n- [bee](http://neat.io/bee/)\n- [bettertouchtool](http://blog.boastr.net/)\n- [betterzip](http://macitbetter.com)\n- [betterzipql](http://macitbetter.com/BetterZip-Quick-Look-Generator/)\n- [bibdesk](http://bibdesk.sourceforge.net/)\n- [big-mean-folder-machine](http://www.publicspace.net/BigMeanFolderMachine/)\n- [bill](http://billtheapp.com/)\n- [bino](http://bino3d.org)\n- [binreader](http://www.binreader.com/)\n- [bit-slicer](https://github.com/zorgiepoo/bit-slicer/)\n- [bitcasa](https://www.bitcasa.com)\n- [bitcoin-core](https://bitcoin.org/)\n- [bitlord](http://www.bitlord.com)\n- [bitmessage](https://bitmessage.org/)\n- [bittorrent-sync](http://www.bittorrent.com/sync)\n- [black-ink](http://www.red-sweater.com/blackink/)\n- [black-light](http://michelf.ca/projects/black-light)\n- [blender](http://www.blender.org/)\n- [blink1control](http://blink1.thingm.com/)\n- [blu-ray-player](http://www.macblurayplayer.com/)\n- [bluegriffon](http://bluegriffon.org)\n- [blueharvest](http://zeroonetwenty.com/blueharvest/)\n- [bluej](http://www.bluej.org)\n- [bob](https://github.com/casperstorm/Bob)\n- [bodega](http://appbodega.com/)\n- [bonjour-browser](http://www.tildesoft.com/)\n- [boom](http://www.globaldelight.com/boom/)\n- [boot2docker](https://github.com/boot2docker/osx-installer)\n- [bootchamp](http://www.kainjow.com/)\n- [bootxchanger](http://namedfork.net/bootxchanger)\n- [bowtie](http://bowtieapp.com/)\n- [box-sync](https://sites.box.com/sync4/)\n- [boxcryptor-classic](https://www.boxcryptor.com/en/boxcryptor-classic)\n- [boxer](http://boxerapp.com/)\n- [brackets](http://brackets.io)\n- [brain-workshop](http://brainworkshop.sourceforge.net/)\n- [breach](http://breach.cc)\n- [breakaway](http://mutablecode.com/apps/breakaway.html)\n- [brightness](http://www.bergdesign.com/brightness/)\n- [brogue](https://sites.google.com/site/broguegame/)\n- [broomstick](http://www.zibity.com/broomstick)\n- [brow](http://www.timschroeder.net/brow/)\n- [browserstacklocal](http://www.browserstack.com/)\n- [brushviewql](http://brushviewer.sourceforge.net/)\n- [brytonbridge](http://www.brytonsport.com/help/start)\n- [buddi](http://buddi.digitalcave.ca/index.jsp)\n- [burn](http://burn-osx.sourceforge.net/)\n- [butter](http://harukasan.jp)\n- [bzflag](http://bzflag.org/)\n\n#### C\n\n- [c3](http://www.downloadc3.com/)\n- [caffeine](http://lightheadsw.com/caffeine/)\n- [cakebrew](http://www.cakebrew.com)\n- [calcservice](http://www.devontechnologies.com/products/freeware.html#c1111)\n- [calibre](http://calibre-ebook.com/)\n- [calibre2opds](http://calibre2opds.com/)\n- [callnote](http://www.kandasoft.com/home/kanda-apps/skype-call-recorder.html)\n- [camed](http://sourceforge.net/apps/mediawiki/camprocessor/index.php?title=Main_Page)\n- [camerabag](http://nevercenter.com/camerabag/desktop/)\n- [camino](http://caminobrowser.org/)\n- [camranger](http://www.camranger.com/downloads/#fbox_5594)\n- [camtasia](http://www.techsmith.com/camtasia.html)\n- [camtwist](http://camtwiststudio.com/)\n- [candybar](http://www.panic.com/blog/candybar-mountain-lion-and-beyond)\n- [capo](http://supermegaultragroovy.com/products/Capo/)\n- [capsee](http://www.threemagination.com/capsee/)\n- [carbon-copy-cloner](http://bombich.com/)\n- [carlson-minot](http://www.carlson-minot.com)\n- [cartao-de-cidadao](http://www.cartaodecidadao.pt/)\n- [catch](http://www.giorgiocalderolla.com/index.html)\n- [catchmouse](http://ftnew.com/catchmouse.html)\n- [cathode](http://www.secretgeometry.com/apps/cathode)\n- [ccleaner](http://www.piriform.com/ccleaner)\n- [ccmenu](http://ccmenu.sourceforge.net/)\n- [cd-to](https://github.com/jbtule/cdto)\n- [cdock](http://sourceforge.net/projects/cdock)\n- [celestia](http://sourceforge.net/projects/celestia)\n- [cert-quicklook](https://code.google.com/p/cert-quicklook/)\n- [cfxr](http://thirdcog.eu/apps/cfxr)\n- [chainsaw](http://logging.apache.org/chainsaw/)\n- [chameleon-ssd-optimizer](http://chameleon.alessandroboschini.it/)\n- [changes-meter](http://intuiware.com/apps/changes-meter)\n- [changes](http://bitbq.com/changes/)\n- [charles](http://www.charlesproxy.com/)\n- [chatology](http://flexibits.com/chatology)\n- [cheatsheet](http://www.cheatsheetapp.com/CheatSheet/)\n- [cheetah3d](http://www.cheetah3d.com)\n- [chefdk](http://www.getchef.com/downloads/chef-dk/mac/)\n- [chemdoodle](http://www.chemdoodle.com)\n- [chicken](http://sourceforge.net/projects/chicken/)\n- [chirp](http://chirp.danplanet.com/)\n- [chocolat](http://chocolatapp.com/)\n- [choosy](http://www.choosyosx.com/)\n- [chromatic](https://mrgeckosmedia.com/applications/info/Chromatic)\n- [chrome-remote-desktop-host](https://chrome.google.com/remotedesktop)\n- [chromecast](http://www.google.ca/intl/en/chrome/devices/chromecast/)\n- [chromium](http://www.freesmug.org/chromium)\n- [chronicle](http://chronicleapp.com/)\n- [chronoagent](http://www.econtechnologies.com)\n- [chronomate](http://chronomateapp.com/)\n- [chronosync](http://www.econtechnologies.com)\n- [chunkulus](http://presstube.com/blog/2011/chunkulus/)\n- [cinch](http://www.irradiatedsoftware.com/cinch/)\n- [citrix-receiver](http://www.citrix.com/receiver)\n- [clamxav](http://www.clamxav.com/)\n- [clarify](http://www.clarify-it.com/)\n- [cleanmymac](http://macpaw.com/cleanmymac)\n- [clementine](http://www.clementine-player.org/)\n- [clion-eap](http://www.jetbrains.com/clion/)\n- [clipmenu](http://www.clipmenu.com/)\n- [clix](http://rixstep.com/4/0/clix/index.shtml)\n- [cloak](https://www.getcloak.com)\n- [clock](http://zachwaugh.me/clock/)\n- [clonk](http://www.clonk.de/cr.php)\n- [cloud](http://getcloudapp.com/)\n- [cloudera-hive-odbc](http://www.cloudera.com)\n- [cloudfoundry-cli](https://github.com/cloudfoundry/cli)\n- [cloudpull](http://www.goldenhillsoftware.com/)\n- [cloudup](https://cloudup.com/download)\n- [cloudytabs](https://github.com/josh-/CloudyTabs/)\n- [cn3d](http://www.ncbi.nlm.nih.gov/Structure/CN3D/cn3d.shtml)\n- [coccinellida](http://coccinellida.sourceforge.net/)\n- [cockatrice](http://www.woogerworks.com/)\n- [cocktail](http://maintain.se/cocktail)\n- [cocoadialog](http://mstratman.github.io/cocoadialog/)\n- [cocoapacketanalyzer](http://www.tastycocoabytes.com/cpa/)\n- [cocoarestclient](http://mmattozzi.github.io/cocoa-rest-client/)\n- [cocoaspell](http://cocoaspell.leuski.net/)\n- [cocoasplit](http://krylon.rsdio.com/zakk/cocoasplit/)\n- [coconutbattery](http://www.coconut-flavour.com/coconutbattery/)\n- [coda](https://panic.com/Coda/)\n- [codebox](https://www.codebox.io)\n- [codebug](http://www.codebugapp.com/)\n- [codekit](http://incident57.com/codekit/)\n- [codelite](http://codelite.org)\n- [cog](http://cogx.org)\n- [colloquy](http://colloquy.info/)\n- [color-oracle](http://colororacle.org/)\n- [color-picker-pro](https://github.com/oscardelben/Color-Picker-Pro)\n- [colorpicker-antetype](http://www.antetype.com/blog/2013/12/updated-antetype-os-x-color-picker-1-3-1/)\n- [colorpicker-developer](http://download.panic.com/picker/)\n- [colorpicker-hex](http://wafflesoftware.net/hexpicker/)\n- [colorpicker-propicker](http://www.irradiated.net/?page=pro-picker)\n- [colorpicker-rcwebcolorpicker](http://www.rubicode.com/Software/RCWebColorPicker)\n- [colorpicker-skalacolor](http://bjango.com/mac/skalacolor/)\n- [colorpicker](http://www.northernspysoftware.com/software/colorpicker)\n- [colors](http://mattpatenaude.com/)\n- [colorschemer-studio](http://www.colorschemer.com)\n- [comicbooklover](http://www.bitcartel.com/comicbooklover/)\n- [comicbookloversync](http://www.bitcartel.com/comicbooklover)\n- [comictagger](http://code.google.com/p/comictagger/)\n- [commandq](http://clickontyler.com/commandq/)\n- [concentrate](http://www.getconcentrating.com/)\n- [connected-desktop](http://www.filetransporter.com/)\n- [connector](http://mediaware.sk/connector)\n- [consul](http://www.consul.io/)\n- [contexts](http://contextsformac.com/)\n- [controllermate](http://www.orderedbytes.com/controllermate/)\n- [controlplane](http://www.controlplaneapp.com/)\n- [coolterm](http://freeware.the-meiers.org/)\n- [cooviewer](http://www.geocities.jp/coo_ona/viewer.html)\n- [copy](https://www.copy.com/)\n- [coqide](http://coq.inria.fr/)\n- [cord](http://cord.sourceforge.net/)\n- [cornerstone](http://www.zennaware.com/cornerstone/index.php)\n- [corsixth](http://th.corsix.org)\n- [coteditor](http://coteditor.github.io/)\n- [couchbase-server-community](http://www.couchbase.com/)\n- [couchbase-server-enterprise](http://www.couchbase.com/)\n- [craftstudio](http://craftstud.io)\n- [crashlytics](http://crashlytics.com)\n- [crashplan](http://www.crashplan.com/)\n- [crosspack-avr](http://www.obdev.at/products/crosspack/)\n- [crushftp](https://www.crushftp.com)\n- [crypt](http://voluntary.net/crypt/)\n- [cryptol](http://cryptol.net/)\n- [ctivo](https://github.com/dscottbuch/cTiVo)\n- [cuda-z](http://cuda-z.sourceforge.net)\n- [cuppa](http://www.nathanatos.com/software)\n- [cups-pdf](http://www.cups-pdf.de)\n- [cura](http://daid.github.com/Cura/)\n- [curb](http://mrrsoftware.com/curb)\n- [curse-client](http://www.curse.com/client)\n- [cursorcerer](http://doomlaser.com/cursorcerer-hide-your-cursor-at-will/)\n- [cutesdr](http://sourceforge.net/projects/cutesdr)\n- [cx](http://www.cx.com)\n- [cyberduck](http://cyberduck.io/)\n- [cycling74-max](http://cycling74.com)\n\n#### D\n\n- [daemon-tools-lite](http://www.daemon-tools.cc/products/dtMacLite)\n- [daisydisk](http://www.daisydiskapp.com)\n- [darktable](http://www.darktable.org/)\n- [darteditor](https://www.dartlang.org/tools/editor/)\n- [dash](http://kapeli.com/dash)\n- [dashlane](https://www.dashlane.com/)\n- [datagraph](http://www.visualdatatools.com/DataGraph/)\n- [dataurlmaker](https://github.com/sveinbjornt/Data-URL-Toolkit)\n- [day-o](http://www.shauninman.com/archive/2011/10/20/day_o_mac_menu_bar_clock)\n- [dbeaver](http://dbeaver.jkiss.org/)\n- [dealalert](http://dealalertapp.com/)\n- [deathtodsstore](http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/)\n- [debookee](http://www.iwaxx.com/debookee/)\n- [debt-quencher](http://nothirst.com/debtquencher/)\n- [decitime](http://www.tinbert.com/DeciTimeMac/)\n- [deeper](http://www.titanium.free.fr/downloaddeeper.php)\n- [deeq](http://deeqapp.com)\n- [default-folder-x](http://www.stclairsoft.com/DefaultFolderX)\n- [delibar](http://www.delibarapp.com/)\n- [delicious-library](http://delicious-monster.com/)\n- [delivery-status](http://junecloud.com/software/mac/delivery-status.html)\n- [deltawalker](http://www.deltopia.com/compare-merge-sync/macosx/)\n- [deluge](http://deluge-torrent.org/)\n- [deskfun](http://www.furrysoft.de/?page=deskfun)\n- [desktop-log](http://www.nightproductions.net/desklog.html)\n- [desmume](http://www.desmume.org)\n- [detune](http://headlightsoft.com/detune/)\n- [devonthink-pro-office](http://www.devontechnologies.com/products/devonthink/devonthink-pro-office.html)\n- [devonthink-pro](http://www.devontechnologies.com/products/devonthink/devonthink-pro.html)\n- [dewdrop](http://dewdrop.dangelov.com/)\n- [dfontsplitter](http://peter.upfold.org.uk/projects/dfontsplitter)\n- [dia](http://dia-installer.de/)\n- [diashapes](http://dia-installer.de/)\n- [dictunifier](http://code.google.com/p/mac-dictionary-kit/)\n- [diffmerge](http://www.sourcegear.com/diffmerge)\n- [disk-drill](http://www.cleverfiles.com/)\n- [disk-inventory-x](http://www.derlien.com/)\n- [diskaid](http://www.digidna.net/diskaid)\n- [diskmaker-x](http://diskmakerx.com/)\n- [diskwave](http://diskwave.barthe.ph/)\n- [dispcalgui](http://dispcalgui.hoech.net)\n- [displaperture](http://manytricks.com/displaperture)\n- [displaylink](http://www.displaylink.com)\n- [diumoo](http://diumoo.net/)\n- [divvy](http://mizage.com/divvy/)\n- [djay](http://algoriddim.com/djay-mac)\n- [djv](http://djv.sourceforge.net)\n- [djview](http://djvu.sourceforge.net/)\n- [dmm](http://www.dmm.com/dc/book/)\n- [dnscrypt](http://opendns.github.io/dnscrypt-osx-client/)\n- [docear](http://docear.org)\n- [dockmod](http://spyresoft.com/dockmod/)\n- [dogecoin](http://dogecoin.com/)\n- [dolphin](http://www.dolphin-emu.org/)\n- [dosbox](http://www.dosbox.com)\n- [doubanradio](http://douban.fm)\n- [double-commander](http://doublecmd.sourceforge.net/)\n- [doublecommand](http://doublecommand.sourceforge.net)\n- [doubletwist](http://www.doubletwist.com/)\n- [doxie](http://www.getdoxie.com/)\n- [doxygen](http://www.stack.nl/~dimitri/doxygen/index.html)\n- [dradio](http://dradio.me)\n- [dragondisk](http://www.dragondisk.com/)\n- [dragthing](http://www.dragthing.com)\n- [drobo-dashboard](http://www.drobo.com)\n- [dropbox-encore](http://www.joyofmacs.com/software/dropboxencore/)\n- [dropbox](https://www.dropbox.com/)\n- [dropin](http://excitedatom.com/dropin/)\n- [dropletmanager](https://github.com/deivuh/DODropletManager-OSX)\n- [droplr](https://www.droplr.com/)\n- [dropzone](https://aptonic.com)\n- [dsp-radio](http://dl2sdr.homepage.t-online.de/)\n- [dterm](http://decimus.net/DTerm)\n- [dukto](https://code.google.com/p/dukto/)\n- [dump-truck](http://www.goldenfrog.com/dumptruck)\n- [dungeon-crawl-stone-soup-console](http://crawl.develz.org)\n- [dungeon-crawl-stone-soup-tiles](http://crawl.develz.org)\n- [dupeguru-me](http://www.hardcoded.net/dupeguru_me/)\n- [dupeguru-pe](http://www.hardcoded.net/dupeguru_pe/)\n- [dupeguru](http://www.hardcoded.net/dupeguru/)\n- [duplicate-annihilator](http://brattoo.com/propaganda/)\n- [duplicati](http://www.duplicati.com/)\n- [dupscanub](http://www5.wind.ne.jp/miko/mac_soft/dup_scan/index.html)\n- [dvdstyler](http://dvdstyler.org)\n- [dwarf-fortress](http://www.bay12games.com/dwarves/)\n\n#### E\n\n- [eagle](http://www.cadsoftusa.com/)\n- [eaglefiler](http://c-command.com/eaglefiler/)\n- [easyfind](http://www.devontechnologies.com/download/products.html)\n- [easysimbl](https://github.com/norio-nomura/EasySIMBL/)\n- [easyvpn](http://www.squashedsoftware.com/products-easyvpn.php)\n- [eclipse-ide](http://eclipse.org/)\n- [eclipse-java](http://eclipse.org/)\n- [eclipse-jee](http://eclipse.org/)\n- [eclipse-platform](http://eclipse.org)\n- [ecoute](http://pixiapps.com/ecouteosx/)\n- [eid-mw](https://code.google.com/p/eid-mw/)\n- [ejector](http://www.jeb.com.fr/en/ejector.shtml)\n- [electric-sheep](http://www.electricsheep.org)\n- [electrum-ltc](http://electrum-ltc.org)\n- [electrum](http://electrum.org/)\n- [elm-platform](http://www.elm-lang.org)\n- [eloquent](https://launchpad.net/eloquent)\n- [elyse](http://silkwoodsoftware.com/)\n- [emacs](http://emacsformacosx.com/)\n- [ember](http://realmacsoftware.com/ember)\n- [emin-webpquicklook](https://github.com/emin/WebPQuickLook)\n- [enfusegui](http://software.bergmark.com/enfusegui/Main.html)\n- [enjoyable](http://yukkurigames.com/enjoyable/)\n- [entropy](http://www.eigenlogik.com/entropy/)\n- [epic](http://www.epicbrowser.com)\n- [epub-to-pdf](https://code.google.com/p/epub-2-pdf)\n- [epubquicklook](http://people.ict.usc.edu/~leuski/programming/epub-quickview.php)\n- [escritorio-movistar](http://www.movistar.es/particulares/servicios/descargaaplicaciones)\n- [espionage](https://www.espionageapp.com/)\n- [espresso](http://macrabbit.com/espresso/)\n- [etrecheck](http://www.etresoft.com/etrecheck)\n- [evasi0n](http://evasi0n.com)\n- [eve](http://www.hotkey-eve.com/)\n- [evernote](https://evernote.com/)\n- [everweb](http://www.everwebapp.com/)\n- [evom](http://thelittleappfactory.com/evom/)\n- [exhaust](https://mrgeckosmedia.com/applications/info/Exhaust)\n- [exist-db](http://exist-db.org/)\n- [expandrive](http://www.expandrive.com/expandrive)\n- [eye-fi](http://support.eye.fi/downloads)\n- [eyetv](http://www.elgato.com/)\n\n#### F\n\n- [facebook-ios-sdk](https://developers.facebook.com/docs/ios)\n- [factor](http://factorcode.org/)\n- [fairmount](https://github.com/BoxOfSnoo/Fairmount)\n- [fake](http://fakeapp.com/)\n- [fakethunder](http://martianz.cn/fakethunder/)\n- [fantastical](http://flexibits.com/fantastical)\n- [fastest-free-youtube-downloader](https://www.fastestvideodownloader.com/)\n- [fastscripts](http://www.red-sweater.com/fastscripts/)\n- [faux-pas](http://fauxpasapp.com)\n- [fdt](http://fdt.powerflasher.com/)\n- [feedbinnotifier](http://kmikael.github.io/FeedbinNotifier)\n- [feeder](http://reinventedsoftware.com/feeder/)\n- [feeds](http://www.feedsapp.com/)\n- [fender-amp-drivers](https://fuse.fender.com/)\n- [fender-fuse](https://fuse.fender.com/)\n- [fenix](http://fenixwebserver.com/)\n- [fetch](http://fetchsoftworks.com/)\n- [ffmpegx](http://www.ffmpegx.com/download.html)\n- [figtree](http://tree.bio.ed.ac.uk/software/figtree/)\n- [fiji](http://fiji.sc)\n- [file-juicer](http://echoone.com/filejuicer/)\n- [filebot](http://www.filebot.net/)\n- [filedrop](http://www.filedropme.com/)\n- [fileshuttle](http://fileshuttle.io/)\n- [filezilla](https://filezilla-project.org/)\n- [find-any-file](http://apps.tempel.org/FindAnyFile/)\n- [findings](http://findingsapp.com)\n- [firefox](https://www.mozilla.org/en-US/firefox/)\n- [firewall-builder](http://www.fwbuilder.org)\n- [fission](http://rogueamoeba.com/fission/)\n- [fitbit-connect](http://www.fitbit.com/)\n- [fivedetails-flow](http://fivedetails.com)\n- [flame](http://husk.org/apps/flame/)\n- [flash-decompiler-trillix](http://www.flash-decompiler.com/mac.html)\n- [flash-player-debugger](https://www.adobe.com/support/flashplayer/downloads.html)\n- [flash-player](https://www.adobe.com/support/flashplayer/downloads.html)\n- [flash](https://www.adobe.com/products/flashplayer/distribution3.html)\n- [flavours](http://flavours.interacto.net/)\n- [flexiglass](http://nulana.com/flexiglass/)\n- [flickr-uploadr](http://www.flickr.com/tools/)\n- [flightgear](http://www.flightgear.org/)\n- [flip4mac](http://www.telestream.net/flip4mac/)\n- [fliqlo](http://fliqlo.com/)\n- [flow](http://www.getflow.com/)\n- [flowdock](https://www.flowdock.com/)\n- [fluid](http://fluidapp.com/)\n- [fluke](https://code.google.com/p/flukeformac/)\n- [flux](http://justgetflux.com)\n- [fm-fw-installer](http://www.flymaster-avionics.com/Support/Downloads/ForMacOSX/tabid/199/Default.aspx)\n- [focus](http://www.heyfocus.com/)\n- [focuswriter](http://gottcode.org/focuswriter/)\n- [folding-text](http://www.foldingtext.com)\n- [foldit](http://fold.it)\n- [folx](http://mac.eltima.com/de/download-manager.html)\n- [fontexplorer-x-pro](http://www.fontexplorerx.com/)\n- [fontprep](http://fontprep.com)\n- [forklift](http://www.binarynights.com/)\n- [fotomagico](http://www.boinx.com/fotomagico/)\n- [fotowall](http://www.enricoros.com/opensource/fotowall/)\n- [fourk-video-downloader](http://www.4kdownload.com/products/product-videodownloader)\n- [fourk-youtube-to-mp3](http://www.4kdownload.com/products/product-youtubetomp3)\n- [fourpeaks](http://nucleobytes.com/index.php/4peaks)\n- [foxmail](http://www.foxmail.com)\n- [fpc](http://www.freepascal.org/)\n- [framer-studio](http://framerjs.com/)\n- [free-ruler](http://www.pascal.com/software/freeruler/)\n- [freecad](http://sourceforge.net/projects/free-cad/)\n- [freecol](http://freecol.org)\n- [freedv](http://freedv.org/tiki-index.php)\n- [freefilesync](http://freefilesync.sourceforge.net/)\n- [freemind](freemind.sourceforge.net)\n- [freezer](https://mrgeckosmedia.com/applications/info/Freezer)\n- [fritzing](http://fritzing.org/)\n- [frizzix](http://mac.frizzix.de/)\n- [frostwire](http://www.frostwire.com)\n- [fs-uae](http://fs-uae.net/)\n- [fseventer](http://www.fernlightning.com/doku.php?id=software:fseventer:start)\n- [fugu](http://rsug.itd.umich.edu/software/fugu/)\n- [functionflip](http://kevingessner.com/software/functionflip/)\n- [fuze](https://www.fuzemeeting.com)\n\n#### G\n\n- [gambit-c](http://gambitscheme.org/wiki/index.php/Main_Page)\n- [gamesalad](http://gamesalad.com)\n- [ganttproject](http://www.ganttproject.biz)\n- [garagebuy](http://www.iwascoding.com/GarageBuy)\n- [garagesale](http://www.iwascoding.com/GarageSale/index.html)\n- [gargoyle](https://code.google.com/p/garglk/)\n- [garmin-ant-agent](http://www8.garmin.com/support/download_details.jsp?id=4417)\n- [garmin-communicator](http://www8.garmin.com/support/download_details.jsp?id=3739)\n- [garmin-express](http://www.garmin.com/express)\n- [garmin-training-center](http://www.garmin.com/garmin/cms/intosports/training_center)\n- [gas-mask](http://www.clockwise.ee/gasmask/)\n- [gawker](http://gawker.sourceforge.net/Gawker.html)\n- [gdal-framework](http://www.kyngchaos.com/software/frameworks)\n- [geekbench](http://www.primatelabs.com/geekbench/)\n- [geektool](http://projects.tynsoe.org/en/geektool/)\n- [genymotion](http://www.genymotion.com/)\n- [gephi](http://gephi.org/)\n- [geppetto](http://puppetlabs.github.io/geppetto/)\n- [gfxcardstatus](http://gfx.io/)\n- [ghc](http://ghcformacosx.github.io/)\n- [ghostlab](http://vanamco.com/ghostlab/)\n- [giffun](http://www.stone.com/GIFfun/)\n- [gifrocket](http://www.gifrocket.com/)\n- [gimp-lisanet](http://gimp.lisanet.de)\n- [gimp](http://www.gimp.org)\n- [gingr](http://harvest.readthedocs.org/en/latest/content/gingr.html)\n- [gisto](http://www.gistoapp.com/)\n- [git-annex](http://git-annex.branchable.com/)\n- [gitbook](https://www.gitbook.io/)\n- [gitbox](http://gitboxapp.com/)\n- [github](http://mac.github.com)\n- [gitifier](http://psionides.github.io/Gitifier/)\n- [gitter](https://gitter.im/)\n- [gitx-l](http://gitx.laullon.com/)\n- [gitx-rowanj](http://rowanj.github.io/gitx/)\n- [gitx](http://gitx.frim.nl/)\n- [gity](http://gityapp.com/)\n- [glcplayer](http://www.glc-player.net)\n- [glimmerblocker](http://glimmerblocker.org)\n- [glo](http://globible.com/gloformac/)\n- [globalsync](http://www.usglobalsat.com/)\n- [gmail-notifier](https://github.com/jashephe/Gmail-Notifier)\n- [gmail-notifr](http://ashchan.com/projects/gmail-notifr)\n- [gnucash](http://www.gnucash.org)\n- [go-agent](http://www.go.cd)\n- [go-server](http://www.go.cd/)\n- [goagentx](http://goagentx.com/)\n- [gog-downloader](http://www.gog.com/downloader)\n- [golly](http://golly.sourceforge.net/)\n- [google-adwords-editor](http://www.google.com/intl/en_US/adwordseditor/)\n- [google-chrome](https://www.google.com/chrome/)\n- [google-drive](https://drive.google.com/)\n- [google-earth-web-plugin](http://www.google.com/intl/en/earth/explore/products/plugin.html)\n- [google-earth](https://www.google.com/earth/)\n- [google-hangouts](https://www.google.com/tools/dlpage/hangoutplugin)\n- [google-japanese-ime](https://www.google.co.jp/ime/)\n- [google-nik-collection](https://www.google.com/nikcollection/)\n- [google-notifier](http://toolbar.google.com/gmail-helper/notifier_mac.html)\n- [google-plus-auto-backup](http://picasa.google.com/)\n- [google-refine](http://openrefine.org/)\n- [google-web-designer](https://www.google.com/webdesigner/)\n- [googleappenginelauncher](https://developers.google.com/appengine/)\n- [gopanda](http://pandanet-igs.com/communities/gopanda2)\n- [gpgtools](https://gpgtools.org/index.html)\n- [gpower](http://www.gpower.hhu.de/)\n- [gqrx](http://gqrx.dk/)\n- [grabbox](http://grabbox.devsoft.no/)\n- [grafx2](http://pulkomandy.tk/projects/GrafX2)\n- [grandperspective](http://grandperspectiv.sourceforge.net/)\n- [grandtotal](http://www.mediaatelier.com/GrandTotal3/)\n- [graphsketcher](https://github.com/graphsketcher/GraphSketcher)\n- [graphviz](http://www.graphviz.org/)\n- [gravit](http://gravit.io/)\n- [gridwars](http://gridwars.marune.de/)\n- [grooveshark](http://www.grooveshark.com)\n- [groovesquid](http://groovesquid.com/)\n- [growl-fork](https://www.macupdate.com/app/mac/41038/growl-fork)\n- [growler](http://wafflesoftware.net/growlergn/)\n- [growlnotify](http://growl.info/downloads)\n- [growlvoice](http://www.growlvoice.com/)\n- [guitar-tuner](http://www.gieson.com/Library/projects/utilities/tuner/)\n- [gulp](https://github.com/sindresorhus/gulp-app)\n- [gurps-character-sheet](http://gurpscharactersheet.com)\n- [gyazo](https://gyazo.com/)\n\n#### H\n\n- [hall](https://hall.com/download-hall/hall-for-mac)\n- [handbrake](http://handbrake.fr/)\n- [handbrakebatch](http://www.osomac.com/apps/osx/handbrake-batch/)\n- [handbrakecli](http://handbrake.fr)\n- [hands-off](http://www.metakine.com/products/handsoff/)\n- [happygrep](https://github.com/happypeter/happygrep)\n- [haroopad](http://pad.haroopress.com/)\n- [harvest](http://www.getharvest.com/mac)\n- [hashcat](https://hashcat.net/hashcat/)\n- [haskell-platform](http://www.haskell.org/platform/)\n- [hazel](http://www.noodlesoft.com/hazel.php)\n- [hbuilder](http://dcloud.io/)\n- [hear](http://www.prosofteng.com/products/hear.php)\n- [heart](http://presstube.com/blog/2011/heart/)\n- [hedgewars](http://hedgewars.org)\n- [hermes](http://hermesapp.org/)\n- [heroku-toolbelt](https://toolbelt.heroku.com/)\n- [hex-fiend](http://ridiculousfish.com/hexfiend/)\n- [hex](http://hextcg.com/)\n- [hexchat](http://hexchat.github.io)\n- [hexels](http://hexraystudios.com/hexels/)\n- [hipchat](https://www.hipchat.com/)\n- [hippoconnect](http://hipporemote.com/)\n- [hiss](http://collect3.com.au/hiss/)\n- [historyhound](http://www.stclairsoft.com/HistoryHound/)\n- [hive](http://www.hivewallet.com)\n- [hockeyapp](http://hockeyapp.net/releases/mac/)\n- [homestream](http://www.sony.co.uk/hub/1237485339460)\n- [honer](https://github.com/puffnfresh/Honer.app)\n- [hopper-disassembler](http://www.hopperapp.com/)\n- [hoppergdbserver](http://www.hopperapp.com/HopperGDBServer/index.html)\n- [horndis](http://joshuawise.com/horndis)\n- [hostbuddy](http://clickontyler.com)\n- [hoster](http://www.redwinder.com/macapp/hoster/)\n- [hosts](http://permanentmarkers.nl/software.html)\n- [houdahgeo](http://houdah.com/houdahGeo/)\n- [houdahspot](http://www.houdah.com/houdahSpot/)\n- [hpuload](http://www.fernlightning.com/doku.php?id=software:hpuload:start)\n- [hr](http://www.hrmacapp.com/)\n- [hsang](http://lushi.163.com/)\n- [httpscoop](http://www.tuffcode.com)\n- [hubic](https://hubic.com)\n- [hugin](http://hugin.sourceforge.net/)\n- [hush](http://coffitivity.com/hush/)\n- [hype](http://tumult.com/hype/)\n- [hyperdock](http://hyperdock.bahoom.com/)\n- [hyperswitch](http://bahoom.com/hyperswitch)\n- [hyro](http://jawerty.github.io/Hyro/)\n\n#### I\n\n- [iannix](http://www.iannix.org/)\n- [ibabel](http://www.macinchem.org/ibabel/ibabel3.php)\n- [ibackup](http://www.grapefruit.ch/iBackup)\n- [ibank](http://www.iggsoftware.com/ibank)\n- [ibettercharge](http://softorino.com/ibettercharge/)\n- [iboostup](http://www.iboostup.com)\n- [ibrowse](http://www.ibrowseapp.com/)\n- [icefloor](http://www.hanynet.com/icefloor/)\n- [ichm](https://code.google.com/p/ichm/)\n- [icolors](http://www.fadingred.com/icolors/)\n- [icompta](http://www.icompta-app.com/)\n- [iconping](http://antirez.com/iconping/)\n- [icursor](https://www.macupdate.com/app/mac/17059/icursor)\n- [id3-editor](http://www.pa-software.com/id3editor/)\n- [identify](http://identify2.arrmihardies.com/)\n- [ideskcal](http://www.hashbangind.com)\n- [idocument-plus](http://www.icyblaze.com/idocument/)\n- [idris](http://www.idris-lang.org)\n- [iexplorer](http://www.macroplant.com/)\n- [ifilex](http://www.osxbytes.com/page3/index.html)\n- [ifunbox](http://www.i-funbox.com/)\n- [igetter](http://www.igetter.net/)\n- [iloc](http://derailer.org/iloc)\n- [imagealpha](http://pngmini.com/)\n- [imagemin](https://github.com/kevva/imagemin-app)\n- [imageoptim](http://imageoptim.com/)\n- [img2icns](http://www.img2icnsapp.com/)\n- [imitone](http://imitone.com/)\n- [inboard](http://inboardapp.com/beta)\n- [inc](https://sendtoinc.com/apps/)\n- [indigo](http://www.perceptiveautomation.com/indigo/index.html)\n- [induction](http://inductionapp.com/)\n- [infinit](https://infinit.io/)\n- [inform](http://inform7.com/)\n- [injection](http://injectionforxcode.com/)\n- [inkscape](http://inkscape.org)\n- [inky](http://inky.com)\n- [insertpic](http://www.getinsertpic.com/)\n- [instabridge](http://instabridge.com/)\n- [instacast](http://vemedio.com/products/instacast-mac)\n- [instead](http://instead.syscall.ru/)\n- [insync](https://insynchq.com/)\n- [integrity](http://peacockmedia.co.uk/integrity/)\n- [intel-haxm](https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager)\n- [intel-power-gadget](https://software.intel.com/en-us/articles/intel-power-gadget-20)\n- [intel-xdk](http://xdk-software.intel.com/)\n- [intellij-idea-ce](https://www.jetbrains.com/idea/index.html)\n- [intellij-idea](https://www.jetbrains.com/idea/index.html)\n- [intermission](http://rogueamoeba.com/intermission/)\n- [invisiblix](http://www.read-write.fr/invisiblix/)\n- [invisionsync](http://invisionapp.com/)\n- [invisorql](http://www.pozdeev.com/invisor/)\n- [iograph](http://iographica.com/)\n- [ionu](https://ionu.com)\n- [ioquake3](http://ioquake3.org/)\n- [ios7-screensaver](http://bodysoulspirit.weebly.com/ios-7-screensaver-for-mac-os-x-by-bodysoulspirit.html)\n- [ipalette](http://ipalette.info/)\n- [ipaql](http://ipaql.com/)\n- [iphone-configuration-utility](http://support.apple.com/kb/DL1465)\n- [iphoney](https://www.marketcircle.com/iphoney)\n- [ireadfast](http://www.gengis.net/prodotti/iReadFast_Mac/en/index.php)\n- [irip](http://thelittleappfactory.com/irip/)\n- [isabelle](http://www.cl.cam.ac.uk/research/hvg/Isabelle/)\n- [isolator](http://willmore.eu/software/isolator)\n- [istat-menus](http://bjango.com/mac/istatmenus/)\n- [istat-server](http://bjango.com/mac/istatserver/)\n- [isteg](http://www.hanynet.com/isteg/)\n- [istopmotion](http://www.boinx.com/istopmotion/mac/)\n- [istumbler](http://istumbler.net/)\n- [iswiff](http://echoone.com/iswiff/)\n- [iterm2](http://www.iterm2.com/)\n- [itools](http://www.itools.cn/download.php?v=mac_en)\n- [itsycal](http://www.mowglii.com/itsycal/)\n- [itunes-volume-control](https://github.com/alberti42/iTunes-Volume-Control)\n- [itunesscrobbler](http://www.easyclasspage.de/lastfm/seite-19.html)\n- [itweax](http://www.itweax.net/)\n- [iupx](http://iupx.sourceforge.net)\n- [ivolume](http://www.mani.de/en/ivolume/)\n- [izip](http://www.izip.com)\n\n#### J\n\n- [jabber-video](https://www.ciscojabbervideo.com/)\n- [jabref](http://jabref.sourceforge.net/)\n- [jaikoz](http://jthink.net/jaikoz)\n- [jameica](http://www.willuhn.de/products/jameica/)\n- [jaspersoft-studio](http://community.jaspersoft.com/project/jaspersoft-studio)\n- [java](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)\n- [javafx-scene-builder](http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-info-2157684.html)\n- [jawbone-updater](http://jawbone.com/)\n- [jbidwatcher](http://www.jbidwatcher.com)\n- [jd-gui](http://jd.benow.ca/)\n- [jdiskreport](http://www.jgoodies.com/freeware/jdiskreport/)\n- [jdownloader](http://jdownloader.org/)\n- [jedit](http://www.jedit.org)\n- [jenkins-menu](http://qvacua.com)\n- [jetphoto-studio](http://www.jetphotosoft.com/web/home/)\n- [jewelrybox](http://jewelrybox.unfiniti.com/)\n- [jiggler](http://www.sticksoftware.com/software/Jiggler.html)\n- [jing](http://www.techsmith.com/jing.html)\n- [jitouch](http://www.jitouch.com)\n- [jitsi](https://jitsi.org/)\n- [joinme](https://join.me/)\n- [josm](http://josm.openstreetmap.de)\n- [jsonlook](https://github.com/rjregenold/jsonlook)\n- [jubler](http://www.jubler.org/)\n- [julia](http://julialang.org/)\n- [juliastudio](http://forio.com/labs/julia-studio/)\n- [jumpcut](http://jumpcut.sourceforge.net/)\n- [jumpshare](https://jumpshare.com/)\n- [justlooking](http://chipmunkninja.com/JustLooking)\n- [jxplorer](http://jxplorer.org)\n\n#### K\n\n- [kaleidoscope](http://www.kaleidoscopeapp.com/)\n- [kamakiri](https://mochidev.com/apps/kamakiri)\n- [karabiner](https://pqrs.org/osx/karabiner/)\n- [katana](http://katana.witiz.com/)\n- [kdiff3](http://kdiff3.sourceforge.net/)\n- [keepassx](http://www.keepassx.org)\n- [keka](http://kekaosx.com/)\n- [kensington-trackball-works](http://www.kensington.com/)\n- [kext-drop](http://www.groths.org/software/kextdrop/)\n- [kext-utility](http://cvad-mac.narod.ru/index/0-4)\n- [kext-wizard](http://www.insanelymac.com/forum/topic/253395-kext-wizard-easy-to-use-kext-installer-and-more/)\n- [key-codes](http://manytricks.com/keycodes/)\n- [keyboard-cleaner](http://jan.prima.de/~jan/plok/archives/48-Keyboard-Cleaner.html)\n- [keyboard-maestro](http://www.keyboardmaestro.com/)\n- [keyboardcleantool](http://bettertouchtool.net)\n- [keycastr](https://github.com/sdeken/keycastr)\n- [keycue](http://www.ergonis.com/products/keycue/)\n- [keyfinder](http://www.ibrahimshaath.co.uk/keyfinder/)\n- [keymo](http://manytricks.com/keymo)\n- [keystore-explorer](http://keystore-explorer.sourceforge.net/index.php)\n- [kid3](http://kid3.sourceforge.net/)\n- [kindle-previewer](http://www.amazon.com/gp/feature.html/?docId=1000765261)\n- [kindle](http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000464931)\n- [kindlegen](http://www.amazon.com/gp/feature.html?docId=1000765211)\n- [kismac](http://kismac-ng.org/)\n- [kitematic](https://kitematic.com/)\n- [kivy](http://kivy.org)\n- [kiwi](http://kiwi-app.net/)\n- [kkbox](http://www.kkbox.com/)\n- [klayout](http://www.klayout.de/index.html)\n- [knock](http://knocktounlock.com)\n- [knox](https://agilebits.com/knox)\n- [kobito](http://kobito.qiita.com/)\n- [kobo](http://www.kobo.com/)\n- [kod](https://github.com/rsms/kod/)\n- [komanda](https://github.com/mephux/komanda)\n- [komodo-edit](http://komodoide.com/komodo-edit)\n- [komodo-ide](http://komodoide.com/)\n- [kompozer](http://www.kompozer.net/)\n- [ksdiff](http://www.kaleidoscopeapp.com/ksdiff2)\n- [kuaipan](http://www.kuaipan.cn/d/mac)\n- [kugoumusic](http://www.kugou.com)\n- [kvirc](http://www.kvirc.net)\n- [kylo](http://kylo.tv)\n\n#### L\n\n- [lastfm](http://www.lastfm.com)\n- [lastpass-universal](https://lastpass.com/)\n- [latexian](http://tacosw.com/latexian/)\n- [latexit](http://www.chachatelier.fr/latexit)\n- [launchbar](http://www.obdev.at/products/launchbar/)\n- [launchcontrol](http://www.soma-zone.com/LaunchControl/)\n- [launchrocket](https://github.com/jimbojsb/launchrocket)\n- [launchy](http://www.launchy.net)\n- [layervault](http://layervault.com/)\n- [lazarus](http://lazarus.freepascal.org/)\n- [league-of-legends](http://signup.leagueoflegends.com/)\n- [leap-motion](https://www.leapmotion.com/setup)\n- [less](http://incident57.com/less/)\n- [levelator](http://www.conversationsnetwork.org/levelator/)\n- [librecad](http://librecad.org/)\n- [libreoffice](https://www.libreoffice.org/)\n- [licecap](http://www.cockos.com/licecap/)\n- [licensed](http://amarsagoo.info/licensed)\n- [lightpaper](http://clockworkengine.com/lightpaper-mac/)\n- [lighttable](http://www.lighttable.com/)\n- [lilypond](http://lilypond.org)\n- [limechat](http://limechat.net/mac/)\n- [lincastor](http://onflapp.wordpress.com/lincastor/)\n- [linein](http://www.rogueamoeba.com/freebies/)\n- [lingon-x](http://www.peterborgapps.com/lingon/)\n- [lingrradar](http://radar.lingr.com/)\n- [linkinus](http://conceited.net/products/linkinus)\n- [linkliar](https://github.com/halo/LinkLiar)\n- [linphone](http://www.linphone.org/)\n- [liquifile](http://www.liquifile.info/)\n- [litecoin](https://litecoin.org/)\n- [liteicon](http://www.freemacsoft.net/liteicon/)\n- [liteide](https://github.com/visualfc/liteide)\n- [little-snitch](http://www.obdev.at/products/littlesnitch/index.html)\n- [littleipsum](http://littleipsum.com)\n- [livereload](http://www.livereload.com)\n- [livestation](http://www.livestation.com)\n- [loadmytracks](http://www.cluetrust.com/loadmytracks.html)\n- [locko](http://www.binarynights.com/)\n- [logic](http://www.saleae.com/)\n- [logisim](http://ozark.hendrix.edu/~burch/logisim/)\n- [logitech-control-center](http://www.logitech.com)\n- [logitech-gaming-software](http://www.logitech.com/en-us/support/gaming-software?section=downloads&bit=&osid=36)\n- [logitech-harmony](http://www.logitech.com/en-us/support/universal-remotes)\n- [logitech-myharmony](https://setup.myharmony.com/)\n- [logitech-unifying](http://www.logitech.com/en-us/promotions/6072)\n- [logmein-client](https://secure.logmein.com/products/pro/learnmore/desktopapp.aspx)\n- [logmein-hamachi](http://vpn.net)\n- [logoist](http://www.syniumsoftware.com/logoist/)\n- [loom](http://loom.com/)\n- [love](http://love2d.org)\n- [lpk25-editor](http://www.akaipro.com/index.php/product/lpk25)\n- [ltspice](http://www.linear.com/designtools/software/)\n- [lucidor](http://lucidor.org)\n- [luminance-hdr](http://qtpfsgui.sourceforge.net/)\n- [lyn](http://www.lynapp.com/)\n- [lynxlet](http://habilis.net/lynxlet/)\n- [lyrics-master](http://www.kenichimaehashi.com/lyricsmaster/)\n- [lyx](http://www.lyx.org)\n\n#### M\n\n- [mac-informer](http://macdownload.informer.com/landing/)\n- [mac-linux-usb-loader](http://sevenbits.github.io/Mac-Linux-USB-Loader/)\n- [macaw](http://macaw.co/)\n- [macbreakz](http://www.publicspace.net/MacBreakZ/)\n- [macdown](http://macdown.uranusjr.com/)\n- [macdrops](http://interfacelift.com/apps/macdrops/v1)\n- [macfusion](http://macfusionapp.org/)\n- [macgdbp](https://www.bluestatic.org/software/macgdbp/)\n- [machacha](http://www.julifos.com/soft/machacha/index.html)\n- [machg](http://jasonfharris.com/machg/)\n- [macintosh-explorer](http://www.ragesw.com/products/explorer.html)\n- [macmoney](http://www.devon.riceball.net/display.php?file=m01)\n- [macpar-deluxe](http://gp.home.xs4all.nl/Site/MacPAR_deLuxe.html)\n- [macpass](http://mstarke.github.io/MacPass/)\n- [macpaw-gemini](http://macpaw.com/gemini)\n- [macpilot](http://www.koingosw.com/products/macpilot.php)\n- [macports](http://www.macports.org)\n- [macs-fan-control](http://www.crystalidea.com/macs-fan-control)\n- [macterm](http://www.macterm.net/)\n- [mactex](http://www.tug.org/mactex/)\n- [mactracker](http://mactracker.ca/)\n- [mactubes](http://macapps.sakura.ne.jp/mactubes/index_en.html)\n- [macupdate-desktop](https://www.macupdate.com/desktop)\n- [macvim](http://code.google.com/p/macvim/)\n- [macwinzipper](http://tidajapan.com/macwinzipper)\n- [maczip4win](http://ynomura.com/home/?page_id=116)\n- [madruby](http://www.wingsforpigs.com/MadRuby/MadRuby.html)\n- [magic-launch](http://www.oneperiodic.com/products/magiclaunch/)\n- [magican](http://www.magicansoft.com/)\n- [mail-plugin-manager](http://www.chungwasoft.com/mailpluginmanager/)\n- [mailbox](http://www.mailboxapp.com/)\n- [mailfollowup](http://www.cs.unc.edu/~welch/MailFollowup/)\n- [mailmate](http://freron.com/)\n- [mailplane](http://mailplaneapp.com)\n- [majic](http://erikhinterbichler.com/apps/majic/)\n- [makehuman](http://www.makehuman.org/)\n- [makemkv](http://www.makemkv.com/)\n- [makerware](http://www.makerbot.com/makerware/)\n- [mame](http://mameosx.sourceforge.net/)\n- [mamp](http://www.mamp.info/en/index.html)\n- [manager](http://manager.io)\n- [manico](http://manico.im/)\n- [mapture](http://anatoo.jp/mapture/)\n- [maratis](http://www.maratis3d.org/)\n- [marble](http://www.marble.kde.org)\n- [marked](http://marked2app.com)\n- [marsedit](http://www.red-sweater.com/marsedit/)\n- [master-key](http://macinmind.com/?area=app&app=masterkey&pg=info)\n- [matplotlib](http://www.kyngchaos.com/software/python)\n- [mauve](http://gel.ahabs.wisc.edu/mauve/)\n- [mavensmate](http://mavensmate.com)\n- [max](http://sbooth.org/Max/)\n- [maxthon](http://www.maxthon.com/)\n- [mcedit](http://www.mcedit.net)\n- [mcs783x](http://www.asix.com.tw/products.php?op=ProductList&PLine=74&PSeries=109)\n- [mdrp](http://www.macdvdripperpro.com/)\n- [media-converter](http://media-converter.sourceforge.net/)\n- [mediaelch](http://www.mediaelch.de/)\n- [mediafire-desktop](https://www.mediafire.com/software/desktop/)\n- [mediainfo](http://mediaarea.net/en/MediaInfo)\n- [mediathekview](http://sourceforge.net/projects/zdfmediathk/)\n- [meerkat](http://codesorcery.net/meerkat)\n- [memorytamer](http://www.memorytamer.com/)\n- [mendeley-desktop](http://www.mendeley.com/)\n- [menubar-countdown](http://capablehands.net/menubarcountdown)\n- [menubarfilter](http://wez.github.com/MenuBarFilter/)\n- [menucalendarclock-ical](http://www.objectpark.net/en/mcc.html)\n- [menumeters](http://www.ragingmenace.com/software/menumeters/)\n- [menuola](http://www.geocom.co.nz)\n- [meocloud](https://meocloud.pt)\n- [mercurymover](http://www.heliumfoot.com/mercurymover)\n- [mesasqlite](http://www.desertsandsoftware.com)\n- [meshlab](http://meshlab.sourceforge.net/)\n- [metanota](http://www.metanota.com/)\n- [meteorologist](http://heat-meteo.sourceforge.net/)\n- [mi](http://www.mimikaki.net/)\n- [microsoft-intellipoint](http://www.microsoft.com/hardware/en-us/mice)\n- [microsoft-intellitype](http://www.microsoft.com/hardware/en-us/keyboards)\n- [microsoft-lync-plugin](http://office.microsoft.com/Lync)\n- [middleclick](http://clement.beffa.org/labs/projects/middleclick)\n- [midikeys](http://www.manyetas.com/creed/midikeys.html)\n- [miditrail](http://en.sourceforge.jp/projects/miditrail/)\n- [mikogo](http://www.mikogo.com/)\n- [milkytracker](http://www.milkytracker.org/)\n- [minbox](https://minbox.com)\n- [minco](http://www.celmaro.com/minco/)\n- [mindnode-pro](https://mindnode.com/)\n- [minecraft](http://minecraft.net)\n- [mini-metro](http://dinopoloclub.com/minimetro/)\n- [minilyrics](http://www.crintsoft.com/)\n- [minimalclock](http://ilovecolorz.net/minimalclock/)\n- [minitimer](http://kevingessner.com/software/minitimer/)\n- [minitube](http://flavio.tordini.org/minitube)\n- [miro-video-converter](http://www.mirovideoconverter.com/)\n- [miro](http://www.getmiro.com/)\n- [mirrordisplays](http://www.fabiancanas.com/Projects/MirrorDisplays)\n- [mixlr](http://mixlr.com)\n- [mixture](http://mixture.io/)\n- [mixxx](http://www.mixxx.org)\n- [mjolnir](http://mjolnir.io)\n- [mkvtoolnix](http://www.bunkus.org/videotools/mkvtoolnix/)\n- [mnemosyne](http://mnemosyne-proj.org/)\n- [mocksmtp](http://mocksmtpapp.com/)\n- [money](http://www.jumsoft.com/money/)\n- [moneyguru](http://www.hardcoded.net/moneyguru/)\n- [moneymoney](http://moneymoney-app.com/)\n- [moneyplex](http://www.matrica.de/)\n- [moneywell](http://nothirst.com/moneywell/)\n- [mongodb](http://mongodbx-app.orelord.com/)\n- [mongodbpreferencepane](https://github.com/remysaissy/mongodb-macosx-prefspane)\n- [mongohub](https://github.com/fotonauts/MongoHub-Mac)\n- [mono-mdk](http://mono-project.com/)\n- [mono-mre](http://mono-project.com)\n- [monochrome](http://lucianmarin.com/monochrome/)\n- [monolingual](http://monolingual.sourceforge.net/)\n- [monotype-skyfonts](http://www.fonts.com/web-fonts/google)\n- [moom](http://manytricks.com/moom/)\n- [moreamp](http://sourceforge.net/projects/moreamp/)\n- [mosh](http://mosh.mit.edu/)\n- [mou](http://mouapp.com/)\n- [mountain](http://appgineers.de/mountain/)\n- [mover](http://www.themaninhat.com/mover.html)\n- [movieply](http://www.movieply.com/)\n- [movist](https://github.com/samiamwork/Movist)\n- [mozart](http://www.mozart-oz.org)\n- [mp4tools](http://www.emmgunn.com/mp4tools/mp4toolshome.html)\n- [mpeg-streamclip](http://www.squared5.com/)\n- [mpfreaker](http://www.lairware.com/mpfreaker/)\n- [mplayer-osx-extended](http://www.mplayerosx.ch/)\n- [mplayerx](http://mplayerx.org/)\n- [mpv](http://mpv.io/)\n- [mucommander](http://www.mucommander.com/index.php)\n- [mudlet](http://www.mudlet.org)\n- [multibit](https://multibit.org/)\n- [multibrowser](https://sites.google.com/site/tesseractsoftware/multibrowser)\n- [multidoge](http://multidoge.org/)\n- [multifirefox](http://davemartorana.com/multifirefox)\n- [mumble](http://mumble.sourceforge.net)\n- [murasaki](http://genjiapp.com/mac/murasaki/index_en.html)\n- [musescore](http://musescore.org/)\n- [music-manager](https://play.google.com/music/)\n- [musicbrainz-picard](http://musicbrainz.org/doc/MusicBrainz_Picard)\n- [musicplayer](http://ufd.dk/musicplayer)\n- [musictube](http://flavio.tordini.org/musictube)\n- [musique](http://flavio.tordini.org/musique)\n- [myphonedesktop](http://www.myphonedesktop.com/)\n- [mysqlworkbench](http://www.mysql.com/products/workbench)\n\n#### N\n\n- [nally](http://yllan.org/app/Nally/)\n- [name-mangler](http://manytricks.com/namemangler/)\n- [namebench](https://code.google.com/p/namebench/)\n- [namechanger](http://www.mrrsoftware.com/MRRSoftware/NameChanger.html)\n- [namely](http://amarsagoo.info/namely)\n- [narrative-uploader](http://getnarrative.com)\n- [navicat-data-modeler](http://www.navicat.com/products/navicat-data-modeler)\n- [navicat-for-mariadb](http://www.navicat.com/products/navicat-for-mariadb)\n- [navicat-for-mysql](http://www.navicat.com/products/navicat-for-mysql)\n- [navicat-for-oracle](http://www.navicat.com/products/navicat-for-oracle)\n- [navicat-for-postgresql](http://www.navicat.com/products/navicat-for-postgresql)\n- [navicat-for-sql-server](http://www.navicat.com/products/navicat-for-sqlserver)\n- [navicat-for-sqlite](http://www.navicat.com/products/navicat-for-sqlite)\n- [navicat-premium](http://www.navicat.com/products/navicat-premium)\n- [neofinder](http://www.cdfinder.de)\n- [netbeans-cpp](https://netbeans.org/)\n- [netbeans-php](https://netbeans.org/)\n- [netbeans](https://netbeans.org/)\n- [nethackcocoa](https://code.google.com/p/nethack-cocoa/)\n- [netlogo](http://ccl.northwestern.edu/netlogo/)\n- [netnewswire](http://netnewswireapp.com/)\n- [netshade](http://raynersoftware.com/netshade/)\n- [netspot](http://www.netspotapp.com)\n- [neu](http://www.elegantchaos.com/neu/)\n- [ngrok](https://ngrok.com/)\n- [nicecast](http://rogueamoeba.com/nicecast)\n- [nide](http://coreh.github.io/nide/)\n- [nightingale](http://getnightingale.com/)\n- [nike-plus-connect](http://nikeplus.nike.com)\n- [nimbus](https://github.com/jnordberg/irccloudapp)\n- [ninjablocks](http://forums.ninjablocks.com/index.php?p=/discussion/1655/ninja-osx-client/p1)\n- [nitroshare](https://quickmediasolutions.com/apps/14/nitroshare)\n- [nitrous-desktop](https://www.nitrous.io/mac)\n- [nmap](http://nmap.org/)\n- [no-ip-duc](http://www.noip.com/download?page=mac)\n- [nocturne](http://code.google.com/p/blacktree-nocturne/)\n- [node-webkit](https://github.com/rogerwang/node-webkit)\n- [node](http://nodejs.org)\n- [nodebox](http://nodebox.net/node/)\n- [nodeclipse](http://www.nodeclipse.org/)\n- [noejectdelay](https://pqrs.org/macosx/keyremap4macbook/noejectdelay.html.en)\n- [noisy](https://github.com/jonshea/Noisy)\n- [noiz2sa](http://workram.com/games/noiz2sa/)\n- [nomachine](http://www.nomachine.com)\n- [nomacs](http://www.nomacs.org/)\n- [noobproof](http://www.hanynet.com/noobproof/index.html)\n- [nosleep](https://code.google.com/p/macosx-nosleep-extension/)\n- [notational-velocity](http://notational.net)\n- [nothing-to-hide](https://back.nothingtohide.cc/)\n- [notifyr](http://getnotifyr.com)\n- [nottingham](https://clickontyler.com/nottingham/)\n- [ntfs-free](http://sourceforge.net/projects/ntfsfree/)\n- [nutstore](https://jianguoyun.com)\n- [nvalt](http://brettterpstra.com/project/nvalt/)\n- [nzbvortex](http://www.nzbvortex.com/)\n\n#### O\n\n- [objektiv](http://nthloop.github.io/Objektiv/)\n- [obs](http://obsproject.com/)\n- [obsidian-menu-bar-mountain-lion](http://www.obsidianmenubar.com)\n- [ocenaudio](http://www.ocenaudio.com.br/en)\n- [oclint](http://oclint.org)\n- [octave](https://gnu.org/software/octave/)\n- [odesk](https://www.odesk.com/)\n- [omnidazzle](http://www.omnigroup.com/more)\n- [omnidisksweeper](http://www.omnigroup.com/products/omnidisksweeper/)\n- [omnifocus](http://www.omnigroup.com/products/omnifocus/)\n- [omnigraffle](http://www.omnigroup.com/products/omnigraffle)\n- [omnioutliner](http://www.omnigroup.com/omnioutliner/)\n- [omniplan](http://www.omnigroup.com/products/omniplan/)\n- [omnipresence](http://www.omnigroup.com/omnipresence)\n- [omniweb](http://www.omnigroup.com/products/omniweb/)\n- [onepassword](https://agilebits.com/onepassword)\n- [oneswarm](http://www.oneswarm.org/)\n- [onionshare](https://onionshare.org/)\n- [onlive-client](http://games.onlive.com)\n- [onyx](http://www.titanium.free.fr/downloadonyx.php)\n- [oovoo](http://www.oovoo.com)\n- [openarena](http://openarena.ws)\n- [opendns-updater](https://support.opendns.com/entries/23218654-Where-do-I-download-an-OpenDNS-Dynamic-IP-updater-client-)\n- [openemu](http://openemu.org/)\n- [openlp](http://openlp.org)\n- [opennx](http://opennx.net/)\n- [openoffice](http://www.openoffice.org/)\n- [openra](http://www.openra.net/)\n- [openscad](http://www.openscad.org/)\n- [opensesame](http://osdoc.cogsci.nl/)\n- [opensong](http://www.opensong.org/)\n- [openttd](http://openttd.org)\n- [openvanilla](http://openvanilla.org/)\n- [opera-mail](http://www.opera.com/computer/mail)\n- [opera-mobile-emulator](http://www.opera.com/developer/mobile-emulator)\n- [opera-next](http://www.opera.com/computer/next)\n- [opera](http://www.opera.com/)\n- [optimal-layout](http://most-advantageous.com/optimal-layout/)\n- [orange](http://orange.biolab.si/)\n- [orbit](http://orbitapp.net)\n- [origin](http://origin.com)\n- [ormr](http://getormr.com/home/)\n- [osculator](http://www.osculator.net)\n- [osirix](http://www.osirix-viewer.com)\n- [osxfuse](https://osxfuse.github.io/)\n- [outwit-hub](http://www.outwit.com)\n- [owasp-zap](https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project)\n- [owncloud](http://owncloud.com)\n\n#### P\n\n- [p4merge](http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools)\n- [p4v](http://www.perforce.com/product/components/perforce-visual-client)\n- [p5](http://p5js.org/download/#editor)\n- [pacifist](http://www.charlessoft.com/)\n- [packer](http://www.packer.io/)\n- [padre](http://padre.perlide.org)\n- [pagico](http://pagico.com/)\n- [paintbrush](http://paintbrush.sourceforge.net/)\n- [paintcode](http://www.paintcodeapp.com/)\n- [pandoc](http://johnmacfarlane.net/pandoc)\n- [pandora-one](http://www.pandora.com/)\n- [pangu](http://en.pangu.io/)\n- [panic-unison](http://panic.com/unison/)\n- [panini](http://sourceforge.net/projects/pvqt/)\n- [paparazzi](http://derailer.org/paparazzi/)\n- [papers](http://www.papersapp.com/papers/)\n- [paragon-extfs](http://www.paragon-software.com/home/extfs-mac/)\n- [paragon-ntfs](http://www.paragon-software.com/home/ntfs-mac/)\n- [parallels](http://www.parallels.com/products/desktop/)\n- [paraview](http://www.paraview.org/)\n- [parse](https://parse.com)\n- [pashua](http://www.bluem.net/en/mac/pashua/)\n- [password-gorilla](https://github.com/zdia/gorilla)\n- [password-practice](https://mrgeckosmedia.com/applications/info/PasswordPractice)\n- [pastor](http://mehlau.net/pastor)\n- [path-finder](http://www.cocoatech.com/pathfinder/)\n- [paw](http://luckymarmot.com/paw)\n- [paye-tools](http://www.hmrc.gov.uk/payerti/payroll/bpt/paye-tools.htm)\n- [pcalc](http://www.pcalc.com/index.html)\n- [pcsxr](https://pcsxr.codeplex.com)\n- [pd-extended](http://puredata.info/downloads/pd-extended)\n- [pdfinfo](http://www.sybrex.com/products/macgui/infomanager/)\n- [pdfmasher](http://www.hardcoded.net/pdfmasher/)\n- [pdfpen](http://smilesoftware.com/PDFpen/index.html)\n- [pdfpenpro](http://www.smilesoftware.com/PDFpenPro/index.html)\n- [pdfsam](http://www.pdfsam.org/)\n- [pdfshaver](https://github.com/tparry/PDFShaver.app)\n- [pdftk](http://www.pdflabs.com/tools/pdftk-server/)\n- [peepopen](http://topfunky.github.io/PeepOpen/)\n- [pemdas-widget](http://www.donkeyengineering.com/pemdaswidget/)\n- [pencil](http://pencil.evolus.vn)\n- [pentaho-data-integration](http://community.pentaho.com)\n- [perian](http://www.perian.org/)\n- [pester](http://sabi.net/nriley/software/index.html#pester)\n- [petite-chez-scheme](http://www.scheme.com/petitechezscheme.html)\n- [pflists](http://www.hanynet.com/pflists/index.html)\n- [pg-commander](http://eggerapps.at/pgcommander/)\n- [pgadmin3](http://pgadmin.org)\n- [pgloader](http://pgloader.io)\n- [phantomjs](http://phantomjs.org/)\n- [pharo](http://www.pharo-project.org/home)\n- [phoenix-slides](http://blyt.net/phxslides)\n- [phoenix](https://github.com/sdegutis/Phoenix)\n- [phoneclean](http://www.imobie.com/phoneclean/)\n- [photoninja](http://www.picturecode.com/index.php)\n- [phpstorm](http://www.jetbrains.com/phpstorm/)\n- [pi-filler](http://ivanx.com/raspberrypi)\n- [pianopub](http://dev.kunugiken.com/Pianopub/)\n- [picasa](http://picasa.google.com/)\n- [picturesque](http://www.acqualia.com/picturesque/)\n- [piezo](http://rogueamoeba.com/piezo/)\n- [pinegrow-web-designer](http://pinegrow.com/)\n- [pingmenu](https://github.com/kalleboo/PingMenu)\n- [pins](http://pinsapp.com/)\n- [pinta](http://pinta-project.com/)\n- [pivotalbooster](http://pivotalbooster.com/)\n- [pixel-check](http://macguitar.me/apps/pixelcheck/)\n- [pixel-winch](http://ricciadams.com/projects/pixel-winch)\n- [pixelpeeper](http://www.irradiatedsoftware.com/labs)\n- [pixelstick](http://plumamazing.com/mac/pixelstick)\n- [pixi-paint](http://www.danielx.net/pixel-editor/docs/download)\n- [pixlr](https://pixlr.com)\n- [placeit](https://placeit.net/)\n- [plain-clip](http://www.bluem.net/en/mac/plain-clip)\n- [plainview](http://barbariangroup.com/)\n- [platypus](http://sveinbjorn.org/platypus)\n- [playonmac](http://www.playonmac.com/en)\n- [pleasesleep](http://www.dragonone.com/products/macosx/pleasesleep/)\n- [plex-home-theater](https://plex.tv)\n- [plex-media-server](https://plex.tv/)\n- [pliny](http://pliny.cch.kcl.ac.uk)\n- [plover](http://stenoknight.com/wiki/Main_Page)\n- [plug](http://www.plugformac.com/)\n- [plycounter](http://www.plycount.com)\n- [pngcommentator](http://www.echomist.co.uk/software/PNGCommentator.html)\n- [pngyu](http://nukesaq88.github.io/Pngyu/)\n- [poedit](http://www.poedit.net)\n- [poison](http://tox.im)\n- [pokemon-showdown](http://pokemonshowdown.com)\n- [pokerstars](http://www.pokerstars.com/)\n- [pokertracker](https://www.pokertracker.com)\n- [port-map](http://www.codingmonkeys.de/portmap)\n- [porthole](http://getporthole.com/)\n- [postbox](http://www.postbox-inc.com/)\n- [postgres](http://postgresapp.com/)\n- [power-manager-pro](https://www.dssw.co.uk/powermanager)\n- [power-manager](https://www.dssw.co.uk/powermanager)\n- [powerkey](http://pkamb.github.io/PowerKey/)\n- [powerword](http://mac.iciba.com)\n- [praat](http://www.fon.hum.uva.nl/praat/)\n- [preen](http://anomiesoftware.com/Anomie_Software/Preen.html)\n- [pref-setter](http://www.nightproductions.net/prefsetter.html)\n- [preference-manager](http://www.digitalrebellion.com/prefman)\n- [preferencecleaner](http://www.echomist.co.uk/software/PreferenceCleaner.shtml)\n- [prefs-editor](http://www.tempel.org/PrefsEditor)\n- [prepros](http://alphapixels.com/prepros/)\n- [prey](https://preyproject.com)\n- [prezi](http://www.prezi.com/)\n- [printrun](https://github.com/kliment/Printrun)\n- [prismatik](http://lightpack.tv/)\n- [private-eye](http://radiosilenceapp.com/private-eye)\n- [private-internet-access](https://www.privateinternetaccess.com)\n- [prizmo](http://www.creaceed.com/prizmo)\n- [processing](http://processing.org/)\n- [programmer-dvorak](http://kaufmann.no/roland/dvorak/)\n- [projectlibre](http://www.projectlibre.org/)\n- [prolific-usb-serial-driver](http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41)\n- [propane](http://propaneapp.com/)\n- [propresenter](http://www.renewedvision.com/propresenter.php)\n- [protege](http://protege.stanford.edu/)\n- [provisioning](https://github.com/chockenberry/Provisioning)\n- [provisionql](https://github.com/ealeksandrov/ProvisionQL)\n- [proxifier](http://www.proxifier.com/mac/)\n- [proximity](https://code.google.com/p/reduxcomputing-proximity/)\n- [proxpn](http://proxpn.com)\n- [ps3-media-server](http://www.ps3mediaserver.org/)\n- [psi](http://psi-im.org/)\n- [psychopy](http://www.psychopy.org/)\n- [punto-switcher](http://punto.yandex.ru)\n- [pupil](http://pupil.io/)\n- [pusher](https://github.com/noodlewerk/NWPusher)\n- [putio-adder](https://github.com/nicoSWD/put.io-adder)\n- [puush](http://puush.me/)\n- [puzzles](http://www.chiark.greenend.org.uk/~sgtatham/puzzles/)\n- [pwnagetool](http://blog.iphone-dev.org/tagged/PwnageTool)\n- [pycharm-ce](http://www.jetbrains.com/pycharm)\n- [pycharm](http://www.jetbrains.com/pycharm/)\n\n#### Q\n\n- [qbittorrent](http://www.qbittorrent.org)\n- [qdesktop](http://qvacua.com)\n- [qgis](http://www.kyngchaos.com/software/qgis)\n- [qgroundcontrol](http://qgroundcontrol.org)\n- [qiyimedia](http://www.iqiyi.com)\n- [qlcolorcode](https://code.google.com/p/qlcolorcode/)\n- [qlimagesize](https://github.com/Nyx0uf/qlImageSize)\n- [qlmarkdown](https://github.com/toland/qlmarkdown)\n- [qlprettypatch](https://github.com/atnan/QLPrettyPatch)\n- [qlrest](https://github.com/cluther/qlrest)\n- [qlstephen](http://whomwah.github.io/qlstephen/)\n- [qmind](http://qvacua.com)\n- [qq](http://im.qq.com/macqq/index.shtml)\n- [qqbrowser](http://browser.qq.com/mac/)\n- [qqinput](http://qq.pinyin.cn/)\n- [qqmusic](http://y.qq.com)\n- [qrfcview](https://saghul.github.io/qrfcview-osx)\n- [qrq](http://fkurz.net/ham/qrq.html)\n- [qt-creator](http://qt-project.org/)\n- [qtspim](http://spimsimulator.sourceforge.net/)\n- [quassel-client](http://quassel-irc.org)\n- [querious](http://www.araelium.com/querious/)\n- [quick-search-box](http://www.google.com/quicksearchbox/)\n- [quickcast](http://quickcast.io/)\n- [quickhue](https://github.com/danparsons/QuickHue)\n- [quicklook-csv](https://github.com/p2/quicklook-csv)\n- [quicklook-json](http://www.sagtau.com/quicklookjson.html)\n- [quicklook-pfm](https://code.google.com/p/quicklook-pfm/)\n- [quicknfo](https://github.com/planbnet/QuickNFO)\n- [quickradar](http://www.quickradar.com/)\n- [quicksilver](http://qsapp.com/)\n- [quiterss](http://quiterss.org/)\n- [quotefixformac](https://github.com/robertklep/quotefixformac)\n- [qvod-player](http://www.qvodcd.com/)\n\n#### R\n\n- [r-name](http://www.jacek-dom.net/software/R-Name/)\n- [r](http://www.r-project.org/)\n- [racket](http://racket-lang.org/)\n- [radbeacon](http://store.radiusnetworks.com/collections/all/products/radbeacon-config)\n- [radiant-player](http://kbhomes.github.io/google-music-mac/)\n- [rapidweaver](http://realmacsoftware.com/rapidweaver)\n- [raw-photo-processor](http://www.raw-photo-processor.com/RPP/Overview.html)\n- [raw-therapee](http://rawtherapee.com)\n- [razer-synapse](http://www.razerzone.com/synapse2)\n- [razorsql](http://razorsql.com/download_mac.html)\n- [rcdefaultapp](http://www.rubicode.com/Software/RCDefaultApp/)\n- [rcenvironment](http://www.rubicode.com/Software/RCEnvironment/)\n- [rdio](http://www.rdio.com)\n- [rdm](http://redisdesktop.com)\n- [readefine-desktop](http://readefine.anirudhsasikumar.net/)\n- [readytalk](https://www.readytalk.com/)\n- [reaper](http://www.reaper.fm/)\n- [recordit](http://recordit.co/)\n- [recovery-disk-assistant](http://support.apple.com/kb/HT4848)\n- [reeddit](http://mac.reedditapp.com)\n- [reflector](http://www.airsquirrels.com/reflector/)\n- [refresh-finder](http://soderhavet.com/refresh/refresh-finder/)\n- [reggy](http://reggyapp.com/)\n- [rekordbox](http://rekordbox.com/en/)\n- [remonit](http://zef.io/remonit/)\n- [remote-desktop-connection](http://www.microsoft.com/en-us/download/details.aspx?id=18140)\n- [renamer](http://renamer.com)\n- [repetier-host](http://www.repetier.com/)\n- [rescuetime](https://www.rescuetime.com)\n- [retinacapture](http://www.retinacapture.com)\n- [retinizer](http://retinizer.mikelpr.com/)\n- [retroshare](http://retroshare.sourceforge.net/)\n- [reveal](http://revealapp.com/)\n- [rftg](http://keldon.net/rftg/)\n- [ridibooks](http://ridibooks.com/support/introduce_appdown)\n- [riffworkst4](http://www.sonomawireworks.com/T4/)\n- [rightzoom](http://www.blazingtools.com/right_zoom_mac.html)\n- [ringtones](http://thelittleappfactory.com/ringtones/)\n- [ripit](http://thelittleappfactory.com/ripit/)\n- [robomongo](http://robomongo.org)\n- [rocks-n-diamonds](http://www.artsoft.org/rocksndiamonds/)\n- [royal-tsx](http://www.royaltsx.com)\n- [rrootage](http://workram.com/games/rrootage/)\n- [rss](http://www.rssapplication.com/)\n- [rstudio](http://www.rstudio.com/)\n- [rtx](http://www.rtxapp.com/mac/)\n- [rubitrack](http://www.rubitrack.com/)\n- [rubymine](http://www.jetbrains.com/ruby/)\n- [runtastic-connect](https://www.runtastic.com/connect)\n- [runtimebrowser](https://github.com/nst/RuntimeBrowser)\n- [rust](http://www.rust-lang.org/)\n- [rythem](https://github.com/AlloyTeam/Rythem)\n\n#### S\n\n- [sabnzbd](http://sabnzbd.org/)\n- [safaritabswitching](https://github.com/rs/SafariTabSwitching)\n- [safe-in-cloud](http://www.safe-in-cloud.com)\n- [safemonk](https://www.safemonk.com/)\n- [sage](http://www.sagemath.org/)\n- [sandbox](http://www.mikey-san.net/sandbox/)\n- [sandvox](http://www.karelia.com/products/sandvox/)\n- [satellite-eyes](http://satelliteeyes.tomtaylor.co.uk/)\n- [sauce](https://saucelabs.com/mac)\n- [sauerbraten](http://sauerbraten.org)\n- [scala-ide](http://scala-ide.org/)\n- [scansnap-manager](http://www.fujitsu.com/global/support/computing/peripheral/scanners/software/)\n- [scapple](https://www.literatureandlatte.com/scapple.php)\n- [schnapps](http://schnappsformac.com/)\n- [scilab](https://www.scilab.org)\n- [scout](http://mhs.github.io/scout-app/)\n- [scratch](http://scratch.mit.edu/scratch2download/)\n- [screenflick](http://www.araelium.com/screenflick/)\n- [screenflow](http://www.telestream.net/screenflow/)\n- [screenhero](http://screenhero.com)\n- [screenmailer](http://www.screenmailer.com)\n- [screens-connect](https://screensconnect.com)\n- [screenstagram](http://screenstagram.s3.amazonaws.com/download.html)\n- [screensteps](http://www.bluemangolearning.com/)\n- [scribbleton](http://scribbleton.com/)\n- [scribus](http://www.scribus.net/canvas/Scribus)\n- [scriptql](http://www.kainjow.com/)\n- [scrivener](http://literatureandlatte.com/scrivener.php)\n- [scroll-reverser](https://pilotmoon.com/scrollreverser/)\n- [scrup](https://github.com/rsms/scrup)\n- [scummvm](http://scummvm.org/)\n- [sdformatter](https://www.sdcard.org)\n- [sdrdx](http://fyngyrz.com/?p=915)\n- [seafile-client](http://seafile.com/)\n- [seamonkey](http://www.seamonkey-project.org/)\n- [seashore](http://seashore.sourceforge.net/)\n- [second-life-viewer](http://secondlife.com/)\n- [secondbar](http://blog.boastr.net/?page_id=79)\n- [secrets](http://secrets.blacktree.com)\n- [seil](https://pqrs.org/macosx/keyremap4macbook/seil.html.en)\n- [selfcontrol](http://selfcontrolapp.com/)\n- [selflanguage-self-control](http://selflanguage.org/)\n- [semulov](http://www.kainjow.com)\n- [send-to-kindle](http://www.amazon.com/gp/sendtokindle/mac)\n- [sensiolabsdesktop](http://desktop.sensiolabs.org)\n- [sente](http://www.thirdstreetsoftware.com)\n- [sequel-pro](http://www.sequelpro.com/)\n- [sequential](http://sequentialx.com)\n- [serf](http://www.serfdom.io/)\n- [serial-tools](http://www.w7ay.net/site/Applications/Serial%20Tools/)\n- [serialcloner](http://serialbasics.free.fr/Serial_Cloner.html)\n- [servetome](http://zqueue.com/servetome/)\n- [serviio](http://serviio.org/)\n- [servus](https://servus.io/)\n- [sevenzx](http://sixtyfive.xmghosting.com/products/7zx/)\n- [shades](http://www.charcoaldesign.co.uk/shades)\n- [shadowsocksx](https://github.com/shadowsocks/shadowsocks-iOS/wiki/Shadowsocks-for-OSX-Help)\n- [shadowsweeper](http://www.irradiatedsoftware.com/labs/)\n- [sharetool](http://bainsware.com/)\n- [shelf-leveler](https://mrgeckosmedia.com/applications/info/Shelf-Leveler)\n- [shiftit](https://github.com/fikovnik/ShiftIt)\n- [shimo](http://www.chungwasoft.com/shimo/)\n- [shiori](http://aki-null.net/shiori/)\n- [shoes](http://shoesrb.com/)\n- [shortcat](http://shortcatapp.com/)\n- [shotcut](http://www.shotcut.org/)\n- [shuttle](http://fitztrev.github.io/shuttle/)\n- [sickbeard-anime](http://sickbeard.lad1337.de/)\n- [sickbeard](http://sickbeard.lad1337.de/)\n- [sidekick](http://oomphalot.com/sidekick/)\n- [sidestep](http://chetansurpur.com/projects/sidestep)\n- [sidplay](http://www.sidmusic.org/sidplay/mac/)\n- [sigil](http://code.google.com/p/sigil/)\n- [silo](http://nevercenter.com/silo/)\n- [silverback](http://silverbackapp.com/)\n- [silverlight](http://www.microsoft.com/silverlight/)\n- [simon](http://www.dejal.com/simon/)\n- [simpholders](http://simpholders.com/)\n- [simple-comic](http://dancingtortoise.com/simplecomic/)\n- [simple-css](http://www.hostm.com/css)\n- [simplecap](http://xcatsan.com/simplecap-en/)\n- [simplefloatingclock](http://www.splook.com/Software/Simple_Floating_Clock.html)\n- [simpless](http://wearekiss.com/simpless)\n- [simplesynth](http://notahat.com/simplesynth/)\n- [simpletag](http://sourceforge.net/projects/simpletag/)\n- [simulator-folders](http://nimbleworks.co.uk/blog/simulator-folders/)\n- [sitesucker](http://www.sitesucker.us/mac/mac.html)\n- [sixtyforce](http://sixtyforce.com/)\n- [sizeup](http://www.irradiatedsoftware.com/sizeup/index.html)\n- [sizzlingkeys](http://www.yellowmug.com/sk4it/)\n- [sketch-tool](http://bohemiancoding.com/sketch/tool/)\n- [sketch-toolbox](http://sketchtoolbox.com)\n- [sketch](http://www.bohemiancoding.com/sketch/)\n- [sketchup](http://www.sketchup.com/intl/en/)\n- [sketchupviewer](http://www.sketchup.com/intl/en/)\n- [skim](http://skim-app.sourceforge.net/)\n- [skitch](http://evernote.com/skitch/)\n- [skreenics](https://code.google.com/p/skreenics/)\n- [skydrive](http://windows.microsoft.com/en-us/skydrive/download)\n- [skype](http://www.skype.com)\n- [slack](http://slack.com)\n- [slate](https://github.com/jigish/slate)\n- [sleep-monitor](https://www.dssw.co.uk/sleepmonitor)\n- [slender](http://dragonforged.com/slender/)\n- [slic3r](http://slic3r.org/)\n- [slice](http://sliceeq.com/)\n- [slicy](http://macrabbit.com/slicy/)\n- [slidemode](http://teaksoftware.com/app/slidemode)\n- [slimbatterymonitor](http://www.orange-carb.org/SBM/)\n- [slimboat](http://www.slimboat.com)\n- [slingshot](http://www.airsquirrels.com/slingshot/)\n- [sloth](http://sveinbjorn.org/sloth)\n- [slowy](http://slowyapp.com/)\n- [smaller](http://smallerapp.com/)\n- [smartgithg](http://www.syntevo.com)\n- [smartloader](http://picturelife.com)\n- [smartsynchronize](http://www.syntevo.com)\n- [smcfancontrol](http://www.eidac.de/?p=243)\n- [smoothmouse](http://smoothmouse.com)\n- [snagit](http://www.techsmith.com/snagit.html)\n- [snes9x](http://www.snes9x.com/)\n- [snip](http://snip.qq.com/)\n- [snippet-edit](http://cocoaholic.com/snippet_edit/)\n- [snippets](http://snippets.me/)\n- [sococo](http://www.sococo.com)\n- [sofortbild](http://www.sofortbildapp.com/)\n- [sogouinput](http://pinyin.sogou.com/mac/)\n- [soleol](http://eduo.info/apps/soleol)\n- [sonic-visualiser](http://www.sonicvisualiser.org/)\n- [sonora](http://getsonora.com/)\n- [sonos](http://www.sonos.com/)\n- [sopcast](http://www.sopcast.org)\n- [sophos-anti-virus-home-edition](http://www.sophos.com/en-us/products/free-tools/sophos-antivirus-for-mac-home-edition.aspx/)\n- [soqlxplorer](http://www.pocketsoap.com/osx/soqlx/)\n- [soulseek](http://www.soulseekqt.net/)\n- [soulver](http://www.acqualia.com/soulver/)\n- [soundcleod](http://salomvary.github.io/soundcleod/)\n- [soundflower](https://code.google.com/p/soundflower/)\n- [soundnote](https://mrgeckosmedia.com/applications/info/SoundNote)\n- [sourcetree](http://www.sourcetreeapp.com/)\n- [spacemonkey](https://www.spacemonkey.com)\n- [spacious](http://www.iospirit.com/products/spacious)\n- [spark-inspector](http://sparkinspector.com/)\n- [spark](http://www.shadowlab.org/softwares/spark.php)\n- [sparkbox](http://www.icyblaze.com/sparkbox)\n- [sparkle](http://sparkle-project.org/)\n- [sparkleshare](http://sparkleshare.org/)\n- [sparrow](http://www.sparrowmailapp.com/)\n- [spectacle](http://spectacleapp.com/)\n- [speedcrunch](http://www.speedcrunch.org)\n- [speedlimit](http://mschrag.github.io/)\n- [speedtao](http://www.speedtao.net/)\n- [spek](http://spek.cc)\n- [spideroak](http://spideroak.com)\n- [spillo](http://bananafishsoftware.com/products/spillo/)\n- [spirited-away](http://drikin.com/2010/11/spirited-away.html)\n- [splashtop-personal](http://www.splashtop.com/personal)\n- [splashtop-streamer](http://www.splashtop.com/downloads)\n- [splayerx](https://bitbucket.org/Tomasen/splayerx/wiki/Home)\n- [spotdox](http://spotdox.com/get-started/)\n- [spotifree](http://spotifree.gordinskiy.com)\n- [spotify-menubar](http://lifeupnorth.co.uk/Spotify-Menubar/)\n- [spotify-notifications](http://spotify-notifications.citruspi.io/)\n- [spotify](https://www.spotify.com)\n- [spyder](https://code.google.com/p/spyderlib/)\n- [sqleditor](http://www.malcolmhardie.com/sqleditor/)\n- [sqlexplorer](http://eclipsesql.sourceforge.net/)\n- [sqlite-database-browser](http://sqlitebrowser.org)\n- [sqlite-professional](https://www.sqlitepro.com)\n- [sqlitestudio](http://sqlitestudio.pl)\n- [squidman](http://squidman.net/squidman/)\n- [squire](http://squireapp.com)\n- [squirrel](https://github.com/lotem/squirrel)\n- [sqwiggle](https://www.sqwiggle.com)\n- [srclib](https://srclib.org/)\n- [sshfs](http://osxfuse.github.io/)\n- [ssx](http://chris.schleifer.net/ssX/index.cgi/index.html)\n- [stackato](http://docs.stackato.com/user/client/index.html)\n- [stackroom](http://www.geocities.jp/aromaticssoft/stackroom/index.html)\n- [startninja](http://www.allvu.com/index.php/products/startninja.html)\n- [stay](http://cordlessdog.com/stay/)\n- [steam](http://store.steampowered.com/about/)\n- [steermouse](http://plentycom.jp/en/steermouse/)\n- [stella](http://stella.sourceforge.net)\n- [stellarium](http://stellarium.org)\n- [stockbarjp](http://midnightsuyama.org)\n- [streamtools](https://github.com/nytlabs/streamtools)\n- [strongvpn-client](http://strongvpn.com/vpnclient.shtml)\n- [sts](http://spring.io/tools/sts)\n- [subclassed-mnemosyne](http://www.subclassed.com/apps/mnemosyne/details)\n- [subl](https://github.com/dhoulb/subl)\n- [subler](https://code.google.com/p/subler/)\n- [sublercli](https://code.google.com/p/subler/)\n- [sublime-text](http://www.sublimetext.com/2)\n- [subnetcalc](http://subnetcalc.free.fr/)\n- [subsmarine](http://www.cocoawithchurros.com/subsmarine.php)\n- [subsurface](http://subsurface.hohndel.org/)\n- [subtitle-master](http://subtitlemaster.com/)\n- [subtitles](http://subtitlesapp.com)\n- [sunlogin-remote](http://sunlogin.oray.com)\n- [super-otr](http://apfel-a.macbay.de/super-otr/)\n- [supercollider](http://supercollider.sourceforge.net/)\n- [superduper](http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html)\n- [supersync](http://supersync.com/)\n- [supertuxkart](http://supertuxkart.sourceforge.net)\n- [surplusmeter](http://www.skoobysoft.com/utilities/utilities.html#surplusmeter)\n- [suspicious-package](http://www.mothersruin.com/software/SuspiciousPackage/)\n- [svnx](https://code.google.com/p/svnx/)\n- [sweet-home3d](http://www.sweethome3d.com/)\n- [swingfish](http://cloakedcode.com/swingfish.html)\n- [swinsian](http://swinsian.com)\n- [switchresx](http://www.madrau.com)\n- [switchup](http://www.irradiatedsoftware.com/switchup/)\n- [synergy](http://synergy-foss.org/)\n- [synology-assistant](http://www.synology.com/)\n- [synology-cloud-station](http://www.synology.com/)\n- [synology-photo-station-uploader](http://www.synology.com/)\n- [synthesia](http://www.synthesiagame.com)\n\n#### T\n\n- [tabula](http://tabula.nerdpower.org)\n- [tactor](http://onflapp.wordpress.com/tactor/)\n- [tag](http://sbooth.org/Tag/)\n- [tagalicious](http://thelittleappfactory.com/tagalicious/)\n- [tagger](http://bilalh.github.io/projects/tagger/)\n- [tagoman](http://onflapp.wordpress.com/tagoman)\n- [tagr](http://www.entwicklungsfreu.de/tagr.html)\n- [tagspaces](http://www.tagspaces.org)\n- [tapaal](http://www.tapaal.net)\n- [taskpaper](http://www.hogbaysoftware.com/products/taskpaper)\n- [tau](http://tau.uoregon.edu/)\n- [tcpblock](http://tcpblock.wordpress.com/)\n- [td-agent](http://www.fluentd.org/)\n- [td-toolbelt](http://toolbelt.treasuredata.com/)\n- [teamspeak-client](http://www.teamspeak.com/)\n- [teamviewer](http://www.teamviewer.com/)\n- [teamviz](http://www.teamviz.com/)\n- [teensy](http://pjrc.com/teensy/loader_mac.html)\n- [teeworlds](https://www.teeworlds.com/)\n- [telegram](https://vk.com/telegram_osx)\n- [telephone](https://code.google.com/p/telephone/)\n- [teleport](http://www.abyssoft.com/software/teleport/)\n- [testflight](http://testflightapp.com)\n- [tex-live-utility](https://code.google.com/p/mactlmgr/)\n- [texmacs](http://www.texmacs.org/)\n- [texmaker](http://www.xm1math.net/texmaker)\n- [texnicle](http://www.bobsoft-mac.de/texnicle/texnicle.html)\n- [texpad](https://www.texpadapp.com/osx)\n- [texshop](http://pages.uoregon.edu/koch/texshop)\n- [texstudio](http://texstudio.sourceforge.net/)\n- [textadept](http://foicica.com/textadept/)\n- [textexpander](http://www.smilesoftware.com/TextExpander/index.html)\n- [textmate](http://macromates.com/)\n- [textroom](https://code.google.com/p/textroom/)\n- [texts](http://www.texts.io)\n- [textsoap](http://www.unmarked.com/textsoap/)\n- [texturepacker](http://www.codeandweb.com/texturepacker)\n- [textwrangler](http://www.barebones.com/products/textwrangler)\n- [tftpserver](http://ww2.unime.it/flr/tftpserver/)\n- [thaiwitter](https://tw3.herokuapp.com/)\n- [the-archive-browser](http://archivebrowser.c3.cx)\n- [the-brain](http://www.thebrain.com/)\n- [the-escapers-flux](http://www.theescapers.com/flux/)\n- [the-hit-list](http://www.potionfactory.com/thehitlist)\n- [the-unarchiver](http://unarchiver.c3.cx/)\n- [theremin](https://github.com/TheStalwart/Theremin)\n- [thetube](http://www.equinux.com/us/products/thetube/index.html)\n- [things](http://culturedcode.com/things/)\n- [thinkorswim](http://mediaserver.thinkorswim.com/installer/install.html#macosx)\n- [thirty-three-rpm](http://www.edenwaith.com/products/33rpm/)\n- [thisservice](http://wafflesoftware.net/thisservice/)\n- [thong](http://thong.fousa.be/)\n- [thumbsup](http://www.devontechnologies.com/products/freeware.html#c966)\n- [thunder](http://mac.xunlei.com/)\n- [thunderbird](http://www.mozilla.org/en-US/thunderbird/)\n- [thyme](http://joaomoreno.github.io/thyme/)\n- [tickets](http://www.irradiatedsoftware.com/tickets/)\n- [tiddlywiki](https://github.com/Jermolene/TiddlyDesktop)\n- [tikz-editor](https://github.com/fredokun/TikZ-Editor)\n- [tiled](http://www.mapeditor.org/)\n- [tilemill](http://www.mapbox.com/tilemill/)\n- [time-out](http://www.dejal.com/timeout/)\n- [time-sink](http://manytricks.com/timesink/)\n- [time-tracker](https://code.google.com/p/time-tracker-mac)\n- [timemachineeditor](http://timesoftware.free.fr/timemachineeditor/)\n- [timemachinescheduler](http://www.klieme.com/TimeMachineScheduler.html)\n- [timings](http://mediaatelier.com/Timings)\n- [tinkertool](http://www.bresink.com/osx/TinkerTool.html)\n- [tinygrab](http://www.tinygrab.com)\n- [tinyumbrella](http://blog.firmwareumbrella.com/)\n- [titanium-studio](https://my.appcelerator.com/resources)\n- [tk-suite-client](http://agfeo.de/agfeo_web/hp3.nsf/lu/2064)\n- [toad-mac](http://www.toadworld.com/products/toad-mac-edition/default.aspx)\n- [toau](http://toauapp.com)\n- [todoist](https://todoist.com)\n- [todos](http://dbachrach.com/opensoft/index.php?page=Todos)\n- [tofu](http://amarsagoo.info/tofu/)\n- [toggldesktop](https://www.toggl.com)\n- [tokaido](https://github.com/tokaido/tokaidoapp/releases)\n- [tomahawk](http://www.tomahawk-player.org/)\n- [tomighty](http://www.tomighty.org/)\n- [tongbu](http://www.tongbu.com)\n- [tonido](http://www.tonido.com/)\n- [toodledo](https://www.toodledo.com/tools/mac_menubar.php)\n- [torbrowser](https://www.torproject.org/projects/torbrowser.html)\n- [torpedo](https://usetorpedo.com)\n- [tortoisehg](http://tortoisehg.bitbucket.org/)\n- [torustrooper](http://workram.com/games/)\n- [totalfinder](http://totalfinder.binaryage.com)\n- [totals](http://www.kedisoft.com/totals/)\n- [totalspaces](http://totalspaces.binaryage.com/)\n- [totalterminal](http://totalterminal.binaryage.com)\n- [tower](http://www.git-tower.com/)\n- [trailer](http://dev.housetrip.com/trailer/)\n- [trailrunner](http://trailrunnerx.com/)\n- [traktable](http://yo-han.github.io/Traktable/)\n- [transmission-remote-gui](https://code.google.com/p/transmisson-remote-gui/)\n- [transmission](http://www.transmissionbt.com/)\n- [transmit](http://panic.com/transmit)\n- [treemaker](http://www.langorigami.com/science/computational/treemaker/treemaker.php)\n- [treesheets](http://strlen.com/treesheets/)\n- [tresorit](http://tresorit.com)\n- [tribler](http://www.tribler.org)\n- [trickster](http://www.apparentsoft.com/trickster/)\n- [trim-enabler](http://www.cindori.org/software/trimenabler/)\n- [truecrypt](http://truecrypt.org/)\n- [tubbler](http://www.celmaro.com/tubbler)\n- [tuneinstructor](http://www.tune-instructor.de/com/start.html)\n- [tunewiki](http://www.tunewiki.com/)\n- [tunnelbear](https://www.tunnelbear.com/)\n- [tunnelblick](https://code.google.com/p/tunnelblick/)\n- [tuxguitar](http://www.tuxguitar.com.ar/)\n- [tv-browser](http://www.tvbrowser.org/index.php?setlang=en)\n- [tv-show-tracker](http://www.pixelperfectwidgets.com/)\n- [tvmobili](http://www.tvmobili.com/)\n- [tvshows](http://tvshowsapp.com/)\n- [twentytwo](https://github.com/marcw/twentytwo)\n- [twindocs](https://www.twindocs.com)\n- [twine](http://twinery.org/)\n- [twitterrific](http://twitterrific.com/mac)\n- [typewriter](http://llllll.li/typewriter)\n- [typinator](http://www.ergonis.com/)\n\n#### U\n\n- [uber-network-fuser](http://nickapedia.com/2012/01/10/breaking-new-ground-an-uber-tool-for-the-mac/)\n- [uberpov](http://megapov.inetart.net/uberpov_mac/index.html)\n- [ubersicht](http://tracesof.net/uebersicht)\n- [ubuntu-one](http://one.ubuntu.com)\n- [ukelele](http://scripts.sil.org/ukelele)\n- [ultrastardeluxe](http://ultrastardx.sourceforge.net/)\n- [uncrustifyx](https://github.com/ryanmaxwell/UncrustifyX)\n- [undercover](http://www.orbicule.com/undercover/mac/)\n- [unetbootin](http://unetbootin.sourceforge.net/)\n- [unicodechecker](http://earthlingsoft.net/UnicodeChecker/)\n- [unified-remote](http://www.unifiedremote.com)\n- [uninstallpkg](http://www.corecode.at/uninstallpkg/)\n- [unison](http://www.cis.upenn.edu/~bcpierce/unison/)\n- [unity-web-player](https://unity3d.com/webplayer)\n- [unity3d](http://unity3d.com/unity/)\n- [universal-media-server](www.universalmediaserver.com)\n- [unpkg](http://www.timdoug.com/unpkg/)\n- [unrarx](http://www.unrarx.com)\n- [usb-overdrive](http://www.usboverdrive.com/)\n- [utc-menu-clock](https://github.com/netik/UTCMenuClock)\n- [utopia](http://utopiadocs.com/)\n- [utorrent](http://www.utorrent.com/)\n\n#### V\n\n- [vagrant-manager](http://vagrantmanager.com/)\n- [vagrant](http://www.vagrantup.com)\n- [valentina-studio](http://www.valentina-db.com/)\n- [vassal](http://www.vassalengine.org)\n- [versions](http://versionsapp.com/)\n- [vessel](http://awvessel.github.io)\n- [viber](http://viber.com)\n- [vico](http://www.vicoapp.com)\n- [videomonkey](http://videomonkey.org/)\n- [videospec](http://videospec.free.fr/english/)\n- [vienna](http://www.vienna-rss.org)\n- [vimediamanager](http://mariusth.channelwood.org/vimediamanager/)\n- [vimr](http://vimr.org/)\n- [vine-server](http://www.testplant.com/products/vine/vine-server/)\n- [vinoteka](http://www.vinotekasoft.com/)\n- [virtaal](http://virtaal.translatehouse.org/)\n- [virtualbox](http://www.virtualbox.org)\n- [virtualhostx](http://clickontyler.com/virtualhostx/)\n- [virustotaluploader](https://www.virustotal.com/)\n- [viscosity](http://www.sparklabs.com/viscosity/)\n- [visit](https://wci.llnl.gov/codes/visit/home.html)\n- [vistrails](http://www.vistrails.org/index.php/Main_Page)\n- [visualack](http://blog.kowalczyk.info/software/vack/)\n- [visualvm](http://visualvm.java.net)\n- [vitamin-r](http://www.publicspace.net/Vitamin-R/)\n- [vlc-remote](http://hobbyistsoftware.com/vlc)\n- [vlc](http://www.videolan.org/vlc/)\n- [vlcstreamer](http://hobbyistsoftware.com/vlcstreamer)\n- [vmware-fusion](http://www.vmware.com/products/fusion/)\n- [vmware-horizon-view-client](http://www.vmware.com/)\n- [vocabulist](http://vocabulistapp.com/)\n- [voicemac](https://mrgeckosmedia.com/applications/info/VoiceMac)\n- [volatility](http://www.volatilityfoundation.org/)\n- [vox-preference-pane](http://coppertino.com/vox/addon.html)\n- [vuescan](http://www.hamrick.com)\n- [vyprvpn](http://www.goldenfrog.com/vyprvpn)\n\n#### W\n\n- [wabbitemu](http://wabbit.codeplex.com)\n- [wacom-bamboo-tablet](http://us.wacom.com/en/support/drivers)\n- [wacom-tablet](http://www.wacom.com/)\n- [wake-on-lan](http://www.readpixel.com/wakeonlan/)\n- [wallpaper-wizard](http://wallwiz.com)\n- [wasted](http://wasted.werk01.de)\n- [waterroof](http://www.hanynet.com/waterroof/index.html)\n- [wavtap](https://github.com/pje/wavtap)\n- [wd-security](http://www.wdc.com/en/)\n- [web-sharing](http://clickontyler.com/web-sharing/)\n- [webp-quicklook](https://github.com/dchest/webp-quicklook)\n- [webstorm](http://www.jetbrains.com/webstorm/)\n- [wechat](http://weixin.qq.com/cgi-bin/readtemplate?t=mac)\n- [wedge](http://wedge.natestedman.com)\n- [weibox](http://weiboformac.sinaapp.com)\n- [weka](http://www.cs.waikato.ac.nz/ml/weka/)\n- [welly](https://code.google.com/p/welly/)\n- [wesnoth](http://wesnoth.org)\n- [whatpulse](http://www.whatpulse.org/)\n- [whatsapp-pocket](http://www.fireebok.com/whatsapp-pocket.html)\n- [whatsize](http://whatsizemac.com/)\n- [whiteclock](http://www.taimila.com/?p=1221)\n- [widelands](https://wl.widelands.org/)\n- [wifimasterkey](http://www.lianwifi.com/)\n- [window-switch](http://xpra.org/)\n- [windownaut](http://www.binarybakery.com/aprod/index.html)\n- [wineskin-winery](http://wineskin.urgesoftware.com/)\n- [wings3d](http://www.wings3d.com/)\n- [winxound](https://winxound.codeplex.com/)\n- [wireover](http://www.wireover.com/)\n- [wireshark](http://www.wireshark.org)\n- [wiretap-studio](http://www.ambrosiasw.com/utilities/wiretap/)\n- [witch](http://manytricks.com/witch/)\n- [witgui](http://desairem.altervista.org/witgui/wordpress/)\n- [wiznote](http://www.wiznote.com/)\n- [wiztoolsorg-restclient](https://code.google.com/p/rest-client)\n- [wjoy](https://code.google.com/p/wjoy/)\n- [wondershare-player](http://www.wondershare.com/video-player/)\n- [woodhouse](https://github.com/phinze/woodhouse/)\n- [wordservice](http://www.devontechnologies.com/products/freeware.html#c1115)\n- [worksnaps-client](http://www.worksnaps.net/)\n- [wowhead-client](http://wowhead.com)\n- [wraparound](http://www.digicowsoftware.com/detail?_app=Wraparound)\n- [wuala](http://wuala.com)\n- [wyzo](http://wyzo.com)\n\n#### X\n\n- [x-lite](http://www.counterpath.com/x-lite.html)\n- [x-mirage](http://www.x-mirage.com/x-mirage/)\n- [x-moto](http://xmoto.tuxfamily.org)\n- [x2goclient](http://x2go.org)\n- [x48](http://blog.sharkus.com/2012/08/osx-hp48-emulators.html)\n- [xact](http://xact.scottcbrown.org)\n- [xamarin-android](http://xamarin.com/android)\n- [xamarin-ios](http://xamarin.com/ios)\n- [xamarin-studio](http://xamarin.com/studio)\n- [xamarin](http://xamarin.com/platform)\n- [xampp](http://www.apachefriends.org/index.html)\n- [xaos](http://matek.hu/xaos)\n- [xbench](http://xbench.com/)\n- [xbmc](http://xbmc.org/)\n- [xbox360-controller-driver](http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver)\n- [xca](http://xca.sourceforge.net/)\n- [xee](http://xee.c3.cx/)\n- [xiami](http://www.xiami.com/)\n- [xld](http://tmkk.undo.jp/xld/index_e.html)\n- [xmarks-safari](http://www.xmarks.com/)\n- [xmind](http://www.xmind.net)\n- [xmrouter](http://www1.miwifi.com/)\n- [xnconvert](http://www.xnview.com/en/xnconvert/)\n- [xnviewmp](http://www.xnview.com/)\n- [xquartz](http://xquartz.macosforge.org/)\n- [xrg](http://www.gauchosoft.com/Products/XRG/)\n- [xscope](http://iconfactory.com/software/xscope)\n- [xscreensaver](http://www.jwz.org/xscreensaver/)\n- [xslimmer](http://latenitesoft.com/xslimmer/)\n- [xtorrent](http://www.xtorrent.com)\n- [xtrafinder](http://www.trankynam.com/xtrafinder/)\n\n#### Y\n\n- [yabumi](https://yabumi.cc/)\n- [yacreader](http://www.yacreader.com)\n- [yandex](http://browser.yandex.com/)\n- [yandexdisk](https://disk.yandex.com/)\n- [yasu](http://yasuapp.net)\n- [yemuzip](http://www.yellowmug.com/yemuzip)\n- [ynab](http://www.youneedabudget.com/)\n- [yojimbo](http://www.barebones.com/products/yojimbo/)\n- [yorufukurou](https://sites.google.com/site/yorufukurou/home-en)\n- [youdao](http://cidian.youdao.com/mac/)\n- [youll-never-take-me-alive](https://github.com/iSECPartners/yontma-mac)\n- [younited](http://www.younited.com/index.html)\n- [youview](https://mrgeckosmedia.com/applications/info/YouView)\n- [yubikey-personalization-gui](http://www.yubico.com/products/services-software/personalization-tools/use/)\n- [yubiswitch](https://github.com/pallotron/yubiswitch)\n\n#### Z\n\n- [zed](http://zedapp.org)\n- [zendserver](http://www.zend.com/en/products/server/)\n- [zendstudio](http://www.zend.com/en/products/studio/)\n- [zepheer](http://candysquare.com/products/zepheer/)\n- [zephyros](https://github.com/sdegutis/zephyros)\n- [zeroad](http://www.play0ad.com/)\n- [zeroinstall](http://0install.net)\n- [zeroxdbe-eap](http://www.jetbrains.com/dbe/)\n- [zeroxed](http://www.suavetech.com/0xed/)\n- [zipcleaner](http://roger-jolly.nl/software/#zipcleaner)\n- [zipeg](http://www.zipeg.net/)\n- [zoc](http://www.emtec.com/zoc/)\n- [zoomus](http://www.zoom.us)\n- [zooom](http://coderage-software.com/zooom)\n- [zotero](http://www.zotero.org/)\n- [zterm](http://www.dalverson.com/zterm/)"}

field_body:
#### A

- [a-better-finder-attributes](http://www.publicspace.net/ABetterFinderAttributes/)
- [a-better-finder-rename](http://www.publicspace.net/ABetterFinderRename/)
- [a-slower-speed-of-light](http://gamelab.mit.edu/games/a-slower-speed-of-light/)
- [abgx360](http://abgx360.net/)
- [abscissa](http://rbruehl.macbay.de/Abscissa)
- [accessmenubarapps](http://www.ortisoft.de/accessmenubarapps/)
- [acorn](http://flyingmeat.com/acorn/)
- [actions-server](http://getactionsapp.com)
- [actiontastic](http://actiontastic.com)
- [activity-audit](https://www.dssw.co.uk/activityaudit)
- [actotracker](http://onflapp.wordpress.com/actotracker)
- [actprinter](http://houdah.com/ACTPrinter/)
- [actual-odbc-pack](http://www.actualtech.com/products.php)
- [adapter](http://www.macroplant.com/adapter/)
- [adium](https://www.adium.im/)
- [adobe-air](https://get.adobe.com/air/)
- [adobe-arh](http://help.adobe.com/en_US/air/redist/WS485a42d56cd19641-70d979a8124ef20a34b-8000.html)
- [adobe-creative-cloud](https://creative.adobe.com/products/creative-cloud)
- [adobe-digital-editions](http://www.adobe.com/pt/products/digital-editions.html)
- [adobe-dng-converter](http://www.adobe.com/support/downloads/product.jsp?product=106&platform=Macintosh)
- [adobe-photoshop-lightroom](http://www.adobe.com/products/photoshop-lightroom.html)
- [adobe-reader](http://www.adobe.com/products/reader.html)
- [adventure](http://www.lobotomo.com/products/Adventure/index.html)
- [aegisub](http://www.aegisub.org/)
- [aerofs](https://www.aerofs.com/)
- [affinity-designer](https://affinity.serif.com/)
- [air-connect](http://www.avatron.com/get-air-connect/)
- [air-video-server-hd](http://www.inmethod.com/airvideohd)
- [air-video-server](http://www.inmethod.com/air-video/)
- [airdisplay](http://avatron.com/apps/air-display/)
- [airfoil](http://www.rogueamoeba.com/airfoil/mac/)
- [airmail-amt](http://airmailapp.com/amt/)
- [airparrot](http://www.airsquirrels.com/airparrot/)
- [airserver](http://www.airserver.com)
- [airstream](http://airstream.io/download/)
- [alarm-clock](http://wayback.archive.org/web/20130123192255/http://www.robbiehanson.com/alarmclock/index.html)
- [alfred](http://www.alfredapp.com/)
- [alib1](http://presstube.com/blog/2011/alib1/)
- [alinof-timer](http://www.alinofsoftware.ch/en/products/products-timer/index.html)
- [aliwangwang](http://wangwang.taobao.com)
- [all-the-gifs](https://github.com/orta/GIFs)
- [all2mp3](http://www.tresrrr.com/All2MP3/ENGLISH.html)
- [amadeus-pro](http://www.hairersoft.com/pro.html)
- [amazon-cloud-drive](https://www.amazon.com/clouddrive)
- [amazon-music](https://www.amazon.com/gp/feature.html/ref=dm_mo_cpw_fb_lm?docId=1001067901)
- [amethyst](http://ianyh.com/amethyst)
- [ampps](http://www.ampps.com)
- [android-file-transfer](http://www.android.com/filetransfer/)
- [android-studio-bundle](http://developer.android.com/sdk/installing/studio.html)
- [android-studio](https://developer.android.com/sdk/installing/studio.html)
- [angry-ip-scanner](http://angryip.org)
- [anki](http://ankisrs.net/)
- [anonym](http://www.hanynet.com/anonym/index.html)
- [antetype](http://antetype.com)
- [antirsi](http://sabi.net/nriley/software/#antirsi)
- [anvil](http://anvilformac.com/)
- [anxiety](http://www.anxietyapp.com/)
- [anypass](http://icyblaze.com/anypass)
- [ap-grapher](https://www.macupdate.com/app/mac/11859/ap-grapher)
- [apache-directory-studio](http://directory.apache.org/studio/)
- [apikitchen](http://apikitchen.com/)
- [apns-pusher](https://github.com/blommegard/APNS-Pusher)
- [appcleaner](http://www.freemacsoft.net/appcleaner/)
- [appcode](http://www.jetbrains.com/objc/)
- [appdelete](http://www.reggieashworth.com/appdelete)
- [appfresh](http://metaquark.de/appfresh/mac)
- [appium](http://appium.io)
- [appmenuboy](https://code.google.com/p/appmenuboy/)
- [apptivate](http://www.apptivateapp.com)
- [apptrap](http://onnati.net/apptrap)
- [appzapper](http://www.appzapper.com/)
- [aptanastudio](http://www.aptana.com/)
- [aquamacs](http://aquamacs.org/)
- [aquaterm](http://aquaterm.sourceforge.net/)
- [araxis-merge](http://www.araxis.com/merge)
- [archiver](http://archiverapp.com/)
- [arduino-galileo](https://communities.intel.com/docs/DOC-22226)
- [arduino](http://arduino.cc/)
- [aria-maestosa](http://ariamaestosa.sourceforge.net)
- [armitage](http://www.fastandeasyhacking.com/)
- [armory](https://bitcoinarmory.com/)
- [arora](https://code.google.com/p/arora/)
- [arq](http://www.haystacksoftware.com/arq/)
- [arranger](http://bucketomac.de/arranger/arranger/)
- [arrsync](http://arrsync.sourceforge.net)
- [aseprite](http://www.aseprite.org)
- [asepsis](http://asepsis.binaryage.com/)
- [asteroid](http://www.asteroidapp.com/)
- [atext](http://www.trankynam.com/atext/)
- [atlantis](http://www.riverdark.net/atlantis/)
- [atmonitor](http://www.atpurpose.com/atMonitor/)
- [atom](http://atom.io)
- [atraci](https://github.com/Atraci/Atraci)
- [au-lab](http://www.apple.com/itunes/mastered-for-itunes/)
- [audacity](http://audacity.sourceforge.net/)
- [audio-editor](http://www.macsome.com/audio-editor-mac/index.html)
- [audio-hijack-pro](http://www.rogueamoeba.com/audiohijackpro/)
- [audio-mate](http://audiomateapp.com/)
- [audiobookbinder](http://bluezbox.com/audiobookbinder.html)
- [audioscrobbler](https://github.com/mxcl/Audioscrobbler.app)
- [audioslicer](http://audioslicer.sourceforge.net)
- [aurora](http://www.oneperiodic.com/products/aurora/)
- [authbuddy](https://www.dssw.co.uk/authbuddy)
- [authoxy](http://www.hrsoftworks.net)
- [authy-bluetooth](https://www.authy.com)
- [autodmg](https://github.com/MagerValp/AutoDMG)
- [automatic](http://codingcurious.com/automatic/)
- [aviator](https://www.whitehatsec.com/aviator/)
- [avidemux](http://www.avidemux.org/)
- [avogadro](http://avogadro.openmolecules.net/)
- [awareness](http://iamfutureproof.com/tools/awareness/)
- [ax88179](http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=131;71;112&PLine=71)
- [ax88772](http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=86;71;101&PLine=71)
- [axure-rp-pro](http://www.axure.com/)

#### B

- [b2designer](http://www.flymaster-avionics.com/Support/Downloads/ForMacOSX/tabid/199/Default.aspx)
- [back-in-time](http://www.tri-edre.fr/english/backintime.html)
- [backblaze-downloader](http://www.backblaze.com/)
- [backblaze](https://www.backblaze.com/)
- [backtobed](http://backtobed.dadiugames.dk/)
- [backuploupe](http://www.soma-zone.com/BackupLoupe/)
- [bahamut](https://github.com/sdegutis/bahamut)
- [baiducloud](http://pan.baidu.com)
- [baiduinput](http://wuxian.baidu.com/input/mac.html)
- [baidumusic](http://music.baidu.com/)
- [balsamiq-mockups](http://balsamiq.com/)
- [bankid](http://www.bankid.com/)
- [banshee](http://banshee.fm)
- [bar-magnet](http://qata.cc/Site/Bar_Magnet.html)
- [baretorrent](http://baretorrent.org)
- [bartender](http://www.macbartender.com/)
- [base](http://menial.co.uk/base/)
- [basecamp](http://www.garmin.com/en-US/shop/downloads/basecamp)
- [basex](http://basex.org/home/)
- [basictex](http://www.tug.org/mactex/morepackages.html)
- [bassjump](http://www.twelvesouth.com/product/bassjump-2-for-macbook)
- [bassshapes](http://yellquietly.com/bass-shapes/)
- [bathyscaphe](http://bathyscaphe.sourceforge.jp/)
- [battery-guardian](https://www.dssw.co.uk/batteryguardian)
- [battery-report](https://www.dssw.co.uk/batteryreport)
- [battery-time-remaining](http://yap.nu/battery-time-remaining/)
- [baygenie](http://www.baygenie.com/)
- [bbc-iplayer-downloads](http://www.bbc.co.uk/iplayer/install)
- [bbedit](http://www.barebones.com/products/bbedit/)
- [beacon-scanner](https://github.com/mlwelles/BeaconScanner/)
- [beamer](http://beamer-app.com)
- [bean](http://www.bean-osx.com)
- [beardedspice](http://www.beardedspice.com)
- [beatport-pro](http://pro.beatport.com/)
- [bee](http://neat.io/bee/)
- [bettertouchtool](http://blog.boastr.net/)
- [betterzip](http://macitbetter.com)
- [betterzipql](http://macitbetter.com/BetterZip-Quick-Look-Generator/)
- [bibdesk](http://bibdesk.sourceforge.net/)
- [big-mean-folder-machine](http://www.publicspace.net/BigMeanFolderMachine/)
- [bill](http://billtheapp.com/)
- [bino](http://bino3d.org)
- [binreader](http://www.binreader.com/)
- [bit-slicer](https://github.com/zorgiepoo/bit-slicer/)
- [bitcasa](https://www.bitcasa.com)
- [bitcoin-core](https://bitcoin.org/)
- [bitlord](http://www.bitlord.com)
- [bitmessage](https://bitmessage.org/)
- [bittorrent-sync](http://www.bittorrent.com/sync)
- [black-ink](http://www.red-sweater.com/blackink/)
- [black-light](http://michelf.ca/projects/black-light)
- [blender](http://www.blender.org/)
- [blink1control](http://blink1.thingm.com/)
- [blu-ray-player](http://www.macblurayplayer.com/)
- [bluegriffon](http://bluegriffon.org)
- [blueharvest](http://zeroonetwenty.com/blueharvest/)
- [bluej](http://www.bluej.org)
- [bob](https://github.com/casperstorm/Bob)
- [bodega](http://appbodega.com/)
- [bonjour-browser](http://www.tildesoft.com/)
- [boom](http://www.globaldelight.com/boom/)
- [boot2docker](https://github.com/boot2docker/osx-installer)
- [bootchamp](http://www.kainjow.com/)
- [bootxchanger](http://namedfork.net/bootxchanger)
- [bowtie](http://bowtieapp.com/)
- [box-sync](https://sites.box.com/sync4/)
- [boxcryptor-classic](https://www.boxcryptor.com/en/boxcryptor-classic)
- [boxer](http://boxerapp.com/)
- [brackets](http://brackets.io)
- [brain-workshop](http://brainworkshop.sourceforge.net/)
- [breach](http://breach.cc)
- [breakaway](http://mutablecode.com/apps/breakaway.html)
- [brightness](http://www.bergdesign.com/brightness/)
- [brogue](https://sites.google.com/site/broguegame/)
- [broomstick](http://www.zibity.com/broomstick)
- [brow](http://www.timschroeder.net/brow/)
- [browserstacklocal](http://www.browserstack.com/)
- [brushviewql](http://brushviewer.sourceforge.net/)
- [brytonbridge](http://www.brytonsport.com/help/start)
- [buddi](http://buddi.digitalcave.ca/index.jsp)
- [burn](http://burn-osx.sourceforge.net/)
- [butter](http://harukasan.jp)
- [bzflag](http://bzflag.org/)

#### C

- [c3](http://www.downloadc3.com/)
- [caffeine](http://lightheadsw.com/caffeine/)
- [cakebrew](http://www.cakebrew.com)
- [calcservice](http://www.devontechnologies.com/products/freeware.html#c1111)
- [calibre](http://calibre-ebook.com/)
- [calibre2opds](http://calibre2opds.com/)
- [callnote](http://www.kandasoft.com/home/kanda-apps/skype-call-recorder.html)
- [camed](http://sourceforge.net/apps/mediawiki/camprocessor/index.php?title=Main_Page)
- [camerabag](http://nevercenter.com/camerabag/desktop/)
- [camino](http://caminobrowser.org/)
- [camranger](http://www.camranger.com/downloads/#fbox_5594)
- [camtasia](http://www.techsmith.com/camtasia.html)
- [camtwist](http://camtwiststudio.com/)
- [candybar](http://www.panic.com/blog/candybar-mountain-lion-and-beyond)
- [capo](http://supermegaultragroovy.com/products/Capo/)
- [capsee](http://www.threemagination.com/capsee/)
- [carbon-copy-cloner](http://bombich.com/)
- [carlson-minot](http://www.carlson-minot.com)
- [cartao-de-cidadao](http://www.cartaodecidadao.pt/)
- [catch](http://www.giorgiocalderolla.com/index.html)
- [catchmouse](http://ftnew.com/catchmouse.html)
- [cathode](http://www.secretgeometry.com/apps/cathode)
- [ccleaner](http://www.piriform.com/ccleaner)
- [ccmenu](http://ccmenu.sourceforge.net/)
- [cd-to](https://github.com/jbtule/cdto)
- [cdock](http://sourceforge.net/projects/cdock)
- [celestia](http://sourceforge.net/projects/celestia)
- [cert-quicklook](https://code.google.com/p/cert-quicklook/)
- [cfxr](http://thirdcog.eu/apps/cfxr)
- [chainsaw](http://logging.apache.org/chainsaw/)
- [chameleon-ssd-optimizer](http://chameleon.alessandroboschini.it/)
- [changes-meter](http://intuiware.com/apps/changes-meter)
- [changes](http://bitbq.com/changes/)
- [charles](http://www.charlesproxy.com/)
- [chatology](http://flexibits.com/chatology)
- [cheatsheet](http://www.cheatsheetapp.com/CheatSheet/)
- [cheetah3d](http://www.cheetah3d.com)
- [chefdk](http://www.getchef.com/downloads/chef-dk/mac/)
- [chemdoodle](http://www.chemdoodle.com)
- [chicken](http://sourceforge.net/projects/chicken/)
- [chirp](http://chirp.danplanet.com/)
- [chocolat](http://chocolatapp.com/)
- [choosy](http://www.choosyosx.com/)
- [chromatic](https://mrgeckosmedia.com/applications/info/Chromatic)
- [chrome-remote-desktop-host](https://chrome.google.com/remotedesktop)
- [chromecast](http://www.google.ca/intl/en/chrome/devices/chromecast/)
- [chromium](http://www.freesmug.org/chromium)
- [chronicle](http://chronicleapp.com/)
- [chronoagent](http://www.econtechnologies.com)
- [chronomate](http://chronomateapp.com/)
- [chronosync](http://www.econtechnologies.com)
- [chunkulus](http://presstube.com/blog/2011/chunkulus/)
- [cinch](http://www.irradiatedsoftware.com/cinch/)
- [citrix-receiver](http://www.citrix.com/receiver)
- [clamxav](http://www.clamxav.com/)
- [clarify](http://www.clarify-it.com/)
- [cleanmymac](http://macpaw.com/cleanmymac)
- [clementine](http://www.clementine-player.org/)
- [clion-eap](http://www.jetbrains.com/clion/)
- [clipmenu](http://www.clipmenu.com/)
- [clix](http://rixstep.com/4/0/clix/index.shtml)
- [cloak](https://www.getcloak.com)
- [clock](http://zachwaugh.me/clock/)
- [clonk](http://www.clonk.de/cr.php)
- [cloud](http://getcloudapp.com/)
- [cloudera-hive-odbc](http://www.cloudera.com)
- [cloudfoundry-cli](https://github.com/cloudfoundry/cli)
- [cloudpull](http://www.goldenhillsoftware.com/)
- [cloudup](https://cloudup.com/download)
- [cloudytabs](https://github.com/josh-/CloudyTabs/)
- [cn3d](http://www.ncbi.nlm.nih.gov/Structure/CN3D/cn3d.shtml)
- [coccinellida](http://coccinellida.sourceforge.net/)
- [cockatrice](http://www.woogerworks.com/)
- [cocktail](http://maintain.se/cocktail)
- [cocoadialog](http://mstratman.github.io/cocoadialog/)
- [cocoapacketanalyzer](http://www.tastycocoabytes.com/cpa/)
- [cocoarestclient](http://mmattozzi.github.io/cocoa-rest-client/)
- [cocoaspell](http://cocoaspell.leuski.net/)
- [cocoasplit](http://krylon.rsdio.com/zakk/cocoasplit/)
- [coconutbattery](http://www.coconut-flavour.com/coconutbattery/)
- [coda](https://panic.com/Coda/)
- [codebox](https://www.codebox.io)
- [codebug](http://www.codebugapp.com/)
- [codekit](http://incident57.com/codekit/)
- [codelite](http://codelite.org)
- [cog](http://cogx.org)
- [colloquy](http://colloquy.info/)
- [color-oracle](http://colororacle.org/)
- [color-picker-pro](https://github.com/oscardelben/Color-Picker-Pro)
- [colorpicker-antetype](http://www.antetype.com/blog/2013/12/updated-antetype-os-x-color-picker-1-3-1/)
- [colorpicker-developer](http://download.panic.com/picker/)
- [colorpicker-hex](http://wafflesoftware.net/hexpicker/)
- [colorpicker-propicker](http://www.irradiated.net/?page=pro-picker)
- [colorpicker-rcwebcolorpicker](http://www.rubicode.com/Software/RCWebColorPicker)
- [colorpicker-skalacolor](http://bjango.com/mac/skalacolor/)
- [colorpicker](http://www.northernspysoftware.com/software/colorpicker)
- [colors](http://mattpatenaude.com/)
- [colorschemer-studio](http://www.colorschemer.com)
- [comicbooklover](http://www.bitcartel.com/comicbooklover/)
- [comicbookloversync](http://www.bitcartel.com/comicbooklover)
- [comictagger](http://code.google.com/p/comictagger/)
- [commandq](http://clickontyler.com/commandq/)
- [concentrate](http://www.getconcentrating.com/)
- [connected-desktop](http://www.filetransporter.com/)
- [connector](http://mediaware.sk/connector)
- [consul](http://www.consul.io/)
- [contexts](http://contextsformac.com/)
- [controllermate](http://www.orderedbytes.com/controllermate/)
- [controlplane](http://www.controlplaneapp.com/)
- [coolterm](http://freeware.the-meiers.org/)
- [cooviewer](http://www.geocities.jp/coo_ona/viewer.html)
- [copy](https://www.copy.com/)
- [coqide](http://coq.inria.fr/)
- [cord](http://cord.sourceforge.net/)
- [cornerstone](http://www.zennaware.com/cornerstone/index.php)
- [corsixth](http://th.corsix.org)
- [coteditor](http://coteditor.github.io/)
- [couchbase-server-community](http://www.couchbase.com/)
- [couchbase-server-enterprise](http://www.couchbase.com/)
- [craftstudio](http://craftstud.io)
- [crashlytics](http://crashlytics.com)
- [crashplan](http://www.crashplan.com/)
- [crosspack-avr](http://www.obdev.at/products/crosspack/)
- [crushftp](https://www.crushftp.com)
- [crypt](http://voluntary.net/crypt/)
- [cryptol](http://cryptol.net/)
- [ctivo](https://github.com/dscottbuch/cTiVo)
- [cuda-z](http://cuda-z.sourceforge.net)
- [cuppa](http://www.nathanatos.com/software)
- [cups-pdf](http://www.cups-pdf.de)
- [cura](http://daid.github.com/Cura/)
- [curb](http://mrrsoftware.com/curb)
- [curse-client](http://www.curse.com/client)
- [cursorcerer](http://doomlaser.com/cursorcerer-hide-your-cursor-at-will/)
- [cutesdr](http://sourceforge.net/projects/cutesdr)
- [cx](http://www.cx.com)
- [cyberduck](http://cyberduck.io/)
- [cycling74-max](http://cycling74.com)

#### D

- [daemon-tools-lite](http://www.daemon-tools.cc/products/dtMacLite)
- [daisydisk](http://www.daisydiskapp.com)
- [darktable](http://www.darktable.org/)
- [darteditor](https://www.dartlang.org/tools/editor/)
- [dash](http://kapeli.com/dash)
- [dashlane](https://www.dashlane.com/)
- [datagraph](http://www.visualdatatools.com/DataGraph/)
- [dataurlmaker](https://github.com/sveinbjornt/Data-URL-Toolkit)
- [day-o](http://www.shauninman.com/archive/2011/10/20/day_o_mac_menu_bar_clock)
- [dbeaver](http://dbeaver.jkiss.org/)
- [dealalert](http://dealalertapp.com/)
- [deathtodsstore](http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/)
- [debookee](http://www.iwaxx.com/debookee/)
- [debt-quencher](http://nothirst.com/debtquencher/)
- [decitime](http://www.tinbert.com/DeciTimeMac/)
- [deeper](http://www.titanium.free.fr/downloaddeeper.php)
- [deeq](http://deeqapp.com)
- [default-folder-x](http://www.stclairsoft.com/DefaultFolderX)
- [delibar](http://www.delibarapp.com/)
- [delicious-library](http://delicious-monster.com/)
- [delivery-status](http://junecloud.com/software/mac/delivery-status.html)
- [deltawalker](http://www.deltopia.com/compare-merge-sync/macosx/)
- [deluge](http://deluge-torrent.org/)
- [deskfun](http://www.furrysoft.de/?page=deskfun)
- [desktop-log](http://www.nightproductions.net/desklog.html)
- [desmume](http://www.desmume.org)
- [detune](http://headlightsoft.com/detune/)
- [devonthink-pro-office](http://www.devontechnologies.com/products/devonthink/devonthink-pro-office.html)
- [devonthink-pro](http://www.devontechnologies.com/products/devonthink/devonthink-pro.html)
- [dewdrop](http://dewdrop.dangelov.com/)
- [dfontsplitter](http://peter.upfold.org.uk/projects/dfontsplitter)
- [dia](http://dia-installer.de/)
- [diashapes](http://dia-installer.de/)
- [dictunifier](http://code.google.com/p/mac-dictionary-kit/)
- [diffmerge](http://www.sourcegear.com/diffmerge)
- [disk-drill](http://www.cleverfiles.com/)
- [disk-inventory-x](http://www.derlien.com/)
- [diskaid](http://www.digidna.net/diskaid)
- [diskmaker-x](http://diskmakerx.com/)
- [diskwave](http://diskwave.barthe.ph/)
- [dispcalgui](http://dispcalgui.hoech.net)
- [displaperture](http://manytricks.com/displaperture)
- [displaylink](http://www.displaylink.com)
- [diumoo](http://diumoo.net/)
- [divvy](http://mizage.com/divvy/)
- [djay](http://algoriddim.com/djay-mac)
- [djv](http://djv.sourceforge.net)
- [djview](http://djvu.sourceforge.net/)
- [dmm](http://www.dmm.com/dc/book/)
- [dnscrypt](http://opendns.github.io/dnscrypt-osx-client/)
- [docear](http://docear.org)
- [dockmod](http://spyresoft.com/dockmod/)
- [dogecoin](http://dogecoin.com/)
- [dolphin](http://www.dolphin-emu.org/)
- [dosbox](http://www.dosbox.com)
- [doubanradio](http://douban.fm)
- [double-commander](http://doublecmd.sourceforge.net/)
- [doublecommand](http://doublecommand.sourceforge.net)
- [doubletwist](http://www.doubletwist.com/)
- [doxie](http://www.getdoxie.com/)
- [doxygen](http://www.stack.nl/~dimitri/doxygen/index.html)
- [dradio](http://dradio.me)
- [dragondisk](http://www.dragondisk.com/)
- [dragthing](http://www.dragthing.com)
- [drobo-dashboard](http://www.drobo.com)
- [dropbox-encore](http://www.joyofmacs.com/software/dropboxencore/)
- [dropbox](https://www.dropbox.com/)
- [dropin](http://excitedatom.com/dropin/)
- [dropletmanager](https://github.com/deivuh/DODropletManager-OSX)
- [droplr](https://www.droplr.com/)
- [dropzone](https://aptonic.com)
- [dsp-radio](http://dl2sdr.homepage.t-online.de/)
- [dterm](http://decimus.net/DTerm)
- [dukto](https://code.google.com/p/dukto/)
- [dump-truck](http://www.goldenfrog.com/dumptruck)
- [dungeon-crawl-stone-soup-console](http://crawl.develz.org)
- [dungeon-crawl-stone-soup-tiles](http://crawl.develz.org)
- [dupeguru-me](http://www.hardcoded.net/dupeguru_me/)
- [dupeguru-pe](http://www.hardcoded.net/dupeguru_pe/)
- [dupeguru](http://www.hardcoded.net/dupeguru/)
- [duplicate-annihilator](http://brattoo.com/propaganda/)
- [duplicati](http://www.duplicati.com/)
- [dupscanub](http://www5.wind.ne.jp/miko/mac_soft/dup_scan/index.html)
- [dvdstyler](http://dvdstyler.org)
- [dwarf-fortress](http://www.bay12games.com/dwarves/)

#### E

- [eagle](http://www.cadsoftusa.com/)
- [eaglefiler](http://c-command.com/eaglefiler/)
- [easyfind](http://www.devontechnologies.com/download/products.html)
- [easysimbl](https://github.com/norio-nomura/EasySIMBL/)
- [easyvpn](http://www.squashedsoftware.com/products-easyvpn.php)
- [eclipse-ide](http://eclipse.org/)
- [eclipse-java](http://eclipse.org/)
- [eclipse-jee](http://eclipse.org/)
- [eclipse-platform](http://eclipse.org)
- [ecoute](http://pixiapps.com/ecouteosx/)
- [eid-mw](https://code.google.com/p/eid-mw/)
- [ejector](http://www.jeb.com.fr/en/ejector.shtml)
- [electric-sheep](http://www.electricsheep.org)
- [electrum-ltc](http://electrum-ltc.org)
- [electrum](http://electrum.org/)
- [elm-platform](http://www.elm-lang.org)
- [eloquent](https://launchpad.net/eloquent)
- [elyse](http://silkwoodsoftware.com/)
- [emacs](http://emacsformacosx.com/)
- [ember](http://realmacsoftware.com/ember)
- [emin-webpquicklook](https://github.com/emin/WebPQuickLook)
- [enfusegui](http://software.bergmark.com/enfusegui/Main.html)
- [enjoyable](http://yukkurigames.com/enjoyable/)
- [entropy](http://www.eigenlogik.com/entropy/)
- [epic](http://www.epicbrowser.com)
- [epub-to-pdf](https://code.google.com/p/epub-2-pdf)
- [epubquicklook](http://people.ict.usc.edu/~leuski/programming/epub-quickview.php)
- [escritorio-movistar](http://www.movistar.es/particulares/servicios/descargaaplicaciones)
- [espionage](https://www.espionageapp.com/)
- [espresso](http://macrabbit.com/espresso/)
- [etrecheck](http://www.etresoft.com/etrecheck)
- [evasi0n](http://evasi0n.com)
- [eve](http://www.hotkey-eve.com/)
- [evernote](https://evernote.com/)
- [everweb](http://www.everwebapp.com/)
- [evom](http://thelittleappfactory.com/evom/)
- [exhaust](https://mrgeckosmedia.com/applications/info/Exhaust)
- [exist-db](http://exist-db.org/)
- [expandrive](http://www.expandrive.com/expandrive)
- [eye-fi](http://support.eye.fi/downloads)
- [eyetv](http://www.elgato.com/)

#### F

- [facebook-ios-sdk](https://developers.facebook.com/docs/ios)
- [factor](http://factorcode.org/)
- [fairmount](https://github.com/BoxOfSnoo/Fairmount)
- [fake](http://fakeapp.com/)
- [fakethunder](http://martianz.cn/fakethunder/)
- [fantastical](http://flexibits.com/fantastical)
- [fastest-free-youtube-downloader](https://www.fastestvideodownloader.com/)
- [fastscripts](http://www.red-sweater.com/fastscripts/)
- [faux-pas](http://fauxpasapp.com)
- [fdt](http://fdt.powerflasher.com/)
- [feedbinnotifier](http://kmikael.github.io/FeedbinNotifier)
- [feeder](http://reinventedsoftware.com/feeder/)
- [feeds](http://www.feedsapp.com/)
- [fender-amp-drivers](https://fuse.fender.com/)
- [fender-fuse](https://fuse.fender.com/)
- [fenix](http://fenixwebserver.com/)
- [fetch](http://fetchsoftworks.com/)
- [ffmpegx](http://www.ffmpegx.com/download.html)
- [figtree](http://tree.bio.ed.ac.uk/software/figtree/)
- [fiji](http://fiji.sc)
- [file-juicer](http://echoone.com/filejuicer/)
- [filebot](http://www.filebot.net/)
- [filedrop](http://www.filedropme.com/)
- [fileshuttle](http://fileshuttle.io/)
- [filezilla](https://filezilla-project.org/)
- [find-any-file](http://apps.tempel.org/FindAnyFile/)
- [findings](http://findingsapp.com)
- [firefox](https://www.mozilla.org/en-US/firefox/)
- [firewall-builder](http://www.fwbuilder.org)
- [fission](http://rogueamoeba.com/fission/)
- [fitbit-connect](http://www.fitbit.com/)
- [fivedetails-flow](http://fivedetails.com)
- [flame](http://husk.org/apps/flame/)
- [flash-decompiler-trillix](http://www.flash-decompiler.com/mac.html)
- [flash-player-debugger](https://www.adobe.com/support/flashplayer/downloads.html)
- [flash-player](https://www.adobe.com/support/flashplayer/downloads.html)
- [flash](https://www.adobe.com/products/flashplayer/distribution3.html)
- [flavours](http://flavours.interacto.net/)
- [flexiglass](http://nulana.com/flexiglass/)
- [flickr-uploadr](http://www.flickr.com/tools/)
- [flightgear](http://www.flightgear.org/)
- [flip4mac](http://www.telestream.net/flip4mac/)
- [fliqlo](http://fliqlo.com/)
- [flow](http://www.getflow.com/)
- [flowdock](https://www.flowdock.com/)
- [fluid](http://fluidapp.com/)
- [fluke](https://code.google.com/p/flukeformac/)
- [flux](http://justgetflux.com)
- [fm-fw-installer](http://www.flymaster-avionics.com/Support/Downloads/ForMacOSX/tabid/199/Default.aspx)
- [focus](http://www.heyfocus.com/)
- [focuswriter](http://gottcode.org/focuswriter/)
- [folding-text](http://www.foldingtext.com)
- [foldit](http://fold.it)
- [folx](http://mac.eltima.com/de/download-manager.html)
- [fontexplorer-x-pro](http://www.fontexplorerx.com/)
- [fontprep](http://fontprep.com)
- [forklift](http://www.binarynights.com/)
- [fotomagico](http://www.boinx.com/fotomagico/)
- [fotowall](http://www.enricoros.com/opensource/fotowall/)
- [fourk-video-downloader](http://www.4kdownload.com/products/product-videodownloader)
- [fourk-youtube-to-mp3](http://www.4kdownload.com/products/product-youtubetomp3)
- [fourpeaks](http://nucleobytes.com/index.php/4peaks)
- [foxmail](http://www.foxmail.com)
- [fpc](http://www.freepascal.org/)
- [framer-studio](http://framerjs.com/)
- [free-ruler](http://www.pascal.com/software/freeruler/)
- [freecad](http://sourceforge.net/projects/free-cad/)
- [freecol](http://freecol.org)
- [freedv](http://freedv.org/tiki-index.php)
- [freefilesync](http://freefilesync.sourceforge.net/)
- [freemind](freemind.sourceforge.net)
- [freezer](https://mrgeckosmedia.com/applications/info/Freezer)
- [fritzing](http://fritzing.org/)
- [frizzix](http://mac.frizzix.de/)
- [frostwire](http://www.frostwire.com)
- [fs-uae](http://fs-uae.net/)
- [fseventer](http://www.fernlightning.com/doku.php?id=software:fseventer:start)
- [fugu](http://rsug.itd.umich.edu/software/fugu/)
- [functionflip](http://kevingessner.com/software/functionflip/)
- [fuze](https://www.fuzemeeting.com)

#### G

- [gambit-c](http://gambitscheme.org/wiki/index.php/Main_Page)
- [gamesalad](http://gamesalad.com)
- [ganttproject](http://www.ganttproject.biz)
- [garagebuy](http://www.iwascoding.com/GarageBuy)
- [garagesale](http://www.iwascoding.com/GarageSale/index.html)
- [gargoyle](https://code.google.com/p/garglk/)
- [garmin-ant-agent](http://www8.garmin.com/support/download_details.jsp?id=4417)
- [garmin-communicator](http://www8.garmin.com/support/download_details.jsp?id=3739)
- [garmin-express](http://www.garmin.com/express)
- [garmin-training-center](http://www.garmin.com/garmin/cms/intosports/training_center)
- [gas-mask](http://www.clockwise.ee/gasmask/)
- [gawker](http://gawker.sourceforge.net/Gawker.html)
- [gdal-framework](http://www.kyngchaos.com/software/frameworks)
- [geekbench](http://www.primatelabs.com/geekbench/)
- [geektool](http://projects.tynsoe.org/en/geektool/)
- [genymotion](http://www.genymotion.com/)
- [gephi](http://gephi.org/)
- [geppetto](http://puppetlabs.github.io/geppetto/)
- [gfxcardstatus](http://gfx.io/)
- [ghc](http://ghcformacosx.github.io/)
- [ghostlab](http://vanamco.com/ghostlab/)
- [giffun](http://www.stone.com/GIFfun/)
- [gifrocket](http://www.gifrocket.com/)
- [gimp-lisanet](http://gimp.lisanet.de)
- [gimp](http://www.gimp.org)
- [gingr](http://harvest.readthedocs.org/en/latest/content/gingr.html)
- [gisto](http://www.gistoapp.com/)
- [git-annex](http://git-annex.branchable.com/)
- [gitbook](https://www.gitbook.io/)
- [gitbox](http://gitboxapp.com/)
- [github](http://mac.github.com)
- [gitifier](http://psionides.github.io/Gitifier/)
- [gitter](https://gitter.im/)
- [gitx-l](http://gitx.laullon.com/)
- [gitx-rowanj](http://rowanj.github.io/gitx/)
- [gitx](http://gitx.frim.nl/)
- [gity](http://gityapp.com/)
- [glcplayer](http://www.glc-player.net)
- [glimmerblocker](http://glimmerblocker.org)
- [glo](http://globible.com/gloformac/)
- [globalsync](http://www.usglobalsat.com/)
- [gmail-notifier](https://github.com/jashephe/Gmail-Notifier)
- [gmail-notifr](http://ashchan.com/projects/gmail-notifr)
- [gnucash](http://www.gnucash.org)
- [go-agent](http://www.go.cd)
- [go-server](http://www.go.cd/)
- [goagentx](http://goagentx.com/)
- [gog-downloader](http://www.gog.com/downloader)
- [golly](http://golly.sourceforge.net/)
- [google-adwords-editor](http://www.google.com/intl/en_US/adwordseditor/)
- [google-chrome](https://www.google.com/chrome/)
- [google-drive](https://drive.google.com/)
- [google-earth-web-plugin](http://www.google.com/intl/en/earth/explore/products/plugin.html)
- [google-earth](https://www.google.com/earth/)
- [google-hangouts](https://www.google.com/tools/dlpage/hangoutplugin)
- [google-japanese-ime](https://www.google.co.jp/ime/)
- [google-nik-collection](https://www.google.com/nikcollection/)
- [google-notifier](http://toolbar.google.com/gmail-helper/notifier_mac.html)
- [google-plus-auto-backup](http://picasa.google.com/)
- [google-refine](http://openrefine.org/)
- [google-web-designer](https://www.google.com/webdesigner/)
- [googleappenginelauncher](https://developers.google.com/appengine/)
- [gopanda](http://pandanet-igs.com/communities/gopanda2)
- [gpgtools](https://gpgtools.org/index.html)
- [gpower](http://www.gpower.hhu.de/)
- [gqrx](http://gqrx.dk/)
- [grabbox](http://grabbox.devsoft.no/)
- [grafx2](http://pulkomandy.tk/projects/GrafX2)
- [grandperspective](http://grandperspectiv.sourceforge.net/)
- [grandtotal](http://www.mediaatelier.com/GrandTotal3/)
- [graphsketcher](https://github.com/graphsketcher/GraphSketcher)
- [graphviz](http://www.graphviz.org/)
- [gravit](http://gravit.io/)
- [gridwars](http://gridwars.marune.de/)
- [grooveshark](http://www.grooveshark.com)
- [groovesquid](http://groovesquid.com/)
- [growl-fork](https://www.macupdate.com/app/mac/41038/growl-fork)
- [growler](http://wafflesoftware.net/growlergn/)
- [growlnotify](http://growl.info/downloads)
- [growlvoice](http://www.growlvoice.com/)
- [guitar-tuner](http://www.gieson.com/Library/projects/utilities/tuner/)
- [gulp](https://github.com/sindresorhus/gulp-app)
- [gurps-character-sheet](http://gurpscharactersheet.com)
- [gyazo](https://gyazo.com/)

#### H

- [hall](https://hall.com/download-hall/hall-for-mac)
- [handbrake](http://handbrake.fr/)
- [handbrakebatch](http://www.osomac.com/apps/osx/handbrake-batch/)
- [handbrakecli](http://handbrake.fr)
- [hands-off](http://www.metakine.com/products/handsoff/)
- [happygrep](https://github.com/happypeter/happygrep)
- [haroopad](http://pad.haroopress.com/)
- [harvest](http://www.getharvest.com/mac)
- [hashcat](https://hashcat.net/hashcat/)
- [haskell-platform](http://www.haskell.org/platform/)
- [hazel](http://www.noodlesoft.com/hazel.php)
- [hbuilder](http://dcloud.io/)
- [hear](http://www.prosofteng.com/products/hear.php)
- [heart](http://presstube.com/blog/2011/heart/)
- [hedgewars](http://hedgewars.org)
- [hermes](http://hermesapp.org/)
- [heroku-toolbelt](https://toolbelt.heroku.com/)
- [hex-fiend](http://ridiculousfish.com/hexfiend/)
- [hex](http://hextcg.com/)
- [hexchat](http://hexchat.github.io)
- [hexels](http://hexraystudios.com/hexels/)
- [hipchat](https://www.hipchat.com/)
- [hippoconnect](http://hipporemote.com/)
- [hiss](http://collect3.com.au/hiss/)
- [historyhound](http://www.stclairsoft.com/HistoryHound/)
- [hive](http://www.hivewallet.com)
- [hockeyapp](http://hockeyapp.net/releases/mac/)
- [homestream](http://www.sony.co.uk/hub/1237485339460)
- [honer](https://github.com/puffnfresh/Honer.app)
- [hopper-disassembler](http://www.hopperapp.com/)
- [hoppergdbserver](http://www.hopperapp.com/HopperGDBServer/index.html)
- [horndis](http://joshuawise.com/horndis)
- [hostbuddy](http://clickontyler.com)
- [hoster](http://www.redwinder.com/macapp/hoster/)
- [hosts](http://permanentmarkers.nl/software.html)
- [houdahgeo](http://houdah.com/houdahGeo/)
- [houdahspot](http://www.houdah.com/houdahSpot/)
- [hpuload](http://www.fernlightning.com/doku.php?id=software:hpuload:start)
- [hr](http://www.hrmacapp.com/)
- [hsang](http://lushi.163.com/)
- [httpscoop](http://www.tuffcode.com)
- [hubic](https://hubic.com)
- [hugin](http://hugin.sourceforge.net/)
- [hush](http://coffitivity.com/hush/)
- [hype](http://tumult.com/hype/)
- [hyperdock](http://hyperdock.bahoom.com/)
- [hyperswitch](http://bahoom.com/hyperswitch)
- [hyro](http://jawerty.github.io/Hyro/)

#### I

- [iannix](http://www.iannix.org/)
- [ibabel](http://www.macinchem.org/ibabel/ibabel3.php)
- [ibackup](http://www.grapefruit.ch/iBackup)
- [ibank](http://www.iggsoftware.com/ibank)
- [ibettercharge](http://softorino.com/ibettercharge/)
- [iboostup](http://www.iboostup.com)
- [ibrowse](http://www.ibrowseapp.com/)
- [icefloor](http://www.hanynet.com/icefloor/)
- [ichm](https://code.google.com/p/ichm/)
- [icolors](http://www.fadingred.com/icolors/)
- [icompta](http://www.icompta-app.com/)
- [iconping](http://antirez.com/iconping/)
- [icursor](https://www.macupdate.com/app/mac/17059/icursor)
- [id3-editor](http://www.pa-software.com/id3editor/)
- [identify](http://identify2.arrmihardies.com/)
- [ideskcal](http://www.hashbangind.com)
- [idocument-plus](http://www.icyblaze.com/idocument/)
- [idris](http://www.idris-lang.org)
- [iexplorer](http://www.macroplant.com/)
- [ifilex](http://www.osxbytes.com/page3/index.html)
- [ifunbox](http://www.i-funbox.com/)
- [igetter](http://www.igetter.net/)
- [iloc](http://derailer.org/iloc)
- [imagealpha](http://pngmini.com/)
- [imagemin](https://github.com/kevva/imagemin-app)
- [imageoptim](http://imageoptim.com/)
- [img2icns](http://www.img2icnsapp.com/)
- [imitone](http://imitone.com/)
- [inboard](http://inboardapp.com/beta)
- [inc](https://sendtoinc.com/apps/)
- [indigo](http://www.perceptiveautomation.com/indigo/index.html)
- [induction](http://inductionapp.com/)
- [infinit](https://infinit.io/)
- [inform](http://inform7.com/)
- [injection](http://injectionforxcode.com/)
- [inkscape](http://inkscape.org)
- [inky](http://inky.com)
- [insertpic](http://www.getinsertpic.com/)
- [instabridge](http://instabridge.com/)
- [instacast](http://vemedio.com/products/instacast-mac)
- [instead](http://instead.syscall.ru/)
- [insync](https://insynchq.com/)
- [integrity](http://peacockmedia.co.uk/integrity/)
- [intel-haxm](https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager)
- [intel-power-gadget](https://software.intel.com/en-us/articles/intel-power-gadget-20)
- [intel-xdk](http://xdk-software.intel.com/)
- [intellij-idea-ce](https://www.jetbrains.com/idea/index.html)
- [intellij-idea](https://www.jetbrains.com/idea/index.html)
- [intermission](http://rogueamoeba.com/intermission/)
- [invisiblix](http://www.read-write.fr/invisiblix/)
- [invisionsync](http://invisionapp.com/)
- [invisorql](http://www.pozdeev.com/invisor/)
- [iograph](http://iographica.com/)
- [ionu](https://ionu.com)
- [ioquake3](http://ioquake3.org/)
- [ios7-screensaver](http://bodysoulspirit.weebly.com/ios-7-screensaver-for-mac-os-x-by-bodysoulspirit.html)
- [ipalette](http://ipalette.info/)
- [ipaql](http://ipaql.com/)
- [iphone-configuration-utility](http://support.apple.com/kb/DL1465)
- [iphoney](https://www.marketcircle.com/iphoney)
- [ireadfast](http://www.gengis.net/prodotti/iReadFast_Mac/en/index.php)
- [irip](http://thelittleappfactory.com/irip/)
- [isabelle](http://www.cl.cam.ac.uk/research/hvg/Isabelle/)
- [isolator](http://willmore.eu/software/isolator)
- [istat-menus](http://bjango.com/mac/istatmenus/)
- [istat-server](http://bjango.com/mac/istatserver/)
- [isteg](http://www.hanynet.com/isteg/)
- [istopmotion](http://www.boinx.com/istopmotion/mac/)
- [istumbler](http://istumbler.net/)
- [iswiff](http://echoone.com/iswiff/)
- [iterm2](http://www.iterm2.com/)
- [itools](http://www.itools.cn/download.php?v=mac_en)
- [itsycal](http://www.mowglii.com/itsycal/)
- [itunes-volume-control](https://github.com/alberti42/iTunes-Volume-Control)
- [itunesscrobbler](http://www.easyclasspage.de/lastfm/seite-19.html)
- [itweax](http://www.itweax.net/)
- [iupx](http://iupx.sourceforge.net)
- [ivolume](http://www.mani.de/en/ivolume/)
- [izip](http://www.izip.com)

#### J

- [jabber-video](https://www.ciscojabbervideo.com/)
- [jabref](http://jabref.sourceforge.net/)
- [jaikoz](http://jthink.net/jaikoz)
- [jameica](http://www.willuhn.de/products/jameica/)
- [jaspersoft-studio](http://community.jaspersoft.com/project/jaspersoft-studio)
- [java](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
- [javafx-scene-builder](http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-info-2157684.html)
- [jawbone-updater](http://jawbone.com/)
- [jbidwatcher](http://www.jbidwatcher.com)
- [jd-gui](http://jd.benow.ca/)
- [jdiskreport](http://www.jgoodies.com/freeware/jdiskreport/)
- [jdownloader](http://jdownloader.org/)
- [jedit](http://www.jedit.org)
- [jenkins-menu](http://qvacua.com)
- [jetphoto-studio](http://www.jetphotosoft.com/web/home/)
- [jewelrybox](http://jewelrybox.unfiniti.com/)
- [jiggler](http://www.sticksoftware.com/software/Jiggler.html)
- [jing](http://www.techsmith.com/jing.html)
- [jitouch](http://www.jitouch.com)
- [jitsi](https://jitsi.org/)
- [joinme](https://join.me/)
- [josm](http://josm.openstreetmap.de)
- [jsonlook](https://github.com/rjregenold/jsonlook)
- [jubler](http://www.jubler.org/)
- [julia](http://julialang.org/)
- [juliastudio](http://forio.com/labs/julia-studio/)
- [jumpcut](http://jumpcut.sourceforge.net/)
- [jumpshare](https://jumpshare.com/)
- [justlooking](http://chipmunkninja.com/JustLooking)
- [jxplorer](http://jxplorer.org)

#### K

- [kaleidoscope](http://www.kaleidoscopeapp.com/)
- [kamakiri](https://mochidev.com/apps/kamakiri)
- [karabiner](https://pqrs.org/osx/karabiner/)
- [katana](http://katana.witiz.com/)
- [kdiff3](http://kdiff3.sourceforge.net/)
- [keepassx](http://www.keepassx.org)
- [keka](http://kekaosx.com/)
- [kensington-trackball-works](http://www.kensington.com/)
- [kext-drop](http://www.groths.org/software/kextdrop/)
- [kext-utility](http://cvad-mac.narod.ru/index/0-4)
- [kext-wizard](http://www.insanelymac.com/forum/topic/253395-kext-wizard-easy-to-use-kext-installer-and-more/)
- [key-codes](http://manytricks.com/keycodes/)
- [keyboard-cleaner](http://jan.prima.de/~jan/plok/archives/48-Keyboard-Cleaner.html)
- [keyboard-maestro](http://www.keyboardmaestro.com/)
- [keyboardcleantool](http://bettertouchtool.net)
- [keycastr](https://github.com/sdeken/keycastr)
- [keycue](http://www.ergonis.com/products/keycue/)
- [keyfinder](http://www.ibrahimshaath.co.uk/keyfinder/)
- [keymo](http://manytricks.com/keymo)
- [keystore-explorer](http://keystore-explorer.sourceforge.net/index.php)
- [kid3](http://kid3.sourceforge.net/)
- [kindle-previewer](http://www.amazon.com/gp/feature.html/?docId=1000765261)
- [kindle](http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000464931)
- [kindlegen](http://www.amazon.com/gp/feature.html?docId=1000765211)
- [kismac](http://kismac-ng.org/)
- [kitematic](https://kitematic.com/)
- [kivy](http://kivy.org)
- [kiwi](http://kiwi-app.net/)
- [kkbox](http://www.kkbox.com/)
- [klayout](http://www.klayout.de/index.html)
- [knock](http://knocktounlock.com)
- [knox](https://agilebits.com/knox)
- [kobito](http://kobito.qiita.com/)
- [kobo](http://www.kobo.com/)
- [kod](https://github.com/rsms/kod/)
- [komanda](https://github.com/mephux/komanda)
- [komodo-edit](http://komodoide.com/komodo-edit)
- [komodo-ide](http://komodoide.com/)
- [kompozer](http://www.kompozer.net/)
- [ksdiff](http://www.kaleidoscopeapp.com/ksdiff2)
- [kuaipan](http://www.kuaipan.cn/d/mac)
- [kugoumusic](http://www.kugou.com)
- [kvirc](http://www.kvirc.net)
- [kylo](http://kylo.tv)

#### L

- [lastfm](http://www.lastfm.com)
- [lastpass-universal](https://lastpass.com/)
- [latexian](http://tacosw.com/latexian/)
- [latexit](http://www.chachatelier.fr/latexit)
- [launchbar](http://www.obdev.at/products/launchbar/)
- [launchcontrol](http://www.soma-zone.com/LaunchControl/)
- [launchrocket](https://github.com/jimbojsb/launchrocket)
- [launchy](http://www.launchy.net)
- [layervault](http://layervault.com/)
- [lazarus](http://lazarus.freepascal.org/)
- [league-of-legends](http://signup.leagueoflegends.com/)
- [leap-motion](https://www.leapmotion.com/setup)
- [less](http://incident57.com/less/)
- [levelator](http://www.conversationsnetwork.org/levelator/)
- [librecad](http://librecad.org/)
- [libreoffice](https://www.libreoffice.org/)
- [licecap](http://www.cockos.com/licecap/)
- [licensed](http://amarsagoo.info/licensed)
- [lightpaper](http://clockworkengine.com/lightpaper-mac/)
- [lighttable](http://www.lighttable.com/)
- [lilypond](http://lilypond.org)
- [limechat](http://limechat.net/mac/)
- [lincastor](http://onflapp.wordpress.com/lincastor/)
- [linein](http://www.rogueamoeba.com/freebies/)
- [lingon-x](http://www.peterborgapps.com/lingon/)
- [lingrradar](http://radar.lingr.com/)
- [linkinus](http://conceited.net/products/linkinus)
- [linkliar](https://github.com/halo/LinkLiar)
- [linphone](http://www.linphone.org/)
- [liquifile](http://www.liquifile.info/)
- [litecoin](https://litecoin.org/)
- [liteicon](http://www.freemacsoft.net/liteicon/)
- [liteide](https://github.com/visualfc/liteide)
- [little-snitch](http://www.obdev.at/products/littlesnitch/index.html)
- [littleipsum](http://littleipsum.com)
- [livereload](http://www.livereload.com)
- [livestation](http://www.livestation.com)
- [loadmytracks](http://www.cluetrust.com/loadmytracks.html)
- [locko](http://www.binarynights.com/)
- [logic](http://www.saleae.com/)
- [logisim](http://ozark.hendrix.edu/~burch/logisim/)
- [logitech-control-center](http://www.logitech.com)
- [logitech-gaming-software](http://www.logitech.com/en-us/support/gaming-software?section=downloads&bit=&osid=36)
- [logitech-harmony](http://www.logitech.com/en-us/support/universal-remotes)
- [logitech-myharmony](https://setup.myharmony.com/)
- [logitech-unifying](http://www.logitech.com/en-us/promotions/6072)
- [logmein-client](https://secure.logmein.com/products/pro/learnmore/desktopapp.aspx)
- [logmein-hamachi](http://vpn.net)
- [logoist](http://www.syniumsoftware.com/logoist/)
- [loom](http://loom.com/)
- [love](http://love2d.org)
- [lpk25-editor](http://www.akaipro.com/index.php/product/lpk25)
- [ltspice](http://www.linear.com/designtools/software/)
- [lucidor](http://lucidor.org)
- [luminance-hdr](http://qtpfsgui.sourceforge.net/)
- [lyn](http://www.lynapp.com/)
- [lynxlet](http://habilis.net/lynxlet/)
- [lyrics-master](http://www.kenichimaehashi.com/lyricsmaster/)
- [lyx](http://www.lyx.org)

#### M

- [mac-informer](http://macdownload.informer.com/landing/)
- [mac-linux-usb-loader](http://sevenbits.github.io/Mac-Linux-USB-Loader/)
- [macaw](http://macaw.co/)
- [macbreakz](http://www.publicspace.net/MacBreakZ/)
- [macdown](http://macdown.uranusjr.com/)
- [macdrops](http://interfacelift.com/apps/macdrops/v1)
- [macfusion](http://macfusionapp.org/)
- [macgdbp](https://www.bluestatic.org/software/macgdbp/)
- [machacha](http://www.julifos.com/soft/machacha/index.html)
- [machg](http://jasonfharris.com/machg/)
- [macintosh-explorer](http://www.ragesw.com/products/explorer.html)
- [macmoney](http://www.devon.riceball.net/display.php?file=m01)
- [macpar-deluxe](http://gp.home.xs4all.nl/Site/MacPAR_deLuxe.html)
- [macpass](http://mstarke.github.io/MacPass/)
- [macpaw-gemini](http://macpaw.com/gemini)
- [macpilot](http://www.koingosw.com/products/macpilot.php)
- [macports](http://www.macports.org)
- [macs-fan-control](http://www.crystalidea.com/macs-fan-control)
- [macterm](http://www.macterm.net/)
- [mactex](http://www.tug.org/mactex/)
- [mactracker](http://mactracker.ca/)
- [mactubes](http://macapps.sakura.ne.jp/mactubes/index_en.html)
- [macupdate-desktop](https://www.macupdate.com/desktop)
- [macvim](http://code.google.com/p/macvim/)
- [macwinzipper](http://tidajapan.com/macwinzipper)
- [maczip4win](http://ynomura.com/home/?page_id=116)
- [madruby](http://www.wingsforpigs.com/MadRuby/MadRuby.html)
- [magic-launch](http://www.oneperiodic.com/products/magiclaunch/)
- [magican](http://www.magicansoft.com/)
- [mail-plugin-manager](http://www.chungwasoft.com/mailpluginmanager/)
- [mailbox](http://www.mailboxapp.com/)
- [mailfollowup](http://www.cs.unc.edu/~welch/MailFollowup/)
- [mailmate](http://freron.com/)
- [mailplane](http://mailplaneapp.com)
- [majic](http://erikhinterbichler.com/apps/majic/)
- [makehuman](http://www.makehuman.org/)
- [makemkv](http://www.makemkv.com/)
- [makerware](http://www.makerbot.com/makerware/)
- [mame](http://mameosx.sourceforge.net/)
- [mamp](http://www.mamp.info/en/index.html)
- [manager](http://manager.io)
- [manico](http://manico.im/)
- [mapture](http://anatoo.jp/mapture/)
- [maratis](http://www.maratis3d.org/)
- [marble](http://www.marble.kde.org)
- [marked](http://marked2app.com)
- [marsedit](http://www.red-sweater.com/marsedit/)
- [master-key](http://macinmind.com/?area=app&app=masterkey&pg=info)
- [matplotlib](http://www.kyngchaos.com/software/python)
- [mauve](http://gel.ahabs.wisc.edu/mauve/)
- [mavensmate](http://mavensmate.com)
- [max](http://sbooth.org/Max/)
- [maxthon](http://www.maxthon.com/)
- [mcedit](http://www.mcedit.net)
- [mcs783x](http://www.asix.com.tw/products.php?op=ProductList&PLine=74&PSeries=109)
- [mdrp](http://www.macdvdripperpro.com/)
- [media-converter](http://media-converter.sourceforge.net/)
- [mediaelch](http://www.mediaelch.de/)
- [mediafire-desktop](https://www.mediafire.com/software/desktop/)
- [mediainfo](http://mediaarea.net/en/MediaInfo)
- [mediathekview](http://sourceforge.net/projects/zdfmediathk/)
- [meerkat](http://codesorcery.net/meerkat)
- [memorytamer](http://www.memorytamer.com/)
- [mendeley-desktop](http://www.mendeley.com/)
- [menubar-countdown](http://capablehands.net/menubarcountdown)
- [menubarfilter](http://wez.github.com/MenuBarFilter/)
- [menucalendarclock-ical](http://www.objectpark.net/en/mcc.html)
- [menumeters](http://www.ragingmenace.com/software/menumeters/)
- [menuola](http://www.geocom.co.nz)
- [meocloud](https://meocloud.pt)
- [mercurymover](http://www.heliumfoot.com/mercurymover)
- [mesasqlite](http://www.desertsandsoftware.com)
- [meshlab](http://meshlab.sourceforge.net/)
- [metanota](http://www.metanota.com/)
- [meteorologist](http://heat-meteo.sourceforge.net/)
- [mi](http://www.mimikaki.net/)
- [microsoft-intellipoint](http://www.microsoft.com/hardware/en-us/mice)
- [microsoft-intellitype](http://www.microsoft.com/hardware/en-us/keyboards)
- [microsoft-lync-plugin](http://office.microsoft.com/Lync)
- [middleclick](http://clement.beffa.org/labs/projects/middleclick)
- [midikeys](http://www.manyetas.com/creed/midikeys.html)
- [miditrail](http://en.sourceforge.jp/projects/miditrail/)
- [mikogo](http://www.mikogo.com/)
- [milkytracker](http://www.milkytracker.org/)
- [minbox](https://minbox.com)
- [minco](http://www.celmaro.com/minco/)
- [mindnode-pro](https://mindnode.com/)
- [minecraft](http://minecraft.net)
- [mini-metro](http://dinopoloclub.com/minimetro/)
- [minilyrics](http://www.crintsoft.com/)
- [minimalclock](http://ilovecolorz.net/minimalclock/)
- [minitimer](http://kevingessner.com/software/minitimer/)
- [minitube](http://flavio.tordini.org/minitube)
- [miro-video-converter](http://www.mirovideoconverter.com/)
- [miro](http://www.getmiro.com/)
- [mirrordisplays](http://www.fabiancanas.com/Projects/MirrorDisplays)
- [mixlr](http://mixlr.com)
- [mixture](http://mixture.io/)
- [mixxx](http://www.mixxx.org)
- [mjolnir](http://mjolnir.io)
- [mkvtoolnix](http://www.bunkus.org/videotools/mkvtoolnix/)
- [mnemosyne](http://mnemosyne-proj.org/)
- [mocksmtp](http://mocksmtpapp.com/)
- [money](http://www.jumsoft.com/money/)
- [moneyguru](http://www.hardcoded.net/moneyguru/)
- [moneymoney](http://moneymoney-app.com/)
- [moneyplex](http://www.matrica.de/)
- [moneywell](http://nothirst.com/moneywell/)
- [mongodb](http://mongodbx-app.orelord.com/)
- [mongodbpreferencepane](https://github.com/remysaissy/mongodb-macosx-prefspane)
- [mongohub](https://github.com/fotonauts/MongoHub-Mac)
- [mono-mdk](http://mono-project.com/)
- [mono-mre](http://mono-project.com)
- [monochrome](http://lucianmarin.com/monochrome/)
- [monolingual](http://monolingual.sourceforge.net/)
- [monotype-skyfonts](http://www.fonts.com/web-fonts/google)
- [moom](http://manytricks.com/moom/)
- [moreamp](http://sourceforge.net/projects/moreamp/)
- [mosh](http://mosh.mit.edu/)
- [mou](http://mouapp.com/)
- [mountain](http://appgineers.de/mountain/)
- [mover](http://www.themaninhat.com/mover.html)
- [movieply](http://www.movieply.com/)
- [movist](https://github.com/samiamwork/Movist)
- [mozart](http://www.mozart-oz.org)
- [mp4tools](http://www.emmgunn.com/mp4tools/mp4toolshome.html)
- [mpeg-streamclip](http://www.squared5.com/)
- [mpfreaker](http://www.lairware.com/mpfreaker/)
- [mplayer-osx-extended](http://www.mplayerosx.ch/)
- [mplayerx](http://mplayerx.org/)
- [mpv](http://mpv.io/)
- [mucommander](http://www.mucommander.com/index.php)
- [mudlet](http://www.mudlet.org)
- [multibit](https://multibit.org/)
- [multibrowser](https://sites.google.com/site/tesseractsoftware/multibrowser)
- [multidoge](http://multidoge.org/)
- [multifirefox](http://davemartorana.com/multifirefox)
- [mumble](http://mumble.sourceforge.net)
- [murasaki](http://genjiapp.com/mac/murasaki/index_en.html)
- [musescore](http://musescore.org/)
- [music-manager](https://play.google.com/music/)
- [musicbrainz-picard](http://musicbrainz.org/doc/MusicBrainz_Picard)
- [musicplayer](http://ufd.dk/musicplayer)
- [musictube](http://flavio.tordini.org/musictube)
- [musique](http://flavio.tordini.org/musique)
- [myphonedesktop](http://www.myphonedesktop.com/)
- [mysqlworkbench](http://www.mysql.com/products/workbench)

#### N

- [nally](http://yllan.org/app/Nally/)
- [name-mangler](http://manytricks.com/namemangler/)
- [namebench](https://code.google.com/p/namebench/)
- [namechanger](http://www.mrrsoftware.com/MRRSoftware/NameChanger.html)
- [namely](http://amarsagoo.info/namely)
- [narrative-uploader](http://getnarrative.com)
- [navicat-data-modeler](http://www.navicat.com/products/navicat-data-modeler)
- [navicat-for-mariadb](http://www.navicat.com/products/navicat-for-mariadb)
- [navicat-for-mysql](http://www.navicat.com/products/navicat-for-mysql)
- [navicat-for-oracle](http://www.navicat.com/products/navicat-for-oracle)
- [navicat-for-postgresql](http://www.navicat.com/products/navicat-for-postgresql)
- [navicat-for-sql-server](http://www.navicat.com/products/navicat-for-sqlserver)
- [navicat-for-sqlite](http://www.navicat.com/products/navicat-for-sqlite)
- [navicat-premium](http://www.navicat.com/products/navicat-premium)
- [neofinder](http://www.cdfinder.de)
- [netbeans-cpp](https://netbeans.org/)
- [netbeans-php](https://netbeans.org/)
- [netbeans](https://netbeans.org/)
- [nethackcocoa](https://code.google.com/p/nethack-cocoa/)
- [netlogo](http://ccl.northwestern.edu/netlogo/)
- [netnewswire](http://netnewswireapp.com/)
- [netshade](http://raynersoftware.com/netshade/)
- [netspot](http://www.netspotapp.com)
- [neu](http://www.elegantchaos.com/neu/)
- [ngrok](https://ngrok.com/)
- [nicecast](http://rogueamoeba.com/nicecast)
- [nide](http://coreh.github.io/nide/)
- [nightingale](http://getnightingale.com/)
- [nike-plus-connect](http://nikeplus.nike.com)
- [nimbus](https://github.com/jnordberg/irccloudapp)
- [ninjablocks](http://forums.ninjablocks.com/index.php?p=/discussion/1655/ninja-osx-client/p1)
- [nitroshare](https://quickmediasolutions.com/apps/14/nitroshare)
- [nitrous-desktop](https://www.nitrous.io/mac)
- [nmap](http://nmap.org/)
- [no-ip-duc](http://www.noip.com/download?page=mac)
- [nocturne](http://code.google.com/p/blacktree-nocturne/)
- [node-webkit](https://github.com/rogerwang/node-webkit)
- [node](http://nodejs.org)
- [nodebox](http://nodebox.net/node/)
- [nodeclipse](http://www.nodeclipse.org/)
- [noejectdelay](https://pqrs.org/macosx/keyremap4macbook/noejectdelay.html.en)
- [noisy](https://github.com/jonshea/Noisy)
- [noiz2sa](http://workram.com/games/noiz2sa/)
- [nomachine](http://www.nomachine.com)
- [nomacs](http://www.nomacs.org/)
- [noobproof](http://www.hanynet.com/noobproof/index.html)
- [nosleep](https://code.google.com/p/macosx-nosleep-extension/)
- [notational-velocity](http://notational.net)
- [nothing-to-hide](https://back.nothingtohide.cc/)
- [notifyr](http://getnotifyr.com)
- [nottingham](https://clickontyler.com/nottingham/)
- [ntfs-free](http://sourceforge.net/projects/ntfsfree/)
- [nutstore](https://jianguoyun.com)
- [nvalt](http://brettterpstra.com/project/nvalt/)
- [nzbvortex](http://www.nzbvortex.com/)

#### O

- [objektiv](http://nthloop.github.io/Objektiv/)
- [obs](http://obsproject.com/)
- [obsidian-menu-bar-mountain-lion](http://www.obsidianmenubar.com)
- [ocenaudio](http://www.ocenaudio.com.br/en)
- [oclint](http://oclint.org)
- [octave](https://gnu.org/software/octave/)
- [odesk](https://www.odesk.com/)
- [omnidazzle](http://www.omnigroup.com/more)
- [omnidisksweeper](http://www.omnigroup.com/products/omnidisksweeper/)
- [omnifocus](http://www.omnigroup.com/products/omnifocus/)
- [omnigraffle](http://www.omnigroup.com/products/omnigraffle)
- [omnioutliner](http://www.omnigroup.com/omnioutliner/)
- [omniplan](http://www.omnigroup.com/products/omniplan/)
- [omnipresence](http://www.omnigroup.com/omnipresence)
- [omniweb](http://www.omnigroup.com/products/omniweb/)
- [onepassword](https://agilebits.com/onepassword)
- [oneswarm](http://www.oneswarm.org/)
- [onionshare](https://onionshare.org/)
- [onlive-client](http://games.onlive.com)
- [onyx](http://www.titanium.free.fr/downloadonyx.php)
- [oovoo](http://www.oovoo.com)
- [openarena](http://openarena.ws)
- [opendns-updater](https://support.opendns.com/entries/23218654-Where-do-I-download-an-OpenDNS-Dynamic-IP-updater-client-)
- [openemu](http://openemu.org/)
- [openlp](http://openlp.org)
- [opennx](http://opennx.net/)
- [openoffice](http://www.openoffice.org/)
- [openra](http://www.openra.net/)
- [openscad](http://www.openscad.org/)
- [opensesame](http://osdoc.cogsci.nl/)
- [opensong](http://www.opensong.org/)
- [openttd](http://openttd.org)
- [openvanilla](http://openvanilla.org/)
- [opera-mail](http://www.opera.com/computer/mail)
- [opera-mobile-emulator](http://www.opera.com/developer/mobile-emulator)
- [opera-next](http://www.opera.com/computer/next)
- [opera](http://www.opera.com/)
- [optimal-layout](http://most-advantageous.com/optimal-layout/)
- [orange](http://orange.biolab.si/)
- [orbit](http://orbitapp.net)
- [origin](http://origin.com)
- [ormr](http://getormr.com/home/)
- [osculator](http://www.osculator.net)
- [osirix](http://www.osirix-viewer.com)
- [osxfuse](https://osxfuse.github.io/)
- [outwit-hub](http://www.outwit.com)
- [owasp-zap](https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project)
- [owncloud](http://owncloud.com)

#### P

- [p4merge](http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools)
- [p4v](http://www.perforce.com/product/components/perforce-visual-client)
- [p5](http://p5js.org/download/#editor)
- [pacifist](http://www.charlessoft.com/)
- [packer](http://www.packer.io/)
- [padre](http://padre.perlide.org)
- [pagico](http://pagico.com/)
- [paintbrush](http://paintbrush.sourceforge.net/)
- [paintcode](http://www.paintcodeapp.com/)
- [pandoc](http://johnmacfarlane.net/pandoc)
- [pandora-one](http://www.pandora.com/)
- [pangu](http://en.pangu.io/)
- [panic-unison](http://panic.com/unison/)
- [panini](http://sourceforge.net/projects/pvqt/)
- [paparazzi](http://derailer.org/paparazzi/)
- [papers](http://www.papersapp.com/papers/)
- [paragon-extfs](http://www.paragon-software.com/home/extfs-mac/)
- [paragon-ntfs](http://www.paragon-software.com/home/ntfs-mac/)
- [parallels](http://www.parallels.com/products/desktop/)
- [paraview](http://www.paraview.org/)
- [parse](https://parse.com)
- [pashua](http://www.bluem.net/en/mac/pashua/)
- [password-gorilla](https://github.com/zdia/gorilla)
- [password-practice](https://mrgeckosmedia.com/applications/info/PasswordPractice)
- [pastor](http://mehlau.net/pastor)
- [path-finder](http://www.cocoatech.com/pathfinder/)
- [paw](http://luckymarmot.com/paw)
- [paye-tools](http://www.hmrc.gov.uk/payerti/payroll/bpt/paye-tools.htm)
- [pcalc](http://www.pcalc.com/index.html)
- [pcsxr](https://pcsxr.codeplex.com)
- [pd-extended](http://puredata.info/downloads/pd-extended)
- [pdfinfo](http://www.sybrex.com/products/macgui/infomanager/)
- [pdfmasher](http://www.hardcoded.net/pdfmasher/)
- [pdfpen](http://smilesoftware.com/PDFpen/index.html)
- [pdfpenpro](http://www.smilesoftware.com/PDFpenPro/index.html)
- [pdfsam](http://www.pdfsam.org/)
- [pdfshaver](https://github.com/tparry/PDFShaver.app)
- [pdftk](http://www.pdflabs.com/tools/pdftk-server/)
- [peepopen](http://topfunky.github.io/PeepOpen/)
- [pemdas-widget](http://www.donkeyengineering.com/pemdaswidget/)
- [pencil](http://pencil.evolus.vn)
- [pentaho-data-integration](http://community.pentaho.com)
- [perian](http://www.perian.org/)
- [pester](http://sabi.net/nriley/software/index.html#pester)
- [petite-chez-scheme](http://www.scheme.com/petitechezscheme.html)
- [pflists](http://www.hanynet.com/pflists/index.html)
- [pg-commander](http://eggerapps.at/pgcommander/)
- [pgadmin3](http://pgadmin.org)
- [pgloader](http://pgloader.io)
- [phantomjs](http://phantomjs.org/)
- [pharo](http://www.pharo-project.org/home)
- [phoenix-slides](http://blyt.net/phxslides)
- [phoenix](https://github.com/sdegutis/Phoenix)
- [phoneclean](http://www.imobie.com/phoneclean/)
- [photoninja](http://www.picturecode.com/index.php)
- [phpstorm](http://www.jetbrains.com/phpstorm/)
- [pi-filler](http://ivanx.com/raspberrypi)
- [pianopub](http://dev.kunugiken.com/Pianopub/)
- [picasa](http://picasa.google.com/)
- [picturesque](http://www.acqualia.com/picturesque/)
- [piezo](http://rogueamoeba.com/piezo/)
- [pinegrow-web-designer](http://pinegrow.com/)
- [pingmenu](https://github.com/kalleboo/PingMenu)
- [pins](http://pinsapp.com/)
- [pinta](http://pinta-project.com/)
- [pivotalbooster](http://pivotalbooster.com/)
- [pixel-check](http://macguitar.me/apps/pixelcheck/)
- [pixel-winch](http://ricciadams.com/projects/pixel-winch)
- [pixelpeeper](http://www.irradiatedsoftware.com/labs)
- [pixelstick](http://plumamazing.com/mac/pixelstick)
- [pixi-paint](http://www.danielx.net/pixel-editor/docs/download)
- [pixlr](https://pixlr.com)
- [placeit](https://placeit.net/)
- [plain-clip](http://www.bluem.net/en/mac/plain-clip)
- [plainview](http://barbariangroup.com/)
- [platypus](http://sveinbjorn.org/platypus)
- [playonmac](http://www.playonmac.com/en)
- [pleasesleep](http://www.dragonone.com/products/macosx/pleasesleep/)
- [plex-home-theater](https://plex.tv)
- [plex-media-server](https://plex.tv/)
- [pliny](http://pliny.cch.kcl.ac.uk)
- [plover](http://stenoknight.com/wiki/Main_Page)
- [plug](http://www.plugformac.com/)
- [plycounter](http://www.plycount.com)
- [pngcommentator](http://www.echomist.co.uk/software/PNGCommentator.html)
- [pngyu](http://nukesaq88.github.io/Pngyu/)
- [poedit](http://www.poedit.net)
- [poison](http://tox.im)
- [pokemon-showdown](http://pokemonshowdown.com)
- [pokerstars](http://www.pokerstars.com/)
- [pokertracker](https://www.pokertracker.com)
- [port-map](http://www.codingmonkeys.de/portmap)
- [porthole](http://getporthole.com/)
- [postbox](http://www.postbox-inc.com/)
- [postgres](http://postgresapp.com/)
- [power-manager-pro](https://www.dssw.co.uk/powermanager)
- [power-manager](https://www.dssw.co.uk/powermanager)
- [powerkey](http://pkamb.github.io/PowerKey/)
- [powerword](http://mac.iciba.com)
- [praat](http://www.fon.hum.uva.nl/praat/)
- [preen](http://anomiesoftware.com/Anomie_Software/Preen.html)
- [pref-setter](http://www.nightproductions.net/prefsetter.html)
- [preference-manager](http://www.digitalrebellion.com/prefman)
- [preferencecleaner](http://www.echomist.co.uk/software/PreferenceCleaner.shtml)
- [prefs-editor](http://www.tempel.org/PrefsEditor)
- [prepros](http://alphapixels.com/prepros/)
- [prey](https://preyproject.com)
- [prezi](http://www.prezi.com/)
- [printrun](https://github.com/kliment/Printrun)
- [prismatik](http://lightpack.tv/)
- [private-eye](http://radiosilenceapp.com/private-eye)
- [private-internet-access](https://www.privateinternetaccess.com)
- [prizmo](http://www.creaceed.com/prizmo)
- [processing](http://processing.org/)
- [programmer-dvorak](http://kaufmann.no/roland/dvorak/)
- [projectlibre](http://www.projectlibre.org/)
- [prolific-usb-serial-driver](http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41)
- [propane](http://propaneapp.com/)
- [propresenter](http://www.renewedvision.com/propresenter.php)
- [protege](http://protege.stanford.edu/)
- [provisioning](https://github.com/chockenberry/Provisioning)
- [provisionql](https://github.com/ealeksandrov/ProvisionQL)
- [proxifier](http://www.proxifier.com/mac/)
- [proximity](https://code.google.com/p/reduxcomputing-proximity/)
- [proxpn](http://proxpn.com)
- [ps3-media-server](http://www.ps3mediaserver.org/)
- [psi](http://psi-im.org/)
- [psychopy](http://www.psychopy.org/)
- [punto-switcher](http://punto.yandex.ru)
- [pupil](http://pupil.io/)
- [pusher](https://github.com/noodlewerk/NWPusher)
- [putio-adder](https://github.com/nicoSWD/put.io-adder)
- [puush](http://puush.me/)
- [puzzles](http://www.chiark.greenend.org.uk/~sgtatham/puzzles/)
- [pwnagetool](http://blog.iphone-dev.org/tagged/PwnageTool)
- [pycharm-ce](http://www.jetbrains.com/pycharm)
- [pycharm](http://www.jetbrains.com/pycharm/)

#### Q

- [qbittorrent](http://www.qbittorrent.org)
- [qdesktop](http://qvacua.com)
- [qgis](http://www.kyngchaos.com/software/qgis)
- [qgroundcontrol](http://qgroundcontrol.org)
- [qiyimedia](http://www.iqiyi.com)
- [qlcolorcode](https://code.google.com/p/qlcolorcode/)
- [qlimagesize](https://github.com/Nyx0uf/qlImageSize)
- [qlmarkdown](https://github.com/toland/qlmarkdown)
- [qlprettypatch](https://github.com/atnan/QLPrettyPatch)
- [qlrest](https://github.com/cluther/qlrest)
- [qlstephen](http://whomwah.github.io/qlstephen/)
- [qmind](http://qvacua.com)
- [qq](http://im.qq.com/macqq/index.shtml)
- [qqbrowser](http://browser.qq.com/mac/)
- [qqinput](http://qq.pinyin.cn/)
- [qqmusic](http://y.qq.com)
- [qrfcview](https://saghul.github.io/qrfcview-osx)
- [qrq](http://fkurz.net/ham/qrq.html)
- [qt-creator](http://qt-project.org/)
- [qtspim](http://spimsimulator.sourceforge.net/)
- [quassel-client](http://quassel-irc.org)
- [querious](http://www.araelium.com/querious/)
- [quick-search-box](http://www.google.com/quicksearchbox/)
- [quickcast](http://quickcast.io/)
- [quickhue](https://github.com/danparsons/QuickHue)
- [quicklook-csv](https://github.com/p2/quicklook-csv)
- [quicklook-json](http://www.sagtau.com/quicklookjson.html)
- [quicklook-pfm](https://code.google.com/p/quicklook-pfm/)
- [quicknfo](https://github.com/planbnet/QuickNFO)
- [quickradar](http://www.quickradar.com/)
- [quicksilver](http://qsapp.com/)
- [quiterss](http://quiterss.org/)
- [quotefixformac](https://github.com/robertklep/quotefixformac)
- [qvod-player](http://www.qvodcd.com/)

#### R

- [r-name](http://www.jacek-dom.net/software/R-Name/)
- [r](http://www.r-project.org/)
- [racket](http://racket-lang.org/)
- [radbeacon](http://store.radiusnetworks.com/collections/all/products/radbeacon-config)
- [radiant-player](http://kbhomes.github.io/google-music-mac/)
- [rapidweaver](http://realmacsoftware.com/rapidweaver)
- [raw-photo-processor](http://www.raw-photo-processor.com/RPP/Overview.html)
- [raw-therapee](http://rawtherapee.com)
- [razer-synapse](http://www.razerzone.com/synapse2)
- [razorsql](http://razorsql.com/download_mac.html)
- [rcdefaultapp](http://www.rubicode.com/Software/RCDefaultApp/)
- [rcenvironment](http://www.rubicode.com/Software/RCEnvironment/)
- [rdio](http://www.rdio.com)
- [rdm](http://redisdesktop.com)
- [readefine-desktop](http://readefine.anirudhsasikumar.net/)
- [readytalk](https://www.readytalk.com/)
- [reaper](http://www.reaper.fm/)
- [recordit](http://recordit.co/)
- [recovery-disk-assistant](http://support.apple.com/kb/HT4848)
- [reeddit](http://mac.reedditapp.com)
- [reflector](http://www.airsquirrels.com/reflector/)
- [refresh-finder](http://soderhavet.com/refresh/refresh-finder/)
- [reggy](http://reggyapp.com/)
- [rekordbox](http://rekordbox.com/en/)
- [remonit](http://zef.io/remonit/)
- [remote-desktop-connection](http://www.microsoft.com/en-us/download/details.aspx?id=18140)
- [renamer](http://renamer.com)
- [repetier-host](http://www.repetier.com/)
- [rescuetime](https://www.rescuetime.com)
- [retinacapture](http://www.retinacapture.com)
- [retinizer](http://retinizer.mikelpr.com/)
- [retroshare](http://retroshare.sourceforge.net/)
- [reveal](http://revealapp.com/)
- [rftg](http://keldon.net/rftg/)
- [ridibooks](http://ridibooks.com/support/introduce_appdown)
- [riffworkst4](http://www.sonomawireworks.com/T4/)
- [rightzoom](http://www.blazingtools.com/right_zoom_mac.html)
- [ringtones](http://thelittleappfactory.com/ringtones/)
- [ripit](http://thelittleappfactory.com/ripit/)
- [robomongo](http://robomongo.org)
- [rocks-n-diamonds](http://www.artsoft.org/rocksndiamonds/)
- [royal-tsx](http://www.royaltsx.com)
- [rrootage](http://workram.com/games/rrootage/)
- [rss](http://www.rssapplication.com/)
- [rstudio](http://www.rstudio.com/)
- [rtx](http://www.rtxapp.com/mac/)
- [rubitrack](http://www.rubitrack.com/)
- [rubymine](http://www.jetbrains.com/ruby/)
- [runtastic-connect](https://www.runtastic.com/connect)
- [runtimebrowser](https://github.com/nst/RuntimeBrowser)
- [rust](http://www.rust-lang.org/)
- [rythem](https://github.com/AlloyTeam/Rythem)

#### S

- [sabnzbd](http://sabnzbd.org/)
- [safaritabswitching](https://github.com/rs/SafariTabSwitching)
- [safe-in-cloud](http://www.safe-in-cloud.com)
- [safemonk](https://www.safemonk.com/)
- [sage](http://www.sagemath.org/)
- [sandbox](http://www.mikey-san.net/sandbox/)
- [sandvox](http://www.karelia.com/products/sandvox/)
- [satellite-eyes](http://satelliteeyes.tomtaylor.co.uk/)
- [sauce](https://saucelabs.com/mac)
- [sauerbraten](http://sauerbraten.org)
- [scala-ide](http://scala-ide.org/)
- [scansnap-manager](http://www.fujitsu.com/global/support/computing/peripheral/scanners/software/)
- [scapple](https://www.literatureandlatte.com/scapple.php)
- [schnapps](http://schnappsformac.com/)
- [scilab](https://www.scilab.org)
- [scout](http://mhs.github.io/scout-app/)
- [scratch](http://scratch.mit.edu/scratch2download/)
- [screenflick](http://www.araelium.com/screenflick/)
- [screenflow](http://www.telestream.net/screenflow/)
- [screenhero](http://screenhero.com)
- [screenmailer](http://www.screenmailer.com)
- [screens-connect](https://screensconnect.com)
- [screenstagram](http://screenstagram.s3.amazonaws.com/download.html)
- [screensteps](http://www.bluemangolearning.com/)
- [scribbleton](http://scribbleton.com/)
- [scribus](http://www.scribus.net/canvas/Scribus)
- [scriptql](http://www.kainjow.com/)
- [scrivener](http://literatureandlatte.com/scrivener.php)
- [scroll-reverser](https://pilotmoon.com/scrollreverser/)
- [scrup](https://github.com/rsms/scrup)
- [scummvm](http://scummvm.org/)
- [sdformatter](https://www.sdcard.org)
- [sdrdx](http://fyngyrz.com/?p=915)
- [seafile-client](http://seafile.com/)
- [seamonkey](http://www.seamonkey-project.org/)
- [seashore](http://seashore.sourceforge.net/)
- [second-life-viewer](http://secondlife.com/)
- [secondbar](http://blog.boastr.net/?page_id=79)
- [secrets](http://secrets.blacktree.com)
- [seil](https://pqrs.org/macosx/keyremap4macbook/seil.html.en)
- [selfcontrol](http://selfcontrolapp.com/)
- [selflanguage-self-control](http://selflanguage.org/)
- [semulov](http://www.kainjow.com)
- [send-to-kindle](http://www.amazon.com/gp/sendtokindle/mac)
- [sensiolabsdesktop](http://desktop.sensiolabs.org)
- [sente](http://www.thirdstreetsoftware.com)
- [sequel-pro](http://www.sequelpro.com/)
- [sequential](http://sequentialx.com)
- [serf](http://www.serfdom.io/)
- [serial-tools](http://www.w7ay.net/site/Applications/Serial%20Tools/)
- [serialcloner](http://serialbasics.free.fr/Serial_Cloner.html)
- [servetome](http://zqueue.com/servetome/)
- [serviio](http://serviio.org/)
- [servus](https://servus.io/)
- [sevenzx](http://sixtyfive.xmghosting.com/products/7zx/)
- [shades](http://www.charcoaldesign.co.uk/shades)
- [shadowsocksx](https://github.com/shadowsocks/shadowsocks-iOS/wiki/Shadowsocks-for-OSX-Help)
- [shadowsweeper](http://www.irradiatedsoftware.com/labs/)
- [sharetool](http://bainsware.com/)
- [shelf-leveler](https://mrgeckosmedia.com/applications/info/Shelf-Leveler)
- [shiftit](https://github.com/fikovnik/ShiftIt)
- [shimo](http://www.chungwasoft.com/shimo/)
- [shiori](http://aki-null.net/shiori/)
- [shoes](http://shoesrb.com/)
- [shortcat](http://shortcatapp.com/)
- [shotcut](http://www.shotcut.org/)
- [shuttle](http://fitztrev.github.io/shuttle/)
- [sickbeard-anime](http://sickbeard.lad1337.de/)
- [sickbeard](http://sickbeard.lad1337.de/)
- [sidekick](http://oomphalot.com/sidekick/)
- [sidestep](http://chetansurpur.com/projects/sidestep)
- [sidplay](http://www.sidmusic.org/sidplay/mac/)
- [sigil](http://code.google.com/p/sigil/)
- [silo](http://nevercenter.com/silo/)
- [silverback](http://silverbackapp.com/)
- [silverlight](http://www.microsoft.com/silverlight/)
- [simon](http://www.dejal.com/simon/)
- [simpholders](http://simpholders.com/)
- [simple-comic](http://dancingtortoise.com/simplecomic/)
- [simple-css](http://www.hostm.com/css)
- [simplecap](http://xcatsan.com/simplecap-en/)
- [simplefloatingclock](http://www.splook.com/Software/Simple_Floating_Clock.html)
- [simpless](http://wearekiss.com/simpless)
- [simplesynth](http://notahat.com/simplesynth/)
- [simpletag](http://sourceforge.net/projects/simpletag/)
- [simulator-folders](http://nimbleworks.co.uk/blog/simulator-folders/)
- [sitesucker](http://www.sitesucker.us/mac/mac.html)
- [sixtyforce](http://sixtyforce.com/)
- [sizeup](http://www.irradiatedsoftware.com/sizeup/index.html)
- [sizzlingkeys](http://www.yellowmug.com/sk4it/)
- [sketch-tool](http://bohemiancoding.com/sketch/tool/)
- [sketch-toolbox](http://sketchtoolbox.com)
- [sketch](http://www.bohemiancoding.com/sketch/)
- [sketchup](http://www.sketchup.com/intl/en/)
- [sketchupviewer](http://www.sketchup.com/intl/en/)
- [skim](http://skim-app.sourceforge.net/)
- [skitch](http://evernote.com/skitch/)
- [skreenics](https://code.google.com/p/skreenics/)
- [skydrive](http://windows.microsoft.com/en-us/skydrive/download)
- [skype](http://www.skype.com)
- [slack](http://slack.com)
- [slate](https://github.com/jigish/slate)
- [sleep-monitor](https://www.dssw.co.uk/sleepmonitor)
- [slender](http://dragonforged.com/slender/)
- [slic3r](http://slic3r.org/)
- [slice](http://sliceeq.com/)
- [slicy](http://macrabbit.com/slicy/)
- [slidemode](http://teaksoftware.com/app/slidemode)
- [slimbatterymonitor](http://www.orange-carb.org/SBM/)
- [slimboat](http://www.slimboat.com)
- [slingshot](http://www.airsquirrels.com/slingshot/)
- [sloth](http://sveinbjorn.org/sloth)
- [slowy](http://slowyapp.com/)
- [smaller](http://smallerapp.com/)
- [smartgithg](http://www.syntevo.com)
- [smartloader](http://picturelife.com)
- [smartsynchronize](http://www.syntevo.com)
- [smcfancontrol](http://www.eidac.de/?p=243)
- [smoothmouse](http://smoothmouse.com)
- [snagit](http://www.techsmith.com/snagit.html)
- [snes9x](http://www.snes9x.com/)
- [snip](http://snip.qq.com/)
- [snippet-edit](http://cocoaholic.com/snippet_edit/)
- [snippets](http://snippets.me/)
- [sococo](http://www.sococo.com)
- [sofortbild](http://www.sofortbildapp.com/)
- [sogouinput](http://pinyin.sogou.com/mac/)
- [soleol](http://eduo.info/apps/soleol)
- [sonic-visualiser](http://www.sonicvisualiser.org/)
- [sonora](http://getsonora.com/)
- [sonos](http://www.sonos.com/)
- [sopcast](http://www.sopcast.org)
- [sophos-anti-virus-home-edition](http://www.sophos.com/en-us/products/free-tools/sophos-antivirus-for-mac-home-edition.aspx/)
- [soqlxplorer](http://www.pocketsoap.com/osx/soqlx/)
- [soulseek](http://www.soulseekqt.net/)
- [soulver](http://www.acqualia.com/soulver/)
- [soundcleod](http://salomvary.github.io/soundcleod/)
- [soundflower](https://code.google.com/p/soundflower/)
- [soundnote](https://mrgeckosmedia.com/applications/info/SoundNote)
- [sourcetree](http://www.sourcetreeapp.com/)
- [spacemonkey](https://www.spacemonkey.com)
- [spacious](http://www.iospirit.com/products/spacious)
- [spark-inspector](http://sparkinspector.com/)
- [spark](http://www.shadowlab.org/softwares/spark.php)
- [sparkbox](http://www.icyblaze.com/sparkbox)
- [sparkle](http://sparkle-project.org/)
- [sparkleshare](http://sparkleshare.org/)
- [sparrow](http://www.sparrowmailapp.com/)
- [spectacle](http://spectacleapp.com/)
- [speedcrunch](http://www.speedcrunch.org)
- [speedlimit](http://mschrag.github.io/)
- [speedtao](http://www.speedtao.net/)
- [spek](http://spek.cc)
- [spideroak](http://spideroak.com)
- [spillo](http://bananafishsoftware.com/products/spillo/)
- [spirited-away](http://drikin.com/2010/11/spirited-away.html)
- [splashtop-personal](http://www.splashtop.com/personal)
- [splashtop-streamer](http://www.splashtop.com/downloads)
- [splayerx](https://bitbucket.org/Tomasen/splayerx/wiki/Home)
- [spotdox](http://spotdox.com/get-started/)
- [spotifree](http://spotifree.gordinskiy.com)
- [spotify-menubar](http://lifeupnorth.co.uk/Spotify-Menubar/)
- [spotify-notifications](http://spotify-notifications.citruspi.io/)
- [spotify](https://www.spotify.com)
- [spyder](https://code.google.com/p/spyderlib/)
- [sqleditor](http://www.malcolmhardie.com/sqleditor/)
- [sqlexplorer](http://eclipsesql.sourceforge.net/)
- [sqlite-database-browser](http://sqlitebrowser.org)
- [sqlite-professional](https://www.sqlitepro.com)
- [sqlitestudio](http://sqlitestudio.pl)
- [squidman](http://squidman.net/squidman/)
- [squire](http://squireapp.com)
- [squirrel](https://github.com/lotem/squirrel)
- [sqwiggle](https://www.sqwiggle.com)
- [srclib](https://srclib.org/)
- [sshfs](http://osxfuse.github.io/)
- [ssx](http://chris.schleifer.net/ssX/index.cgi/index.html)
- [stackato](http://docs.stackato.com/user/client/index.html)
- [stackroom](http://www.geocities.jp/aromaticssoft/stackroom/index.html)
- [startninja](http://www.allvu.com/index.php/products/startninja.html)
- [stay](http://cordlessdog.com/stay/)
- [steam](http://store.steampowered.com/about/)
- [steermouse](http://plentycom.jp/en/steermouse/)
- [stella](http://stella.sourceforge.net)
- [stellarium](http://stellarium.org)
- [stockbarjp](http://midnightsuyama.org)
- [streamtools](https://github.com/nytlabs/streamtools)
- [strongvpn-client](http://strongvpn.com/vpnclient.shtml)
- [sts](http://spring.io/tools/sts)
- [subclassed-mnemosyne](http://www.subclassed.com/apps/mnemosyne/details)
- [subl](https://github.com/dhoulb/subl)
- [subler](https://code.google.com/p/subler/)
- [sublercli](https://code.google.com/p/subler/)
- [sublime-text](http://www.sublimetext.com/2)
- [subnetcalc](http://subnetcalc.free.fr/)
- [subsmarine](http://www.cocoawithchurros.com/subsmarine.php)
- [subsurface](http://subsurface.hohndel.org/)
- [subtitle-master](http://subtitlemaster.com/)
- [subtitles](http://subtitlesapp.com)
- [sunlogin-remote](http://sunlogin.oray.com)
- [super-otr](http://apfel-a.macbay.de/super-otr/)
- [supercollider](http://supercollider.sourceforge.net/)
- [superduper](http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html)
- [supersync](http://supersync.com/)
- [supertuxkart](http://supertuxkart.sourceforge.net)
- [surplusmeter](http://www.skoobysoft.com/utilities/utilities.html#surplusmeter)
- [suspicious-package](http://www.mothersruin.com/software/SuspiciousPackage/)
- [svnx](https://code.google.com/p/svnx/)
- [sweet-home3d](http://www.sweethome3d.com/)
- [swingfish](http://cloakedcode.com/swingfish.html)
- [swinsian](http://swinsian.com)
- [switchresx](http://www.madrau.com)
- [switchup](http://www.irradiatedsoftware.com/switchup/)
- [synergy](http://synergy-foss.org/)
- [synology-assistant](http://www.synology.com/)
- [synology-cloud-station](http://www.synology.com/)
- [synology-photo-station-uploader](http://www.synology.com/)
- [synthesia](http://www.synthesiagame.com)

#### T

- [tabula](http://tabula.nerdpower.org)
- [tactor](http://onflapp.wordpress.com/tactor/)
- [tag](http://sbooth.org/Tag/)
- [tagalicious](http://thelittleappfactory.com/tagalicious/)
- [tagger](http://bilalh.github.io/projects/tagger/)
- [tagoman](http://onflapp.wordpress.com/tagoman)
- [tagr](http://www.entwicklungsfreu.de/tagr.html)
- [tagspaces](http://www.tagspaces.org)
- [tapaal](http://www.tapaal.net)
- [taskpaper](http://www.hogbaysoftware.com/products/taskpaper)
- [tau](http://tau.uoregon.edu/)
- [tcpblock](http://tcpblock.wordpress.com/)
- [td-agent](http://www.fluentd.org/)
- [td-toolbelt](http://toolbelt.treasuredata.com/)
- [teamspeak-client](http://www.teamspeak.com/)
- [teamviewer](http://www.teamviewer.com/)
- [teamviz](http://www.teamviz.com/)
- [teensy](http://pjrc.com/teensy/loader_mac.html)
- [teeworlds](https://www.teeworlds.com/)
- [telegram](https://vk.com/telegram_osx)
- [telephone](https://code.google.com/p/telephone/)
- [teleport](http://www.abyssoft.com/software/teleport/)
- [testflight](http://testflightapp.com)
- [tex-live-utility](https://code.google.com/p/mactlmgr/)
- [texmacs](http://www.texmacs.org/)
- [texmaker](http://www.xm1math.net/texmaker)
- [texnicle](http://www.bobsoft-mac.de/texnicle/texnicle.html)
- [texpad](https://www.texpadapp.com/osx)
- [texshop](http://pages.uoregon.edu/koch/texshop)
- [texstudio](http://texstudio.sourceforge.net/)
- [textadept](http://foicica.com/textadept/)
- [textexpander](http://www.smilesoftware.com/TextExpander/index.html)
- [textmate](http://macromates.com/)
- [textroom](https://code.google.com/p/textroom/)
- [texts](http://www.texts.io)
- [textsoap](http://www.unmarked.com/textsoap/)
- [texturepacker](http://www.codeandweb.com/texturepacker)
- [textwrangler](http://www.barebones.com/products/textwrangler)
- [tftpserver](http://ww2.unime.it/flr/tftpserver/)
- [thaiwitter](https://tw3.herokuapp.com/)
- [the-archive-browser](http://archivebrowser.c3.cx)
- [the-brain](http://www.thebrain.com/)
- [the-escapers-flux](http://www.theescapers.com/flux/)
- [the-hit-list](http://www.potionfactory.com/thehitlist)
- [the-unarchiver](http://unarchiver.c3.cx/)
- [theremin](https://github.com/TheStalwart/Theremin)
- [thetube](http://www.equinux.com/us/products/thetube/index.html)
- [things](http://culturedcode.com/things/)
- [thinkorswim](http://mediaserver.thinkorswim.com/installer/install.html#macosx)
- [thirty-three-rpm](http://www.edenwaith.com/products/33rpm/)
- [thisservice](http://wafflesoftware.net/thisservice/)
- [thong](http://thong.fousa.be/)
- [thumbsup](http://www.devontechnologies.com/products/freeware.html#c966)
- [thunder](http://mac.xunlei.com/)
- [thunderbird](http://www.mozilla.org/en-US/thunderbird/)
- [thyme](http://joaomoreno.github.io/thyme/)
- [tickets](http://www.irradiatedsoftware.com/tickets/)
- [tiddlywiki](https://github.com/Jermolene/TiddlyDesktop)
- [tikz-editor](https://github.com/fredokun/TikZ-Editor)
- [tiled](http://www.mapeditor.org/)
- [tilemill](http://www.mapbox.com/tilemill/)
- [time-out](http://www.dejal.com/timeout/)
- [time-sink](http://manytricks.com/timesink/)
- [time-tracker](https://code.google.com/p/time-tracker-mac)
- [timemachineeditor](http://timesoftware.free.fr/timemachineeditor/)
- [timemachinescheduler](http://www.klieme.com/TimeMachineScheduler.html)
- [timings](http://mediaatelier.com/Timings)
- [tinkertool](http://www.bresink.com/osx/TinkerTool.html)
- [tinygrab](http://www.tinygrab.com)
- [tinyumbrella](http://blog.firmwareumbrella.com/)
- [titanium-studio](https://my.appcelerator.com/resources)
- [tk-suite-client](http://agfeo.de/agfeo_web/hp3.nsf/lu/2064)
- [toad-mac](http://www.toadworld.com/products/toad-mac-edition/default.aspx)
- [toau](http://toauapp.com)
- [todoist](https://todoist.com)
- [todos](http://dbachrach.com/opensoft/index.php?page=Todos)
- [tofu](http://amarsagoo.info/tofu/)
- [toggldesktop](https://www.toggl.com)
- [tokaido](https://github.com/tokaido/tokaidoapp/releases)
- [tomahawk](http://www.tomahawk-player.org/)
- [tomighty](http://www.tomighty.org/)
- [tongbu](http://www.tongbu.com)
- [tonido](http://www.tonido.com/)
- [toodledo](https://www.toodledo.com/tools/mac_menubar.php)
- [torbrowser](https://www.torproject.org/projects/torbrowser.html)
- [torpedo](https://usetorpedo.com)
- [tortoisehg](http://tortoisehg.bitbucket.org/)
- [torustrooper](http://workram.com/games/)
- [totalfinder](http://totalfinder.binaryage.com)
- [totals](http://www.kedisoft.com/totals/)
- [totalspaces](http://totalspaces.binaryage.com/)
- [totalterminal](http://totalterminal.binaryage.com)
- [tower](http://www.git-tower.com/)
- [trailer](http://dev.housetrip.com/trailer/)
- [trailrunner](http://trailrunnerx.com/)
- [traktable](http://yo-han.github.io/Traktable/)
- [transmission-remote-gui](https://code.google.com/p/transmisson-remote-gui/)
- [transmission](http://www.transmissionbt.com/)
- [transmit](http://panic.com/transmit)
- [treemaker](http://www.langorigami.com/science/computational/treemaker/treemaker.php)
- [treesheets](http://strlen.com/treesheets/)
- [tresorit](http://tresorit.com)
- [tribler](http://www.tribler.org)
- [trickster](http://www.apparentsoft.com/trickster/)
- [trim-enabler](http://www.cindori.org/software/trimenabler/)
- [truecrypt](http://truecrypt.org/)
- [tubbler](http://www.celmaro.com/tubbler)
- [tuneinstructor](http://www.tune-instructor.de/com/start.html)
- [tunewiki](http://www.tunewiki.com/)
- [tunnelbear](https://www.tunnelbear.com/)
- [tunnelblick](https://code.google.com/p/tunnelblick/)
- [tuxguitar](http://www.tuxguitar.com.ar/)
- [tv-browser](http://www.tvbrowser.org/index.php?setlang=en)
- [tv-show-tracker](http://www.pixelperfectwidgets.com/)
- [tvmobili](http://www.tvmobili.com/)
- [tvshows](http://tvshowsapp.com/)
- [twentytwo](https://github.com/marcw/twentytwo)
- [twindocs](https://www.twindocs.com)
- [twine](http://twinery.org/)
- [twitterrific](http://twitterrific.com/mac)
- [typewriter](http://llllll.li/typewriter)
- [typinator](http://www.ergonis.com/)

#### U

- [uber-network-fuser](http://nickapedia.com/2012/01/10/breaking-new-ground-an-uber-tool-for-the-mac/)
- [uberpov](http://megapov.inetart.net/uberpov_mac/index.html)
- [ubersicht](http://tracesof.net/uebersicht)
- [ubuntu-one](http://one.ubuntu.com)
- [ukelele](http://scripts.sil.org/ukelele)
- [ultrastardeluxe](http://ultrastardx.sourceforge.net/)
- [uncrustifyx](https://github.com/ryanmaxwell/UncrustifyX)
- [undercover](http://www.orbicule.com/undercover/mac/)
- [unetbootin](http://unetbootin.sourceforge.net/)
- [unicodechecker](http://earthlingsoft.net/UnicodeChecker/)
- [unified-remote](http://www.unifiedremote.com)
- [uninstallpkg](http://www.corecode.at/uninstallpkg/)
- [unison](http://www.cis.upenn.edu/~bcpierce/unison/)
- [unity-web-player](https://unity3d.com/webplayer)
- [unity3d](http://unity3d.com/unity/)
- [universal-media-server](www.universalmediaserver.com)
- [unpkg](http://www.timdoug.com/unpkg/)
- [unrarx](http://www.unrarx.com)
- [usb-overdrive](http://www.usboverdrive.com/)
- [utc-menu-clock](https://github.com/netik/UTCMenuClock)
- [utopia](http://utopiadocs.com/)
- [utorrent](http://www.utorrent.com/)

#### V

- [vagrant-manager](http://vagrantmanager.com/)
- [vagrant](http://www.vagrantup.com)
- [valentina-studio](http://www.valentina-db.com/)
- [vassal](http://www.vassalengine.org)
- [versions](http://versionsapp.com/)
- [vessel](http://awvessel.github.io)
- [viber](http://viber.com)
- [vico](http://www.vicoapp.com)
- [videomonkey](http://videomonkey.org/)
- [videospec](http://videospec.free.fr/english/)
- [vienna](http://www.vienna-rss.org)
- [vimediamanager](http://mariusth.channelwood.org/vimediamanager/)
- [vimr](http://vimr.org/)
- [vine-server](http://www.testplant.com/products/vine/vine-server/)
- [vinoteka](http://www.vinotekasoft.com/)
- [virtaal](http://virtaal.translatehouse.org/)
- [virtualbox](http://www.virtualbox.org)
- [virtualhostx](http://clickontyler.com/virtualhostx/)
- [virustotaluploader](https://www.virustotal.com/)
- [viscosity](http://www.sparklabs.com/viscosity/)
- [visit](https://wci.llnl.gov/codes/visit/home.html)
- [vistrails](http://www.vistrails.org/index.php/Main_Page)
- [visualack](http://blog.kowalczyk.info/software/vack/)
- [visualvm](http://visualvm.java.net)
- [vitamin-r](http://www.publicspace.net/Vitamin-R/)
- [vlc-remote](http://hobbyistsoftware.com/vlc)
- [vlc](http://www.videolan.org/vlc/)
- [vlcstreamer](http://hobbyistsoftware.com/vlcstreamer)
- [vmware-fusion](http://www.vmware.com/products/fusion/)
- [vmware-horizon-view-client](http://www.vmware.com/)
- [vocabulist](http://vocabulistapp.com/)
- [voicemac](https://mrgeckosmedia.com/applications/info/VoiceMac)
- [volatility](http://www.volatilityfoundation.org/)
- [vox-preference-pane](http://coppertino.com/vox/addon.html)
- [vuescan](http://www.hamrick.com)
- [vyprvpn](http://www.goldenfrog.com/vyprvpn)

#### W

- [wabbitemu](http://wabbit.codeplex.com)
- [wacom-bamboo-tablet](http://us.wacom.com/en/support/drivers)
- [wacom-tablet](http://www.wacom.com/)
- [wake-on-lan](http://www.readpixel.com/wakeonlan/)
- [wallpaper-wizard](http://wallwiz.com)
- [wasted](http://wasted.werk01.de)
- [waterroof](http://www.hanynet.com/waterroof/index.html)
- [wavtap](https://github.com/pje/wavtap)
- [wd-security](http://www.wdc.com/en/)
- [web-sharing](http://clickontyler.com/web-sharing/)
- [webp-quicklook](https://github.com/dchest/webp-quicklook)
- [webstorm](http://www.jetbrains.com/webstorm/)
- [wechat](http://weixin.qq.com/cgi-bin/readtemplate?t=mac)
- [wedge](http://wedge.natestedman.com)
- [weibox](http://weiboformac.sinaapp.com)
- [weka](http://www.cs.waikato.ac.nz/ml/weka/)
- [welly](https://code.google.com/p/welly/)
- [wesnoth](http://wesnoth.org)
- [whatpulse](http://www.whatpulse.org/)
- [whatsapp-pocket](http://www.fireebok.com/whatsapp-pocket.html)
- [whatsize](http://whatsizemac.com/)
- [whiteclock](http://www.taimila.com/?p=1221)
- [widelands](https://wl.widelands.org/)
- [wifimasterkey](http://www.lianwifi.com/)
- [window-switch](http://xpra.org/)
- [windownaut](http://www.binarybakery.com/aprod/index.html)
- [wineskin-winery](http://wineskin.urgesoftware.com/)
- [wings3d](http://www.wings3d.com/)
- [winxound](https://winxound.codeplex.com/)
- [wireover](http://www.wireover.com/)
- [wireshark](http://www.wireshark.org)
- [wiretap-studio](http://www.ambrosiasw.com/utilities/wiretap/)
- [witch](http://manytricks.com/witch/)
- [witgui](http://desairem.altervista.org/witgui/wordpress/)
- [wiznote](http://www.wiznote.com/)
- [wiztoolsorg-restclient](https://code.google.com/p/rest-client)
- [wjoy](https://code.google.com/p/wjoy/)
- [wondershare-player](http://www.wondershare.com/video-player/)
- [woodhouse](https://github.com/phinze/woodhouse/)
- [wordservice](http://www.devontechnologies.com/products/freeware.html#c1115)
- [worksnaps-client](http://www.worksnaps.net/)
- [wowhead-client](http://wowhead.com)
- [wraparound](http://www.digicowsoftware.com/detail?_app=Wraparound)
- [wuala](http://wuala.com)
- [wyzo](http://wyzo.com)

#### X

- [x-lite](http://www.counterpath.com/x-lite.html)
- [x-mirage](http://www.x-mirage.com/x-mirage/)
- [x-moto](http://xmoto.tuxfamily.org)
- [x2goclient](http://x2go.org)
- [x48](http://blog.sharkus.com/2012/08/osx-hp48-emulators.html)
- [xact](http://xact.scottcbrown.org)
- [xamarin-android](http://xamarin.com/android)
- [xamarin-ios](http://xamarin.com/ios)
- [xamarin-studio](http://xamarin.com/studio)
- [xamarin](http://xamarin.com/platform)
- [xampp](http://www.apachefriends.org/index.html)
- [xaos](http://matek.hu/xaos)
- [xbench](http://xbench.com/)
- [xbmc](http://xbmc.org/)
- [xbox360-controller-driver](http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver)
- [xca](http://xca.sourceforge.net/)
- [xee](http://xee.c3.cx/)
- [xiami](http://www.xiami.com/)
- [xld](http://tmkk.undo.jp/xld/index_e.html)
- [xmarks-safari](http://www.xmarks.com/)
- [xmind](http://www.xmind.net)
- [xmrouter](http://www1.miwifi.com/)
- [xnconvert](http://www.xnview.com/en/xnconvert/)
- [xnviewmp](http://www.xnview.com/)
- [xquartz](http://xquartz.macosforge.org/)
- [xrg](http://www.gauchosoft.com/Products/XRG/)
- [xscope](http://iconfactory.com/software/xscope)
- [xscreensaver](http://www.jwz.org/xscreensaver/)
- [xslimmer](http://latenitesoft.com/xslimmer/)
- [xtorrent](http://www.xtorrent.com)
- [xtrafinder](http://www.trankynam.com/xtrafinder/)

#### Y

- [yabumi](https://yabumi.cc/)
- [yacreader](http://www.yacreader.com)
- [yandex](http://browser.yandex.com/)
- [yandexdisk](https://disk.yandex.com/)
- [yasu](http://yasuapp.net)
- [yemuzip](http://www.yellowmug.com/yemuzip)
- [ynab](http://www.youneedabudget.com/)
- [yojimbo](http://www.barebones.com/products/yojimbo/)
- [yorufukurou](https://sites.google.com/site/yorufukurou/home-en)
- [youdao](http://cidian.youdao.com/mac/)
- [youll-never-take-me-alive](https://github.com/iSECPartners/yontma-mac)
- [younited](http://www.younited.com/index.html)
- [youview](https://mrgeckosmedia.com/applications/info/YouView)
- [yubikey-personalization-gui](http://www.yubico.com/products/services-software/personalization-tools/use/)
- [yubiswitch](https://github.com/pallotron/yubiswitch)

#### Z

- [zed](http://zedapp.org)
- [zendserver](http://www.zend.com/en/products/server/)
- [zendstudio](http://www.zend.com/en/products/studio/)
- [zepheer](http://candysquare.com/products/zepheer/)
- [zephyros](https://github.com/sdegutis/zephyros)
- [zeroad](http://www.play0ad.com/)
- [zeroinstall](http://0install.net)
- [zeroxdbe-eap](http://www.jetbrains.com/dbe/)
- [zeroxed](http://www.suavetech.com/0xed/)
- [zipcleaner](http://roger-jolly.nl/software/#zipcleaner)
- [zipeg](http://www.zipeg.net/)
- [zoc](http://www.emtec.com/zoc/)
- [zoomus](http://www.zoom.us)
- [zooom](http://coderage-software.com/zooom)
- [zotero](http://www.zotero.org/)
- [zterm](http://www.dalverson.com/zterm/)


