diff --git a/goodtables/validate.py b/goodtables/validate.py
index 19e85e4..f5d72f2 100644
--- a/goodtables/validate.py
+++ b/goodtables/validate.py
@@ -28,6 +28,15 @@ def validate(source, **options):
     settings['custom_checks'] = options.pop('custom_checks', None)
     settings = {key: value for key, value in settings.items() if value is not None}
 
+    # Support for pathlib.Path
+    if hasattr(source, 'joinpath'):
+        source = str(source)
+    if isinstance(source, list):
+        if source and isinstance(source[0], dict) and 'source' in source[0]:
+            for index, item in enumerate(source):
+                if hasattr(item['source'], 'joinpath'):
+                    source[index]['source'] = str(item['source'])
+
     # Extract/infer preset
     preset = options.pop('preset', None)
     if preset is None:

Posixpath support
Would be great if `goodtables` supported a [pathlib](https://docs.python.org/3/library/pathlib.html) `Posixpath` ... 

Not sure, maybe it's only `stream.open` in `inspector.py`?
diff --git a/tests/test_validate.py b/tests/test_validate.py
index f1a78e6..7ae59e4 100644
--- a/tests/test_validate.py
+++ b/tests/test_validate.py
@@ -4,8 +4,10 @@ from __future__ import print_function
 from __future__ import absolute_import
 from __future__ import unicode_literals
 
+import sys
 import json
 import pytest
+from importlib import import_module
 from goodtables import validate
 
 
@@ -123,6 +125,24 @@ def test_validate_datapackage_dialect_header_false(log):
     assert log(report) == []
 
 
+# Source as pathlib.Path
+
+@pytest.mark.skipif(sys.version_info < (3, 4), reason='not supported')
+def test_source_pathlib_path_table():
+    pathlib = import_module('pathlib')
+    report = validate(pathlib.Path('data/valid.csv'))
+    assert report['table-count'] == 1
+    assert report['valid']
+
+
+@pytest.mark.skipif(sys.version_info < (3, 4), reason='not supported')
+def test_source_pathlib_path_datapackage():
+    pathlib = import_module('pathlib')
+    report = validate(pathlib.Path('data/datapackages/valid/datapackage.json'))
+    assert report['table-count'] == 2
+    assert report['valid']
+
+
 # Issues
 
 def test_composite_primary_key_unique_issue_215(log):

pip install -e .[develop,ods]
parse_log_pytest
pytest
pytest pytest-cov pytest-mock mock pyyaml
apt-get update apt-get install -y gcc
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
boto3==1.23.10
botocore==1.26.10
cached-property==1.5.2
certifi==2021.5.30
chardet==5.0.0
charset-normalizer==2.0.12
click==6.7
coverage==6.2
dataflows-tabulator==1.54.3
datapackage==1.15.4
distlib==0.3.9
docutils==0.18.1
et-xmlfile==1.1.0
ezodf==0.3.2
filelock==3.4.1
-e git+https://github.com/frictionlessdata/goodtables-py.git@fa0cc77e216a4cabdc581e09ab0a398c40d0ae37#egg=goodtables
greenlet==2.0.2
idna==3.10
ijson==3.3.0
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
isodate==0.6.1
jmespath==0.10.0
jsonlines==3.1.0
jsonpointer==2.3
jsonschema==3.2.0
linear-tsv==1.1.0
lxml==3.8.0
mccabe==0.7.0
mock==5.2.0
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
openpyxl==3.1.3
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
platformdirs==2.4.0
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycodestyle==2.10.0
pydocstyle==6.3.0
pyflakes==3.0.1
pylama==7.7.1
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pyrsistent==0.18.0
pytest==6.2.4
pytest-cov==4.0.0
pytest-mock==3.6.1
python-dateutil==2.9.0.post0
PyYAML==6.0.1
requests==2.27.1
rfc3986==1.5.0
s3transfer==0.5.2
simpleeval==0.9.13
six==1.17.0
snowballstemmer==2.2.0
SQLAlchemy==1.4.54
statistics==1.0.3.5
tableschema==1.21.0
tabulator==1.53.5
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tomli==1.2.3
tox==3.28.0
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
unicodecsv==0.14.1
urllib3==1.26.20
virtualenv==20.17.1
xlrd==2.0.1
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: goodtables-py
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
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - boto3==1.23.10
      - botocore==1.26.10
      - cached-property==1.5.2
      - chardet==5.0.0
      - charset-normalizer==2.0.12
      - click==6.7
      - coverage==6.2
      - dataflows-tabulator==1.54.3
      - datapackage==1.15.4
      - distlib==0.3.9
      - docutils==0.18.1
      - et-xmlfile==1.1.0
      - ezodf==0.3.2
      - filelock==3.4.1
      - greenlet==2.0.2
      - idna==3.10
      - ijson==3.3.0
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - isodate==0.6.1
      - jmespath==0.10.0
      - jsonlines==3.1.0
      - jsonpointer==2.3
      - jsonschema==3.2.0
      - linear-tsv==1.1.0
      - lxml==3.8.0
      - mccabe==0.7.0
      - mock==5.2.0
      - openpyxl==3.1.3
      - platformdirs==2.4.0
      - pycodestyle==2.10.0
      - pydocstyle==6.3.0
      - pyflakes==3.0.1
      - pylama==7.7.1
      - pyrsistent==0.18.0
      - pytest-cov==4.0.0
      - pytest-mock==3.6.1
      - python-dateutil==2.9.0.post0
      - pyyaml==6.0.1
      - requests==2.27.1
      - rfc3986==1.5.0
      - s3transfer==0.5.2
      - simpleeval==0.9.13
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sqlalchemy==1.4.54
      - statistics==1.0.3.5
      - tableschema==1.21.0
      - tabulator==1.53.5
      - tomli==1.2.3
      - tox==3.28.0
      - unicodecsv==0.14.1
      - urllib3==1.26.20
      - virtualenv==20.17.1
      - xlrd==2.0.1
prefix: /opt/conda/envs/goodtables-py

tests/test_validate.py::test_source_pathlib_path_datapackage
tests/test_validate.py::test_validate_infer_table tests/test_validate.py::test_validate_infer_datapackage_path tests/test_validate.py::test_validate_infer_datapackage_dict tests/test_validate.py::test_validate_infer_nested tests/test_validate.py::test_validate_report_scheme_format_encoding tests/test_validate.py::test_validate_report_schema tests/test_validate.py::test_validate_report_schema_infer_schema tests/test_validate.py::test_validate_nested_checks tests/test_validate.py::test_validate_invalid_table_schema tests/test_validate.py::test_validate_datapackage_dialect_header_false tests/test_validate.py::test_source_pathlib_path_table tests/test_validate.py::test_composite_primary_key_unique_issue_215 tests/test_validate.py::test_composite_primary_key_not_unique_issue_215 tests/test_validate.py::test_validate_infer_fields_issue_223
goodtables/validate.py
goodtables/validate.py