Catch insensitive, inconsiderate writing

Overview

alex

📝 alex — Catch insensitive, inconsiderate writing.

Build Coverage First timers friendly

Whether your own or someone else’s writing, alex helps you find gender favoring, polarizing, race related, religion inconsiderate, or other unequal phrasing in text.

For example, when We’ve confirmed his identity is given, alex will warn you and suggest using their instead of his.

Give alex a spin on the Online demo ».

Why

  • Helps to get better at considerate writing
  • Catches many possible offences
  • Suggests helpful alternatives
  • Reads plain text, HTML, MDX, or markdown as input
  • Stylish

Install

Using npm (with Node.js):

$ npm install alex --global

Using yarn:

$ yarn global add alex

Or you can follow this step-by-step tutorial: Setting up alex in your project

Contents

Checks

alex checks things such as:

  • Gendered work-titles (if you write garbageman alex suggests garbage collector; if you write landlord alex suggests proprietor)
  • Gendered proverbs (if you write like a man alex suggests bravely; if you write ladylike alex suggests courteous)
  • Ableist language (if you write learning disabled alex suggests person with learning disabilities)
  • Condescending language (if you write obviously or everyone knows alex warns about it)
  • Intolerant phrasing (if you write master and slave alex suggests primary and replica)
  • Profanities (if you write butt 🍑 alex warns about it)

…and much more!

Note: alex assumes good intent: that you don’t mean to offend!

See retext-equality and retext-profanities for all rules.

alex ignores words meant literally, so “he”, He — ..., and the like are not warned about.

Integrations

Ignoring files

The CLI searches for files with a markdown or text extension when given directories (so $ alex . will find readme.md and path/to/file.txt). To prevent files from being found, create an .alexignore file.

.alexignore

The CLI will sometimes search for files. To prevent files from being found, add a file named .alexignore in one of the directories above the current working directory (the place you run alex from). The format of these files is similar to .eslintignore (which in turn is similar to .gitignore files).

For example, when working in ~/path/to/place, the ignore file can be in to, place, or ~.

The ignore file for this project itself looks like this:

# `node_modules` is ignored by default.
example.md

Control

Sometimes alex makes mistakes:

A message for this sentence will pop up.

Yields:

readme.md
  1:15-1:18  warning  `pop` may be insensitive, use `parent` instead  dad-mom  retext-equality

⚠ 1 warning

HTML comments in Markdown can be used to ignore them:

<!--alex ignore dad-mom-->

A message for this sentence will **not** pop up.

Yields:

readme.md: no issues found

ignore turns off messages for the thing after the comment (in this case, the paragraph). It’s also possible to turn off messages after a comment by using disable, and, turn those messages back on using enable:

<!--alex disable dad-mom-->

A message for this sentence will **not** pop up.

A message for this sentence will also **not** pop up.

Yet another sentence where a message will **not** pop up.

<!--alex enable dad-mom-->

A message for this sentence will pop up.

Yields:

readme.md
  9:15-9:18  warning  `pop` may be insensitive, use `parent` instead  dad-mom  retext-equality

⚠ 1 warning

Multiple messages can be controlled in one go:

<!--alex disable he-her his-hers dad-mom-->

…and all messages can be controlled by omitting all rule identifiers:

<!--alex ignore-->

Configuration

You can control alex through .alexrc configuration files:

{
  "allow": ["boogeyman-boogeywoman"]
}

…you can use YAML if the file is named .alexrc.yml or .alexrc.yaml:

allow:
  - dad-mom

…you can also use JavaScript if the file is named .alexrc.js:

// But making it random like this is a bad idea!
exports.profanitySureness = Math.floor(Math.random() * 3)

…and finally it is possible to use an alex field in package.json:

{
  …
  "alex": {
    "noBinary": true
  },
  …
}

The allow field should be an array of rules or undefined (the default is undefined). When provided, the rules specified are skipped and not reported.

The deny field should be an array of rules or undefined (the default is undefined). When provided, only the rules specified are reported.

