A CLI tool to fetch the latest documentation from any website in Markdown format.
- Python 3.12+
- uv (recommended) or pip
# Using uv (recommended)
uv sync
# Or using pip
pip install -e .# List all documentation pages on a website
fresh list https://docs.python.org/3/
# Fetch a documentation page and convert to Markdown
fresh get https://docs.python.org/3/tutorial/
# Search for content across documentation pages
fresh search "virtual environment" https://docs.python.org/3/
# Download entire documentation for offline use
fresh sync https://docs.python.org/3/
# Add an alias for quick access
fresh alias add python https://docs.python.org/3/
fresh list pythonList all documentation pages available on a website.
fresh list <URL> [OPTIONS]Options:
-v, --verbose- Use rich output format-p, --pattern TEXT- Filter paths matching pattern-d, --depth INTEGER- Maximum crawl depth (default: 3)--max-pages INTEGER- Maximum number of pages to discover (default: 100)--sort TEXT- Sort results by name or path-f, --format TEXT- Output format: json, yaml, xml-c, --count- Show only total count
Fetch a documentation page and convert it to Markdown.
fresh get <URL> [OPTIONS]Options:
-v, --verbose- Use verbose output-t, --timeout INTEGER- Request timeout in seconds (default: 30)--header TEXT- Custom HTTP header--no-follow- Do not follow redirects--skip-scripts- Exclude JavaScript from output--no-cache- Bypass cache-o, --output TEXT- Write output to file-r, --retry INTEGER- Number of retry attempts (default: 3)--dry-run- Show what would be fetched without downloading
Search for content across documentation pages.
fresh search <QUERY> <URL> [OPTIONS]Search the general web for any topic.
# Basic search (uses DuckDuckGo HTML, free)
fresh websearch "python async tutorial"
# With specific number of results
fresh websearch "react hooks" --count 5
# Table output for human-readable display
fresh websearch "rust ownership" --tableOptions:
-n, --count INTEGER- Maximum number of results (default: 10)-e, --engine TEXT- Search engine: auto, ddg, brave (default: auto)-j, --json- Output as JSON (default)-t, --table- Output as table-v, --verbose- Show verbose output
Note: Brave Search API can be used by setting the BRAVE_API_KEY environment variable. DuckDuckGo is used by default (free, no API key required).
Manage library aliases for quick access.
# Add an alias
fresh alias add <name> <url>
# List all aliases
fresh alias list
# Search aliases
fresh alias search <query>Download entire documentation for offline use.
fresh sync <URL> [OPTIONS]Options:
-o, --output-dir PATH- Target directory for synced docs-v, --verbose- Use verbose output--max-pages INTEGER- Maximum number of pages to sync (default: 100)-d, --depth INTEGER- Maximum crawl depth (default: 3)-f, --force- Force re-sync (delete existing files first)-p, --pattern TEXT- Filter paths matching pattern
Manage personal guides and documentation.
# Create a new guide
fresh guide create my-guide --content "Guide content here" --title "My Guide"
# List all guides
fresh guide list
# Show a specific guide
fresh guide show my-guide
# Search across guides
fresh guide search "keyword"Fresh stores its configuration in the following locations:
- Aliases:
~/.fresh/aliases.json - Cache:
~/.fresh/cache/ - Sync data:
~/.fresh/docs/ - History:
~/.fresh/history.db
# Install dev dependencies
uv sync --extra dev
# Run linter
ruff check .
# Run type checker
mypy src/
# Run tests
pytestContributions are welcome! Please feel free to submit a Pull Request.
- Nesalia Inc.
If you discover any security vulnerabilities, please send an e-mail to support@nesalia.com.
MIT License - see the LICENSE file for details.
