Metadata-Version: 2.5
Name: indexly
Version: 2.1.7
Summary: A local file indexing and search tool with FTS5, regex, and CSV analysis support.
Project-URL: Homepage, https://projectindexly.com
Project-URL: Documentation, https://projectindexly.com
Project-URL: Source, https://github.com/kimsgent/project-indexly
Project-URL: Issues, https://github.com/kimsgent/project-indexly/issues
Author: N. K Franklin-Gent
Author-email: OpenAI ChatGPT <support@openai.com>
License: MIT
License-File: LICENSE.txt
Keywords: asyncio,csv,fts5,indexing,regex,search
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Database
Classifier: Topic :: Text Processing :: Indexing
Classifier: Topic :: Utilities
Requires-Python: >=3.11
Requires-Dist: beautifulsoup4<5.0,>=4.12
Requires-Dist: colorama<1.0,>=0.4
Requires-Dist: pypdf2<4.0,>=3.0
Requires-Dist: pyyaml<7.0,>=6.0
Requires-Dist: rapidfuzz<4.0,>=2.16
Requires-Dist: requests<3.0,>=2.31
Requires-Dist: rich<16.0,>=15.0
Requires-Dist: watchdog<5.0,>=3.0
Requires-Dist: xmltodict<1.0,>=0.13
Provides-Extra: analysis
Requires-Dist: numpy<3.0,>=1.26; extra == 'analysis'
Requires-Dist: pandas<3.0,>=2.1; extra == 'analysis'
Requires-Dist: pyarrow<20.0,>=16.0; (python_version < '3.14') and extra == 'analysis'
Requires-Dist: pyarrow<26.0,>=23.0; (python_version >= '3.14') and extra == 'analysis'
Requires-Dist: scipy<2.0,>=1.12; extra == 'analysis'
Requires-Dist: statsmodels<0.15,>=0.14; extra == 'analysis'
Requires-Dist: tabulate<1.0,>=0.9; extra == 'analysis'
Provides-Extra: backup
Requires-Dist: cryptography<49.0,>=42.0; extra == 'backup'
Provides-Extra: documents
Requires-Dist: ebooklib<1.0,>=0.18; extra == 'documents'
Requires-Dist: eml-parser<2.0,>=1.0; extra == 'documents'
Requires-Dist: extract-msg<1.0,>=0.25; extra == 'documents'
Requires-Dist: odfpy<2.0,>=1.4; extra == 'documents'
Requires-Dist: openpyxl<4.0,>=3.1; extra == 'documents'
Requires-Dist: pillow<12.0,>=10.0; extra == 'documents'
Requires-Dist: pymupdf<2.0,>=1.23; extra == 'documents'
Requires-Dist: pytesseract<0.4,>=0.3.13; extra == 'documents'
Requires-Dist: python-docx<2.0,>=1.2; extra == 'documents'
Requires-Dist: python-pptx<1.0,>=0.6; extra == 'documents'
Provides-Extra: pdf-export
Requires-Dist: fpdf2<3.0,>=2.8; extra == 'pdf-export'
Requires-Dist: reportlab<5.0,>=4.0; extra == 'pdf-export'
Provides-Extra: visualization
Requires-Dist: matplotlib<4.0,>=3.8; extra == 'visualization'
Requires-Dist: plotext<6.0,>=5.2; extra == 'visualization'
Requires-Dist: plotly<6.0,>=5.22; extra == 'visualization'
Requires-Dist: seaborn<0.14,>=0.13; extra == 'visualization'
Description-Content-Type: text/markdown

# Indexly

Indexly is a local-first command line tool for indexing, searching, and analyzing files on your own machine.

