Name | bkmr JSON |
Version |
6.2.5
JSON |
| download |
home_page | https://github.com/sysid/bkmr |
Summary | Super fast bookmark manager with semantic full text search' |
upload_time | 2025-09-06 09:03:40 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.10 |
license | BSD-3-Clause |
keywords |
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# bkmr


[](https://docs.rs/bkmr)
[![Build Status][build-image]][build-url]
> Combine any snippet (code, urls, markdown, text) with powerful search, interpolation and execution.
# Beyond Bookmarks and Snippets: A CLI Knowledge Management System
[bkmr reborn](https://sysid.github.io/bkmr-reborn/)
`bkmr` - selected [crate of the week 482](https://this-week-in-rust.org/blog/2023/02/15/this-week-in-rust-482/) - is a fast, feature-rich command-line tool that extends bookmark management, snippet handling, markdown rendering, script execution and more.
**Organize**, **find**, and **apply** your various content types:
- Web URLs with automatic metadata extraction
- Code snippets for quick access and reuse
- Shell commands with execution capabilities
- Markdown documents with live rendering
- Plain text with template interpolation
- Local files and directories
- Semantic embeddings for AI-powered search
## Why bkmr?
- **Developer-focused**: Integrates seamlessly with your workflow and toolchain
- **Multifunctional**: Handles many content types with context-aware actions
- **Intelligent**: Full-text and semantic search capabilities
- **Privacy-focused**: Local database, no cloud dependencies unless enabled
- **Fast**: 20x faster than similar Python tools
### NEW: [Editor Integrations!](#editor-integrations)
- **Built-in LSP server**: Use `bkmr lsp` for VS Code, Vim, Emacs - automatic snippet completion with language-aware filtering
- **[Neovim Plugin](https://github.com/sysid/bkmr-nvim)**: Visual interface with Telescope integration and zero configuration
- **[IntelliJ Plugin](https://github.com/sysid/bkmr-intellij-plugin)**: JetBrains Marketplace plugin for all IDEs
## Core Features
```bash
# Quick fuzzy search across your content with interactive selection
bkmr search --fzf
# Advanced filtering with tags
bkmr search -t python,security "authentication"
# Add web URLs, enrich with metadata automatically
bkmr add https://example.com tag1,tag2 # title, description, etc will be loaded automatically
# Store code snippets
bkmr add "SELECT * FROM users WHERE role = 'admin'" sql,snippet --type snip --title "My Sql"
bkmr search --fzf --fzf-style enhanced -t _snip_ # show interactive selection menu
# shell scripts, added via interactive editor
bkmr add sysadmin,utils --type shell
# Bookmark Template
# Lines starting with '#' are comments and will be ignored.
# Section markers (---SECTION_NAME---) are required and must not be removed.
---ID---
---URL---
#!/bin/bash
echo "Hello World!"
---TITLE---
System Status
---TAGS---
_shell_
---COMMENTS---
Show the system status
---EMBEDDABLE---
false
---END---
# Run the script (default action for this content-type is called automatically when search returns exactly one)
bkmr search -t _shell_ "System Status"
> Found 1 bookmark: System Status (ID: 22). Executing default action...
> Execute: #!/bin/bash
echo "Hello World!"
# Edit the command if needed, press Enter to execute, or Ctrl-C to cancel
> Hello World!
# Store markdown which will be rendered in the browser with Table of Contents
bkmr add "# Project Notes\n\n## Tasks\n- [ ] Complete documentation\n- [ ] Write tests" notes,project --type md --title Markdown
bkmr open <id> # opens in browser with interactive TOC sidebar for navigation
bkmr add "/path/to/markdown.md" --type md -t "Markdown File to be rendered" # automatically detects path instead of content
# View markdown files directly without storing as bookmarks
bkmr open --file README.md # renders with TOC, syntax highlighting
bkmr open --file ~/docs/notes.md # supports relative and absolute paths
bkmr open --file ./documentation.md # automatic markdown rendering in browser
# Store environment variables for sourcing in a shell
bkmr add "export DB_USER=dev\nexport DB_PASSWORD=secret\nexport API_KEY=test_key" dev,env --type env --title 'My Environment'
bkmr search --fzf --fzf-style enhanced -t _env_ # select it for sourcing
# Import files with frontmatter parsing and base path support
bkmr import-files ~/scripts/backup.sh --base-path SCRIPTS_HOME
bkmr edit 123 # Smart editing: opens source file for file-imported bookmarks
# Execute shell commands via bookmark (deprecated, use content-type _shell_ instead)
bkmr add "shell::find ~/projects -name '*.go' | xargs grep 'func main'" tools,search --title 'Search Golang'
# Semantic search with AI
bkmr --openai sem-search "containerized application security" --limit 3
```
### Bookmarks
<img src="./docs/bkmr4-bookmarks.png" alt="bookmarks" width="800"/>
### Snippets
<img src="./docs/bkmr4-fzf-snippets.png" alt="fzf-snippets" width="800"/>
## Demos
See bkmr in action:
- <a href="https://asciinema.org/a/q4Okf4j2ja757Nav5wf0tNz8k?autoplay=1" alt="Never Context-Switch Again"><img src="https://asciinema.org/a/q4Okf4j2ja757Nav5wf0tNz8k.svg" /></a>
- <a href="https://asciinema.org/a/VTsHuw1Ugsbo10EP0tZ3PdpoG?autoplay=1&speed=2&t=3" alt="Overview">Overview</a>
- <a href="https://asciinema.org/a/wpnsTw3Cl7DK2R7jK7WVpp9OR?autoplay=1&speed=2&t=3" alt="Getting Started">Getting Started</a>
- <a href="https://asciinema.org/a/M97UJMKxw1nxnzO4SaowGZAmb?autoplay=1&speed=2&t=3" alt="Search and Filter">Search and Filter</a>
- <a href="https://asciinema.org/a/uCuNPSlqRemlcXiVQ3CIqq8uV?autoplay=1&speed=2&t=3" alt="Edit and Update">Edit and Update</a>
- <a href="https://asciinema.org/a/jNOLfhc6aFV3wPGTgOzgrM7Kc?autoplay=1&speed=2&t=3" alt="Tag Management">Tag Management</a>
## Getting Started
1. **Install:**
```bash
cargo install bkmr
# or via pip/pipx/uv
pip install bkmr
# or via brew
brew install bkmr
```
2. **Setup:**
```bash
# Configuration
bkmr --generate-config > ~/.config/bkmr/config.toml
# Create database
bkmr create-db ~/.config/bkmr/bkmr.db
# Optional: Configure location (override config.toml)
export BKMR_DB_URL=~/path/to/db
```
### Platform Compatibility
**Wayland Support**: `bkmr` includes native Wayland clipboard support for modern Linux desktops.
- **Supported compositors**: Hyprland, Sway, and other compositors supporting `wlr-data-control-unstable-v1` protocol
- **Automatic detection**: Falls back to X11/XWayland if Wayland protocols are unavailable
- **Compatibility**: Check your compositor support at [wayland.app](https://wayland.app)
3. **Start using:**
```bash
# Add your first bookmark
bkmr add https://github.com/yourusername/yourrepo github,project
# Find it again
bkmr search github
```
## Command Reference
| Command | Description |
|---------|-------------|
| `search` | Search across all content with full-text and tag filtering |
| `sem-search` | AI-powered semantic search using OpenAI embeddings |
| `add` | Add new content (URLs, snippets, files, shell commands, etc.) |
| `open` | Launch or interact with stored items (supports script arguments) |
| `edit` | Smart editing: auto-detects file-imported bookmarks for source file editing |
| `import-files` | Import files/directories with frontmatter parsing and base path support |
| `create-shell-stubs` | Generate shell function stubs for all shell script bookmarks |
| `tags` | View and manage your tag taxonomy |
| `set-embeddable` | Configure items for semantic search |
## Smart Content Actions
`bkmr` intelligently handles different content types with appropriate actions:
| Content Type | Default Action | System Tag |
|-----------------------|---------------------------------------|--------------|
| URLs | Open in browser | (none) |
| Snippets | Copy to clipboard | `_snip_` |
| Shell Scripts | Interactive edit then execute in terminal | `_shell_` |
| Environment Variables | Print to stdout for sourcing in shell | `_env_` |
| Markdown | Render in browser with TOC sidebar | `_md_` |
| Text Documents | Copy to clipboard | `_imported_` |
| Local Files | Open with default application | (none) |
## Advanced Features
- **Smart editing system**: Automatically detects file-imported bookmarks and edits source files directly
- **File import with base paths**: Import files with portable path storage using configurable base path variables
- **Interactive shell editing**: Shell scripts present an interactive editor with vim/emacs bindings before execution
- **Template interpolation**: Use Jinja-style templates in URLs and commands
- **Content embedding**: Store semantic representations for AI-powered search
- **Context-aware actions**: Different behaviors based on content type
- **Multiple output formats**: Terminal display, clipboard, or JSON export
### Shell Script Interaction
Shell scripts (`_shell_` content type) provide an interactive editing experience:
- **Pre-filled editing**: Original script appears ready for modification
- **Vim/Emacs bindings**: Automatically detects your shell's edit mode from `.inputrc`, `$ZSH_VI_MODE`, etc.
- **Parameter support**: Add arguments, modify commands, or combine multiple commands
- **History integration**: Commands are saved to `~/.config/bkmr/shell_history.txt`
- **Configurable behavior**: Can be disabled via configuration for direct execution
```bash
# Interactive mode (default) - edit before execution
bkmr search -t _shell_ "backup script"
Execute: rsync -av /home/user/docs /backup/
# Edit to add parameters: rsync -av /home/user/docs /backup/$(date +%Y%m%d)/
# Press Enter to execute
# Direct execution with arguments (skip interactive editing)
bkmr open --no-edit <id> -- arg1 arg2 arg3
# Disable interactive mode via configuration
export BKMR_SHELL_INTERACTIVE=false
# or in ~/.config/bkmr/config.toml:
# [shell_opts]
# interactive = false
```
#### Shell Function Stubs
Create shell functions for all your shell script bookmarks to enable direct execution with arguments:
```bash
# Generate shell function stubs
bkmr create-shell-stubs
# Example output:
# backup-database() { bkmr open --no-edit 123 -- "$@"; }
# export -f backup-database
# deploy-app() { bkmr open --no-edit 124 -- "$@"; }
# export -f deploy-app
# Source directly into your current shell
source <(bkmr create-shell-stubs)
# Add to your shell profile for permanent access
echo 'source <(bkmr create-shell-stubs)' >> ~/.bashrc
# or for better performance, cache the output:
bkmr create-shell-stubs >> ~/.bashrc
# Now use your bookmarked scripts directly with arguments
backup-database production --incremental
deploy-app staging --rollback
```
**Function Name Generation:**
- Preserves hyphens: `"backup-database"` → `backup-database()`
- Converts spaces to underscores: `"Deploy Script"` → `deploy_script()`
- Handles edge cases: `"2fa-setup"` → `script-2fa-setup()`
### File Import and Smart Editing
`bkmr` supports importing files with structured metadata and provides intelligent editing capabilities:
```bash
# Import files with frontmatter parsing
bkmr import-files ~/scripts/backup.sh ~/docs/notes.md
# Import with base path configuration for portable storage
bkmr import-files scripts/backup.sh --base-path SCRIPTS_HOME
# Smart editing automatically detects file-imported bookmarks
bkmr edit 123 # Opens source file in $EDITOR if file-imported, database editor otherwise
# Force database content editing
bkmr edit 123 --force-db
```
**File Import Features:**
- **Frontmatter parsing**: Supports YAML (`---` delimited) and hash-style (`# key: value`) metadata
- **Base path configuration**: Store portable paths using configurable base path variables
- **Incremental updates**: SHA-256 hash tracking for efficient re-imports
- **Directory traversal**: Recursive processing with `.gitignore` support
**Smart Editing Features:**
- **Automatic detection**: Identifies file-imported vs regular bookmarks
- **Source file editing**: Opens original files in your `$EDITOR` for file-imported bookmarks
- **Metadata synchronization**: Changes to frontmatter automatically sync to database
- **Path resolution**: Handles base path variables and environment expansion
**Configuration Example:**
```toml
# ~/.config/bkmr/config.toml
[base_paths]
SCRIPTS_HOME = "$HOME/scripts"
DOCS_HOME = "$HOME/documents"
WORK_SCRIPTS = "/work/automation/scripts"
```
For detailed documentation on advanced features:
- [Configuration Options](./docs/configuration.md)
- [Content Types](./docs/content-types.md)
- [File Import and Smart Editing](./docs/file-import-smart-editing.md)
- [Advanced Usage](./docs/advanced_usage.md)
- [Semantic Search](./docs/semantic-search.md)
## Editor Integrations
Instead of switching between editor and terminal, access snippets directly within the IDE.
### Neovim Plugin (Recommended for Neovim Users)
**[bkmr-nvim](https://github.com/sysid/bkmr-nvim)** provides the best Neovim integration experience with visual interface and zero configuration.
**Installation with lazy.nvim:**
```lua
{
"sysid/bkmr-nvim",
dependencies = { "nvim-lua/plenary.nvim" },
config = function()
require("bkmr").setup() -- Zero config required!
end,
}
```
**Key Features:**
- **Visual snippet browser**: Telescope/FZF integration for browsing and searching
- **In-editor editing**: Create and edit snippets without leaving Neovim
- **Automatic LSP setup**: Configures bkmr LSP server automatically
- **Custom commands**: `:Bkmr`, `:BkmrEdit`, `:BkmrSearch`
### Built-in LSP Server
**bkmr** includes a built-in Language Server Protocol (LSP) server accessible via `bkmr lsp` for any LSP-compatible editor (VS Code, Vim, Emacs, Sublime, etc.).
**Usage:**
```bash
# Start the LSP server (typically configured in your editor)
bkmr lsp
# Disable template interpolation if needed
bkmr lsp --no-interpolation
```
**Key Features:**
- **Automatic completion**: Snippets appear in completion popup while typing
- **Language-aware filtering**: Shows only relevant snippets based on file type
- **Universal snippets**: Write once in Rust syntax, automatically adapt to any language
- **Template interpolation**: Server-side processing of bkmr templates
- **LSP commands**: CRUD operations and utilities directly from editor
For comprehensive documentation including editor configuration, see [LSP Documentation](./docs/lsp.md).
### IntelliJ Platform Plugin
**[bkmr-intellij-plugin](https://github.com/sysid/bkmr-intellij-plugin)** brings bkmr integration to all JetBrains IDEs.
**Key Features:**
- **Seamless LSP integration**: Automatic snippet completion with no manual triggers
- **Tab navigation**: Full snippet placeholder support with Tab/Shift+Tab navigation
- **Cross-platform**: Works in IntelliJ IDEA, PyCharm, WebStorm, CLion, RustRover, and all JetBrains IDEs
- **Filepath comments**: Insert relative filepaths as comments with smart language detection
### Universal Snippets
Both integrations support **universal snippets** - write snippets once using natural Rust syntax, and they automatically translate to your target language:
```rust
// Universal snippet (stored as Rust syntax)
// Function: {{ function_name }}
// TODO: implement
return {{ value }};
```
**Automatic translation:**
- **Python**: `// comment` → `# comment`
- **HTML**: `// comment` → `<!-- comment -->`
- **Indentation**: Adapts to language conventions (tabs for Go, 2 spaces for JS, etc.)
## Developer Workflow Integration
`bkmr` transforms your terminal into a knowledge hub for development tasks:
1. **Unified knowledge store** - Access code snippets, documentation, and resources with one command
2. **Reduced context switching** - Launch applications and execute commands without leaving your workflow
3. **Smart clipboard management** - Quickly access common snippets without leaving the terminal
4. **Documentation at your fingertips** - Render markdown and technical notes instantly
5. **Automation shortcuts** - Turn complex command sequences into reusable bookmarks
## Upgrading from Previous Versions
If you're upgrading from a previous version, `bkmr` will automatically:
1. Check for necessary database migrations
2. Create a timestamped backup of your current database
3. Apply migrations to support newer features
## Development
### Building from Source
```bash
# Clone the repository
git clone https://github.com/sysid/bkmr.git
cd bkmr
# Build debug version
cargo build
# Build release version
cargo build --release
```
### Running Tests
**IMPORTANT**: All tests must be run single-threaded due to shared SQLite database state:
```bash
# Run tests (REQUIRED: single-threaded)
cargo test -- --test-threads=1
# Or use the Makefile (pre-configured for single-threaded execution)
make test
# Run with visible output
cargo test -- --test-threads=1 --nocapture
```
**Why single-threaded?**
- Tests share a common SQLite database and environment variables
- Parallel execution causes race conditions and intermittent failures
- Single-threaded execution ensures reliable, deterministic test results
### Development Commands
```bash
# Format code
make format
# Run linter
make lint
# Clean build artifacts
make clean
# Install development version
make install
```
## Community and Contributions
We welcome contributions! Please check our [Contributing Guidelines](./CONTRIBUTING.md) to get started.
**For developers**: Remember to always run tests with `--test-threads=1` to avoid database conflicts.
<!-- Badges -->
[build-image]: https://github.com/sysid/bkmr/actions/workflows/release_wheels.yml/badge.svg
[build-url]: https://github.com/sysid/bkmr/actions/workflows/release_wheels.yml
Raw data
{
"_id": null,
"home_page": "https://github.com/sysid/bkmr",
"name": "bkmr",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "sysid <sysid@gmx.de>",
"download_url": "https://files.pythonhosted.org/packages/96/86/43a7366658c3c1322d379f1d36404df33d82dc48f3255b415e101870f7ff/bkmr-6.2.5.tar.gz",
"platform": null,
"description": "# bkmr\n\n\n\n[](https://docs.rs/bkmr)\n[![Build Status][build-image]][build-url]\n\n> Combine any snippet (code, urls, markdown, text) with powerful search, interpolation and execution.\n \n# Beyond Bookmarks and Snippets: A CLI Knowledge Management System\n\n[bkmr reborn](https://sysid.github.io/bkmr-reborn/)\n\n`bkmr` - selected [crate of the week 482](https://this-week-in-rust.org/blog/2023/02/15/this-week-in-rust-482/) - is a fast, feature-rich command-line tool that extends bookmark management, snippet handling, markdown rendering, script execution and more.\n\n**Organize**, **find**, and **apply** your various content types:\n\n- Web URLs with automatic metadata extraction\n- Code snippets for quick access and reuse\n- Shell commands with execution capabilities\n- Markdown documents with live rendering\n- Plain text with template interpolation\n- Local files and directories\n- Semantic embeddings for AI-powered search\n\n## Why bkmr?\n\n- **Developer-focused**: Integrates seamlessly with your workflow and toolchain\n- **Multifunctional**: Handles many content types with context-aware actions\n- **Intelligent**: Full-text and semantic search capabilities\n- **Privacy-focused**: Local database, no cloud dependencies unless enabled\n- **Fast**: 20x faster than similar Python tools\n\n### NEW: [Editor Integrations!](#editor-integrations)\n\n- **Built-in LSP server**: Use `bkmr lsp` for VS Code, Vim, Emacs - automatic snippet completion with language-aware filtering\n- **[Neovim Plugin](https://github.com/sysid/bkmr-nvim)**: Visual interface with Telescope integration and zero configuration\n- **[IntelliJ Plugin](https://github.com/sysid/bkmr-intellij-plugin)**: JetBrains Marketplace plugin for all IDEs\n\n## Core Features\n\n```bash\n# Quick fuzzy search across your content with interactive selection\nbkmr search --fzf\n\n# Advanced filtering with tags\nbkmr search -t python,security \"authentication\"\n\n# Add web URLs, enrich with metadata automatically\nbkmr add https://example.com tag1,tag2 # title, description, etc will be loaded automatically\n\n# Store code snippets\nbkmr add \"SELECT * FROM users WHERE role = 'admin'\" sql,snippet --type snip --title \"My Sql\"\nbkmr search --fzf --fzf-style enhanced -t _snip_ # show interactive selection menu\n\n# shell scripts, added via interactive editor\nbkmr add sysadmin,utils --type shell\n# Bookmark Template\n# Lines starting with '#' are comments and will be ignored.\n# Section markers (---SECTION_NAME---) are required and must not be removed.\n\n---ID---\n\n---URL---\n#!/bin/bash\necho \"Hello World!\"\n---TITLE---\nSystem Status\n---TAGS---\n_shell_\n---COMMENTS---\nShow the system status\n---EMBEDDABLE---\nfalse\n---END---\n\n# Run the script (default action for this content-type is called automatically when search returns exactly one)\nbkmr search -t _shell_ \"System Status\"\n> Found 1 bookmark: System Status (ID: 22). Executing default action...\n> Execute: #!/bin/bash\necho \"Hello World!\"\n# Edit the command if needed, press Enter to execute, or Ctrl-C to cancel\n> Hello World!\n\n\n# Store markdown which will be rendered in the browser with Table of Contents\nbkmr add \"# Project Notes\\n\\n## Tasks\\n- [ ] Complete documentation\\n- [ ] Write tests\" notes,project --type md --title Markdown\nbkmr open <id> # opens in browser with interactive TOC sidebar for navigation\nbkmr add \"/path/to/markdown.md\" --type md -t \"Markdown File to be rendered\" # automatically detects path instead of content\n\n# View markdown files directly without storing as bookmarks\nbkmr open --file README.md # renders with TOC, syntax highlighting\nbkmr open --file ~/docs/notes.md # supports relative and absolute paths\nbkmr open --file ./documentation.md # automatic markdown rendering in browser\n\n# Store environment variables for sourcing in a shell\nbkmr add \"export DB_USER=dev\\nexport DB_PASSWORD=secret\\nexport API_KEY=test_key\" dev,env --type env --title 'My Environment'\nbkmr search --fzf --fzf-style enhanced -t _env_ # select it for sourcing\n\n# Import files with frontmatter parsing and base path support\nbkmr import-files ~/scripts/backup.sh --base-path SCRIPTS_HOME\nbkmr edit 123 # Smart editing: opens source file for file-imported bookmarks\n\n# Execute shell commands via bookmark (deprecated, use content-type _shell_ instead)\nbkmr add \"shell::find ~/projects -name '*.go' | xargs grep 'func main'\" tools,search --title 'Search Golang'\n\n# Semantic search with AI\nbkmr --openai sem-search \"containerized application security\" --limit 3\n```\n### Bookmarks\n<img src=\"./docs/bkmr4-bookmarks.png\" alt=\"bookmarks\" width=\"800\"/>\n\n### Snippets\n<img src=\"./docs/bkmr4-fzf-snippets.png\" alt=\"fzf-snippets\" width=\"800\"/>\n\n## Demos\n\nSee bkmr in action:\n\n- <a href=\"https://asciinema.org/a/q4Okf4j2ja757Nav5wf0tNz8k?autoplay=1\" alt=\"Never Context-Switch Again\"><img src=\"https://asciinema.org/a/q4Okf4j2ja757Nav5wf0tNz8k.svg\" /></a>\n\n- <a href=\"https://asciinema.org/a/VTsHuw1Ugsbo10EP0tZ3PdpoG?autoplay=1&speed=2&t=3\" alt=\"Overview\">Overview</a>\n\n- <a href=\"https://asciinema.org/a/wpnsTw3Cl7DK2R7jK7WVpp9OR?autoplay=1&speed=2&t=3\" alt=\"Getting Started\">Getting Started</a>\n- <a href=\"https://asciinema.org/a/M97UJMKxw1nxnzO4SaowGZAmb?autoplay=1&speed=2&t=3\" alt=\"Search and Filter\">Search and Filter</a>\n- <a href=\"https://asciinema.org/a/uCuNPSlqRemlcXiVQ3CIqq8uV?autoplay=1&speed=2&t=3\" alt=\"Edit and Update\">Edit and Update</a>\n- <a href=\"https://asciinema.org/a/jNOLfhc6aFV3wPGTgOzgrM7Kc?autoplay=1&speed=2&t=3\" alt=\"Tag Management\">Tag Management</a>\n\n## Getting Started\n\n1. **Install:**\n ```bash\n cargo install bkmr\n\n # or via pip/pipx/uv\n pip install bkmr\n\n # or via brew\n brew install bkmr\n\n ```\n\n2. **Setup:**\n ```bash\n # Configuration \n bkmr --generate-config > ~/.config/bkmr/config.toml\n\n # Create database\n bkmr create-db ~/.config/bkmr/bkmr.db\n \n # Optional: Configure location (override config.toml)\n export BKMR_DB_URL=~/path/to/db\n ```\n\n### Platform Compatibility\n\n**Wayland Support**: `bkmr` includes native Wayland clipboard support for modern Linux desktops.\n- **Supported compositors**: Hyprland, Sway, and other compositors supporting `wlr-data-control-unstable-v1` protocol\n- **Automatic detection**: Falls back to X11/XWayland if Wayland protocols are unavailable\n- **Compatibility**: Check your compositor support at [wayland.app](https://wayland.app)\n\n3. **Start using:**\n ```bash\n # Add your first bookmark\n bkmr add https://github.com/yourusername/yourrepo github,project\n \n # Find it again\n bkmr search github\n ```\n\n## Command Reference\n\n| Command | Description |\n|---------|-------------|\n| `search` | Search across all content with full-text and tag filtering |\n| `sem-search` | AI-powered semantic search using OpenAI embeddings |\n| `add` | Add new content (URLs, snippets, files, shell commands, etc.) |\n| `open` | Launch or interact with stored items (supports script arguments) |\n| `edit` | Smart editing: auto-detects file-imported bookmarks for source file editing |\n| `import-files` | Import files/directories with frontmatter parsing and base path support |\n| `create-shell-stubs` | Generate shell function stubs for all shell script bookmarks |\n| `tags` | View and manage your tag taxonomy |\n| `set-embeddable` | Configure items for semantic search |\n\n## Smart Content Actions\n\n`bkmr` intelligently handles different content types with appropriate actions:\n\n| Content Type | Default Action | System Tag |\n|-----------------------|---------------------------------------|--------------|\n| URLs | Open in browser | (none) |\n| Snippets | Copy to clipboard | `_snip_` |\n| Shell Scripts | Interactive edit then execute in terminal | `_shell_` |\n| Environment Variables | Print to stdout for sourcing in shell | `_env_` |\n| Markdown | Render in browser with TOC sidebar | `_md_` |\n| Text Documents | Copy to clipboard | `_imported_` |\n| Local Files | Open with default application | (none) |\n\n## Advanced Features\n\n- **Smart editing system**: Automatically detects file-imported bookmarks and edits source files directly\n- **File import with base paths**: Import files with portable path storage using configurable base path variables\n- **Interactive shell editing**: Shell scripts present an interactive editor with vim/emacs bindings before execution\n- **Template interpolation**: Use Jinja-style templates in URLs and commands\n- **Content embedding**: Store semantic representations for AI-powered search\n- **Context-aware actions**: Different behaviors based on content type\n- **Multiple output formats**: Terminal display, clipboard, or JSON export\n\n### Shell Script Interaction\n\nShell scripts (`_shell_` content type) provide an interactive editing experience:\n\n- **Pre-filled editing**: Original script appears ready for modification\n- **Vim/Emacs bindings**: Automatically detects your shell's edit mode from `.inputrc`, `$ZSH_VI_MODE`, etc.\n- **Parameter support**: Add arguments, modify commands, or combine multiple commands\n- **History integration**: Commands are saved to `~/.config/bkmr/shell_history.txt`\n- **Configurable behavior**: Can be disabled via configuration for direct execution\n\n```bash\n# Interactive mode (default) - edit before execution\nbkmr search -t _shell_ \"backup script\"\nExecute: rsync -av /home/user/docs /backup/\n# Edit to add parameters: rsync -av /home/user/docs /backup/$(date +%Y%m%d)/\n# Press Enter to execute\n\n# Direct execution with arguments (skip interactive editing)\nbkmr open --no-edit <id> -- arg1 arg2 arg3\n\n# Disable interactive mode via configuration\nexport BKMR_SHELL_INTERACTIVE=false\n# or in ~/.config/bkmr/config.toml:\n# [shell_opts]\n# interactive = false\n```\n\n#### Shell Function Stubs\n\nCreate shell functions for all your shell script bookmarks to enable direct execution with arguments:\n\n```bash\n# Generate shell function stubs\nbkmr create-shell-stubs\n\n# Example output:\n# backup-database() { bkmr open --no-edit 123 -- \"$@\"; }\n# export -f backup-database\n# deploy-app() { bkmr open --no-edit 124 -- \"$@\"; }\n# export -f deploy-app\n\n# Source directly into your current shell\nsource <(bkmr create-shell-stubs)\n\n# Add to your shell profile for permanent access\necho 'source <(bkmr create-shell-stubs)' >> ~/.bashrc\n# or for better performance, cache the output:\nbkmr create-shell-stubs >> ~/.bashrc\n\n# Now use your bookmarked scripts directly with arguments\nbackup-database production --incremental\ndeploy-app staging --rollback\n```\n\n**Function Name Generation:**\n- Preserves hyphens: `\"backup-database\"` \u2192 `backup-database()`\n- Converts spaces to underscores: `\"Deploy Script\"` \u2192 `deploy_script()`\n- Handles edge cases: `\"2fa-setup\"` \u2192 `script-2fa-setup()`\n\n### File Import and Smart Editing\n\n`bkmr` supports importing files with structured metadata and provides intelligent editing capabilities:\n\n```bash\n# Import files with frontmatter parsing\nbkmr import-files ~/scripts/backup.sh ~/docs/notes.md\n\n# Import with base path configuration for portable storage\nbkmr import-files scripts/backup.sh --base-path SCRIPTS_HOME\n\n# Smart editing automatically detects file-imported bookmarks\nbkmr edit 123 # Opens source file in $EDITOR if file-imported, database editor otherwise\n\n# Force database content editing\nbkmr edit 123 --force-db\n```\n\n**File Import Features:**\n- **Frontmatter parsing**: Supports YAML (`---` delimited) and hash-style (`# key: value`) metadata\n- **Base path configuration**: Store portable paths using configurable base path variables\n- **Incremental updates**: SHA-256 hash tracking for efficient re-imports\n- **Directory traversal**: Recursive processing with `.gitignore` support\n\n**Smart Editing Features:**\n- **Automatic detection**: Identifies file-imported vs regular bookmarks\n- **Source file editing**: Opens original files in your `$EDITOR` for file-imported bookmarks\n- **Metadata synchronization**: Changes to frontmatter automatically sync to database\n- **Path resolution**: Handles base path variables and environment expansion\n\n**Configuration Example:**\n```toml\n# ~/.config/bkmr/config.toml\n[base_paths]\nSCRIPTS_HOME = \"$HOME/scripts\"\nDOCS_HOME = \"$HOME/documents\"\nWORK_SCRIPTS = \"/work/automation/scripts\"\n```\n\nFor detailed documentation on advanced features:\n- [Configuration Options](./docs/configuration.md)\n- [Content Types](./docs/content-types.md)\n- [File Import and Smart Editing](./docs/file-import-smart-editing.md)\n- [Advanced Usage](./docs/advanced_usage.md)\n- [Semantic Search](./docs/semantic-search.md)\n\n## Editor Integrations\n\nInstead of switching between editor and terminal, access snippets directly within the IDE.\n\n### Neovim Plugin (Recommended for Neovim Users)\n\n**[bkmr-nvim](https://github.com/sysid/bkmr-nvim)** provides the best Neovim integration experience with visual interface and zero configuration.\n\n**Installation with lazy.nvim:**\n```lua\n{\n \"sysid/bkmr-nvim\",\n dependencies = { \"nvim-lua/plenary.nvim\" },\n config = function()\n require(\"bkmr\").setup() -- Zero config required!\n end,\n}\n```\n\n**Key Features:**\n- **Visual snippet browser**: Telescope/FZF integration for browsing and searching\n- **In-editor editing**: Create and edit snippets without leaving Neovim\n- **Automatic LSP setup**: Configures bkmr LSP server automatically\n- **Custom commands**: `:Bkmr`, `:BkmrEdit`, `:BkmrSearch`\n\n### Built-in LSP Server\n\n**bkmr** includes a built-in Language Server Protocol (LSP) server accessible via `bkmr lsp` for any LSP-compatible editor (VS Code, Vim, Emacs, Sublime, etc.).\n\n**Usage:**\n```bash\n# Start the LSP server (typically configured in your editor)\nbkmr lsp\n\n# Disable template interpolation if needed\nbkmr lsp --no-interpolation\n```\n\n**Key Features:**\n- **Automatic completion**: Snippets appear in completion popup while typing\n- **Language-aware filtering**: Shows only relevant snippets based on file type\n- **Universal snippets**: Write once in Rust syntax, automatically adapt to any language\n- **Template interpolation**: Server-side processing of bkmr templates\n- **LSP commands**: CRUD operations and utilities directly from editor\n\nFor comprehensive documentation including editor configuration, see [LSP Documentation](./docs/lsp.md).\n\n### IntelliJ Platform Plugin\n\n**[bkmr-intellij-plugin](https://github.com/sysid/bkmr-intellij-plugin)** brings bkmr integration to all JetBrains IDEs.\n\n**Key Features:**\n- **Seamless LSP integration**: Automatic snippet completion with no manual triggers\n- **Tab navigation**: Full snippet placeholder support with Tab/Shift+Tab navigation\n- **Cross-platform**: Works in IntelliJ IDEA, PyCharm, WebStorm, CLion, RustRover, and all JetBrains IDEs\n- **Filepath comments**: Insert relative filepaths as comments with smart language detection\n\n### Universal Snippets\n\nBoth integrations support **universal snippets** - write snippets once using natural Rust syntax, and they automatically translate to your target language:\n\n```rust\n// Universal snippet (stored as Rust syntax)\n// Function: {{ function_name }}\n// TODO: implement\n return {{ value }};\n```\n\n**Automatic translation:**\n- **Python**: `// comment` \u2192 `# comment`\n- **HTML**: `// comment` \u2192 `<!-- comment -->`\n- **Indentation**: Adapts to language conventions (tabs for Go, 2 spaces for JS, etc.)\n\n## Developer Workflow Integration\n\n`bkmr` transforms your terminal into a knowledge hub for development tasks:\n\n1. **Unified knowledge store** - Access code snippets, documentation, and resources with one command\n2. **Reduced context switching** - Launch applications and execute commands without leaving your workflow\n3. **Smart clipboard management** - Quickly access common snippets without leaving the terminal\n4. **Documentation at your fingertips** - Render markdown and technical notes instantly\n5. **Automation shortcuts** - Turn complex command sequences into reusable bookmarks\n\n## Upgrading from Previous Versions\n\nIf you're upgrading from a previous version, `bkmr` will automatically:\n1. Check for necessary database migrations\n2. Create a timestamped backup of your current database\n3. Apply migrations to support newer features\n\n## Development\n\n### Building from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/sysid/bkmr.git\ncd bkmr\n\n# Build debug version\ncargo build\n\n# Build release version\ncargo build --release\n```\n\n### Running Tests\n\n**IMPORTANT**: All tests must be run single-threaded due to shared SQLite database state:\n\n```bash\n# Run tests (REQUIRED: single-threaded)\ncargo test -- --test-threads=1\n\n# Or use the Makefile (pre-configured for single-threaded execution)\nmake test\n\n# Run with visible output\ncargo test -- --test-threads=1 --nocapture\n```\n\n**Why single-threaded?**\n- Tests share a common SQLite database and environment variables\n- Parallel execution causes race conditions and intermittent failures\n- Single-threaded execution ensures reliable, deterministic test results\n\n### Development Commands\n\n```bash\n# Format code\nmake format\n\n# Run linter\nmake lint\n\n# Clean build artifacts\nmake clean\n\n# Install development version\nmake install\n```\n\n## Community and Contributions\n\nWe welcome contributions! Please check our [Contributing Guidelines](./CONTRIBUTING.md) to get started.\n\n**For developers**: Remember to always run tests with `--test-threads=1` to avoid database conflicts.\n\n<!-- Badges -->\n[build-image]: https://github.com/sysid/bkmr/actions/workflows/release_wheels.yml/badge.svg\n[build-url]: https://github.com/sysid/bkmr/actions/workflows/release_wheels.yml\n\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Super fast bookmark manager with semantic full text search'",
"version": "6.2.5",
"project_urls": {
"Homepage": "https://github.com/sysid/bkmr"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "0f8d7ace627685f675bd023ee76f28ec62616b00a5ec2820bab9ef6786721a8e",
"md5": "aa321081422ff7b4d1c316a3916b63fa",
"sha256": "80942443e3098536639ca5c3ce8f899d0e954fb5a6f0a275774860bd76097cc6"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp310-cp310-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "aa321081422ff7b4d1c316a3916b63fa",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 6246980,
"upload_time": "2025-09-06T09:03:17",
"upload_time_iso_8601": "2025-09-06T09:03:17.519838Z",
"url": "https://files.pythonhosted.org/packages/0f/8d/7ace627685f675bd023ee76f28ec62616b00a5ec2820bab9ef6786721a8e/bkmr-6.2.5-cp310-cp310-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a37518e62550c358c58bd8b34dd44a6e7257b05539f6bd6c29001c34162aaa87",
"md5": "00545c2475460a35001f8b3180e5c6f4",
"sha256": "9a649f69477ecd0d98a8d357cb38adbdd0d9436306ed46b6c96778ecb6b111b5"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "00545c2475460a35001f8b3180e5c6f4",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 5829893,
"upload_time": "2025-09-06T09:03:19",
"upload_time_iso_8601": "2025-09-06T09:03:19.852466Z",
"url": "https://files.pythonhosted.org/packages/a3/75/18e62550c358c58bd8b34dd44a6e7257b05539f6bd6c29001c34162aaa87/bkmr-6.2.5-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2538866d11ef61b1f5f4c7404c49d6fd0626882fafd9132aa441e9c02d1c7beb",
"md5": "be3315014b4d94e0f361cfc2ad686026",
"sha256": "a7eafbc0a4ffbb2d273064a1cfc7e0076db42ba8af59f08bcdbf63c8fe97c762"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "be3315014b4d94e0f361cfc2ad686026",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 8979082,
"upload_time": "2025-09-06T09:03:21",
"upload_time_iso_8601": "2025-09-06T09:03:21.772481Z",
"url": "https://files.pythonhosted.org/packages/25/38/866d11ef61b1f5f4c7404c49d6fd0626882fafd9132aa441e9c02d1c7beb/bkmr-6.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "030103fbf5acfcca5e0ac1a29151d154c7bed4e0e11a800c3cb6ed12a249d52a",
"md5": "095287f8c98997dc07b25e3f513b36bd",
"sha256": "6bdcdbc34862a5732d03bd05c749183d7b9ec0109a2d50676041e75435b79432"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp311-cp311-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "095287f8c98997dc07b25e3f513b36bd",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 6246979,
"upload_time": "2025-09-06T09:03:23",
"upload_time_iso_8601": "2025-09-06T09:03:23.627800Z",
"url": "https://files.pythonhosted.org/packages/03/01/03fbf5acfcca5e0ac1a29151d154c7bed4e0e11a800c3cb6ed12a249d52a/bkmr-6.2.5-cp311-cp311-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cc776312068a8ae1e486720e67c38420865d33aba14d73f4ce7ea54dedefcd50",
"md5": "b4ddaab890da92470fedc372b7cd1db0",
"sha256": "0298ad528c5f994740906c56e9b1453470d92644cd587ac626cb4e197ea99621"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "b4ddaab890da92470fedc372b7cd1db0",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 5829895,
"upload_time": "2025-09-06T09:03:25",
"upload_time_iso_8601": "2025-09-06T09:03:25.532776Z",
"url": "https://files.pythonhosted.org/packages/cc/77/6312068a8ae1e486720e67c38420865d33aba14d73f4ce7ea54dedefcd50/bkmr-6.2.5-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "92664708c55988ffd7ab328688d7ee766b8ece7f14a94cf64582d0fb04133c05",
"md5": "40e5f4d1c84315efeb523370d5f1fea2",
"sha256": "fc4a0d683018d7e58b485d42d57055cf3c9d11f32cb04971ef0a4b7228374928"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "40e5f4d1c84315efeb523370d5f1fea2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 8979083,
"upload_time": "2025-09-06T09:03:27",
"upload_time_iso_8601": "2025-09-06T09:03:27.402040Z",
"url": "https://files.pythonhosted.org/packages/92/66/4708c55988ffd7ab328688d7ee766b8ece7f14a94cf64582d0fb04133c05/bkmr-6.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6e21efe444e6bb3558c8a742b7964286422cbfe7696492b050af91c68eb38f4d",
"md5": "657cd4daa0d8a2590c7f734879486553",
"sha256": "f3a0f776cfae83237df0500a37ab2c0571c8b6ae25acb84c1a57ae2ed1d636a8"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp312-cp312-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "657cd4daa0d8a2590c7f734879486553",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 6246979,
"upload_time": "2025-09-06T09:03:29",
"upload_time_iso_8601": "2025-09-06T09:03:29.290007Z",
"url": "https://files.pythonhosted.org/packages/6e/21/efe444e6bb3558c8a742b7964286422cbfe7696492b050af91c68eb38f4d/bkmr-6.2.5-cp312-cp312-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "74f5769baf32f778834670a090e8509a34df44c92f886bb4692d47e77e0de440",
"md5": "873a1923656719cd06253b3e48071a7d",
"sha256": "a3813ec1f08f593e49e2707d6c390e79ed3653ee9da363f115094ee07230aef2"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "873a1923656719cd06253b3e48071a7d",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 5829896,
"upload_time": "2025-09-06T09:03:31",
"upload_time_iso_8601": "2025-09-06T09:03:31.172603Z",
"url": "https://files.pythonhosted.org/packages/74/f5/769baf32f778834670a090e8509a34df44c92f886bb4692d47e77e0de440/bkmr-6.2.5-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "58afb0875a8fc0b1b96cd34fd65dbb5d4cf22087ae7afb22b148f266d0cbc1d2",
"md5": "33bfc2f5fd2c19b9a38da3ebacedc320",
"sha256": "f0a4adfb1b11fb9b6ae85b8feeec27009f51c04c8620fb7bee27d4086f529f87"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "33bfc2f5fd2c19b9a38da3ebacedc320",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 8979084,
"upload_time": "2025-09-06T09:03:32",
"upload_time_iso_8601": "2025-09-06T09:03:32.632840Z",
"url": "https://files.pythonhosted.org/packages/58/af/b0875a8fc0b1b96cd34fd65dbb5d4cf22087ae7afb22b148f266d0cbc1d2/bkmr-6.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a3dc2040f246e9e0bde97b8eeb78234b51e56270a8804f2e1751fbe0ca2e05c5",
"md5": "b8b8a5fe8935eb087d12529b1851f184",
"sha256": "3d1abbc71fc5f0741b491f862db8c13bbeecf1065a0c52b3d9fdbd4ae8a25a61"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp313-cp313-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "b8b8a5fe8935eb087d12529b1851f184",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 6246978,
"upload_time": "2025-09-06T09:03:34",
"upload_time_iso_8601": "2025-09-06T09:03:34.702759Z",
"url": "https://files.pythonhosted.org/packages/a3/dc/2040f246e9e0bde97b8eeb78234b51e56270a8804f2e1751fbe0ca2e05c5/bkmr-6.2.5-cp313-cp313-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fd870e04abe1fc4502116bf9ec36232d23de9407609116052b8578c31988a826",
"md5": "3fd7e46f3214bc53d896f239b6764920",
"sha256": "76ff29b3a50d6cedd48f2c42a93bf6f0be2405e950741c9d26fc77b767fe8016"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "3fd7e46f3214bc53d896f239b6764920",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 5829894,
"upload_time": "2025-09-06T09:03:36",
"upload_time_iso_8601": "2025-09-06T09:03:36.407518Z",
"url": "https://files.pythonhosted.org/packages/fd/87/0e04abe1fc4502116bf9ec36232d23de9407609116052b8578c31988a826/bkmr-6.2.5-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "44b59865791d802c44b86462196f772933d948647c543da1fc9edbc50fda7da0",
"md5": "73ec0c2e109791e017d308efb4be3eef",
"sha256": "8b8ce555422180cb1f369f25a1304a63fe6b028cb5642df8acd685e1483eb878"
},
"downloads": -1,
"filename": "bkmr-6.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "73ec0c2e109791e017d308efb4be3eef",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 8979083,
"upload_time": "2025-09-06T09:03:38",
"upload_time_iso_8601": "2025-09-06T09:03:38.293108Z",
"url": "https://files.pythonhosted.org/packages/44/b5/9865791d802c44b86462196f772933d948647c543da1fc9edbc50fda7da0/bkmr-6.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "968643a7366658c3c1322d379f1d36404df33d82dc48f3255b415e101870f7ff",
"md5": "62e6514d642e6ae2ccd32dee7f1a8fa6",
"sha256": "a37690871f3c2ddb8eea866f7039f8de348963937a810d744f63e7fd6328f15d"
},
"downloads": -1,
"filename": "bkmr-6.2.5.tar.gz",
"has_sig": false,
"md5_digest": "62e6514d642e6ae2ccd32dee7f1a8fa6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 395988,
"upload_time": "2025-09-06T09:03:40",
"upload_time_iso_8601": "2025-09-06T09:03:40.182175Z",
"url": "https://files.pythonhosted.org/packages/96/86/43a7366658c3c1322d379f1d36404df33d82dc48f3255b415e101870f7ff/bkmr-6.2.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-06 09:03:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "sysid",
"github_project": "bkmr",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "bkmr"
}