npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

dx-scanner

v3.57.0

Published

Scan your project for possible DX recommendations.

Downloads

2,131

Readme

Tweet

Slack Pipeliner Roadmap

Version Travis (.org) codecov last commit GitHub commit activity Downloads/week GitHub contributors All Contributors NPM TypeScript


What is DX Scanner?

DX Scanner is an open source CLI tool that allows you to “measure” Developer Experience directly based on your source code. DX Scanner recommends practices that can help you with improving your product development. You can fix some problems automatically with just one command.

What language is supported?

Language | Supported ------------ | ------------- JavaScript/TypeScript | ✅ Java/Kotlin | ✅ Python | ✅ Go | ✅ PHP | ✅ Ruby | ✅ Rust | ✅ C++ | 🚧 C# | 🚧 Android | 🚧 Swift | 🚧

Table of Contents

Which version control system can you use?

Sure you can use GitHub. You can also use GitLab and Bitbucket no matter if it is public or private repo!

examples:

dx-scanner run https://github.com/DXHeroes/dx-scanner

dx-scanner run https://gitlab.com/ubon-refer/smart-refer-api

dx-scanner run https://bitbucket.org/maras333/node-api-with-ts

Getting Started 🏁

Dependencies

Installation

  • with NPM

    npm install -g dx-scanner

  • with Yarn

    yarn global add dx-scanner

Usage

  dx-scanner run [path] [options]

Example:

  dx-scanner run https://github.com/DXHeroes/dx-scanner

Commands

Usage: dx-scanner [command] [options]

Options:
  -V, --version         output the version number
  -l --log              Write a debug and dxs output log to ./dxscanner.log
  -h, --help            display help for command

Commands:
  run [options] [path]  Scan your project for possible DX recommendations
  init                  Initialize DX Scanner configuration
  practices [options]   List all practices id with name and impact
  help [command]        display help for command

Aliases:
  dxs
  dxscanner

Options for dx-scanner run

Usage: dx-scanner run [path] [options]

Scan your project for possible DX recommendations

