DOTP
Dank One Time Password - A CLI and TUI application for secure TOTP/Authenticator storage.
Features
- Encrypted vault storage with password protection
- CLI commands for managing TOTP entries
- Interactive TUI for quick access
- Import/Export support for Aegis and otpauth URI formats
- Real-time token generation with auto-refresh
- Search and filter capabilities with fuzzy matching
- Clipboard integration
- Clean, modern terminal UI with progress indicators
Installation
Using uvx (Recommended)
Run DOTP without installation:
uvx dotp --help
Global install
uv tool install dotp
Pip install
pip install dotp
Using uv (for development)
git clone https://github.com/rochacbruno/dotp.git
cd dotp
uv sync
uv run dotp --help
Quick Start
Initialize a vault
uvx dotp init
This creates an encrypted vault at ~/.config/dotp/.vault.dotp (or $XDG_CONFIG_HOME/dotp/.vault.dotp).
Add an entry
uvx dotp add --label GitHub --secret YOURBASE32SECRET
Or interactively:
uvx dotp add --label GitHub
# You'll be prompted for the secret
List all entries
uvx dotp list
Get a specific token
uvx dotp get GitHub
For scripting (clean output):
DOTP_PASSWD=123456 uvx dotp get GitHub | wl-copy
Scripting tip
~/.local/bin/o
#!/usr/bin/bash
DOTP_PASSWD=1234 uvx dotp get $@ | wl-copy
Then you can simply run on terminal
o Google
and get the code copied to clipboard.
If you are running on DMS, you can add the command runner plugin
and then open the launcher and do >o dropbox -> run in bg.
Import from file
DOTP supports importing from various formats. See the sample files in the repository:
otpauth_sample.txt- Example otpauth URI formataegis_sample.json- Example Aegis export format
# From otpauth URI format
uvx dotp import otpauth_sample.txt
# From Aegis JSON format
uvx dotp import aegis.json --aegis
Export to file
# To otpauth URI format
uvx dotp export backup.txt
# To Aegis JSON format
uvx dotp export backup.json --aegis
TUI Mode
Launch the interactive TUI by running dotp without arguments:
uvx dotp
# or with password from environment
DOTP_PASSWD=123456 uvx dotp
# or with custom vault path
uvx dotp --path /tmp/my-vault.dotp
# or with environment variable
DOTP_VAULT=/tmp/my-vault.dotp uvx dotp
TUI Features
- Type to search: Start typing to filter entries in real-time
- Enter in search: Focus results to navigate with arrow keys
- Enter on item: Copy selected token to clipboard
- Ctrl+Enter: Copy token and close application
- Ctrl+A: Add a new entry
- Ctrl+Q: Quit
- Escape: Clear search
- Backspace: Return to search when navigating results
Configuration
Create a config file at ~/.config/dotp/config.toml:
# Path to your vault file (optional)
vault_path = "/path/to/.vault.dotp"
# Close TUI immediately after copying (default: false)
close_on_copy = true
# Clipboard command to use (default: wl-copy)
clipboard_command = "wl-copy"
Environment Variables
DOTP_PASSWD: Set vault password (useful for scripting)DOTP_VAULT: Set vault file path (alternative to--pathor config file)
Vault Location Priority
DOTP looks for the vault in this order:
--pathargumentDOTP_VAULTenvironment variablevault_pathin config file.vault.dotpin current directory~/.config/dotp/.vault.dotp
Security
- Vault is encrypted using Fernet (symmetric encryption)
- Password is derived using PBKDF2HMAC with SHA256
- 480,000 iterations (OWASP recommended minimum)
- 16-byte random salt per vault
Development
Running tests
uv sync --extra dev
uv run pytest
Running with coverage
uv run pytest --cov=src/dotp --cov-report=html
Linting
uvx ruff check src/
uvx ruff format src/
Stack
- UV - Package management
- pyotp - TOTP generation
- cyclopts - CLI framework
- Rich - Terminal formatting
- Textual - TUI framework
- cryptography - Encryption
- xdg-base-dirs - XDG Base Directory support
License
AGPL License - See LICENSE file for details
Metadata
Release files for dotp 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| dotp-0.1.4.tar.gz | 13.6 kB | Without provenance | Details for dotp-0.1.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| dotp-0.1.4-py3-none-any.whl | Python 3 | none | any | Details for dotp-0.1.4-py3-none-any.whl |
Total release size: 30.4 kB
Release files / dotp-0.1.4.tar.gz
| Download URL | dotp-0.1.4.tar.gz |
|---|---|
| Size | 13.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c9b60543d0c470d9cd927bdde5a12b24a6e0805822bc223c0c8aee10c580219
|
|
BLAKE2b-256 checksum How to use checksums |
4b86b028b5e2a8045b467faa841937bae283a0e83220de8f4eedf3eedc807457
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.2
|
Release files / dotp-0.1.4-py3-none-any.whl
| Download URL | dotp-0.1.4-py3-none-any.whl |
|---|---|
| Size | 16.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dba54d3cfa9475ba8d8c116010329a9b6ceafa37a983ee6ca4cb9948ef5e0a7e
|
|
BLAKE2b-256 checksum How to use checksums |
5f9ec8fd89c5b8415db8ab209ee7b1dbe1622c9f0b231952d8a7b1155561ffad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.2
|
Security for dotp 0.1.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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.