Excel for Developers - A fast, local-first web GUI for exploring data with VisiData
Project description
VisiLens
Excel for Developers
Open 1M+ rows in seconds. Local, fast, simple.
A high-performance, local-first web GUI for exploring datasets. Instantly view and filter CSV, Parquet, Excel, and JSON files using the power of VisiData.
Features • Installation • Usage • Architecture • Contributing
🚀 Why VisiLens?
Data exploration shouldn't require writing boilerplate Pandas code or waiting for heavy spreadsheet software like Excel to load. VisiLens is a modern CSV viewer and Parquet explorer that combines the raw speed of VisiData with a lightweight web interface.
- ⚡️ Load 1M rows in under 2 seconds: Powered by VisiData's highly optimized engine.
- 🔒 All local: Your data never leaves your machine. No cloud uploads.
- 🛠 Zero config: CLI-first workflow. Pipe data in, explore, and get back to coding.
- 🔌 Universal Support: Open CSV, TSV, JSON, Parquet, Excel, SQLite, and 50+ other formats.
✨ Features
- Instant Data Visualization: Just run
vdweb data.csvto visualize large datasets instantly. - Backend-powered Sorting & Filtering: Perform complex queries on millions of rows using the VisiData engine.
- Lightweight Data Grid: A virtualized React-based table view for smooth scrolling.
- Zero Config: No database setup required. Works as a standalone CSV/Parquet viewer.
📂 Supported Formats
VisiLens leverages VisiData's loaders to support a wide range of formats out of the box:
- Tabular:
.csv,.tsv,.xlsx(Excel),.parquet - Structured:
.json,.jsonl,.yaml - Database:
.sqlite,.db - Code:
.pcap(Wireshark),.xml,.htmltables
📊 Benchmarks
We take performance seriously. Here is how VisiLens compares when opening a 1,000,000 row CSV dataset on a standard MacBook Air (M2).
| Tool | Load Time (1M Rows) | Memory Footprint | Interactive Sorting |
|---|---|---|---|
| VisiLens | ~1.7s | Minimal (< 50MB Total) | Instant (Backend: < 0.4s) |
| Excel | > 30s (Often Fails) | High (Blocking RAM) | Slow/Unresponsive |
| Pandas-based GUI | > 15s (Cold Start) | High (Entire DF in RAM) | Sluggish (Non-Virtualized) |
| Jupyter (print df) | Fast | Medium | Static Text |
Test Data: 1M rows, 3 columns (Mixed types). Numbers are from my MacBook Air M2 during real development use.
📦 Installation
VisiLens is available as a Python package.
pip install vdweb
Note: VisiLens requires Python 3.10 or higher.
💻 Usage
Command Line Interface
The primary way to use VisiLens is via the command line.
# Open a CSV file
vdweb data.csv
# Open a Parquet file
vdweb large-dataset.parquet
# Open an Excel file
vdweb spreadsheet.xlsx
# Launch without opening the browser automatically
vdweb data.json --no-browser
# Specify a custom port
vdweb data.csv --port 9000
Web Interface
Once launched, VisiLens opens in your default browser (usually http://localhost:8000).
- View Data: Scroll through your dataset efficiently.
- Sort: Click column headers to sort ascending/descending.
- Filter: Use the filter inputs to search within columns.
- Load New Data: (Coming Soon) Drag and drop files directly into the window.
🏗 Architecture
VisiLens is built on a robust modern stack designed for performance:
- Backend: FastAPI server bridges VisiData and the browser.
- Communication: WebSockets stream slices on demand.
- Frontend: React grid renders only what you see.
🗺 Roadmap
We are actively working on making VisiLens the ultimate local data companion.
- v0.1: Core Engine, Virtual Scrolling, Sorting, Filtering.
- Jupyter Integration: Launch VisiLens directly from a notebook cell (
visilens.view(df)). - Drag-and-drop file loading
- Plotting: Quick histograms and scatter plots via Vega-Lite.
- Editing: Edit cells and save changes back to CSV/Parquet.
- SQL Support: Connect directly to SQLite/Postgres/DuckDB.
🛠 Development
Want to contribute? Great! Here's how to set up the development environment.
Prerequisites
- Python 3.10+
- Node.js 18+
- npm or pnpm
Setup
-
Clone the repository
git clone https://github.com/PStarH/VisiLens.git cd VisiLens
-
Backend Setup
# Create virtual environment python -m venv .venv source .venv/bin/activate # or .venv\Scripts\activate on Windows # Install dependencies pip install -e ".[dev]"
-
Frontend Setup
cd frontend npm install
-
Run Locally
Terminal 1 (Backend):
uvicorn backend.main:app --reload --port 8000
Terminal 2 (Frontend):
cd frontend
npm run dev
- Build frontend assets (optional)
If you prefer to run only the Python CLI (without a separate Vite dev server), you can build the frontend once:
cd frontend
npm run build
This produces a production bundle under frontend/dist/ which is copied into vdweb/static/ for releases. End users then just run:
vdweb path/to/data.csv
🤝 Contributing
For Contributors: where things live
- Python package (
vdweb/): This is the installable package published to PyPI. The CLI entrypointsvdweb/visilensboth resolve tovdweb.cli:mainas configured inpyproject.toml. - Dev backend (
backend/): A separate FastAPI app used only for local development (uvicorn backend.main:app). It mirrors the behavior of the packaged backend but is not what users import when they installvdweb. - Core logic: The VisiData-powered data access layer lives in
vdweb/core.py(and is mirrored inbackend/core.pyfor the dev app). If you want to change how data is loaded/sorted/filtered, start here.
Typical contributor workflow
- Edit backend / core logic in
vdweb/(and updatebackend/if needed for dev parity). - Run the dev backend + frontend locally as described in Development.
- If you change the React app and want those changes to ship, run
npm run buildinfrontend/so the bundle that will be copied intovdweb/static/is up to date.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 vdweb-0.1.0.tar.gz.
File metadata
- Download URL: vdweb-0.1.0.tar.gz
- Upload date:
- Size: 92.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12b74bfe84d41d9447e99a395fc94e825f509b8e06403f12cc853888815fbe4d
|
|
| MD5 |
4021c52067fb3a7c97389579c2a85a00
|
|
| BLAKE2b-256 |
7590ac693b8f9292c0ed02b9fa35e630fe499735a5571c7f7a4972c8500efda0
|
File details
Details for the file vdweb-0.1.0-py3-none-any.whl.
File metadata
- Download URL: vdweb-0.1.0-py3-none-any.whl
- Upload date:
- Size: 89.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
750711c1154d8e9a6995598355d460f9f2dc25edaee72bc856a16ab382c4a382
|
|
| MD5 |
cc58b5570f86214effc78064d464dc79
|
|
| BLAKE2b-256 |
aaae915213fb8a78f04b000fcc2d2c8dc79165df018c1c6f61eeba9ef9584be2
|