You cannot use both allow and deny at the same time.

The noBinary field should be a boolean (the default is false). When turned on (true), pairs such as he and she and garbageman or garbagewoman are seen as errors. When turned off (false, the default), such pairs are okay.

The profanitySureness field is a number (the default is 0). We use cuss, which has a dictionary of words that have a rating between 0 and 2 of how likely it is that a word or phrase is a profanity (not how “bad” it is):

Rating Use as a profanity Use in clean text Example
2 likely unlikely asshat
1 maybe maybe addict
0 unlikely likely beaver

The profanitySureness field is the minimum rating (including) that you want to check for. If you set it to 1 (maybe) then it will warn for level 1 and 2 (likely) profanities, but not for level 0 (unlikely).

CLI

Let’s say example.md looks as follows:

The boogeyman wrote all changes to the **master server**. Thus, the slaves
were read-only copies of master. But not to worry, he was a cripple.

Now, run alex on example.md:

$ alex example.md

Yields:

example.md
   1:5-1:14  warning  `boogeyman` may be insensitive, use `boogeymonster` instead                boogeyman-boogeywoman  retext-equality
  1:42-1:48  warning  `master` / `slaves` may be insensitive, use `primary` / `replica` instead  master-slave           retext-equality
  1:69-1:75  warning  Don’t use `slaves`, it’s profane                                           slaves                 retext-profanities
  2:52-2:54  warning  `he` may be insensitive, use `they`, `it` instead                          he-she                 retext-equality
  2:61-2:68  warning  `cripple` may be insensitive, use `person with a limp` instead             gimp                   retext-equality

⚠ 5 warnings

See $ alex --help for more information.

When no input files are given to alex, it searches for files in the current directory, doc, and docs. If --mdx is given, it searches for mdx extensions. If --html is given, it searches for htm and html extensions. Otherwise, it searches for txt, text, md, mkd, mkdn, mkdown, ron, and markdown extensions.

API

npm:

$ npm install alex --save

alex is also available as an AMD, CommonJS, and globals module, uncompressed and compressed.

alex(value, config)

alex.markdown(value, config)

Check Markdown (ignoring syntax).

Parameters
  • value (VFile or string) — Markdown document
  • config (Object, optional) — See the Configuration section
Returns

VFile. You are probably interested in its messages property, as shown in the example below, because it holds the possible violations.

Example
alex('We’ve confirmed his identity.').messages

Yields:

[
  [1:17-1:20: `his` may be insensitive, when referring to a person, use `their`, `theirs`, `them` instead] {
    message: '`his` may be insensitive, when referring to a ' +
      'person, use `their`, `theirs`, `them` instead',
    name: '1:17-1:20',
    reason: '`his` may be insensitive, when referring to a ' +
      'person, use `their`, `theirs`, `them` instead',
    line: 1,
    column: 17,
    location: { start: [Object], end: [Object] },
    source: 'retext-equality',
    ruleId: 'her-him',
    fatal: false,
    actual: 'his',
    expected: [ 'their', 'theirs', 'them' ]
  }
]

alex.mdx(value, config)

Check MDX (ignoring syntax).

Note: the syntax for MDX@2, while currently in beta, is used in alex.

Parameters
  • value (VFile or string) — MDX document
  • config (Object, optional) — See the Configuration section
Returns

VFile.

Example
alex.mdx('<Component>He walked to class.</Component>').messages

Yields:

[
  [1:12-1:14: `He` may be insensitive, use `They`, `It` instead] {
    reason: '`He` may be insensitive, use `They`, `It` instead',
    line: 1,
    column: 12,
    location: { start: [Object], end: [Object] },
    source: 'retext-equality',
    ruleId: 'he-she',
    fatal: false,
    actual: 'He',
    expected: [ 'They', 'It' ]
  }
]

alex.html(value, config)

Check HTML (ignoring syntax).

