0.7.69 • Published 26 days ago

@qualweb/core v0.7.69

Weekly downloads
338
License
ISC
Repository
github
Last release
26 days ago

QualWeb core

The core allows you to perform automatic accessibility evaluations on web pages. It contains 3 evaluation modules:

You can also perform evaluations at http://qualweb.di.fc.ul.pt/evaluator/, or by installing the chrome extension.

How to install

  $ npm i @qualweb/core --save

How to run

  'use strict';

  const { QualWeb, generateEARLReport } = require('@qualweb/core');

  (async () => {
    const plugins = {
      // Check https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-adblocker
      adBlock: true, // Default value = false
      // Check https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth
      stealth: true // Default value = false
    };
    const qualweb = new QualWeb(plugins);

    const clusterOptions = {
      maxConcurrency: 5, // Performs several urls evaluations at the same time - the higher the number given, more resources will be used. Default value = 1
      timeout: 60 * 1000, // Timeout for loading page. Default value = 30 seconds
      monitor: true // Displays urls information on the terminal. Default value = false
    };

    const launchOptions = {
      ... // check https://github.com/puppeteer/puppeteer/blob/v10.1.0/docs/api.md#puppeteerlaunchoptions
      // In most cases there's no need to give additional options. Just leave the field undefined
    };

    // Starts the QualWeb core engine
    await qualweb.start(clusterOptions, launchOptions);

    // QualWeb evaluation report
    const qualwebOptions = {
      url: 'https://act-rules.github.io/pages/about/',
      ...
    };

    // Evaluates the given options - will only return after all urls have finished evaluating or resulted in an error
    const reports = await qualweb.evaluate(qualwebOptions);

    console.log(reports);
    //  {
    //    "url": "report",
    //    "url2": "report2"
    //  }

    // Stops the QualWeb core engine
    await qualweb.stop();

    const earlOptions = {
      // Check the options in the section below
    };

    // if you want an EARL report
    const earlReports = generateEARLReport(reports, earlOptions);

    console.log(earlReports);
    //  {
    //    "url": "earlReport",
    //    "url2": "earlReport2"
    //  }
  })();

Options

The available options fot the evaluate() function are:

{
  "url": "https://act-rules.github.io/pages/about/", // url to evaluate
  "urls": ["https://act-rules.github.io/pages/about/", "https://act-rules.github.io/rules/"], // Array of urls
  "file": "/path/to/file/with/urls", // urls must be separated by a newline (\n)
  "crawl": "https://act-rules.github.io", // Domain to crawl and obtain the urls
  "html": "<html-code>", // Full webpage html, or just small snippets
  "log": {
    "file": true, // Logs errors to a file. Default value = false
    "console": false // Logs errors to the console. Default value = false
  },
  "viewport": {
    "mobile": false, // default value = false
    "landscape": true, // default value = viewPort.width > viewPort.height
    "userAgent": "custom user agent", // default value for desktop = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0', default value for mobile = 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; DROID2 GLOBAL Build/S273) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'
    "resolution": {
      "width": 1920, // default value for desktop = 1366, default value for mobile = 1080
      "height": 1080 // default value for desktop = 768, default value for mobile = 1920
    }
  },
  "waitUntil": ["load", "networkidle0"], // Events to wait before starting evaluation, default value = "load". For more check https://github.com/puppeteer/puppeteer/blob/v10.1.0/docs/api.md#pagegotourl-options
  "validator": "http://127.0.0.1/validate", // HTML validator service endpoint. The url will be attached after of the given endpoint
  "crawlOptions": {
    "maxDepth": 2, // max depth to search, 0 to search only the given domain. Default value = -1 (search everything)
    "maxUrls": 100, // max urls to find. Default value = -1 (search everything)
    "timeout": 60, // how many seconds the domain should be crawled before it ends. Default value = -1 (never stops)
    "maxParallelCrawls": 10, // max urls to crawl at the same time. Default value = 5
    "logging": true // logs domain, current depth, urls found and time passed to the terminal
  },
  "translate": "en", // OR { "translate": "en", "fallback": "en" } OR { own translation object } check https://github.com/qualweb/locale#readme. Default = "en"
  "execute": {
    // choose which modules to execute
    // if this option is not specified, the default values below will be applied, otherwise unspecified values will default to false
    "wappalyzer": false, // wappalyzer module (https://github.com/qualweb/wappalyzer)
    "act": true, // act-rules module (https://github.com/qualweb/act-rules)
    "wcag": true, // wcag-techniques module (https://github.com/qualweb/wcag-techniques)
    "bp": false, // best-practices module (https://github.com/qualweb/best-practices)
    "counter": false // counter module (https://github.com/qualweb/counter)
  },
  "act-rules": {
    // More information about this options at https://github.com/qualweb/act-rules
    "rules": ["QW-ACT-R1", "b5c3f8"], // Array of rules to execute, can be passed the QualWeb Rule ID or the ACT Rule ID
    "exclude": ["QW-ACT-R1", "b5c3f8"], // Array of rules to exclude, can be passed the QualWeb Rule ID or the ACT Rule ID
    "levels": ["A", "AA", "AAA"], // Conformance levels to execute,
    "principles": ["Perceivable", "Operable", "Understandable", "Robust"] // Principles to execute
  },
  "wcag-techniques": {
    // More information about this options at https://github.com/qualweb/wcag-techniques
    "techniques": ["QW-WCAG-T1", "H39"], // Array of techniques to execute, can be passed the QualWeb Technique ID or the WCAG 2.1 Technique Code
    "exclude": ["QW-WCAG-T1", "H39"], // Array of techniques to exclude, can be passed the QualWeb Technique ID or the WCAG 2.1 Technique Code
    "levels": ["A", "AA", "AAA"], // Conformance levels to execute,
    "principles": ["Perceivable", "Operable", "Understandable", "Robust"] // Principles to execute
  },
  "best-practices": {
    // More information about this options at https://github.com/qualweb/best-practices
    "bestPractices": ["QW-BP1", "QW-BP2"], // Array of best practices to execute
    "exclude": ["QW-BP1", "QW-BP2"] // Array of best practices to exclude
  }
}

The available options fot the generateEARLReport() function are:

{
  "aggregated": true, // default value = false
  "aggregatedName": "websites.json", // The name to save the aggregated earl reports. default value = first url of the list
  "modules": {
    // Choose which modules to convert the report to earl, by default all modules are converted if they were executed
    "act": true, // default value = true
    "wcag": false, // default value = true
    "best-practices": false // default value = true
  } // If the "modules" value is given, any missing module value missing it's automatically set to false
}

Report details

In this section it's explained the evaluation report in detail. For a detailed version of the EARL report check @qualweb/earl-reporter.

  {
    "type": "evaluation",
    "system": {
      "name": "QualWeb",
      "description": "QualWeb is an automatic accessibility evaluator for webpages.",
      "version": "QualWeb version",
      "homepage": "http://www.qualweb.di.fc.ul.pt/",
      "date": "date of the evaluation",
      "hash": "unique hash",
      "url": {
        "inputUrl": "inserted url",
        "protocol": "protocol of the url",
        "domainName": "domain name of the url",
        "domain": "domain of the url",
        "uri": "uri of the url",
        "completeUrl": "complete url after all redirects"
      },
      "page": {
        "viewport": {
          "mobile": "was evaluated on a mobile context or not",
          "landscape": "was evaluated on a landscape context or not",
          "userAgent": "user agent used",
          "resolution": {
            "width": "window's width used",
            "height": "window's height used",
          }
        },
        "dom": {
          "html": "html code as a string",
          "title": "Title of the webpage",
          "elementCount": "Element count of the webpage"
        }
      }
    },
    "metadata": {
      "passed": "number of passed rules/techniques/best practices",
      "warning": "number of warning rules/techniques/best practices",
      "failed": "number of failed rules/techniques/best practices",
      "inapplicable": "number of inapplicable rules/techniques/best practices",
    },
    "modules": {
      "act-rules": {
        "type": "act-rules",
        "metadata": {
          "passed": "number of passed rules",
          "warning": "number of warning rules",
          "failed": "number of failed rules",
          "inapplicable": "number of inapplicable rules",
        },
        "assertions": {
          "QW_ACT_R1": {
            "name": "Name of the rule",
            "code": "QualWeb rule id",
            "mapping": "ACT rule id mapping",
            "description": "Description of the rule",
            "metadata": {
              "target": "Any target, can be one element, multiple elements, attributes, a relation between elements",
              "success-criteria?": [
                {
                  "name": "Name of the success criteria",
                  "level": "Level of conformance of the success criteria",
                  "principle": "Principle of the success criteria",
                  "url": "Url of the success criteria"
                }
              ],
              "related?": [], // related WCAG 2.1 techniques
              "url?": "Url of the rule",
              "passed": "Number of passed results",
              "warning": "Number of warning results",
              "failed": "Number ff failed results",
              "type?": [], // usually "ACTRule" or "TestCase"
              "a11yReq?": [], // WCAG 2.1 relation - something like "WCAG21:language"
              "outcome": "Outcome of the rule",
              "description": "Description of the outcome";
            },
            "results": [
              {
                "verdict": "Outcome of the test",
                "description": "Description of the test",
                "resultCode": "Test identifier",
                "pointer?": "Element pointer in CSS notation",
                "htmlCode?": "Element html code",
                "attributes?": "Attributes of the element",
                "accessibleName?": "Accessible name of the test target"
              },
              { ... }
            ]
          },
          "...": { ... }
        }
      },
      "wcag-techniques": {
        "type": "wcag-techniques",
        "metadata": {
          "passed": "number of passed techniques",
          "warning": "number of warning techniques",
          "failed": "number of failed techniques",
          "inapplicable": "number of inapplicable techniques",
        },
        "assertions": {
          "QW_WCAG_T1": {
            "name": "Name of the technique",
            "code": "QualWeb technique id",
            "mapping": "WCAG techniques code mapping",
            "description": "Description of the technique",
            "metadata": {
              "target": "Any target, can be one element, multiple elements, attributes, a relation between elements",
              "success-criteria?": [
                {
                  "name": "Name of the success criteria",
                  "level": "Level of conformance of the success criteria",
                  "principle": "Principle of the success criteria",
                  "url": "Url of the success criteria"
                }
              ],
              "related?": [], // related WCAG 2.1 techniques
              "url?": "Url of the technique",
              "passed": "Number of passed results",
              "warning": "Number of warning results",
              "failed": "Number ff failed results",
              "type?": [], // usually "ACTRule" or "TestCase"
              "a11yReq?": [], // WCAG 2.1 relation - something like "WCAG21:language"
              "outcome": "Outcome of the technique",
              "description": "Description of the outcome";
            },
            "results": [
              {
                "verdict": "Outcome of the test",
                "description": "Description of the test",
                "resultCode": "Test identifier",
                "pointer?": "Element pointer in CSS notation",
                "htmlCode?": "Element html code",
                "attributes?": "Attributes of the element" // if available
              },
              { ... }
            ]
          },
          "...": { ... }
        }
      },
      "best-practices": {
        "type": "best-practices",
        "metadata": {
          "passed": "number of passed best practices",
          "warning": "number of warning best practices",
          "failed": "number of failed best practices",
          "inapplicable": "number of inapplicable best practices",
        },
        "assertions": {
          "QW_BP1": {
            "name": "Name of the technique",
            "code": "QualWeb best practices id",
            "description": "Description of the best practices",
            "metadata": {
              "target": "Any target, can be one element, multiple elements, attributes, a relation between elements",
              "success-criteria?": [
                {
                  "name": "Name of the success criteria",
                  "level": "Level of conformance of the success criteria",
                  "principle": "Principle of the success criteria",
                  "url": "Url of the success criteria"
                }
              ],
              "related?": [], // related WCAG 2.1 techniques
              "passed": "Number of passed results",
              "warning": "Number of warning results",
              "failed": "Number ff failed results",
              "type?": [], // usually "ACTRule" or "TestCase"
              "a11yReq?": [], // WCAG 2.1 relation - something like "WCAG21:language"
              "outcome": "Outcome of the best practices",
              "description": "Description of the outcome";
            },
            "results": [
              {
                "verdict": "Outcome of the test",
                "description": "Description of the test",
                "resultCode": "Test identifier",
                "pointer?": "Element pointer in CSS notation",
                "htmlCode?": "Element html code",
                "attributes?": "Attributes of the element" // if available
              },
              { ... }
            ]
          },
          "...": { ... }
        }
      },
      "counter": {
        "type": "counter",
        "data": {
          "roles": {
            "button": 2,
            "link": 4,
            ...
          },
          "tags": {
            "div": 10,
            "table": 3,
            ...
          }
        }
      }
    }
  }

