Use the new command line (console) tool htmlval
to check HTML, CSS, and JSON documents on Linux and Mac. This program is based on the core validation engine in CSS HTML Validator for Windows, which was ported to Linux and Mac.
Note that some features like link checking, spell checking, PHP syntax checking, JavaScript checking, and some other features are currently not available in the htmlval
port. This is a command line tool for Linux and Mac; there is no GUI like in the Windows version.
FREE limited version: htmlval
for Linux Free Limited (v23.04)
Download htmlval for Linux FREE Limited Version • How to Install
FREE limited version (arm64/M1/M2/Mx): htmlval
for Apple Mac (ARM) Free Limited (v23.04)
Download htmlval for Mac (ARM) FREE Limited Version • How to Install
FREE limited version (Intel/x86_64): htmlval
for Apple Mac (Intel) Free Limited (v23.04)
Download htmlval for Mac (Intel) FREE Limited Version • How to Install
The FREE limited version of htmlval
is fully functional (with no time limit) except for the maximum number of errors and warnings being locked (limited) to 10 each. The FREE limited version is also considered to be the trial version (but it has no time limit).
For specific information (such as download, install, and uninstall info) about htmlval
for Linux or htmlval
for Mac, please see the htmlval for Linux or htmlval for Mac page.
[ To the top ]
Use --help
(or -H
) or --version
(or -V
) to get a quick summary of commands or the version information and copyright notice.
$ htmlval --help
$ htmlval --help
Usage: htmlval [OPTION]... [FILE]...
Validation control:
-a, --access turn on accessibility checking (default off)
--cfg [FILE] specify a cfg file (overrides default cfg file)
-C, --css document is CSS (force CSS syntax checking)
--nocss turn off CSS checking in HTML (default on)
-m, --nomobile turn off mobile messages (default on)
-u, --nosecurity turn off security messages (default on)
-S, --noseo turn off SEO/search engine messages (default on)
-q --reqquotes require all attribute values be quoted
--std standards-compliant check
--strictamp require strict ampersand encoding (default off)
--uf [FILE] specify a user functions file
--uf2 [FILE] specify a 2nd user functions file
--wcag2=NUM set WCAG2 conformance level 1-3 or 0 for off
Output control:
-e, --errorsonly show errors only
-w, --errwarnonly show errors and warnings only (default)
--format [FORMAT] set message format (for -l; see documentation)
-f, --full full validation (all message types)
-j, --json output messages in JSON format
--linelen=NUM max line length (for -n)
-l, --listonly output messages in list format
--maxerr=NUM set maximum number of errors before aborting
--maxwarn=NUM set maximum number of warnings before aborting
-c, --nocomments no comment messages (with some exceptions)
-h, --noheader no file header (i.e. File X of Y)
--nomsgid=ID1,ID2 disable messages by message ID number
-r, --noregular no regular messages (with some exceptions)
-n, --normal normal output format (default)
-t, --tree[=c] show HTML structure tree, use =c for compact
-s, --short shorten messages (disables extended messages)
--veo [FILE] specify a veo file (validator engine options)
-v, --verbose verbose messages (extended messages) (default)
-x, --xml output messages in XML format
Miscellaneous:
-V, --version display version information and exit
-H, --help display this help text and exit
htmlval for Linux does not support all the features of the Windows version.
$ htmlval --version
$ htmlval --version
CSS HTML Validator Pro 2023/v23.0200 Command Line Processor for Linux
Copyright (C) 1997-2023 AI Internet Solutions LLC
https://www.htmlvalidator.com/
[ To the top ]
To validate a document, simply use htmlval
and provide it the path to the document to validate. You can validate/check HTML, CSS, and JSON documents.
$ htmlval document.html $ htmlval styles.css
$ htmlval document.html
==================================
=== File 1 of 1: document.html ===
==================================
CSS HTML Validator Pro v23.0200 on Linux (Registered)
Checking "document.html" (92 characters).
Checked on 2023-05-29 at 20:44:55.
Number of lines checked: 5 in 0.00 seconds
Number of lines in document: 5 (100.0% of lines checked)
Number of lines ignored: 0
Number of character entities: 0
Number of start tags: 6
Number of end tags: 3 (50.0% of start tags with end tags)
Number of <% ... %> sections: 0
Number of HTML comments: 0
Number of validator comments: 1
Number of messages: 0
Number of errors: 4 (first in line 3)
Number of warnings: 1 (first in line 2)
--------------------------------------------------
2: <html>
-------||||
[CHV] Warning number 1 in line 2:2:
The natural primary language is not specified. It is strongly
recommended that the "lang" attribute be used with the <html> element
to specify the primary language. For example, add the attribute
lang="en" for English or lang="fr" for French. Specifying the language
assists braille translation software, speech synthesizers, translation
software, and has other benefits.
3: <h1>What's up?</h1>
-------||
[CHV] Error number 1 in line 3:2:
The viewport property was not defined. The viewport property tells
browsers how to adjust the page's dimensions and scaling for the
screen size. Google considers this a mobile usability error. Visit
https://web.dev/responsive-web-design-basics/ for more information.
3: <h1>What's up?</h1>
-------||
[CHV] Error number 2 in line 3:2:
Missing <title> element. Add an explicit <head> section with a <title>
element to give this page a title. Exceptions (when <title> can be
omitted): 1) "iframe srcdoc" documents, and 2) if the title is
provided by a higher-level protocol (like the subject line of an
e-mail message when HTML is used as the email format).
4: <p style="coloor: blue">test</p>
----------------||||||
[CHV] Error number 3 in line 4:11:
The "coloor" property is not a recognized property. Should this
property be "color"?
5: <sdfsdsfd>
-------||||||||
[CHV] Error number 4 in line 5:2:
The <sdfsdsfd> element is not valid. Is it misspelled?
[CHV] Comment number 1:
"Errors and warnings only" mode enabled. Showing only error and
warning messages (with some exceptions).
--------------------------------------------------
$ htmlval data.json
$ htmlval data.json
==============================
=== File 1 of 1: test.json ===
==============================
CSS HTML Validator Pro v23.0210 on Linux (Registered)
Checking "test.json" (2085 characters).
Checked on 2023-05-30 at 15:16:37.
Number of lines checked: 88 in 0.00 seconds
Number of lines in document: 88 (100.0% of lines checked)
Number of lines ignored: 0
Number of validator comments: 1
Number of messages: 0
Number of errors: 1 (first in line 37)
Number of warnings: 0
--------------------------------------------------
37: "messagenumber"::2,
----------------------|
[CHV] Error number 1 in line 37:17:
Expected a valid JSON value here, like 'false', 'null', 'true', or an
array, number, object, or string. Is this a misplaced or extra colon?
[CHV] Comment number 1:
JSON detected.
--------------------------------------------------
You can also specify more than one document to validate.
$ htmlval document.html styles.css
JSON Lines and NDJSON syntax checking is also supported. Ensure that the filename has a file extension of jsonl
for JSON Lines or ndjson
file extension for NDJSON for automatic detection of these file types.
$ htmlval data.jsonl $ htmlval data.ndjson
[ To the top ]
There are several options to control the validation scope. These include (but are not limited to):
-a
or --access
to turn on accessibility checking (which is off by default)-m
or --nomobile
to turn off mobile messages (which are on by default)-S
or --seo
to turn off SEO/search engine messages (which are on by default)For example, to validate a document with accessibility checking enabled:
$ htmlval -a document.html
To set the WCAG2/2.1 conformance level to 3, you can use (using --wcag2=NUM
automatically turns on accessibility checking so also using -a
is not needed):
$ htmlval --wcag2=3 document.html
[ To the top ]
By default, only error and warning messages are shown (with some exceptions). If you want to see only error messages then you can use the -e
or --errorsonly
option. If you want a full validation with all validator messages, you can use the -f
or --full
option.
$ htmlval -e document.html $ htmlval --full document.html
If you want shorter (terse) validator messages, then you can use the -s
or --short
option. This option is good for more experienced developers who don't need all the details provided in the longer, extended messages.
$ htmlval -s document.html
If you want shorter (terse) validator messages and only error messages, then you can combine the -s and -e options together like this:
$ htmlval -es document.html
If you want the validator messages in a simple list, then you can use the -l
or --list
option. You can optionally use the --format
option to control the message format (see the XML Message Format Variables help topic for more information). The default message format is: %Type%%where2%: %category2%%msgtext%
.
$ htmlval -l document.html
$ htmlval -l document.html
==================================
=== File 1 of 1: document.html ===
==================================
Warning (line 2, col 2): The natural primary language is not specified. It is strongly recommended that the "lang" attribute be used with the <html> element to specify the primary language. For example, add the attribute lang="en" for English or lang="fr" for French. Specifying the language assists braille translation software, speech synthesizers, translation software, and has other benefits.
Error (line 3, col 2): (Grouped->Mobile) The viewport property was not defined. The viewport property tells browsers how to adjust the page's dimensions and scaling for the screen size. Google considers this a mobile usability error. Visit https://web.dev/responsive-web-design-basics/ for more information.
Error (line 3, col 2): Missing <title> element. Add an explicit <head> section with a <title> element to give this page a title. Exceptions (when <title> can be omitted): 1) "iframe srcdoc" documents, and 2) if the title is provided by a higher-level protocol (like the subject line of an e-mail message when HTML is used as the email format).
Error (line 4, col 11): (Styles->General) The "coloor" property is not a recognized property. Should this property be "color"?
Error (line 5, col 2): The <sdfsdsfd> element is not valid. Is it misspelled?
Comment: "Errors and warnings only" mode enabled. Showing only error and warning messages (with some exceptions).
Comment: Results by CSS HTML Validator Pro 2023/v23.0200 - https://www.htmlvalidator.com/ .
$ htmlval -esl document.html
==================================
=== File 1 of 1: document.html ===
==================================
Error (line 3, col 2): (Grouped->Mobile) The viewport property was not defined.
Error (line 3, col 2): Missing <title> element. Add an explicit <head> section with a <title> element to give this page a title.
Error (line 4, col 11): (Styles->General) The "coloor" property is not a recognized property. Should this property be "color"?
Error (line 5, col 2): The <sdfsdsfd> element is not valid. Is it misspelled?
Comment: "Errors only" mode enabled.
Comment: Results by CSS HTML Validator Pro 2023/v23.0200 - https://www.htmlvalidator.com/ .
Many (but not all) validator messages have a unique message ID. If you know the message ID of a validator message that you don't want to see, then you can disable the message using the --nomsgid
option. Just set it to a comma-separated list of message IDs that you want to disable.
$ htmlval --nomsgid=2022123456,2022123457 document.html
Note that you can combine multiple single letter options that begin with a single dash. For example, you can combine -e
, -m
, and -s
into -ems
. Commands that begin with two dashes (i.e. --errorsonly
, --nomobile
, --short
, etc.) cannot be combined in the same way.
[ To the top ]
Use the -j or --json option to get the validator messages in JSON.
$ htmlval -j document.html
$ htmlval -j document.html
{
"validator":"CSS HTML Validator Professional on Linux",
"version":"2023",
"registered":"YES",
"filename":"document.html",
"bytesize":92,
"charsize":92,
"lineschecked":5,
"percentlineschecked":100.0,
"linesinfile":5,
"linesignored":0,
"numberofentities":0,
"numberoftagnames":6,
"numberofclosingtags":3,
"percentclosed":50.0,
"serversections":0,
"numberofhtmlcomments":0,
"numberofvalidatorcomments":2,
"numberofmessages":0,
"numberoferrors":4,
"numberofwarnings":1,
"maxmessagechars":371,
"messages":[
{
"messagetype":"WARNING",
"messagenumber":1,
"messageflags":0,
"messageid":2011111500,
"linenumber":2,
"charlocation":2,
"charlocationlength":4,
"message":"The natural primary language is not specified. It is strongly recommended that the \"lang\" attribute be used with the <html> element to specify the primary language. For example, add the attribute lang=\"en\" for English or lang=\"fr\" for French. Specifying the language assists braille translation software, speech synthesizers, translation software, and has other benefits."
}
,{
"messagetype":"ERROR",
"messagecategory":"Mobile",
"messagenumber":2,
"messageflags":0,
"messageid":2021070901,
"linenumber":3,
"charlocation":2,
"charlocationlength":2,
"message":"The viewport property was not defined. The viewport property tells browsers how to adjust the page's dimensions and scaling for the screen size. Google considers this a mobile usability error. Visit https:\/\/web.dev\/responsive-web-design-basics\/ for more information."
}
,{
"messagetype":"ERROR",
"messagenumber":1,
"messageflags":0,
"messageid":2021092901,
"linenumber":3,
"charlocation":2,
"charlocationlength":2,
"message":"Missing <title> element. Add an explicit <head> section with a <title> element to give this page a title. Exceptions (when <title> can be omitted): 1) \"iframe srcdoc\" documents, and 2) if the title is provided by a higher-level protocol (like the subject line of an e-mail message when HTML is used as the email format)."
}
,{
"messagetype":"ERROR",
"messagecategory":"General",
"messagenumber":4,
"messageflags":1,
"linenumber":4,
"charlocation":11,
"charlocationlength":6,
"message":"The \"coloor\" property is not a recognized property. Should this property be \"color\"?"
}
,{
"messagetype":"ERROR",
"messagenumber":3,
"messageflags":0,
"linenumber":5,
"charlocation":2,
"charlocationlength":8,
"message":"The <sdfsdsfd> element is not valid. Is it misspelled?"
}
,{
"messagetype":"COMMENT",
"messagenumber":1,
"messageflags":0,
"messageid":2002071603,
"message":"\"Errors and warnings only\" mode enabled. Showing only error and warning messages (with some exceptions)."
}
,{
"messagetype":"COMMENT",
"messagenumber":2,
"messageflags":0,
"message":"Results by CSS HTML Validator Pro 2023\/v23.0200 - https:\/\/www.htmlvalidator.com\/ ."
}
]
}
You can redirect the JSON to a file like this:
$ htmlval -j document.html >output.json
Similarly, you can use the -x
or --xml
option to get the validator messages in XML.
$ htmlval --xml document.html
$ htmlval --xml document.html
<?xml version="1.0"?>
<documentlist generator="CSS HTML Validator Professional" generatorversion="2023" generateddate="2023-05-29" generatedtime="21:12:58" registered="1">
<document location="document.html" lines="5" bytes="92">
<messagelist errors="4" warnings="1" messages="0" comments="2">
<message type="warning" category="" group="normal" msgid="2011111500" linenum="2" charnum="2" charlength="4">The natural primary language is not specified. It is strongly recommended that the "lang" attribute be used with the <html> element to specify the primary language. For example, add the attribute lang="en" for English or lang="fr" for French. Specifying the language assists braille translation software, speech synthesizers, translation software, and has other benefits.</message>
<message type="error" category="Mobile" group="normal" msgid="2021070901" linenum="3" charnum="2" charlength="2">The viewport property was not defined. The viewport property tells browsers how to adjust the page's dimensions and scaling for the screen size. Google considers this a mobile usability error. Visit https://web.dev/responsive-web-design-basics/ for more information.</message>
<message type="error" category="" group="normal" msgid="2021092901" linenum="3" charnum="2" charlength="2">Missing <title> element. Add an explicit <head> section with a <title> element to give this page a title. Exceptions (when <title> can be omitted): 1) "iframe srcdoc" documents, and 2) if the title is provided by a higher-level protocol (like the subject line of an e-mail message when HTML is used as the email format).</message>
<message type="error" category="General" group="css" msgid="-1" linenum="4" charnum="11" charlength="6">The "coloor" property is not a recognized property. Should this property be "color"?</message>
<message type="error" category="" group="normal" msgid="-1" linenum="5" charnum="2" charlength="8">The <sdfsdsfd> element is not valid. Is it misspelled?</message>
<message type="comment" category="" group="normal" msgid="2002071603" linenum="-1" charnum="-1" charlength="-1">"Errors and warnings only" mode enabled. Showing only error and warning messages (with some exceptions).</message>
<message type="comment" category="" group="normal" msgid="-1" linenum="-1" charnum="-1" charlength="-1">Results by CSS HTML Validator Pro 2023/v23.0200 - https://www.htmlvalidator.com/ .</message>
</messagelist>
</document>
</documentlist>
[ To the top ]
If you have curl
then you can use it to validate URLs by piping the output of curl
to htmlval
.
$ curl https://mywebsite.com | htmlval
[ To the top ]
A .veo
file is an export of validator options from the Validator Engine Options in the Windows version. This file can be used with htmlval
. Note that options in the .veo
file will override options on the command line, and not all options supported by the Windows version are supported by htmlval
(unsupported options will be ignored).
$ htmlval --veo ./path/myveofile.veo document.html
[ To the top ]
You can use the same user function files that CSS HTML Validator for Windows uses by specifying one or two user function files with the --uf
and --uf2
options. User function files allow for advanced customization of the validation and its output. Visit the TNPL scripting help topic for more information.
Add the --danger
option (only if needed) to enable potentially dangerous TNPL functions like writeFile()
and deleteFile()
.
$ htmlval --uf ./path/myuserfunctions.txt document.html
[ To the top ]
The cfg file (i.e. htmlvalV230.cfg
) is required and is the same file used in the Windows version. It's a binary file and is not user-editable except by using the Configuration Editor in the Windows version. However, we do not recommend editing this file, but if you want to edit it anyway then you could do so using the Windows version.
The edited cfg file could then be used with htmlval
to override the default file (i.e. htmlvalV230.cfg
). You can specify the config file for htmlval
to use with the --cfg [FILE]
option.
$ htmlval --cfg ./path/myconfig.cfg document.html
[ To the top ]
If you like what you see and would like to buy a license and support continued development of htmlval
, then you can buy a license for CSS HTML Validator Pro for Windows. The Pro edition includes htmlval
(but not the Home edition).
You can also buy an htmlval-only license for $79 which includes only the command line (console) tool for both Linux and Mac. IMPORTANT: This htmlval-only license does not include the Windows GUI app.
Buy htmlval-only license ($79)
[ To the top ]