Parameters
  • value (VFile or string) — HTML document
  • config (Object, optional) — See the Configuration section
Returns

VFile.

Example
alex.html('<p class="black">He walked to class.</p>').messages

Yields:

[
  [1:18-1:20: `He` may be insensitive, use `They`, `It` instead] {
    message: '`He` may be insensitive, use `They`, `It` instead',
    name: '1:18-1:20',
    reason: '`He` may be insensitive, use `They`, `It` instead',
    line: 1,
    column: 18,
    location: { start: [Object], end: [Object] },
    source: 'retext-equality',
    ruleId: 'he-she',
    fatal: false,
    actual: 'He',
    expected: [ 'They', 'It' ]
  }
]

alex.text(value, config)

Check plain text (as in, syntax is checked).

Parameters
  • value (VFile or string) — Text document
  • config (Object, optional) — See the Configuration section
Returns

VFile.

Example
alex('The `boogeyman`.').messages // => []

alex.text('The `boogeyman`.').messages

Yields:

[
  [1:6-1:15: `boogeyman` may be insensitive, use `boogeymonster` instead] {
    message: '`boogeyman` may be insensitive, use `boogeymonster` instead',
    name: '1:6-1:15',
    reason: '`boogeyman` may be insensitive, use `boogeymonster` instead',
    line: 1,
    column: 6,
    location: Position { start: [Object], end: [Object] },
    source: 'retext-equality',
    ruleId: 'boogeyman-boogeywoman',
    fatal: false,
    actual: 'boogeyman',
    expected: [ 'boogeymonster' ]
  }
]

Workflow

The recommended workflow is to add alex to package.json and to run it with your tests in Travis.

You can opt to ignore warnings through alexrc files and control comments.

A package.json file with npm scripts, and additionally using AVA for unit tests, could look like so:

{
  "scripts": {
    "test-api": "ava",
    "test-doc": "alex",
    "test": "npm run test-api && npm run test-doc"
  },
  "devDependencies": {
    "alex": "^1.0.0",
    "ava": "^0.1.0"
  }
}

If you’re using Travis for continuous integration, set up something like the following in your .travis.yml:

 script:
 - npm test
+- alex --diff

Make sure to still install alex though!

If the --diff flag is used, and Travis is detected, lines that are not changes in this push are ignored. Using this workflow, you can merge PRs if it has warnings, and then if someone edits an entirely different file, they won’t be bothered about existing warnings, only about the things they added!

FAQ

This is stupid!

Not a question. And yeah, alex isn’t very smart. People are much better at this. But people make mistakes, and alex is there to help.

alex didn’t check “X”!

See contributing.md on how to get “X” checked by alex.

Why is this named alex?

It’s a nice unisex name, it was free on npm, I like it! 😄

Further reading

No automated tool can replace studying inclusive communication and listening to the lived experiences of others. An error from alex can be an invitation to learn more. These resources are a launch point for deepening your own understanding and editorial skills beyond what alex can offer:

  • The 18F Content Guide has a helpful list of links to other inclusive language guides used in journalism and academic writing.

  • The Conscious Style Guide has articles on many nuanced topics of language. For example, the terms race and ethnicity mean different things, and choosing the right word is up to you. Likewise, a sentence that overgeneralizes about a group of people (e.g. “Developers love to code all day”) may not be noticed by alex, but it is not inclusive. A good human editor can step up to the challenge and find a better way to phrase things.

  • Sometimes, the only way to know what is inclusive is to ask. In Disability is a nuanced thing, Nicolas Steenhout writes about how person-first language, such as “a person with a disability,” is not always the right choice.

  • Language is always evolving. A term that is neutral one year ago can be problematic today. Projects like the Self-Defined Dictionary aim to collect the words that we use to define ourselves and others, and connect them with the history and some helpful advice.

  • Unconsious bias is present in daily decisions and conversations and can show up in writing. Textio

    offers some examples of how descriptive adjective choice and tone can push some people away, and how regional language differences can cause confusion.

  • Using complex sentences and uncommon vocabulary can lead to less inclusive content. This is described as literacy exclusion in this article by Harver. This is critical to be aware of if your content has a global audience, where a reader’s strongest language may not be the language you are writing in.

