Skip to main content

lestash

PyPI version GitHub

Core CLI and plugin system for Le Stash - a personal knowledge base that aggregates content from multiple sources into a unified, searchable database.

Note: For project overview, features, and quick start guide, see the GitHub repository.

Installation

uv add lestash

Or install the full workspace from the repository root:

uv sync --all-packages

CLI Commands

Items

# List all items (with date/time and resolved author names)
lestash items list

# Filter by source
lestash items list --source linkedin

# Search items
lestash items search "query"

# Show item details (includes reaction/comment target URLs)
lestash items show <id>

# Export items to JSON
lestash items export --output backup.json

# Create a Micro.blog draft from an item
lestash items draft <id> --output ~/blog/content/drafts/

Profiles

Map person URNs (e.g., LinkedIn) to human-readable names and profile URLs:

# Add a profile mapping
lestash profiles add "urn:li:person:abc123" --name "John Doe" --url "https://linkedin.com/in/johndoe"

# List all profiles
lestash profiles list

# Show a specific profile
lestash profiles show "urn:li:person:abc123"

# Remove a profile
lestash profiles remove "urn:li:person:abc123"

When profiles are configured, items list and items search display names instead of URNs, and items show includes the profile URL.

Sources

# List configured sources
lestash sources list

# Sync all sources
lestash sources sync

# View sync history
lestash sources history

Configuration

# Show current config
lestash config show

# Initialize config file
lestash config init

# Set a config value
lestash config set logging.level DEBUG

Plugin Architecture

Le Stash uses entry points for plugin discovery. Plugins implement the SourcePlugin base class:

from lestash.plugins.base import SourcePlugin
from lestash.models.item import ItemCreate

class MySource(SourcePlugin):
    name = "my-source"
    description = "My custom data source"

    def get_commands(self) -> typer.Typer:
        """Return Typer app with source-specific commands."""
        app = typer.Typer()
        # Add commands...
        return app

    def sync(self, config: dict) -> Iterator[ItemCreate]:
        """Fetch items from the source."""
        yield ItemCreate(
            source_type="my-source",
            source_id="unique-id",
            content="Item content",
        )

Register the plugin in pyproject.toml:

[project.entry-points."lestash.sources"]
my-source = "my_package:MySource"

Data Model

Item

The core unit of content:

Field Type Description
id int Auto-generated primary key
source_type str Plugin identifier (e.g., "arxiv", "linkedin")
source_id str Unique ID within the source
url str Optional URL to original content
title str Optional title
content str Main text content
author str Optional author
created_at datetime When the content was created
is_own_content bool Whether user authored this
metadata dict Source-specific data (JSON)
parent_id int Optional FK to parent item (for grouping children)

Database

SQLite database with:

  • items - Main content table with unique constraint on (source_type, source_id) and optional parent_id for hierarchical grouping
  • items_fts - Full-text search virtual table (FTS5)
  • vec_items - Vector embeddings for semantic search (sqlite-vec)
  • item_history - Audit trail of content changes
  • person_profiles - URN to name/URL mapping for display
  • post_cache - Cached metadata for posts referenced by reactions/comments
  • tags / item_tags - Tagging system
  • collections / collection_items - Cross-source item grouping
  • sources - Plugin configuration storage
  • sync_log - Sync operation history

Configuration

Default location: ~/.config/lestash/config.toml

[general]
database_path = "~/.config/lestash/lestash.db"

[logging]
level = "INFO"
file_path = "~/.config/lestash/logs/lestash.log"

License

MIT

Metadata

Release files for lestash 1.64.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lestash 1.64.4
File Size Uploaded Provenance Actions
lestash-1.64.4.tar.gz 86.3 kB With provenance Details for lestash-1.64.4.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for lestash 1.64.4
File Interpreter ABI Platform Actions
lestash-1.64.4-py3-none-any.whl Python 3 none any Details for lestash-1.64.4-py3-none-any.whl

Total release size: 169.7 kB

Release files / lestash-1.64.4.tar.gz

Download URL lestash-1.64.4.tar.gz
Size 86.3 kB
Tags Source
SHA-256 checksum
How to use checksums
98102dc4391c0e719a1e88a2e358e9e97417c3b04b5fd95db2bc894f552644ef
BLAKE2b-256 checksum
How to use checksums
ed4575b5c5c1827ccb006cbbb499bf8c2802724b62554df4716a8c9084e25195
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.

Transparency log

Release files / lestash-1.64.4-py3-none-any.whl

Download URL lestash-1.64.4-py3-none-any.whl
Size 83.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f88d7d734280a556bdcdd15175711aea215f71cb98a0e613634ce202f361954f
BLAKE2b-256 checksum
How to use checksums
0106349da43ff2f31d183dcdd35007d3d0bd92427381a3772f72888103ac6b0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.

Transparency log

Security for lestash 1.64.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for lestash-1.64.4.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.64.4 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page