This release is a pre-release and may not be stable for production use.
CSVtoTable
CSVtoTable converts CSV files into interactive HTML tables.
- Single native binary with embedded frontend assets
- Standalone HTML output that works offline
- Local files, URLs, standard input, and multi-file input
- Mobile-responsive table layout
- Search, sorting, pagination, and virtual scrolling
- Copy, CSV, JSON, and print exports
- User-controlled light and dark themes
Usage
# Write a standalone page
csvtotable sample/meteorite-landings-1.csv meteorites.html
# Combine files with the same columns
csvtotable sample/meteorite-landings-1.csv sample/meteorite-landings-2.csv meteorites.html
# Fetch CSV directly from a URL
csvtotable https://raw.githubusercontent.com/vividvilla/csvtotable/master/sample/meteorite-landings-1.csv meteorites.html
# Open a temporary page in the default browser
csvtotable data.csv --serve
# Add a title and generate headers for headerless data
csvtotable data.csv data.html --title "Sales" --no-header
# Read stdin and write stdout
curl -L https://example.com/data.csv | csvtotable - - > data.html
Inputs may be local files, http:// or https:// URLs, or - for standard
input. When combining inputs, their headers and row widths must match. With
--no-header, generated column names are used and row widths must still match.
The final positional argument is the output file unless --serve is used.
BOM-marked UTF-8 and UTF-16 input is detected automatically. Use --encoding
for other encodings, and --delimiter or --quotechar for custom CSV formats.
Run csvtotable --help for all options or csvtotable --version for the version.
For compatibility with version 2, --pagination and --export disable those
features.
Install
uvx, pipx, or pip
Run without installing:
uvx csvtotable data.csv data.html
Or install it:
pipx install csvtotable
pip install csvtotable # or inside a virtual environment:
uv tool install csvtotable
npx or npm
npx @vividvilla/csvtotable data.csv data.html
npm install --global @vividvilla/csvtotable # or install globally:
To run a particular published version:
uvx csvtotable@X.Y.Z data.csv data.html
npx @vividvilla/csvtotable@X.Y.Z data.csv data.html
Homebrew
brew install vividvilla/tap/csvtotable
Standalone binary
Download an archive from GitHub Releases,
verify it with SHA256SUMS, and place csvtotable (csvtotable.exe on Windows)
on your PATH.
Prebuilt binaries support Linux x86-64/ARM64, macOS 12+ x86-64/Apple Silicon, and Windows 10+ x86-64.
Development
Building requires Go 1.24+ and Bun. Distribution packaging also requires Python
and npm. table/dist is generated before the Go build and embedded in the final
binary.
nix develop # optional development environment
make build # frontend and build/csvtotable
make test # frontend, formatting, vet, and tests
make dist # binary and host-platform packages under dist/
./build/csvtotable sample/meteorite-landings-1.csv sample/meteorite-landings-2.csv /tmp/meteorites.html
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file csvtotable-3.0.0b5-py3-none-win_amd64.whl.
File metadata
- Download URL: csvtotable-3.0.0b5-py3-none-win_amd64.whl
- Upload date:
- Size: 3.9 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f6bc86b3c65745ecd40890053145975431c9b0e4a103cf535c02690a6fe09ce
|
|
| MD5 |
8ec11c5254c796849fb3ee85dd9dc1ed
|
|
| BLAKE2b-256 |
a8106ef505e70f84e769bc6e8545c7f517d22a4d0857c7970b01acc113a2bd10
|
Provenance
The following attestation bundles were made for csvtotable-3.0.0b5-py3-none-win_amd64.whl:
Publisher:
release.yml on vividvilla/csvtotable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
csvtotable-3.0.0b5-py3-none-win_amd64.whl -
Subject digest:
4f6bc86b3c65745ecd40890053145975431c9b0e4a103cf535c02690a6fe09ce - Sigstore transparency entry: 2534256113
- Sigstore integration time:
-
Permalink:
vividvilla/csvtotable@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Branch / Tag:
refs/tags/v3.0.0-beta.5 - Owner: https://github.com/vividvilla
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file csvtotable-3.0.0b5-py3-none-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: csvtotable-3.0.0b5-py3-none-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 3.8 MB
- Tags: Python 3, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b4205b3de682eed75c477715140f5b93de75f5fe0434fa7b2b87e293315eb56
|
|
| MD5 |
fb3a5930284aa4ed7520e1d7ca0341aa
|
|
| BLAKE2b-256 |
71576c77a845ca03ca38623d958b487046c539bb7fec1c8c7257a45a769a90ce
|
Provenance
The following attestation bundles were made for csvtotable-3.0.0b5-py3-none-musllinux_1_2_x86_64.whl:
Publisher:
release.yml on vividvilla/csvtotable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
csvtotable-3.0.0b5-py3-none-musllinux_1_2_x86_64.whl -
Subject digest:
5b4205b3de682eed75c477715140f5b93de75f5fe0434fa7b2b87e293315eb56 - Sigstore transparency entry: 2534256486
- Sigstore integration time:
-
Permalink:
vividvilla/csvtotable@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Branch / Tag:
refs/tags/v3.0.0-beta.5 - Owner: https://github.com/vividvilla
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file csvtotable-3.0.0b5-py3-none-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: csvtotable-3.0.0b5-py3-none-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 3.5 MB
- Tags: Python 3, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d853b1b5ab244494bc55e4a3dd56bdf7c80e073cb19e31e329fc688f280fe36
|
|
| MD5 |
393fc7c44c2d32411f0e0e7c6b3dd5e1
|
|
| BLAKE2b-256 |
802c29e1b8723af8f91da3381a73ddff9c8d3df881e5dc32d0f2cbf50be2ba22
|
Provenance
The following attestation bundles were made for csvtotable-3.0.0b5-py3-none-musllinux_1_2_aarch64.whl:
Publisher:
release.yml on vividvilla/csvtotable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
csvtotable-3.0.0b5-py3-none-musllinux_1_2_aarch64.whl -
Subject digest:
6d853b1b5ab244494bc55e4a3dd56bdf7c80e073cb19e31e329fc688f280fe36 - Sigstore transparency entry: 2534256253
- Sigstore integration time:
-
Permalink:
vividvilla/csvtotable@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Branch / Tag:
refs/tags/v3.0.0-beta.5 - Owner: https://github.com/vividvilla
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file csvtotable-3.0.0b5-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: csvtotable-3.0.0b5-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 3.8 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
944067ecb3ec5272b2b8b1508adfca01c59ffb552495f9081a41a5292d5fc371
|
|
| MD5 |
c8635c2190949a35477d5a698c6a8e89
|
|
| BLAKE2b-256 |
187e8055caee46cebda877a38a892f322cba2dab24e0f3d8ab4486d704cb3fad
|
Provenance
The following attestation bundles were made for csvtotable-3.0.0b5-py3-none-manylinux_2_17_x86_64.whl:
Publisher:
release.yml on vividvilla/csvtotable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
csvtotable-3.0.0b5-py3-none-manylinux_2_17_x86_64.whl -
Subject digest:
944067ecb3ec5272b2b8b1508adfca01c59ffb552495f9081a41a5292d5fc371 - Sigstore transparency entry: 2534256310
- Sigstore integration time:
-
Permalink:
vividvilla/csvtotable@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Branch / Tag:
refs/tags/v3.0.0-beta.5 - Owner: https://github.com/vividvilla
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file csvtotable-3.0.0b5-py3-none-manylinux_2_17_aarch64.whl.
File metadata
- Download URL: csvtotable-3.0.0b5-py3-none-manylinux_2_17_aarch64.whl
- Upload date:
- Size: 3.5 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15514ae3db7cbef57f4ab3d85682f57113b1b9206047db68c609f5e3ed1faf25
|
|
| MD5 |
7bee9391abc91fb42cc5aa99ddad338d
|
|
| BLAKE2b-256 |
f7bc0f0296bc4a38a2f64a08599f65d2ab46bc050d3f2220db3d4b60f5b274e1
|
Provenance
The following attestation bundles were made for csvtotable-3.0.0b5-py3-none-manylinux_2_17_aarch64.whl:
Publisher:
release.yml on vividvilla/csvtotable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
csvtotable-3.0.0b5-py3-none-manylinux_2_17_aarch64.whl -
Subject digest:
15514ae3db7cbef57f4ab3d85682f57113b1b9206047db68c609f5e3ed1faf25 - Sigstore transparency entry: 2534256396
- Sigstore integration time:
-
Permalink:
vividvilla/csvtotable@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Branch / Tag:
refs/tags/v3.0.0-beta.5 - Owner: https://github.com/vividvilla
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file csvtotable-3.0.0b5-py3-none-macosx_12_0_x86_64.whl.
File metadata
- Download URL: csvtotable-3.0.0b5-py3-none-macosx_12_0_x86_64.whl
- Upload date:
- Size: 3.9 MB
- Tags: Python 3, macOS 12.0+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dda2dd0bcd0be46a590c9ed997c12b4ae156fe6374c0e3eab035b65e1533e7d0
|
|
| MD5 |
3aa988ce8ee3800c7fac5b1402938208
|
|
| BLAKE2b-256 |
97e1088b032be77560959ff785654c1d2037c072b2f9c5af28fdb6f9e56965bd
|
Provenance
The following attestation bundles were made for csvtotable-3.0.0b5-py3-none-macosx_12_0_x86_64.whl:
Publisher:
release.yml on vividvilla/csvtotable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
csvtotable-3.0.0b5-py3-none-macosx_12_0_x86_64.whl -
Subject digest:
dda2dd0bcd0be46a590c9ed997c12b4ae156fe6374c0e3eab035b65e1533e7d0 - Sigstore transparency entry: 2534256193
- Sigstore integration time:
-
Permalink:
vividvilla/csvtotable@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Branch / Tag:
refs/tags/v3.0.0-beta.5 - Owner: https://github.com/vividvilla
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file csvtotable-3.0.0b5-py3-none-macosx_12_0_arm64.whl.
File metadata
- Download URL: csvtotable-3.0.0b5-py3-none-macosx_12_0_arm64.whl
- Upload date:
- Size: 3.6 MB
- Tags: Python 3, macOS 12.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cfebc5dedcf15267756c6756addfd1e26b5db7993af8a85ba8af78cd369b1bd
|
|
| MD5 |
2ddd604dadb6d19258064c988b134754
|
|
| BLAKE2b-256 |
d6152b2cb1728fcb8c2dd0ccd03a1dc8a884cbdb8d4e43549fa51f1fab0b402e
|
Provenance
The following attestation bundles were made for csvtotable-3.0.0b5-py3-none-macosx_12_0_arm64.whl:
Publisher:
release.yml on vividvilla/csvtotable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
csvtotable-3.0.0b5-py3-none-macosx_12_0_arm64.whl -
Subject digest:
8cfebc5dedcf15267756c6756addfd1e26b5db7993af8a85ba8af78cd369b1bd - Sigstore transparency entry: 2534256042
- Sigstore integration time:
-
Permalink:
vividvilla/csvtotable@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Branch / Tag:
refs/tags/v3.0.0-beta.5 - Owner: https://github.com/vividvilla
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@008923fc5ba8101498e7165392e9b6ac4bc85cb5 -
Trigger Event:
push
-
Statement type: