coveralls: 
[![Coverage Status](https://coveralls.io/builds/16321609/badge)](https://coveralls.io/builds/16321609)

Coverage increased (+0.2%) to 96.286% when pulling **b946c75d77a8941951c6a20552efb40d8247a526 on 12-html-output** into **3e477f655666c5a530ddbb95bc64fff31fa1fd69 on master**.

diff --git a/.travis.yml b/.travis.yml
index 1a3ea07..c033926 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,6 +10,7 @@ sudo: false
 python:
   - "2.7"
   - "3.5"
+  - "3.6"
 
 install:
   - pip install -r requirements.txt
diff --git a/CHANGES.rst b/CHANGES.rst
index bc718a2..a714698 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -7,6 +7,11 @@ Change History
 Production
 **********
 
+:2018.4.0:
+
+    * `#12 <https://github.com/prjemian/pyRestTable/issues/12>`_
+      provide HTML table output format
+
 :2017.2.0: 
 
     * `#9 <https://github.com/prjemian/pyRestTable/issues/9>`_
diff --git a/README.rst b/README.rst
index b63e36d..7402113 100644
--- a/README.rst
+++ b/README.rst
@@ -10,7 +10,7 @@ that does not span any cells (no rowspans or columnspans).
 
 :author:    Pete R. Jemian
 :email:     prjemian@gmail.com
-:copyright: 2014-2017, Pete R. Jemian
+:copyright: 2014-2018, Pete R. Jemian
 :license:   Creative Commons Attribution 4.0 International Public License (see *LICENSE.txt*)
 :docs:      http://pyRestTable.readthedocs.io
 :URL:       https://github.com/prjemian/pyRestTable
diff --git a/docs/source/examples/html.rst b/docs/source/examples/html.rst
new file mode 100644
index 0000000..999ab33
--- /dev/null
+++ b/docs/source/examples/html.rst
@@ -0,0 +1,51 @@
+*html*
+######
+
+:see: https://www.w3schools.com/html/html_tables.asp
+
+These python commands:
+
+.. code-block:: python
+    :linenos:
+
+    import pyRestTable
+    t = pyRestTable.Table()
+    t.labels = ('one', 'two', 'three' )
+    t.rows.append( ['1,1', '1,2', '1,3',] )
+    t.rows.append( ['2,1', '2,2', '2,3',] )
+    t.rows.append( ['3,1', '3,2', '3,3',] )
+    t.rows.append( ['4,1', '4,2', '4,3',] )
+    print(t.reST(fmt='html'))
+
+build this table in HTML source code:
+
+.. code-block:: guess
+   :linenos:
+   
+   <table>
+     <tr>
+       <th>one</th>
+       <th>two</th>
+       <th>three</th>
+     </tr>
+     <tr>
+       <td>1,1</td>
+       <td>1,2</td>
+       <td>1,3</td>
+     </tr>
+     <tr>
+       <td>2,1</td>
+       <td>2,2</td>
+       <td>2,3</td>
+     </tr>
+     <tr>
+       <td>3,1</td>
+       <td>3,2</td>
+       <td>3,3</td>
+     </tr>
+     <tr>
+       <td>4,1</td>
+       <td>4,2</td>
+       <td>4,3</td>
+     </tr>
+   </table>
diff --git a/docs/source/examples/index.rst b/docs/source/examples/index.rst
index c0028d1..7e1f7b3 100644
--- a/docs/source/examples/index.rst
+++ b/docs/source/examples/index.rst
@@ -12,5 +12,6 @@ Examples are provided to demonstrate usage.
    plain
    grid
    list-table
+   html
    example2
    cansas
diff --git a/src/pyRestTable/rest_table.py b/src/pyRestTable/rest_table.py
index 01696dc..931a91d 100644
--- a/src/pyRestTable/rest_table.py
+++ b/src/pyRestTable/rest_table.py
@@ -4,7 +4,7 @@
 #-----------------------------------------------------------------------------
 # :author:    Pete R. Jemian
 # :email:     prjemian@gmail.com
-# :copyright: (c) 2014-2017, Pete R. Jemian
+# :copyright: (c) 2014-2018, Pete R. Jemian
 #
 # Distributed under the terms of the Creative Commons Attribution 4.0 International Public License.
 #
@@ -24,6 +24,14 @@ User Interface               Description
 :meth:`setTabularColumns`    set `use_tabular_columns` & `alignment` attributes
 :meth:`reST`                 render the table in reST format
 ===========================  ============================================================
+
+.. autosummary::
+
+    ~Table
+    ~example_minimal
+    ~example_basic
+    ~example_complicated
+
 """
 
 
@@ -32,7 +40,8 @@ def _prepare_results_(t):
     s += t.reST(fmt='plain') + '\n'
     s += t.reST(fmt='simple') + '\n'
     s += t.reST(fmt='grid') + '\n'
-    s += t.reST(fmt='list-table')
+    s += t.reST(fmt='list-table') + '\n'
+    s += t.reST(fmt='html')
     return s
 
 
@@ -86,6 +95,27 @@ class Table(object):
        http://sphinx-doc.org/markup/misc.html?highlight=tabularcolumns#directive-tabularcolumns
     :param bool longtable: with `use_tabular_columns`, 
        if True, add Sphinx `:longtable:` directive
+
+    MAIN METHODS
+
+    .. autosummary::
+    
+        ~addLabel
+        ~addRow
+        ~reST
+
+    SUPPORTING METHODS
+
+    .. autosummary::
+    
+        ~setLongTable
+        ~setTabularColumns
+        ~plain_table
+        ~simple_table
+        ~grid_table
+        ~list_table
+        ~html_table
+
     """
     
     def __init__(self):
@@ -150,6 +180,7 @@ class Table(object):
                 'complex': self.grid_table,     # alias for `grid`, do not deprecate
                 'grid': self.grid_table,
                 'list-table': self.list_table,
+                'html': self.html_table,
                 }[fmt](indentation)
     
     def plain_table(self, indentation = ''):
@@ -278,6 +309,19 @@ class Table(object):
     
         return '\n'.join(rest)
     
+    def html_table(self, indentation = ''):
+        """render the table in *HTML*"""
+        html = "<table>\n"
+        html += '  <tr>\n'              # start the labels
+        html += "".join(["    <th>{}</th>\n".format(k) for k in self.labels]) # labels
+        html += '  </tr>\n'             # end the labels
+        for row in self.rows:
+            html += '  <tr>\n'          # start each row
+            html += "".join(["    <td>{}</td>\n".format(k) for k in row]) # each row
+            html += '  </tr>\n'         # end each row
+        html += '</table>'              # end of table
+        return html
+    
     def _row(self, row, fmt, indentation = ''):
         """
         Given a list of entry nodes in this table row, 

provide HTML table output format
diff --git a/tests/test_results.py b/tests/test_results.py
index 264a255..55375d1 100644
--- a/tests/test_results.py
+++ b/tests/test_results.py
@@ -80,14 +80,25 @@ MINIMAL_LISTTABLE_RESULT = '''\
      - 2\
 '''
 
+MINIMAL_HTML_RESULT = '''\
+<table>
+  <tr>
+    <th>x</th>
+    <th>y</th>
+  </tr>
+  <tr>
+    <td>1</td>
+    <td>2</td>
+  </tr>
+</table>\
+'''
+
 
-EXAMPLE_MINIMAL_RESULT = MINIMAL_PLAIN_RESULT
-EXAMPLE_MINIMAL_RESULT += '\n'
-EXAMPLE_MINIMAL_RESULT += MINIMAL_SIMPLE_RESULT
-EXAMPLE_MINIMAL_RESULT += '\n'
-EXAMPLE_MINIMAL_RESULT += MINIMAL_GRID_RESULT
-EXAMPLE_MINIMAL_RESULT += '\n'
-EXAMPLE_MINIMAL_RESULT += MINIMAL_LISTTABLE_RESULT
+EXAMPLE_MINIMAL_RESULT = MINIMAL_PLAIN_RESULT + '\n'
+EXAMPLE_MINIMAL_RESULT += MINIMAL_SIMPLE_RESULT + '\n'
+EXAMPLE_MINIMAL_RESULT += MINIMAL_GRID_RESULT + '\n'
+EXAMPLE_MINIMAL_RESULT += MINIMAL_LISTTABLE_RESULT + '\n'
+EXAMPLE_MINIMAL_RESULT += MINIMAL_HTML_RESULT
 
 
 EXAMPLE_BASIC_RESULT = '''\
@@ -136,7 +147,36 @@ one two three
      - 3,3
    * - 4,1
      - 4,2
-     - 4,3'''
+     - 4,3
+\
+<table>
+  <tr>
+    <th>one</th>
+    <th>two</th>
+    <th>three</th>
+  </tr>
+  <tr>
+    <td>1,1</td>
+    <td>1,2</td>
+    <td>1,3</td>
+  </tr>
+  <tr>
+    <td>2,1</td>
+    <td>2,2</td>
+    <td>2,3</td>
+  </tr>
+  <tr>
+    <td>3,1</td>
+    <td>3,2</td>
+    <td>3,3</td>
+  </tr>
+  <tr>
+    <td>4,1</td>
+    <td>4,2</td>
+    <td>4,3</td>
+  </tr>
+</table>\
+'''
 
 
 EXAMPLE_COMPLICATED_RESULT = '''
@@ -170,7 +210,7 @@ class Test_pyRestTable(unittest.TestCase):
     
     def apply_test(self, table, reference_text, style='simple'):
         text = table.reST(fmt=style)
-        self.assertTrue(text == reference_text)
+        self.assertTrue(text.strip() == reference_text.strip())
     
     def population_table(self):
         t = pyRestTable.Table()
@@ -231,10 +271,14 @@ class Test_pyRestTable(unittest.TestCase):
     def test_minimal_listtable(self):
         self.apply_test(pyRestTable.rest_table.example_minimal(), MINIMAL_LISTTABLE_RESULT, 'list-table')
 
+    def test_minimal_htmltable(self):
+        table = pyRestTable.rest_table.example_minimal()
+        self.apply_test(table, MINIMAL_HTML_RESULT, 'html')
+
     def test_example_basic(self):
         t = pyRestTable.rest_table.example_basic()
         s = pyRestTable.rest_table._prepare_results_(t)
-        self.assertEqual(s, EXAMPLE_BASIC_RESULT)
+        self.assertEqual(s.strip(), EXAMPLE_BASIC_RESULT.strip())
 
     def test_example_complicated(self):
         t = pyRestTable.rest_table.example_complicated()

pip install -e .
parse_log_pytest
requirements.txt
pytest
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi==2025.1.31
charset-normalizer==3.4.1
coverage==7.8.0
coveralls==4.0.1
docopt==0.6.2
exceptiongroup==1.2.2
idna==3.10
iniconfig==2.1.0
lxml==5.3.1
packaging==24.2
pluggy==1.5.0
-e git+https://github.com/prjemian/pyRestTable.git@3e477f655666c5a530ddbb95bc64fff31fa1fd69#egg=pyRestTable
pytest==8.3.5
requests==2.32.3
tomli==2.2.1
urllib3==2.3.0

name: pyRestTable
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - coverage==7.8.0
      - coveralls==4.0.1
      - docopt==0.6.2
      - exceptiongroup==1.2.2
      - idna==3.10
      - iniconfig==2.1.0
      - lxml==5.3.1
      - packaging==24.2
      - pluggy==1.5.0
      - pytest==8.3.5
      - requests==2.32.3
      - tomli==2.2.1
      - urllib3==2.3.0
prefix: /opt/conda/envs/pyRestTable

tests/test_results.py::Test_pyRestTable::test_example_basic tests/test_results.py::Test_pyRestTable::test_example_minimal tests/test_results.py::Test_pyRestTable::test_minimal_htmltable
tests/test_results.py::Test_pyRestTable::test_example_complicated
tests/test_results.py::Test_pyRestTable::test_cansas tests/test_results.py::Test_pyRestTable::test_default_str tests/test_results.py::Test_pyRestTable::test_grid tests/test_results.py::Test_pyRestTable::test_minimal_complex tests/test_results.py::Test_pyRestTable::test_minimal_grid tests/test_results.py::Test_pyRestTable::test_minimal_listtable tests/test_results.py::Test_pyRestTable::test_minimal_simple tests/test_results.py::Test_pyRestTable::test_num_col_labels_different_from_col_width_specifiers tests/test_results.py::Test_pyRestTable::test_plain tests/test_results.py::Test_pyRestTable::test_simple tests/test_results.py::Test_pyRestTable::test_zero_columns tests/test_results.py::Test_pyRestTable::test_zero_width_column
README.rst docs/source/examples/html.rst src/pyRestTable/rest_table.py .travis.yml CHANGES.rst docs/source/examples/index.rst
README.rst docs/source/examples/html.rst src/pyRestTable/rest_table.py .travis.yml CHANGES.rst docs/source/examples/index.rst