Implemented ACT Rules

QualWeb Rule IDACT Rule IDACT Rule Name
QW-ACT-R12779a5HTML Page has a title
QW-ACT-R2b5c3f8HTML has lang attribute
QW-ACT-R35b7ae0HTML lang and xml:lang match
QW-ACT-R4bc659aMeta-refresh no delay
QW-ACT-R5bf051aValidity of HTML Lang attribute
QW-ACT-R659796fImage button has accessible name
QW-ACT-R7b33effOrientation of the page is not restricted using CSS transform property
QW-ACT-R9b20e66Links with identical accessible names have equivalent purpose
QW-ACT-R104b1c6ciframe elements with identical accessible names have equivalent purpose
QW-ACT-R1197a4e1Button has accessible name
QW-ACT-R12c487aeLink has accessible name
QW-ACT-R136cfa84Element with aria-hidden has no focusable content
QW-ACT-R14b4f0c3meta viewport does not prevent zoom
QW-ACT-R1580f0bfaudio or video has no audio that plays automatically
QW-ACT-R16e086e5Form control has accessible name
QW-ACT-R1723a2a8Image has accessible name
QW-ACT-R183ea0c8id attribute value is unique
QW-ACT-R19cae760iframe element has accessible name
QW-ACT-R20674b10role attribute has valid value
QW-ACT-R217d6734svg element with explicit role has accessible name
QW-ACT-R22de46e4Element within body has valid lang attribute
QW-ACT-R23c5a4eavideo element visual content has accessible alternative
QW-ACT-R2473f2c2autocomplete attribute has valid value
QW-ACT-R255c01eaARIA state or property is permitted
QW-ACT-R26eac66bvideo element auditory content has accessible alternative
QW-ACT-R275f99a7This rule checks that each aria- attribute specified is defined in ARIA 1.1.
QW-ACT-R284e8ab6Element with role attribute has required states and properties
QW-ACT-R29e7aa44Audio element content has text alternative
QW-ACT-R302ee8b8Visible label is part of accessible name
QW-ACT-R31c3232fVideo element visual-only content has accessible alternative
QW-ACT-R321ec09bvideo element visual content has strict accessible alternative
QW-ACT-R33ff89c9ARIA required context role
QW-ACT-R346a7281ARIA state or property has valid value
QW-ACT-R35ffd0e9Heading has accessible name
QW-ACT-R36a25f45Headers attribute specified on a cell refers to cells in the same table element
QW-ACT-R37afw4f7Text has minimum contrast
QW-ACT-R38bc4a75ARIA required owned elements
QW-ACT-R39d0f69eAll table header cells have assigned data cells
QW-ACT-R4059br37Zoomed text node is not clipped with CSS overflow
QW-ACT-R4136b590Error message describes invalid form field value
QW-ACT-R428fc3b6Object element has non-empty accessible name
QW-ACT-R430ssw9kScrollable element is keyboard accessible
QW-ACT-R44fd3a94Links with identical accessible names and context serve equivalent purpose
QW-ACT-R4846ca7fElement marked as decorative is not exposed
QW-ACT-R49aaa1bfAudio or video that plays automatically has no audio that lasts more than 3 seconds
QW-ACT-R504c31dfAudio or video that plays automatically has a control mechanism
QW-ACT-R51fd26cfvideo element visual-only content is media alternative for text
QW-ACT-R52ac7dc6video element visual-only content has description track
QW-ACT-R53ee13b5video element visual-only content has transcript
QW-ACT-R54d7ba54video element visual-only content has audio track alternative
QW-ACT-R551ea59cvideo element visual content has audio description
QW-ACT-R56ab4d13video element content is media alternative for text
QW-ACT-R57f196cevideo element visual content has description track
QW-ACT-R582eb176audio element content has transcript
QW-ACT-R59afb423audio element content is media alternative for text
QW-ACT-R60f51b46video element auditory content has captions
QW-ACT-R611a02b0video element visual content has transcript
QW-ACT-R62oj04fdElement in sequential focus order has visible focus
QW-ACT-R63b40fd1Document has a landmark with non-repeated content
QW-ACT-R64047fe0Document has heading for non-repeated content
QW-ACT-R65307n5zElement with presentational children has no focusable content
QW-ACT-R66m6b1q3Menuitem has non-empty accessible name
QW-ACT-R6724afc2Letter spacing in style attributes is not !important
QW-ACT-R6878fd32Line height in style attributes is not !important
QW-ACT-R699e45ecWord spacing in style attributes is not !important
QW-ACT-R70akn7bnframe with negative tabindex has no interactive elements
QW-ACT-R71bisz58meta element has no refresh delay (no exception)
QW-ACT-R728a213cFirst focusable element is link to non-repeated content
QW-ACT-R733e12e1Block of repeated content is collapsible
QW-ACT-R74ye5d6eDocument has an instrument to move focus to non-repeated content
QW-ACT-R75cf77f2Bypass Blocks of Repeated Content
QW-ACT-R7609o5cgText has enhanced contrast
QW-ACT-R77in6db8ARIA required ID references exist

