Metadata-Version: 2.4
Name: sspwd
Version: 0.1.0
Summary: A local, encrypted password manager with a web UI.
Author: Yauheniya Varabyova
Maintainer: Yauheniya Varabyova
License: MIT
Project-URL: Repository, https://github.com/yauheniya-ai/sspwd
Project-URL: Changelog, https://github.com/yauheniya-ai/sspwd/blob/main/CHANGELOG.md
Keywords: password,manager,security,encryption,cli,vault
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: End Users/Desktop
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Utilities
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: fastapi>=0.110
Requires-Dist: uvicorn[standard]>=0.29
Requires-Dist: python-multipart>=0.0.9
Requires-Dist: pydantic>=2.0
Requires-Dist: click>=8.1
Requires-Dist: cryptography>=42.0
Provides-Extra: dev
Requires-Dist: twine; extra == "dev"
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: pytest-mock; extra == "dev"
Requires-Dist: httpx>=0.27; extra == "dev"
Requires-Dist: black>=22.0; extra == "dev"
Requires-Dist: flake8>=5.0; extra == "dev"
Requires-Dist: mypy>=0.991; extra == "dev"
Requires-Dist: pre-commit>=2.20.0; extra == "dev"
Requires-Dist: sphinx>=5.0; extra == "dev"
Requires-Dist: sphinx-rtd-theme>=1.0; extra == "dev"
Requires-Dist: myst-parser>=0.18; extra == "dev"
Dynamic: license-file

# sspwd – super secret password

A local, encrypted password manager with a built-in web UI.

Passwords are stored in `~/.sspwd/vault.db` — fully encrypted with a key
derived from your master password. Nothing leaves your machine.

---

## Installation

```bash
pip install sspwd
```

> Requires Python ≥ 3.10.

---

## Quick start

### Web UI

```bash
sspwd serve
```

Opens `http://127.0.0.1:7523` in your default browser. Enter your master
password when prompted (a new vault is created automatically on first run).

### CLI

```bash
# Add an entry
sspwd add

# List all entries
sspwd list

# Search
sspwd list --search github

# Show a single entry (reveals password)
sspwd get 3

# Delete an entry
sspwd delete 3
```

### Custom vault location

```bash
sspwd serve --vault-dir /path/to/my/vault
```

---

## Security

| Detail | Value |
|---|---|
| Encryption | AES-128-CBC via [Fernet](https://cryptography.io/en/latest/fernet/) |
| Key derivation | PBKDF2-HMAC-SHA256, 390 000 iterations |
| Storage | SQLite (`~/.sspwd/vault.db`) |
| Key never stored | Only a random 32-byte salt is persisted |

The master password is required every time you start the app. There is no
"remember me" — the derived key lives only in process memory.

---

## Development

```bash
git clone https://github.com/yauheniya-ai/sspwd
cd sspwd/pypi

# Install in editable mode with dev extras
pip install -e ".[dev]"

# Run tests
pytest

# Lint
ruff check src tests
```

### Building the React UI

```bash
cd ../frontend
npm install
npm run build
# Copy dist/ into pypi/src/sspwd/ui/static/
cp -r dist/* ../pypi/src/sspwd/ui/static/
```

---

## License

MIT — see [LICENSE](LICENSE).
