Files
kvs-sh/roadmap.md
2025-10-05 20:17:07 +03:00

5.1 KiB

Roadmap

Configuration file for persistent profiles

Save user profiles (tokens, user UUIDs, server URLs) to a local configuration file (e.g., ~/.kvs/config.json) that persists across shell sessions. This eliminates the need to re-enter authentication details every time the shell starts. The file should be stored with restricted permissions (0600) to protect sensitive token data. Include commands like profile save and profile load to manage the persistence layer.

Management of local KVS instance configuration file

Provide commands to read, edit, and validate the KVS server's config.yaml file directly from the shell. This would allow administrators to modify server settings (ports, data directories, cluster secrets, feature flags) without manually editing YAML files. Include syntax validation, preview changes before applying, and the ability to restart the local KVS instance after configuration changes. This is particularly useful for development and testing workflows.

Batch operations from file

Execute multiple KVS commands from a script file, similar to SQL's source command or MongoDB's load(). Support both sequential execution and parallel batch operations for improved performance when uploading large datasets. Include error handling options (continue on error vs. abort on first error) and progress reporting. This enables data migration, testing scenarios, and automated setup workflows.

Export/import functionality

Export entire key ranges or specific key patterns to JSON, CSV, or custom backup formats that preserve UUIDs and timestamps. Import these files back into the same or different KVS instances while handling conflicts appropriately. Support filtering during export (by key prefix, timestamp range, or pattern matching) and transformation during import (key remapping, data modification). This is critical for backup/restore operations and cross-environment data synchronization.

Group management commands

Implement full CRUD operations for groups through the shell: create groups, add/remove members, list all groups, and view group details. Include commands like group create <name>, group add-member <group-uuid> <user-uuid>, and group members <group-uuid>. This complements the existing user management commands and enables complete administration of the authorization system. Support bulk operations for adding multiple members at once.

Metadata management

Expose the resource metadata API (owner UUID, group UUID, permissions, TTL) through intuitive shell commands. Allow viewing and modifying POSIX-inspired permission bits for any key, changing ownership, and setting TTLs. Include commands like metadata get <key>, metadata set-owner <key> <user-uuid>, and metadata chmod <key> <permissions>. Display permissions in both numeric (e.g., 3840) and symbolic formats (e.g., rwxr--r--) for usability.

Query filtering and pagination

Add support for filtering keys by prefix, timestamp range, or pattern matching when listing or searching. Implement pagination for large result sets with commands like list --prefix users/ --limit 50 --offset 100. Include sorting options (by key name, timestamp, or data fields) and output formatting (table, JSON, compact). This makes it practical to explore and manage large datasets without overwhelming the terminal with output.

TLS/SSL support

Enable secure HTTPS connections to KVS servers with proper certificate validation. Support custom CA certificates for self-signed deployments and client certificate authentication for mutual TLS. Include commands to configure TLS settings: tls enable, tls cert <path>, and tls verify on/off. Display connection security status in the prompt (e.g., kvs(secure)>) to provide visual confirmation of encrypted connections.

Shell scripts execution

Create a scripting language or format for automating complex workflows that combine multiple KVS operations with conditional logic and variables. Scripts could include loops, conditionals, error handling, and variable substitution (e.g., $UUID, $TIMESTAMP). Support both embedded scripts (via heredoc syntax) and external script files. Include a library of common scripts for tasks like data migration, testing, and bulk updates.

Tab completion for keys

Implement intelligent tab completion that fetches existing keys from the server and suggests completions as you type. Cache key prefixes locally to minimize server requests while typing. Support completion for key paths (e.g., typing users/a<tab> would suggest users/alice, users/admin). Include fuzzy matching and recent key history to speed up navigation of frequently accessed keys.

Transaction support

Provide multi-key atomic operations through a transaction API, allowing users to group multiple get/put/delete operations that either all succeed or all fail together. Use syntax like begin, commit, and rollback commands to demarcate transaction boundaries. Support read-your-writes consistency within a transaction and optimistic concurrency control with conflict detection. This would require backend support for transactions, which may need to be implemented in the KVS server first.