Implemented WCAG 2.1 Techniques

QualWeb Technique IDWCAG Technique IDWCAG Technique Name
QW-WCAG-T1H24Providing text alternatives for the area elements of image maps
QW-WCAG-T2H39Using caption elements to associate data table captions with data tables
QW-WCAG-T3H71Providing a description for groups of form controls using fieldset and legend elements
QW-WCAG-T4H73Using the summary attribute of the table element to give an overview of data tables
QW-WCAG-T5H36Using alt attributes on images used as submit buttons
QW-WCAG-T6SCR20Using both keyboard and other device-specific functions
QW-WCAG-T7H28Providing definitions for abbreviations by using the abbr element
QW-WCAG-T8F30Failure of Success Criterion 1.1.1 and 1.2.1 due to using text alternatives that are not alternatives
QW-WCAG-T9G141Organizing a page using headings
QW-WCAG-T10H2Combining adjacent image and text links for the same resource
QW-WCAG-T11H35Providing text alternatives on applet elements
QW-WCAG-T12F46Failure of Success Criterion 1.3.1 due to using th elements, caption elements, or non-empty summary attributes in layout tables
QW-WCAG-T13F47Failure of Success Criterion 2.2.2 due to using the blink element
QW-WCAG-T14H43Using id and headers attributes to associate data cells with header cells in data tables
QW-WCAG-T15H59Using the link element and navigation tools
QW-WCAG-T16H88Using HTML according to spec
QW-WCAG-T17G162Positioning labels to maximize predictability of relationships
QW-WCAG-T18H51Using table markup to present tabular information
QW-WCAG-T19H32Providing submit buttons
QW-WCAG-T20H33Supplementing link text with the title attribute
QW-WCAG-T21F89Failure of Success Criteria 2.4.4, 2.4.9 and 4.1.2 due to not providing an accessible name for an image which is the only content in a link
QW-WCAG-T22F52Failure of Success Criterion 3.2.1 and 3.2.5 due to opening a new window as soon as a new page is loaded
QW-WCAG-T23G1Adding a link at the top of each page that goes directly to the main content area
QW-WCAG-T24F55Failure of Success Criteria 2.1.1, 2.4.7, and 3.2.1 due to using script to remove focus when focus is received
QW-WCAG-T25H63Using the scope attribute to associate header cells and data cells in data tables
QW-WCAG-T26F59Failure of Success Criterion 4.1.2 due to using script to make div or span a user interface control in HTML without providing a role for the control
QW-WCAG-T27F88Failure of Success Criterion 1.4.8 due to using text that is justified (aligned to both the left and the right margins)
QW-WCAG-T28C12 C13 C14Using percent, em, names for font sizes
QW-WCAG-T29C19Specifying alignment either to the left or right in CSS
QW-WCAG-T30F4Failure of Success Criterion 2.2.2 due to using text-decoration:blink without a mechanism to stop it in less than five seconds
QW-WCAG-T31F24Failure of Success Criterion 1.4.3, 1.4.6 and 1.4.8 due to specifying foreground colors without specifying background colors or vice versa
QW-WCAG-T32H48Using ol, ul and dl for lists or groups of links