Contribute

See contributing.md in get-alex/.github for ways to get started. See support.md for ways to get help.

This project has a Code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.

Origin story

Thanks to @iheanyi for raising the problem and @sindresorhus for inspiring me (@wooorm) to do something about it.

When alex launched, it got some traction on twitter and producthunt. Then there was a lot of press coverage.

Acknowledgments

Preliminary work for alex was done in 2015. The project was authored by @wooorm.

Lots of people helped since!

License

MIT © Titus Wormer

Comments
  • Add a GitHub corner to the website

    Add a GitHub corner to the website

    Subject of the issue

    There’s one small link on the website, to GitHub, but a GitHub Corner would be clear.

    Steps to reproduce

    Go to the website

    Expected behaviour

    There should be a clearly visible way to go to GitHub.

    Actual behaviour

    There is no such reference 😢

    hacktoberfest good first issue 👋 
    opened by wooorm 17
  • Clash with alex in haskell

    Clash with alex in haskell

    We were adding haskell linter support for coala (https://github.com/coala-analyzer/coala) and found that there was a clash with another package named alex in ghc (haskell). It seems we need alex from haskell as a dependency for our build - and this clash is a little annoying, as we can only use one of these packages at a time.

    Is it possible to make an alias of your alex to alex.js or alexjs ? So that we can simply run alexjs to run your package and alex for the other ? I'm sure it'd help with https://github.com/wooorm/alex/issues/58 too as CIs (Travis and circleci) seem to have this haskell's alex installed already.

    opened by AbdealiLoKo 17
  • Add support for a deny list

    Add support for a deny list

    Sometimes it can be useful to be able to chose which rules to include, rather than exclude. For instance, while building a Slack bot to run Alex on our conversations, we found that we got far too many false positives, and wanted to be able to specify which rules to use. This feature supports that without any changes to current behaviour.

    If both allow and deny are provided, we throw an error. I tried to follow the pattern of errors thrown elsewhere, but let me know if there's a more "Alex" way of handling conflicting configuration.

    There is a small refactor to unify applying the filter in core(), that will make it easier to add features like this in future.

    In order to be confident in these changes, I have also make the test suite more thorough, including adding more configuration combination testing.

    🗄 area/interface ⛵️ status/released 🦋 type/enhancement 
    opened by erbridge 15
  • Alex gives no output when using with stdin.

    Alex gives no output when using with stdin.

    Probably related with https://github.com/wooorm/mdast/issues/90 .

    Alex gives no output when using with stdin. Just installed with npm install --global alex and executed the example from your help page.

    lasse@eduroam-1483 ~/prog/coala (git)-[sils/tests] % echo "His network looks good" | alex
    
    lasse@eduroam-1483 ~/prog/coala (git)-[sils/tests] %
    
    opened by sils 14
  • How to use deny properly

    How to use deny properly

    I am having issues getting the deny filter to work. Can I get an example where both allow and deny lists are used?

    I was trying to use

    .alexrc

    {
      "allow": ["pop", "mom", "reject"],
      "deny": ["master"]
    }
    

    And the allow part gets applied fine, however deny does not. It wasn't really clear from examples as to how to use this?

    opened by owlpaste 10
  • Suggestion: add

    Suggestion: add "jew" / "jewed" as potential profanity

    TRIGGER WARNING: profane and derogatory words are ahead

    I see that both "gyp" and "gypsy" are considered profane, as they are derogatory to Romani people.

    However, as a Jew, I find it troubling that alexjs does not see a problem "jew" and "jewed". For example, "I overpaid by $20, he guy totally jewed me." Or, "that guy is such a jew."

    In this case, the replacement suggests should be "that individual totally ripped me off" and "that individual is such a frugal-minded person"

    opened by apxltd 10
  • Add support for dictionary-like conditions

    Add support for dictionary-like conditions

    Subject of the issue

    retext-equality and retext-profanities messages are pretty polarising, and expect the worst of the writer. We should add something of a conditional in messages.

    Steps to reproduce

    For example:

    The girl had black hair, black nail polish, and black skin.
    

    Expected behaviour

    It could yield:

    1:5-1:9 Be careful with girl, when referring to a person, it’s profane in some cases
    1:5-1:9 `girl` may be insensitive, when referring to a person, use `kid`, `child` instead
    1:14-1:19 Reconsider using black, to refer to an individual or a skin tone, it may be profane
    ...
    

    Actual behaviour

    Yields:

    1:5-1:9 Be careful with girl, it’s profane in some cases
    1:5-1:9 `girl` may be insensitive, use `kid`, `child` instead
    1:14-1:19 Reconsider using black, it may be profane
    ...
    

    Proposed solution

    In retext-equality, wou could add a condition field next to considerate and inconsiderate. Along the lines of condition: to refer to an individual or a skin tone. And pick that up in the messaging.

    Supersedes GH-196.

    hacktoberfest good first issue 👋 
    opened by wooorm 9
  • Add a note about hacktoberfest to the website

    Add a note about hacktoberfest to the website

    Subject of the issue

    The repo for alex has a badge, and there’s some issues, but there’s nothing on the website.

    Steps to reproduce

    Go to the website

    Expected behaviour

    There should be something about hacktoberfest there. Maybe something small, or maybe we could colour the background orange?

    Actual behaviour

    There is no such reference to hacktoberfest 😢

    hacktoberfest good first issue 👋 
    opened by wooorm 9
  • using globs and .alexignore

    using globs and .alexignore

    Hi, I'm running in some issues with using .alexignore and globs. The basic problem I'm trying to solve is:

    1. Ignore some .md files
    2. Lint all other .md files in this and all folders underneath it (i.e. **/*.md)

    This will cause an error that the ignored .md file is included.

    One solution is to specify all subfolders but with 15 and growing that's really painful :(

    opened by Licenser 8
  • Fix heading structure

    Fix heading structure

    This PR reshuffles the heading levels so that there's only one <h1> on the page. This makes it more usable for screen reader users. This closes issue #257.

    I've left 'Made with love' as a heading level after some thought. I was originally going to make it not a title, but I think it is a title - it is talking about the creators behind the project, and is about how it was made. Very open to other thoughts or input on that!

    🐛 type/bug hacktoberfest 📚 area/docs 👩‍⚕ area/health ⛵️ status/released 
    opened by BNewing 8
  • Adding the ability to configure profanity plugin

    Adding the ability to configure profanity plugin

    Howdy folks 👋

    This is essentially an extension of my work on https://github.com/retextjs/retext-profanities/pull/17 that is attempting to allow you to configure the level of "sureness" that a word is profane.

    This is also a "speculative" PR on how I think we might be able to expose this level of config for each of the plugins. Please let me know if it's along the right lines and I'll make sure that it makes sense on all of the exposed APIs 👍 or if you think there is a better way I am happy to move this PR in that direction

    opened by mansona 8
  • Expose rule groups like `gender`, `sexuality`, `race`, `religion`...

    Expose rule groups like `gender`, `sexuality`, `race`, `religion`...

    Subject of the feature

    Expose rule groups like gender, sexuality, race, religion...

    Problem

    For gradual adoption in our codebase, we would like to enable certain groups of rules by topic.

    Expected behaviour

    Allow to select rule groups in allow and deny, for example with deny: ['group:gender']

    Alternatives

    Ideally, this categorisation would be done by retext.

    Alternatively, we are doing this same categorization in our local codebase.

    opened by etrobert 1
  • Don't warn about special cases

    Don't warn about special cases

    Ignore "special case"

    I used the phrase "special case" obviously not referring to any sort of disability.

    13:51-13:58 warning special may be insensitive, use has a disability, person with a disability, people with disabilities instead special retext-equality

    Expected behaviour

    Alexjs should be clever enough to recognise common phrases that are not offensive and not warn me about the not very special case of "special case".

    opened by max-allan-surevine 0
  • Identify-First Language vs Person-First Language

    Identify-First Language vs Person-First Language

    Firstly, I just found this project, but I love it so far and I love its goals. I will be using it on all my projects (pending this is resolved).

    This is a significant issue with it, however. Overwhelmingly, the disabled communities prefer identity-first language. There are specific subgroups that prefer person-first language, but the general rule is to always use identity-first language unless you know otherwise. To be clear: This rule should remain, it just needs to go the other direction.

    I could go into details on why person-first language is harmful, how identity-first was the norm until abled people got uncomfortable, how the history of person-first language is pretty clear in its invalidation of disabled people, how our disabilities are not seprable from us as "person with" implies, and how they affect nearly every aspect of our lives and our experiences of the world. But none of that is relevant, as there is clear consensus from the disabled community that the best way to refer to us is with identity first-language.

    These articles from The Body is not an Apology and The Autistic Self Advocacy Network go into more details. When researching a topic like this, however, it is important to make sure you are getting information from the people, and organizations run by the people, who are directly affected by the decision, not from abled people or "advocacy" groups that are run by abled people. If you limit your views to those the term refers to, you will find overwhelming consensus on the matter.

    opened by christopherjbaker 2
  • Best way to reference in a journal article

    Best way to reference in a journal article

    I want to reference the alex tool in a journal article. Would you consider adding a DOI to this project through something like zenodo? It will make the project easier to track and reference consistently.

    Alternatively, is there a preferred reference form? Perhaps it could be added to the FAQ so that others can also find this information without needing to restructure the webpage or README.

    opened by aburrell 2
  • More Helpful Response to He/Her Pronouns

    More Helpful Response to He/Her Pronouns

    Subject of the feature

    Using pronouns should give an occasional reminder to ensure that the pronouns they are using are appropriate for the person being addressed.

    Problem

    Currently, people are told that their use of the "he/him/his" and "she/her/hers" pronouns could be insensitive if this rule is enabled. There are some people who opt to use "they/theirs" pronouns for everybody, seemingly avoiding the issue. However, some trans people can feel invalidated by choosing to do this rather than using the pronouns they go by. I think it could be misleading or confusing to suggest that the use of these pronouns is insensitive, when instead a general guideline for pronouns could be more applicable.

    Alternatives

    Perhaps this particular rule could print a message reminding the user to "ensure that the pronouns they are using are appropriate for the person being addressed' or something to that effect. Possibly having it only occur 10% of the time would be good so that they don't get reminded every time they use those pronouns, and are instead occasionally reminded to ensure that they ask for/confirm and use the pronouns of the person they are addressing.

    opened by iankolaja 1
Releases(11.0.0)
Owner
alex
A home for alex
alex
Remade from Catch-Word-js [https://github.com/Jortsoft/Catch-Word-js]

Author: https://github.com/Jortsoft Catch-Word-js This is very simple game catch word with JavaScript and Jquery install and run guide! download proje

Dimitri Kvachakhia 3 Jun 12, 2021
This is very simple game catch word with JavaScript and Jquery

Catch-Word-js This is very simple game catch word with JavaScript and Jquery install and run guide! download project zip! extract zip file on any dire

Jortsoft 14 Nov 26, 2022
Small module that makes sure your catch, caught an actual error and not a programming mistake or assertion

safety-catch Small module that makes sure your catch, caught an actual error and not a programming mistake or assertion. npm install safety-catch Tri

Mathias Buus 31 May 4, 2022
NodeDomainScrape - Use puppeteer to catch the data from domain.com.au

nodeDomainScrape 1 install node (https://nodejs.org/en/) and download the code; 2 run npm install in the terminal; 3 go to "https://www.domain.com.au/

null 1 Jan 2, 2022
I want to catch the best scene of my life. The browser wants to, too.

Scroll Cat I want to catch the best scene of my life. The browser wants to, too. There are too many good works in the world that are a hundred times b

木杉 14 Sep 6, 2022
Components for interactive scientific writing, reactive documents and explorable explanations.

@curvenote/article The goal of @curvenote/article is to provide web-components for interactive scientific writing, reactive documents and explorable e

curvenote 142 Dec 24, 2022
🐠 Babel is a compiler for writing next generation JavaScript.

The compiler for writing next generation JavaScript. Supporting Babel Babel (pronounced "babble") is a community-driven project used by many companies

Babel 41.8k Jan 9, 2023
Validate your forms, frontend, without writing a single line of javascript

Parsley JavaScript form validation, without actually writing a single line of JavaScript! Version 2.9.2 Doc See index.html and doc/ Requirements jQuer

Guillaume Potier 9k Dec 27, 2022
A rich text editor for everyday writing

Trix A Rich Text Editor for Everyday Writing Compose beautifully formatted text in your web application. Trix is a WYSIWYG editor for writing messages

Basecamp 17.3k Jan 3, 2023
dexy 2.2 1.9 L4 Python is a free-form literate documentation tool for writing any kind of technical document incorporating code.

Dexy Dexy is open source automation software with features especially designed for documentation and reporting. More information at http://dexy.it Doc

null 304 Sep 30, 2022
Principles of writing consistent, idiomatic CSS.

Principles of writing consistent, idiomatic CSS The following document outlines a reasonable style guide for CSS development. These guidelines strongl

Nicolas Gallagher 6.5k Dec 30, 2022
🔬 Writing reliable & fault-tolerant microservices in Node.js

A Node.js microservices toolkit for the NATS messaging system Run on repl.it Node: v6+ Documentation: https://hemerajs.github.io/hemera/ Lead Maintain

HemeraJs 800 Dec 14, 2022
🐠 Babel is a compiler for writing next generation JavaScript.

The compiler for writing next generation JavaScript. Supporting Babel Babel (pronounced "babble") is a community-driven project used by many companies

Babel 41.8k Jan 8, 2023
A tool for writing better scripts

Bash is great, but when it comes to writing scripts, people usually choose a more convenient programming language.

Google 35.5k Dec 27, 2022
A kickstarter guide to writing ES6

ES6 for Humans ?? The complete guide is now available on Amazon Table of Contents let, const and block scoping Arrow Functions Default Function Parame

Deepak Grover 6.3k Jan 4, 2023
This Plugin adds shortcodes with various prewritten phrases to improve quality and productivity of your writing.

Obsidian Phrasebank This Plugin adds shortcodes with various prewritten phrases to improve quality and productivity of your writing. Example :intro_pr

Viktor Bezdek 9 Jan 1, 2023
An ESLint plugin for writing Remix.js Apps

eslint-plugin-remix An ESLint plugin for Remix Installing Firstly, install the dependency with Yarn yarn add eslint-plugin-remix --dev or with npm npm

Alistair Smith 16 Nov 15, 2022
✍️ Generative creative writing via OpenAI

The stars have always been a source of wonder and mystery. They have inspired poets and philosophers throughout the ages. Arthur Conan Doyle was no ex

Nate Goldman 0 Dec 24, 2022
⚡️ Makes writing scripts absurdly easy

haxx easily create and run scripts using javascript getting started • commands • api Features ?? Process DX - easily manage and run processes ?? Javas

henrycunh 9 Apr 15, 2022
Transpile TypeScript to Espruino flavor of JavaScript for ESP8266/ESP32 microcontrollers template project. Writing safe, maintainable, and testable code is the projects goal.

ESP-TypeScript Transpile TypeScript to Espruino flavor of JavaScript for ESP8266/ESP32 microcontrollers template project. Writing safe, maintainable,

Spencer Kittleson 152 Dec 20, 2022