Options:
  -a --authorization <authorization>  credentials to the repository (in format "token" or "username:token"; can be set as ENV variable DXSCANNER_GIT_SERVICE_TOKEN)
  -t --apiToken <apiToken>            credentials to DX Scanner, can be set as ENV variable DXSCANNER_API_TOKEN
  --apiUrl <apiUrl>                   URL of DX Scanner API, can be set as ENV variable DXSCANNER_API_URL (default: https://provider.dxscanner.io/api/v1)
  --ci                                CI mode (default: false)
  -d --details                        print details in reports
  --fail <impact>                     exits process with code 1 for any non-practicing condition of given level (high|medium|small|hint|off|all) (default: "off")
  --fix                               tries to fix problems automatically (default: false)
  --fixPattern <pattern>              fix only rules with IDs matching the regex
  -j --json                           print report in JSON (default: false)
  --html [path]                       save report in HTML file (default: false, default path: ./report.html)
  -r --recursive                      scan all components recursively in all sub folders (default: false)
  --no-recursive                      disable recursive scan in CI mode
  -h, --help                          output usage information

Examples:
  dx-scanner run
  dx-scanner run ./ --fail=high
  dx-scanner run github.com/DXHeroes/dx-scanner

Auto-fixer

Fix problems detected by DX Scanner automatically.

dx-scanner run [PATH] --fix

This will try to fix all fixable practices which are not being practices yet. If you want to omit a practice from automatic fixing, you can do it in the configuration file (see below).

You can also specify fixPattern flag to fix only a subset of fixable practices.

dx-scanner run [PATH] --fix --fixPattern=lint

Please note, that fixPattern flag overrides fix settings from configuration file. Therefore practices omitted from fixing by configuration file, but included through fixPattern will be fixed.

Configuration ⚙️

Add dxscannerrc.* config file to change default configuration settings. It can be a .json, .yml, or even a dotfile!

You can also run dx-scanner init to initialize config automatically.

Practices

You can switch off practices that you do not want to scan, change their impact level, and even override their default values. To do so, refer to the id of the practice and specify your configuration.

Practice | Impact | Language Independent | JavaScript/TypeScript | Java/Kotlin | Python | PHP ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- Create a Readme File | high | ✅ | ✅ | ✅ | ✅ | ✅ Create a Changelog File | high | ✅ | ✅ | ✅ | ✅ | ✅ Create a License File | medium | ✅ | ✅ | ✅ | ✅ | ✅ Create a Lockfile | high | ✅ | ✅ | ✅ | ✅ | ✅ Create a .gitignore | high | ✅ | ✅ | ✅ | ✅ | ✅ Write in Typescript | medium | ❌ | ✅ | ❌ | ❌ | ❌ Set .gitignore Correctly | high | ❌ | ✅ | ✅ | ❌ | ❌ Set Readme File Correctly | high | ✅ | ✅ | ✅ | ✅ | ✅ Use Continuous Integration | high | ✅ | ✅ | ✅ | ✅ | ✅ Use Docker | small | ✅ | ✅ | ✅ | ✅ | ✅ Use .editorconfig | small | ✅ | ✅ | ✅ | ✅ | ✅ Format your code automatically | small | ❌ | ✅ | ❌ | ❌ | ❌ Use a Linter | medium | ❌ | ✅ | ✅ | ✅ | ✅ ESLint Without Errors | medium | ❌ | ✅ | ❌ | ❌ | ❌ Use a different linter | medium | ❌ | ✅ | ❌ | ❌ | ❌ Use JS Frontend Testing Framework | medium | ❌ | ✅ | ❌ | ❌ | ❌ Use JS Frontend Build Tools | medium | ❌ | ✅ | ❌ | ❌ | ❌ Use JS Backend Testing Frameworks | high | ❌ | ✅ | ❌ | ❌ | ❌ Use a JS Logging Library | small | ❌ | ✅ | ❌ | ❌ | ❌ Use Package Management | high | ❌ | ✅ | ✅ | ❌ | ❌ Configure Scripts in package.json | medium | ❌ | ✅ | ❌ | ❌ | ❌ Update Dependencies of Major Level | small | ❌ | ✅ | ✅ | ❌ | ❌ Update Dependencies of Minor and Patch Level | high | ❌ | ✅ | ✅ | ❌ | ❌ Do PullRequests | medium | ✅ | ✅ | ✅ | ✅ | ✅ Break down large pull requests into smaller ones | medium | ✅ | ✅ | ✅ | ✅ | ✅ Solve Pull Requests Continuously | medium | ✅ | ✅ | ✅ | ✅ | ✅ Solve Issues Continuously | medium | ✅ | ✅ | ✅ | ✅ | ✅ Write Commit Messages by Convention | small | ✅ | ✅ | ✅ | ✅ | ✅ Use Mocking Frameworks for Tests | small | ❌ | ✅ | ✅ | ❌ | ❌ Use Testing Frameworks | high | ❌ | ❌ | ✅ | ❌ | ❌ Use a Java Logging Dependency | small | ❌ | ❌ | ✅ | ❌ | ❌ Use Java Class Naming Convention | small | ❌ | ❌ | ✅ | ❌ | ❌ Specify Versions of Dependencies | high | ❌ | ❌ | ✅ | ❌ | ❌ Store Environment Variables Using .properties Files | medium | ❌ | ❌ | ✅ | ❌ | ❌ Use Java Code Styles | small | ❌ | ❌ | ✅ | ❌ | ❌ Use Java Logger Configuration Files | small | ❌ | ❌ | ✅ | ❌ | ❌ Security vulnerabilities detected | high | ❌ | ✅ | ❌ | ❌ | ❌

Possible impact:

high

medium

small

hint

off

Example dxscannerrc.json:

{
    "practices": {
        "JavaScript.GitignoreCorrectlySet": "medium",
        "JavaScript.LoggerUsed": "off",
        "LanguageIndependent.DoesPullRequests": {
          "impact": "small"
        },
        "JavaScript.ESLintWithoutErrorsPractice": {
          "fix": true,
          "override": {
            "lintFilesPatterns": [".internal/**/*.js", "*.js"],
            "ignorePatterns": []
          }
        },
        "LanguageIndependent.ThinPullRequestsPractice": {
          "impact": "high",
          "override": {
            "measurePullRequestCount": 500
          }
        }
    }
}

In order to override the default values of certain practices, specify override and nest the correct overridable variables.

Example dxscannerrc.yaml:

---
practices:
  JavaScript.GitignoreCorrectlySet: medium
  JavaScript.LoggerUsed: 'off'
  LanguageIndependent.DoesPullRequests:
    impact: small
  JavaScript.ESLintWithoutErrorsPractice:
    fix: true
    override:
      lintFilesPatterns: ['.internal/**/*.js', '*.js']
      ignorePatterns: []
  LanguageIndependent.ThinPullRequestsPractice:
    impact: high
    override:
      measurePullRequestCount: 500

CI Mode

When running DX Scanner with --ci flag, it runs in CI Mode. In CI Mode, DX SCanner uses CIReporter for its output and runs recursively by default (i.e. the --recursive flag is turned on).

If you want to disable recursive scan in CI mode, use the --no-recursive flag.

Github CI Action

Basic example: run DX Scanner on each push to the repo

Create .github/workflows/main.yml.

name: DX Scanner
on: push
jobs:
  dx-scanner:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Runs DX Scanner on the code
        uses: DXHeroes/dx-scanner@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

Generate your Github personal token and set it as an encrypted secret named GITHUB_TOKEN.

Score Computation 💯

The impact of each practice is represented by a specific value. DX Scanner uses these values to calculate the overall DX Score.

high = 100 points

medium = 75 points

small = 50 points

hint = 25 points

The practices you have switched off are not included in the calculation (0 points).

Support 🦸‍♀️ 🦸‍♂️

Didn't you find what you expected? Contact us via our public Slack!

Contributing 👩‍💻 👨‍💻

Feel free to contribute to our DX Scanner. Please follow the Contribution Guide.

Roadmap

See our public roadmap.

License 📝

The DX Scanner open source project is licensed under the MIT.

Contributors ✨

Many thanks to these wonderful people (emoji key):

This project follows the all-contributors specification. Any kind of contributions are welcome!