Code Monkey home page Code Monkey logo

lighthouse-ci's Introduction

Lighthouse CI

Build Status All Contributors npm version npm Known Vulnerabilities Commitizen friendly XO code style

A useful wrapper around Google Lighthouse CLI

NOTE

Node v12 is now the minimum required version starting from Lighthouse CI v.1.13.0

Lighthouse CI logo

Install

$ npm install -g lighthouse-ci

Table of Contents

Usage

lighthouse-ci --help

CLI

$ lighthouse-ci --help

  Usage
    $ lighthouse-ci <target-url>

  Example
    $ lighthouse-ci https://example.com
    $ lighthouse-ci https://example.com -s
    $ lighthouse-ci https://example.com --score=75
    $ lighthouse-ci https://example.com --accessibility=90 --seo=80
    $ lighthouse-ci https://example.com --accessibility=90 --seo=80 --report=folder
    $ lighthouse-ci https://example.com --report=folder --config-path=configs.json

  Options
    -s, --silent                    Run Lighthouse without printing report log
    --report=<path>                 Generate an HTML report inside a specified folder
    --filename=<filename>           Specify the name of the generated HTML report file (requires --report)
    -json, --jsonReport             Generate JSON report in addition to HTML (requires --report)
    --config-path                   The path to the Lighthouse config JSON (read more here: https://github.com/GoogleChrome/lighthouse/blob/master/docs/configuration.md)
    --budget-path                   The path to the Lighthouse budgets config JSON (read more here: https://developers.google.com/web/tools/lighthouse/audits/budgets)
    --score=<threshold>             Specify a score threshold for the CI to pass
    --performance=<threshold>       Specify a minimal performance score for the CI to pass
    --pwa=<threshold>               Specify a minimal pwa score for the CI to pass
    --accessibility=<threshold>     Specify a minimal accessibility score for the CI to pass
    --best-practice=<threshold>     [DEPRECATED] Use best-practices instead
    --best-practices=<threshold>    Specify a minimal best-practice score for the CI to pass
    --seo=<threshold>               Specify a minimal seo score for the CI to pass
    --fail-on-budgets               Specify CI should fail if budgets are exceeded
    --budget.<counts|sizes>.<type>  Specify individual budget threshold (if --budget-path not set)

  In addition to listed "lighthouse-ci" configuration flags, it is also possible to pass any native "lighthouse" flag
  To see the full list of available flags, please refer to the official Google Lighthouse documentation at https://github.com/GoogleChrome/lighthouse#cli-options

Lighthouse flags

In addition to listed lighthouse-ci configuration flags, it is also possible to pass any native lighthouse flags.

To see the full list of available flags, please refer to the official Google Lighthouse documentation.

eg.

# Launches browser, collects artifacts, saves them to disk (in `./test-report/`) and quits
$ lighthouse-ci --gather-mode=test-report https://my.website.com
# skips browser interaction, loads artifacts from disk (in `./test-report/`), runs audits on them, generates report
$ lighthouse-ci --audit-mode=test-report https://my.website.com

Chrome flags

In addition of the lighthouse flags, you can also specify extra chrome flags comma separated.

eg.

$ lighthouse-ci --chrome-flags=--cellular-only,--force-ui-direction=rtl https://my.website.com

eg.

$ lighthouse-ci --emulated-form-factor desktop --seo 92 https://my.website.com

Configuration

Lighthouse CI allows you to pass a custom Lighthouse configuration file. Read Lighthouse Configuration to learn more about the configuration options available.

Just generate your configuration file. For example this config.json

{
  "extends": "lighthouse:default",
  "audits": [
    "user-timings",
    "critical-request-chains"
  ],

  "categories": {
    "performance": {
      "name": "Performance Metrics",
      "description": "Sample description",
      "audits": [
        {"id": "user-timings", "weight": 1},
        {"id": "critical-request-chains", "weight": 1}
      ]
    }
  }
}

Then run Lighthouse CI with the --config-path flag

$ lighthouse-ci https://example.com --report=reports --config-path=config.json

The generated report inside reports folder will follow the custom configuration listed under the config.json file.

Budgets

Lighthouse CI allows you to pass a budget configuration file (see Lighthouse Budgets). There are several options to pass a budget config:

Option 1.

Add configurations to your config.json file like and use instructions above.

{
  "extends": "lighthouse:default",
  "settings": {
    "budgets": [
      {
        "resourceCounts": [
          { "resourceType": "total", "budget": 10 },
        ],
        "resourceSizes": [
          { "resourceType": "total", "budget": 100 },
        ]
      }
    ]
  }
}

Option 2.

Generate budget.json with content like:

[
  {
    "resourceCounts": [
      { "resourceType": "total", "budget": 10 },
    ],
    "resourceSizes": [
      { "resourceType": "total", "budget": 100 },
    ]
  }
]

Then run Lighthouse CI with the --budget-path flag

$ lighthouse-ci https://example.com --report=reports --budget-path=budget.json

Option 3.

Pass individual parameters via CLI

$ lighthouse-ci https://example.com --report=reports --budget.counts.total=20  --budget.sizes.fonts=100000

Performance Budget

Performance budgets can be specified inside your [budget configuration file)(#budgets).

You can specify any available performance budget like in the following example

[
  {
    "path": "/*",
    "resourceSizes": [
      {
        "resourceType": "script",
        "budget": 400000
      },
      {
        "resourceType": "total",
        "budget": 5050
      }
    ],
    "resourceCounts": [
      {
        "resourceType": "total",
        "budget": 95
      },
      {
        "resourceType": "third-party",
        "budget": 55
      }
    ]
  }
]

Timing Budget

Timing budgets can be specified inside your [budget configuration file)(#budgets).

You can specify any available timing budget like in the following example

[
  {
    "path": "/*",
    "timings": [
      {
        "metric": "interactive",
        "budget": 100
      },
      {
        "metric": "first-meaningful-paint",
        "budget": 100
      }
    ]
  }
]

Codechecks

You can now easily integrate Lighthouse-CI as part of your automated CI with codechecks.io.

Running Lighthouse-CI with Codechecks

$ npm install --save-dev @codechecks/client @codechecks/lighthouse-keeper

Now, create a codechecks.yml (json is supported as well) file required for codechecks to automatically run against your project.

codechecks.yml:

checks:
  - name: lighthouse-keeper
    options:
      # just provide path to your build
      buildPath: ./build
      # or full url
      # url: https://google.com
  # ...

Read more from the official documentation from https://github.com/codechecks/lighthouse-keeper.

Read more about Codechecks on the official project website

Demo App

This project contains a demo folder where a project as been created for demo purposes only. Once inside the demo folder, if you have Docker installed on your machine, you can simply launch the demo app inside a Docker container with make demo.

If you just want to run the demo locally, make sure to install the node dependencies first with npm install, then run the demo with:

$ npm start

How to

Test a page that requires authentication

By default lighthouse-cli is just creating the report against a specific URL without letting the engineer to interact with the browser. Sometimes, however, the page for which you want to generate the report, requires the user to be authenticated. Depending on the authentication mechanism, you can inject extra header information into the page.

lighthouse-ci https://example.com --extra-headers=./extra-headers.js

Where extra-headers.json contains:

module.exports = {
  Authorization: 'Bearer MyAccessToken',
  Cookie: "user=MySecretCookie;"
};

Wait for post-load JavaScript to execute before ending a trace

Your website might require extra time to load and execute all the JavaScript logic. It is possible to let LightHouse wait for a certain amount of time, before ending a trace, by providing a pauseAfterLoadMs value to a custom configuration file.

eg.

lighthouse-ci https://example.com --config-path ./config.json

Where config.json contains:

{
  "extends": "lighthouse:default",
  "passes": [{
    "recordTrace": true,
    "pauseAfterLoadMs": 5000,
    "networkQuietThresholdMs": 5000
  }]
}

Contributors

Thanks goes to these wonderful people (emoji key):


Andrea Sonny

πŸ’¬ πŸ’» πŸ“–

Celso Santa Rosa

πŸ’»

Ben Hammond

πŸ› πŸ’»

Alex Tenepere

πŸ› πŸ’»

Michael Griffiths

πŸ’»

Connor Markwell

πŸ’»

Sebastian Engel

πŸ› πŸ’»

Alex Smagin

πŸ’» πŸ€”

Marc Schaller

πŸ› πŸ’»

RΓ©mi Perrot

πŸ› πŸ’»

This project follows the all-contributors specification. Contributions of any kind welcome!

License

MIT


Created with πŸ¦„ by andreasonny83

lighthouse-ci's People

Contributors

abraham avatar alexecus avatar andreasonny83 avatar asmagin avatar benahammond avatar celsosantarosa avatar cmarkwell avatar dependabot[bot] avatar ikigeg avatar marcschaller avatar paulirish avatar pnavarrc avatar remi-p avatar snyk-bot avatar starrett67 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

lighthouse-ci's Issues

No summary table

I might be missing something but I do not get the summary table shown in the README cast:

Instead all I get is this:

$ lighthouse-ci http://apache/
All checks are passing. πŸŽ‰

Also I always get a failure, even with a score of 1:

 lighthouse-ci --score=1 http://apache/
Failed. ❌

Error: lighthouse-ci test failed.

(Here http://apache/ is the internal host name of an Apache service within a Docker network.)

Strangely this seems to work fine for public URLs:

$ lighthouse-ci https://example.org
performance: 100
accessibility: 88
best-practices: 100
seo: 90
pwa: 48
All checks are passing. πŸŽ‰

Is there a way to enable some verbose mode to see what happens internally?

dont hard code report.html

Hello, thanks for the lib !

would it be possible to allow choosing the name of the html report ?
currently it is hard coded to report.html

thanks

Would you consider supporting lighthouse plugins?

Hi there,

I'm working on a lighthouse plugin, which checks the domain for every resources requested on a page, against a database that tells if you if they run on renewable energy, to give a score out of a hundred, like so if you have a clean sheet.

It's called greenhouse (lighthouse, but green… geddit?) and when it works, it looks like this:

Screenshot 2019-08-06 at 20 19 47

Making it work with lighthouse CI

I want to make this work with Lighthouse CI, so anyone using lighthouse CI can also run these checks - I figure if you're working in field like web development, it's reasonable you might think that science, and in particular the science around climate change is worth doing something about.

However, when I run lighthouse-ci, and pass in a plugins flag, like so:

npx lighthouse-ci http://google.com --plugins=lighthouse-plugin-greenhouse

I get an error along the lines of:

Error: plugin name 'l' does not start with 'lighthouse-plugin-'

I think this because in launchChromeAndRunLighthouse, when we pass in the lighthouse native plugins, lighthouse is expecting an array for the plugins flag:

const flags = {
    port: chrome.port,
    output: 'json',
    ...lighthouseFlags,
  };

I've been able to fix this in a test with a very naive snippet of code (don't worry, I'll totally change this to be less janky),

const checkFlagsForPlugins = obj => {
  if (obj['plugins']) {
    obj.plugins = [obj.plugins]
  }
  return obj
}

But before I tidy up the change up into a pull request, I figure it's worth asking, as I think I need a few pointers for making the PR support plugins properly in lighthouse CI.

You can see the output at the bottom in my working branch, where the name of the plugin is used verbatim, and it would be nice to give a nicer one, as lighthouse enforces a naming convention in the plugin name, which you see below:

Running Lighthouse on http://google.com ...
performance: 86
accessibility: 78
best-practices: 79
seo: 92
pwa: 48
lighthouse-plugin-greenhouse: 100
All checks are passing. πŸŽ‰

It's not just my plugin that would benefit from this. There's another plugin that works by checking your site against a sample of real world usage too, that this would enable:

https://github.com/treosh/lighthouse-plugin-field-performance

Getting some pointers:

So, here are my questions:

  • is I've added a plugin adapter in the helpers file in the PR - I'll tidy up the code in a bit, but is this an okay place to put it
  • it would be good to support a more sensible name than lighthouse-plugin for plugin names
  • if I wanted to support setting budgets for plugins in future, where would I look to see what to extend to support?

Here's the corresponding pull request for this issue:

#51

Is there a way to change the name of the report files?

I was trying to write an HTML report with a specific name (I was trying to output reports for multiple sites in the same directory, but they overwrite each other).

I tried using lighthouse-ci www.example.com --report=./reports/homepage.html, but --report wants a directory, not a filename.

So then I tried to do it as I would in lighthouse: lighthouse-ci www.example.com --report=. --output-path ./homepage.html, but that didn't change the file name, either.

Any help would be much appreciated. Thanks for making this great utility.

Allow custom lighthouse configuration file

I'd like to make a feature request to allow this tool to pass through some configuration options to lighthouse itself. I think the easiest way would be just allow the --config-path flag to pass to lighthouse.

For example we want to optimize some of our tests in lighthouse so we use the --gather-mode to collect artifacts from a connected browser and save to disk first. Then we run our audits against that saved collection. We run a lot of different tests as part of our build in different phases and this saves us from having to download the site pages over and over again.

Anyways let me know if you're interested in this type of functionality. I can likely write a patch to have it do so.

Thanks!

lighthouse flag ignored

Dear maintainers, I'm trying to set up my performance budgets, and the native --budget-path=lh/budget.json flag doesn't seem to be passed to Lighthouse.

Repro steps:

lighthouse-ci --budget-path=lh/budget.json https://preply.com/en/teach --report=lh

or as well

lighthouse-ci https://preply.com/en/teach --budget-path=lh/budget.json --report=lh

Expected result:
lh/report.html containing section "Budgets β€”Β Performance budgets set standards for the performance of your site", similarly to what calling bare Lighthouse returns:

lighthouse https://preply.com/en/teach --budget-path=lh/budget.json --output-path=lh/report.html

Actual result:
No occurrences of "budget" in the report.

Please tell me if I can provide you with any additional info. I did read #19, but it didn't help.

Error on Jenkins, Protocol error (Fetch.disable)

I ran npx lighthouse-ci https://medium.com on a Jenkins pipeline but threw the next error.

- Running Lighthouse on https://www.medium.com ...

Error: Protocol error (Fetch.disable): 'Fetch.disable' wasn't found
Error: exec: - Running Lighthouse on https://www.medium.com ...

When I downgrade the version, the error is not happening.

Can you help with this?

TypeError: categoryIds.forEach is not a function

Hello there πŸ‘‹

I'm getting TypeError: categoryIds.forEach is not a function when I try to use the --only-categories flag:

lighthouse-ci https://jeffochoa.me --only-categories=seo,performance,accessibility,best-practices

Any Ideas?

v1.10.3 failed

Since I update to 1.10.3, it failed

- Running Lighthouse on https://www.google.com ...

TypeError: Found non-callable @@iterator

remove snyk as a direct project dependency

Snyk as a direct dependency brings in a whole slew of stuff that you likely don't want in a production bundle tree. Suggest moving it to devDependencies so it doesn't get published to npm.

7b74e4c

I'm not sure why snyk applies itself as a production dependency...

Lighthouse CLI args are not the same as config flags

Hey everyone, as i mentioned at the PR#19 I can't properly pass some flags to lighthouse simply because the CLI has different arguments than the programmatic approach eg. cli has an option
--presets but programmatic does not have this option and uses something called onlyCategories or onlyAudits, which is an array of strings.

This can be achieved with an external config mentioned here, it's probably a good idea to mention this in the docs.

Edit: after some investigation the CLI flag for the config file is ignored

LHError: CRI_TIMEOUT

I'm currently getting the following error when running lighthouse-ci.

Error:

- Running Lighthouse on <THIS IS THE STAGING URL> ...

LHError: CRI_TIMEOUT
ERROR: Job failed: command terminated with exit code 1

Command:

lighthouse-ci $STAGING_URL --score=$LIGHTHOUSE_SCORE --report=./ --filename=lighthouse.html

Any idea what's going on here?
I'm running it on the docker image browserless/chrome

Error: Cannot find module 'lighthouse/report/report-generator'

Just after installing lh-ci under node v16.2.0 npm install -g lighthouse-ci@1, I got this error:

lighthouse-ci --help  
node:internal/modules/cjs/loader:944
  throw err;
  ^

Error: Cannot find module 'lighthouse/report/report-generator'
Require stack:
- /Users/tmolin/.nvm/versions/node/v16.2.0/lib/node_modules/lighthouse-ci/lib/lighthouse-reporter.js
- /Users/tmolin/.nvm/versions/node/v16.2.0/lib/node_modules/lighthouse-ci/bin/cli.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:941:15)
    at Function.Module._load (node:internal/modules/cjs/loader:774:27)
    at Module.require (node:internal/modules/cjs/loader:1013:19)
    at require (node:internal/modules/cjs/helpers:93:18)
    at Object.<anonymous> (/Users/tmolin/.nvm/versions/node/v16.2.0/lib/node_modules/lighthouse-ci/lib/lighthouse-reporter.js:13:25)
    at Module._compile (node:internal/modules/cjs/loader:1109:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1138:10)
    at Module.load (node:internal/modules/cjs/loader:989:32)
    at Function.Module._load (node:internal/modules/cjs/loader:829:14)
    at Module.require (node:internal/modules/cjs/loader:1013:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/Users/tmolin/.nvm/versions/node/v16.2.0/lib/node_modules/lighthouse-ci/lib/lighthouse-reporter.js',
    '/Users/tmolin/.nvm/versions/node/v16.2.0/lib/node_modules/lighthouse-ci/bin/cli.js'
  ]
}

Downgrading to v1.12.0 is fine, but is there a workaround / fix 🀷

can not runing in node 8

lighthouse-ci engines >=6, but lighthouse need engines >=10.13.

so when i use node v8.9.4, i can success install lighthouse-ci, but i can't run it.

image

jenkins@c76f8d0afa9d:~/a$ ./node_modules/.bin/lighthouse-ci --help
/home/jenkins/a/node_modules/lighthouse/lighthouse-core/lib/url-shim.js:36
class URLShim extends URL {
                      ^

ReferenceError: URL is not defined
    at Object.<anonymous> (/home/jenkins/a/node_modules/lighthouse/lighthouse-core/lib/url-shim.js:36:23)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/home/jenkins/a/node_modules/lighthouse/lighthouse-core/lib/network-request.js:14:13)
    at Module._compile (module.js:643:30)

https://github.com/andreasonny83/lighthouse-ci/blob/v1.10.0/package.json#L46-L48

image


https://github.com/GoogleChrome/lighthouse/blob/master/package.json#L10-L12

image

https://github.com/GoogleChrome/lighthouse/blob/master/lighthouse-core/lib/url-shim.js#L35-L36

image

Format task

Add a format script into the package.json file to automatically format all the JavaScript files before releasing a new version.

TypeError: Cannot read property 'split' of undefined

I've upgraded to v1.4.0 but now I'm getting the error TypeError: Cannot read property 'split' of undefined and the test aborts.

Im running this:

npx lighthouse-ci --performance=85 --accessibility=70 --best-practices=80 --seo=95 --report=./ https://example.org

When I add an empty --chrome-flags= parameter it works.

Return non-zero exit code on failure

Thanks for your great package! I was putting it through its paces and noticed that cli.js does not return a non-zero exit code when a test does not pass. It does explicitly return 0 when it succeeds. I'm not sure if this is by design, but many CI tools return 1 to indicate failure of a job.

My suggestion would be to add return process.exit(1) when the promise in cli.js rejects (possibly here

Update Notifier

Implement update-notifier to get newer version notifications

LightHouse CI unable to audit sites with a broken SSL certificate.

When a web page is on an https URL with an invalid SSL certificate lighthouse ci generates a report file with the following message.

There were issues affecting this run of Lighthouse:
Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests. net::ERR_CERT_AUTHORITY_INVALID.

Is there a way to tell lighthouse to ignore the SSL issues and continue loading the page?
image

Unable to generate report

Hi - I can't seem to generate a report from lighthouse-ci, I'm passing the report and filename flag (and I've also tried it without the filename flag) when I run it, it tells me the that file or directory doesn't exist:
image
is there something that I'm missing? thanks!

npm audit (Prototype Pollution vulnerabilities )

I am using lighthouse-ci v-1.10.0
getting following vulnerabilities
not able to resolve it with npm-audit-fix

β”‚ Low           β”‚ Prototype Pollution                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Package       β”‚ minimist                                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Patched in    β”‚ >=0.2.1 <1.0.0 || >=1.2.3                                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Dependency of β”‚ lighthouse-ci [dev]                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Path          β”‚ lighthouse-ci > chrome-launcher > mkdirp > minimist          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ More info     β”‚ https://npmjs.com/advisories/1179                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Low           β”‚ Prototype Pollution                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Package       β”‚ minimist                                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Patched in    β”‚ >=0.2.1 <1.0.0 || >=1.2.3                                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Dependency of β”‚ lighthouse-ci [dev]                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Path          β”‚ lighthouse-ci > lighthouse > chrome-launcher > mkdirp >      β”‚
β”‚               β”‚ minimist                                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ More info     β”‚ https://npmjs.com/advisories/1179                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Low           β”‚ Prototype Pollution                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Package       β”‚ minimist                                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Patched in    β”‚ >=0.2.1 <1.0.0 || >=1.2.3                                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Dependency of β”‚ lighthouse-ci [dev]                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Path          β”‚ lighthouse-ci > lighthouse > mkdirp > minimist               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ More info     β”‚ https://npmjs.com/advisories/1179                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Low           β”‚ Prototype Pollution                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Package       β”‚ yargs-parser                                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Patched in    β”‚ >=13.1.2 <14.0.0 || >=15.0.1 <16.0.0 || >=18.1.2             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Dependency of β”‚ lighthouse-ci [dev]                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Path          β”‚ lighthouse-ci > lighthouse > yargs-parser                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ More info     β”‚ https://npmjs.com/advisories/1500                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Low           β”‚ Prototype Pollution                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Package       β”‚ yargs-parser                                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Patched in    β”‚ >=13.1.2 <14.0.0 || >=15.0.1 <16.0.0 || >=18.1.2             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Dependency of β”‚ lighthouse-ci [dev]                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Path          β”‚ lighthouse-ci > meow > yargs-parser                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ More info     β”‚ https://npmjs.com/advisories/1500                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜```

Error: connect ECONNREFUSED 127.0.0.1:

Receiving a Error: connect ECONNREFUSED 127.0.0.1:##### message when I attempt to run a lighthouse-ci test on my Windows machine. When I run regular lighthouse I do not have any issues. Was hoping you could help me. Not sure if it's a chrome flag in the config or what...

[URL validation bug] : url's without 'http'/'https' returns LHError

Description

The default cmd lighthouse-ci <URL> only returns score(s) when the URL is totally validated. But returns LHError when a non-validated URL is passed as an input.

What is the current behavior?

  • For example, let's say if you try,
lighthouse-ci https://neilblaze.live

it'll pass all the checks & return the successful response with the metrics. But, if you try this,

lighthouse-ci neilblaze.live

it'll return LHError! ⚠️

recording

Checks out, it does work with validated sub-domains too, but not with the unvalidated ones.

  • Even, if you exclude 'www', it returns the same (LHError).

image

image

⚠️ Note : Subdomains don't work with "www" prepended! This test was done for example purposes.

  • I'm submitting a ...

    • bug report
    • feature request
    • support request
  • What is the expected behavior?

The non-validated URL's should auto-converted into valid ones to make the check pass & return the metrics. I did explore the codebase & I'm trying to figure out where from the cmd-line input is being taken as a string.

I'm suggesting a method as follows,

rootStatement = "Lorem ipsum dolor sit amet, magna aliqua. Visit www.neilblaze.live for regular updates. Duis aute irure $ dolor in cupidatat @ non proident.";

// πŸ’‘ rootStatement is the dummy input 

function detectURLs(message) {
  var urlRgx = /(((https?:\/\/)|(www\.))[^\s]+)/g;
  // ⚠️ url check without http/https & www is also possible, but in that case, it'll only work with TLD's, hence ignored
  return message.match(urlRgx)
}
 
link = detectURLs(rootStatement); // Old URL
linkx = (link.indexOf('://') === -1) ? 'http://' + link : link; // http is auto redirected to https if SSL enabled

// Now replacing the new URL (with all validation check parameters) in the place of the URL string (without parameters)

finalLink = rootStatement.replace(link, linkx);
// console.log(finalLink) // Debug purposes

From here, we just need to pass the finalLink into the root πŸš€

  • What is the motivation / use case for changing the behavior?
    I personally use this project a lot & I want to improve the overall experience πŸ˜„

  • Please tell us about your environment:

    • Browser: Chrome [Version 96.0.4664.110 (Official Build) (64-bit)]
    • OS : Windows 10 [64bit]

lighthouse-ci doesn't explain why it failed

Hi, thanks for this great tool!

lighthouse-ci doesn't explain why it failed

accessibility: 92
best-practices: 86
seo: 100
pwa: 77
Failed. ❌

Error: lighthouse-ci test failed.

It would be nice to output per line failed assertions, e.g. failed due to pwa < 80

Error: No Chrome installations found.

G'Day @andreasonny83

First of all got big ❀️for lighthouse-ci and I think this is an awesome service when I just wanna do a quick audit with no fuss πŸ‘

However today when I ran it I got some strange results:
screenshot error

I ran some checks on my end, which looked alrite. I have chrome installed (both standard and canary) πŸ˜„ But of course there might be something I overlooked or something that's not working properly on your end.

Was wondering if you could point me in the right direction?

Have an awesome day!
/2lach

My specs:
screenfetch
also I don't know if it would matter, but I did make the mistake of upgrading to Catalina 😞

When lighthouse cannot reach site, lighthouse-ci reports all tests passing

What happens
Here's what lighthouse-ci generates:
image

Here's what lighthouse cli generates from the same site.

lighthouse http://local.mysite.org
  ...
Runtime error encountered: Lighthouse was unable to reliably load the page you requested. Make sure you are testing the correct URL and that the server is properly responding to all requests. (Status code: 503)

What should happen
If lighthouse returns a 503, lighthouse-ci should report a fail, or fail all tests.

Failing when scores = 100

Hi Andrea, thank you so much for this package! it is incredibly useful :)

Just noticed something using this, see the below scenario:

screen shot 2018-09-30 at 13 01 16

Found that if i changed this file /lib/cli.js:113

to the following:

let thresholds = scoreReducer(cli.flags, getScores());
thresholds = 0 === Object.keys(thresholds).length ? {score:100} : thresholds;

then i get the following:

screen shot 2018-09-30 at 13 07 30

So it seems like when no flags are passed, the thresholds object is empty, and thus skips past this check (because the thresholds object is actual empty):

    if (thresholds && Object.keys(thresholds).length !== 0) {
      const isScorePassing = analizeScore(categoryReport, thresholds);

      if (isScorePassing) {
        console.log(chalk.green('All checked scores are passing. πŸŽ‰\n'));
        return process.exit(0);
      }
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.