What is doiuse?
The doiuse npm package is a tool for checking your CSS against browser support. It helps developers ensure that their CSS is compatible with the browsers they intend to support by identifying unsupported or partially supported CSS features.
What are doiuse's main functionalities?
Check CSS for browser support
This feature allows you to check your CSS code against a list of browsers to see if any features are not supported. The code sample demonstrates how to use doiuse with PostCSS to process a CSS string and log any warnings about unsupported features.
const doiuse = require('doiuse');
const postcss = require('postcss');
const css = 'a { display: flex; }';
postcss([doiuse({ browsers: ['> 1%', 'last 2 versions'] })])
.process(css)
.then(result => {
result.warnings().forEach(warn => {
console.warn(warn.toString());
});
});
Custom browser support configuration
This feature allows you to specify custom browser support configurations. The code sample shows how to configure doiuse to check CSS against Internet Explorer 10 and the last two versions of all other browsers.
const doiuse = require('doiuse');
const postcss = require('postcss');
const css = 'a { display: grid; }';
postcss([doiuse({ browsers: ['ie >= 10', 'last 2 versions'] })])
.process(css)
.then(result => {
result.warnings().forEach(warn => {
console.warn(warn.toString());
});
});
Other packages similar to doiuse
caniuse-lite
caniuse-lite is a smaller, more compact version of the caniuse database that provides data on browser support for various web technologies. Unlike doiuse, caniuse-lite does not directly check your CSS but provides the data that can be used by other tools to perform such checks.
autoprefixer
Autoprefixer is a PostCSS plugin that parses your CSS and adds vendor prefixes to CSS rules using values from the Can I Use database. While doiuse checks for unsupported features, Autoprefixer automatically adds necessary prefixes to ensure compatibility with specified browsers.
stylelint
Stylelint is a powerful CSS linter that helps you avoid errors and enforce consistent conventions in your stylesheets. It can be extended with plugins to check for browser compatibility issues, similar to doiuse, but offers a broader range of linting capabilities.

doiuse
Lint CSS for browser support against Can I use database.
Install
npm install -g doiuse
Usage Examples
Command Line
doiuse --browsers "ie >= 9, > 1%, last 2 versions" main.css
cat main.css | doiuse --browsers "ie >= 9, > 1%, last 2 versions"
Sample output:
/projects/website/main.css:5:3: CSS3 Box-sizing not supported by: IE (8,9,10,11), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10,11)
/projects/website/main.css:6:3: CSS3 Box-sizing not supported by: IE (8,9,10,11), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10,11)
/projects/website/main.css:8:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:9:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:10:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:11:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:12:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:13:3: Pointer events not supported by: IE (8,9,10), Firefox (32,33), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
/projects/website/main.css:14:3: Pointer events not supported by: IE (8,9,10), Firefox (32,33), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
/projects/website/main.css:32:3: CSS3 Transforms not supported by: IE (8)
Use --json
to get output as (newline-delimited) JSON objects.
JS
import postcss from 'postcss';
import DoIUse from 'doiuse/lib/DoIUse.js';
postcss(new DoIUse({
browsers:['ie >= 6', '> 1%'],
ignore: ['rem'],
ignoreFiles: ['**/normalize.css'],
onFeatureUsage: (usageInfo) => {
console.log(usageInfo.message);
}
})).process("a { background-size: cover; }")
CommonJS syntax is still supported if using var doiuse = require('doiuse')
.
Gulp (CommonJS)
var gulp = require('gulp')
var postcss = require('postcss')
var doiuse = require('doiuse')
gulp.src(src, { cwd: process.cwd() })
.pipe(gulp.postcss([
doiuse({
browsers: [
'ie >= 8',
'> 1%'
],
ignore: ['rem'],
ignoreFiles: ['**/normalize.css'],
onFeatureUsage: function (usageInfo) {
console.log(usageInfo.message)
}
})
]))
How it works
In particular, the approach to detecting features usage is currently quite naive.
Refer to the data in /data/features.js.
- If a feature in that dataset only specifies
properties
, we just use those
properties for regex/substring matches against the properties used in the input CSS.
- If a feature also specifies
values
, then we also require that the associated
value matches one of those values.
API Details
As a transform stream
var doiuse = require('doiuse/stream');
process.stdin
.pipe(doiuse({ browsers: ['ie >= 8', '> 1%'], ignore: ['rem'] }))
.on('data', function (usageInfo) {
console.log(JSON.stringify(usageInfo))
})
Yields UsageInfo
objects as described below.
As a postcss plugin
postcss(new DoIUse(opts)).process(css)
, where opts
is:
{
browsers: ['ie >= 8', '> 1%'],
ignore: ['rem'],
ignoreFiles: ['**/normalize.css'],
onFeatureUsage: function(usageInfo) { }
}
And usageInfo
looks like this:
{
message: '<input source>: line <l>, col <c> - CSS3 Gradients not supported by: IE (8)',
feature: 'css-gradients',
featureData: {
title: 'CSS Gradients',
missing: "IE (8)",
missingData: {
ie: { '8': 'n' }
},
caniuseData: {
},
usage: {}
}
Called once for each usage of each css feature not supported by the selected browsers.
Ignoring file-specific rules
For disabling some checks you can use just-in-place comments
/* doiuse-disable */
Disables checks of all features
/* doiuse-disable feature */
Disables checks of specified feature(s) (can be comma separated list)
/* doiuse-enable */
Re-enables checks of all features
/* doiuse-enable feature */
Enables checks of specified feature(s) (can be comma separated list)
- for following lines in file
doiuse is an OPEN Open Source Project.
This means that individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
License
MIT
NOTE: Many of the files in test/cases are from autoprefixer-core, Copyright 2013 Andrey Sitnik andrey@sitnik.ru. Please see https://github.com/postcss/autoprefixer-core.