[![PyPI](https://img.shields.io/pypi/v/indexly.svg)](https://pypi.org/project/indexly/)
[![Python](https://img.shields.io/pypi/pyversions/indexly.svg)](https://pypi.org/project/indexly/)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/kimsgent/project-indexly/blob/main/LICENSE.txt)

![Indexly CLI preview](https://raw.githubusercontent.com/kimsgent/project-indexly/main/docs/static/images/indexly-terminal-768.png)

## What Indexly Helps You Do

- Index local folders quickly
- Search content using plain text or regex
- Organize and filter with tags
- Watch folders and auto-update the index
- Analyze CSV, JSON, XML, SQLite, and more
- Compare files and folders
- Create backups and restore safely

## Install

### pip (Windows, macOS, Linux)

Requires Python 3.11 or newer.

```bash
python -m pip install --upgrade pip
python -m pip install indexly
```

Verify:

```bash
indexly --version
```

### Homebrew (macOS and Linux)

```bash
brew tap kimsgent/indexly
brew install indexly
```

Verify:

```bash
indexly --version
```

Homebrew installs the lightweight Indexly core. Manage optional groups with the
brewed executable:

```bash
command -v indexly
indexly extras list
indexly extras install documents
indexly extras status
```

Available groups are `documents`, `analysis`, `visualization`, `pdf_export`,
and `backup`. Remove a group with `indexly extras uninstall <group>`.
Homebrew extras are installed into a user-owned overlay scoped to the installed
Indexly version, Python ABI, and platform architecture, outside the Homebrew
Cellar. After
`brew upgrade indexly`, check `indexly extras status` and reinstall any group
that the new version needs.

If `command -v indexly` resolves to a pip or pyenv installation, target
Homebrew explicitly with
`"$(brew --prefix indexly)/bin/indexly" extras install <group>`.

Selected groups share one managed environment so common dependencies resolve
to compatible versions. Adding or removing a group rebuilds that environment
atomically and may download packages; the previous working environment remains
available if resolution fails.

If `indexly extras status` reports an invalid managed environment, run
`indexly extras reset`, then reinstall the groups you need.

Upgrade-created stale overlays are reported but never loaded. They remain after
`brew uninstall` and can consume substantial space; inspect
`indexly extras status --json` and remove only an obsolete stale
`environment` path after confirming it is no longer needed.

## Optional Extras for pip and virtual environments

`indexly extras install <group>` is also safe for pip installations. If you
prefer to manage optional packages directly in a pip installation or virtual
environment, use that environment's Python explicitly:

```bash
python -m pip install "indexly[documents]"
python -m pip install "indexly[analysis]"
python -m pip install "indexly[visualization]"
python -m pip install "indexly[pdf_export]"
python -m pip install "indexly[backup]"
```

Install all optional groups:

```bash
python -m pip install "indexly[documents,analysis,visualization,pdf_export,backup]"
```

Do not use generic `pip`, `pip --user`, `sudo pip`, or `PYTHONPATH` to add
dependencies to a Homebrew installation. If pip and Homebrew installations
coexist, use `command -v indexly` to identify the executable you are managing.

The `documents` group installs Python dependencies for ordinary PDF extraction
and OCR integration. OCR additionally requires the separate Tesseract
executable; on Homebrew systems, install it with `brew install tesseract`.

## Quick Start

```bash
indexly index /path/to/folder
indexly search "invoice"
indexly regex "[A-Z]{3}-\\d{4}"
indexly analyze-csv data.csv --show-summary
```

## Search Cache Behavior

FTS search results are cached in `search_cache.json` in Indexly's runtime data
directory. The FTS database is stored beside it as `fts_index.db`, and that
database keeps a small `indexly_state` value named `search_index_generation`.

When indexing changes file content or prunes stale rows under the indexed root,
Indexly increments the search index generation. Normal searches include that
generation in their cache key, so a search after re-indexing refreshes from the
database automatically instead of reusing results from an older index generation.
Use `--no-cache` for a one-off cache bypass, or `indexly doctor --clear-cache` to
remove cached search results.

## Developer Environment

```bash
git clone https://github.com/kimsgent/project-indexly.git
cd project-indexly
python -m venv .venv
```

Activate virtual environment:

- macOS/Linux: `source .venv/bin/activate`
- Windows (PowerShell): `.venv\Scripts\Activate.ps1`

Install project and tools:

```bash
python -m pip install --upgrade pip
python -m pip install -e ".[documents,analysis,visualization,pdf_export,backup]"
python -m pip install pytest pytest-cov flake8 black isort mypy build twine
```

## Links

- Documentation: [https://projectindexly.com](https://projectindexly.com)
- Source: [https://github.com/kimsgent/project-indexly](https://github.com/kimsgent/project-indexly)
- Issues: [https://github.com/kimsgent/project-indexly/issues](https://github.com/kimsgent/project-indexly/issues)

## License

MIT. See [LICENSE.txt](https://github.com/kimsgent/project-indexly/blob/main/LICENSE.txt).