Evaluation problems

Sometimes, some webpages fail to evaluate, or the evaluation may take a really long time. Before creating an issue check the error.log file and verify that:

  • The URL is correct, and it uses http or https, or www, or both;
  • The webpage exists;
  • If using https, that the certificate is valid;
    • If you really want to evaluate the page with an invalid certificate, add "--ignore-certificate-errors" to the args in qualweb puppeteer launch options.
  • The webpage is not password protected;
  • The webpage is an HTML Document.

License

ISC

Versions

  • 0.7.32 - Updated ACT-Rules c487ae(R12), 6cfa84 (R13), 73f2c2 (R24), 46ca7f (R48) and 78fd32 (R68)
  • 0.7.31 - Removed dependencies on Wappalyzer module (continued)
  • 0.7.30 - Removed dependencies on Wappalyzer module
  • 0.7.29 - Fixed ACT-Rules bf051a (R5) and bc4a75 (R38)
0.7.69

26 days ago

0.7.68

28 days ago

0.7.67

1 month ago

0.7.66

2 months ago

0.7.65

2 months ago

0.7.64

2 months ago

0.7.63

3 months ago

0.7.62

3 months ago

0.7.61

3 months ago

0.7.60

3 months ago

0.7.59

3 months ago

0.7.58

3 months ago

0.7.57

3 months ago

0.7.56

3 months ago

0.7.55

4 months ago

0.7.54

4 months ago

0.7.53

4 months ago

0.7.52

4 months ago

0.7.51

4 months ago

0.7.37

10 months ago

0.7.39

8 months ago

0.7.38

8 months ago

0.7.50

5 months ago

0.7.44

7 months ago

0.7.43

7 months ago

0.7.46

6 months ago

0.7.45

6 months ago

0.7.40

8 months ago

0.7.42

7 months ago

0.7.41

7 months ago

0.7.48

5 months ago

0.7.49

5 months ago

0.7.35

11 months ago

0.7.34

11 months ago

0.7.36

11 months ago

0.7.33

1 year ago

0.7.32

1 year ago

0.7.31

1 year ago

0.7.30

1 year ago

0.7.29

1 year ago

0.7.28

2 years ago

0.7.27

2 years ago

0.7.22

2 years ago

0.7.24

2 years ago

0.7.23

2 years ago

0.7.26

2 years ago

0.7.25

2 years ago

0.8.0-alpha2

2 years ago

0.7.21

2 years ago

0.7.20

2 years ago

0.7.19

2 years ago

0.7.18

2 years ago

0.7.15

2 years ago

0.7.17

2 years ago

0.7.16

2 years ago

0.8.0-alpha

2 years ago

0.7.11

2 years ago

0.7.10

2 years ago

0.7.13

2 years ago

0.7.12

2 years ago

0.7.14

2 years ago

0.7.9

3 years ago

0.7.6

3 years ago

0.7.8

3 years ago

0.7.7

3 years ago

0.7.5

3 years ago

0.7.4

3 years ago

0.7.3

3 years ago

0.7.2

3 years ago

0.7.1

3 years ago

0.6.15

3 years ago

0.6.14

3 years ago

0.6.13

3 years ago

0.6.12

3 years ago

0.6.11

3 years ago

0.6.10

3 years ago

0.6.0-alpha

3 years ago

0.5.7

3 years ago

0.6.1-alpha

3 years ago

0.6.7

3 years ago

0.6.6

3 years ago

0.6.9

3 years ago

0.6.8

3 years ago

0.6.3-alpha

3 years ago

0.4.76

3 years ago

0.4.77

3 years ago

0.6.2-alpha

3 years ago

0.5.6

3 years ago

0.7.0-alpha

3 years ago

0.6.5

3 years ago

0.6.4

3 years ago

0.4.75

3 years ago

0.5.5

3 years ago

0.4.74

3 years ago

0.5.4

3 years ago

0.4.73

3 years ago

0.5.3

3 years ago

0.4.72

3 years ago

0.5.2

3 years ago

0.4.71

3 years ago

0.4.70

3 years ago

0.5.0

3 years ago

0.5.1

3 years ago

0.4.68

3 years ago

0.4.69

3 years ago

0.4.67

3 years ago

0.4.66

3 years ago

0.4.64

3 years ago

0.4.65

3 years ago

0.4.62

3 years ago

0.4.63

3 years ago

0.4.61

3 years ago

0.4.60

3 years ago

0.4.59

3 years ago

0.4.58

3 years ago

0.4.57

3 years ago

0.4.56

3 years ago

0.4.55

3 years ago

0.4.54

3 years ago

0.4.53

3 years ago

0.4.52

3 years ago

0.4.51

3 years ago

0.4.48

3 years ago

0.4.49

3 years ago

0.4.50

3 years ago

0.4.47

3 years ago

0.4.46

3 years ago

0.4.45

3 years ago

0.4.44

3 years ago

0.4.43

3 years ago

0.4.42

3 years ago

0.4.41

3 years ago

0.4.40

3 years ago

0.4.39

3 years ago

0.4.38

3 years ago

0.4.37

3 years ago

0.4.36

3 years ago

0.4.35

3 years ago

0.4.34

3 years ago

0.4.33

4 years ago

0.4.32

4 years ago

0.4.31

4 years ago

0.4.30

4 years ago

0.4.29

4 years ago

0.4.28

4 years ago

0.4.27

4 years ago

0.4.26

4 years ago

0.4.25

4 years ago

0.4.24

4 years ago

0.4.22

4 years ago

0.4.21

4 years ago

0.4.20

4 years ago

0.4.19

4 years ago

0.4.18

4 years ago

0.4.17

4 years ago

0.4.16

4 years ago

0.4.15

4 years ago

0.4.14

4 years ago

0.4.13

4 years ago

0.4.12

4 years ago

0.4.11

4 years ago

0.4.9

4 years ago

0.4.10

4 years ago

0.4.8

4 years ago

0.4.7

4 years ago

0.4.6

4 years ago

0.4.5

4 years ago

0.4.4

4 years ago

0.4.3

4 years ago

0.4.2

4 years ago

0.4.1

4 years ago

0.4.0

4 years ago

0.3.20

4 years ago

0.3.19

4 years ago

0.3.18

4 years ago

0.3.17

4 years ago

0.3.16

4 years ago

0.3.15

4 years ago

0.3.14

4 years ago

0.3.13

4 years ago

0.3.12

4 years ago

0.3.11

4 years ago

0.3.10

4 years ago

0.3.9

4 years ago

0.3.8

4 years ago

0.3.6

4 years ago

0.3.7

4 years ago

0.3.5

4 years ago

0.3.4

4 years ago

0.3.0

4 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.3.3

4 years ago

0.2.17

4 years ago

0.2.16

4 years ago

0.2.15

4 years ago

0.2.14

4 years ago

0.2.13

4 years ago

0.2.12

4 years ago

0.2.11

4 years ago

0.2.10

4 years ago

0.2.9

4 years ago

0.2.8

4 years ago

0.2.7

4 years ago

0.2.6

4 years ago

0.2.5

4 years ago

0.2.4

4 years ago

0.2.3

4 years ago

0.2.2

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.13

4 years ago

0.1.12

4 years ago

0.1.11

4 years ago

0.1.10

4 years ago

0.1.8

4 years ago

0.1.9

4 years ago

0.1.7

4 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.21

5 years ago

0.0.2

5 years ago

0.0.125

5 years ago

0.0.124

5 years ago

0.0.122

5 years ago

0.0.121

5 years ago

0.0.12

5 years ago

0.0.11

5 years ago

0.0.1

5 years ago