{"id":29859402,"url":"https://github.com/danielgerlag/blackis","last_synced_at":"2025-07-30T02:13:25.746Z","repository":{"id":307032133,"uuid":"1027005761","full_name":"danielgerlag/blackis","owner":"danielgerlag","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-27T05:26:35.000Z","size":102,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-29T04:34:50.653Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danielgerlag.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-27T05:26:33.000Z","updated_at":"2025-07-27T05:26:39.000Z","dependencies_parsed_at":"2025-07-29T04:34:57.610Z","dependency_job_id":"356d2525-8b52-455a-a364-6d096c26b01a","html_url":"https://github.com/danielgerlag/blackis","commit_stats":null,"previous_names":["danielgerlag/blackis"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/danielgerlag/blackis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielgerlag%2Fblackis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielgerlag%2Fblackis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielgerlag%2Fblackis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielgerlag%2Fblackis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielgerlag","download_url":"https://codeload.github.com/danielgerlag/blackis/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielgerlag%2Fblackis/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267797778,"owners_count":24145711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-30T02:13:25.020Z","updated_at":"2025-07-30T02:13:25.732Z","avatar_url":"https://github.com/danielgerlag.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blackis\n\nA high-performance Redis-compatible in-memory data structure server implemented in Rust, featuring a modern web interface for data management.\n\n## Features\n\n### Redis Protocol Compatibility\n- **String Operations**: GET, SET, DEL, EXISTS with TTL support\n- **List Operations**: LPUSH, RPUSH, LPOP, RPOP, LLEN, LINDEX, LRANGE, and more\n- **Hash Operations**: HSET, HGET, HDEL, HLEN, HGETALL, HMGET, and more\n- **Set Operations**: SADD, SREM, SMEMBERS, SCARD, SISMEMBER, SPOP, SUNION, SINTER, SDIFF, SSCAN\n- **Sorted Set Operations**: ZADD, ZREM, ZRANGE, ZREVRANGE, ZCARD, ZSCORE, ZRANK\n- **Pub/Sub**: PUBLISH, SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE\n- **Database Operations**: SELECT (0-15), SCAN, KEYS, TYPE, PING, INFO\n- **Utility Commands**: FLUSHALL, FLUSHDB, EXPIRE, PERSIST, TTL\n\n### Modern Web Interface\n- **Redis Commander-like UI** built with React and Material-UI\n- **Key Browser** with search, filtering, and type detection\n- **Specialized Editors** for different data types (strings, lists, hashes, sets, sorted sets)\n- **Command Interface** with execution history\n- **Real-time Updates** when data is modified\n- **Multi-database Support** (Redis databases 0-15)\n\n### Architecture\n- **High Performance**: Built in Rust with async/await and Tokio\n- **Persistent Storage**: RocksDB backend for data durability\n- **Dual Interface**: Both Redis protocol (port 6379) and HTTP API (port 8080)\n- **Memory Efficient**: Optimized data structures and storage layout\n- **Concurrent**: Thread-safe operations with proper locking\n\n## Quick Start\n\n### Prerequisites\n- Rust 1.70+ with Cargo\n- Node.js 18+ and npm (for web interface development)\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/blackis.git\ncd blackis\n\n# Build and run (production mode)\ncargo run\n\n# The server will start:\n# - Redis protocol server on 127.0.0.1:6379\n# - HTTP API and web interface on 127.0.0.1:8080\n```\n\n### Usage\n\n#### Using Redis CLI\n```bash\n# Connect with any Redis client\nredis-cli -h 127.0.0.1 -p 6379\n\n# Basic operations\n127.0.0.1:6379\u003e SET mykey \"Hello World\"\nOK\n127.0.0.1:6379\u003e GET mykey\n\"Hello World\"\n\n# List operations\n127.0.0.1:6379\u003e LPUSH mylist \"item1\" \"item2\"\n(integer) 2\n127.0.0.1:6379\u003e LRANGE mylist 0 -1\n1) \"item2\"\n2) \"item1\"\n\n# Set operations\n127.0.0.1:6379\u003e SADD myset \"member1\" \"member2\" \"member3\"\n(integer) 3\n127.0.0.1:6379\u003e SMEMBERS myset\n1) \"member1\"\n2) \"member2\" \n3) \"member3\"\n```\n\n#### Using Web Interface\n1. Open your browser to `http://localhost:8080`\n2. Browse keys by type and database\n3. Create, edit, and delete data using the intuitive interface\n4. Execute raw Redis commands in the command interface\n5. View server statistics and configuration\n\n## Development\n\n### Building from Source\n```bash\n# Build the Rust backend\ncargo build --release\n\n# Build the React frontend\ncd web\nnpm install\nnpm run build\ncd ..\n\n# Run with built frontend\ncargo run\n```\n\n### Development Mode\nFor active development with hot reload:\n\n```bash\n# Terminal 1: Start the Rust server (API only)\ncargo run\n\n# Terminal 2: Start the React dev server\ncd web\nnpm run dev\n# Access at http://localhost:3000 (proxies API calls to :8080)\n```\n\n### Architecture Overview\n\n```\n┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐\n│   Redis Client  │───▶│  Redis Protocol  │───▶│                 │\n│   (port 6379)   │    │     Server       │    │                 │\n└─────────────────┘    └──────────────────┘    │                 │\n                                               │   Storage       │\n┌─────────────────┐    ┌──────────────────┐    │   Engine        │\n│  Web Browser    │───▶│   HTTP Server    │───▶│   (RocksDB)     │\n│  (port 8080)    │    │   + React UI     │    │                 │\n└─────────────────┘    └──────────────────┘    └─────────────────┘\n```\n\n### Project Structure\n```\nblackis/\n├── src/\n│   ├── commands/         # Redis command implementations\n│   ├── network/          # Redis protocol and HTTP servers\n│   ├── protocol/         # RESP (Redis Serialization Protocol)\n│   ├── storage/          # RocksDB storage layer\n│   ├── pubsub/           # Pub/Sub messaging system\n│   └── config/           # Configuration management\n├── web/                  # React web interface\n│   ├── src/components/   # React components\n│   ├── src/services/     # API integration\n│   └── dist/             # Built assets\n└── data/                 # RocksDB data files\n```\n\n## Configuration\n\nEnvironment variables:\n- `BLACKIS_DB_PATH`: Database storage path (default: `./data`)\n- `BLACKIS_REDIS_ADDR`: Redis server bind address (default: `127.0.0.1:6379`)\n- `BLACKIS_HTTP_ADDR`: HTTP server bind address (default: `127.0.0.1:8080`)\n\n## Performance\n\nBlackis is designed for high performance:\n- **Zero-copy** operations where possible\n- **Async I/O** with Tokio for maximum concurrency\n- **Efficient serialization** with optimized data layouts\n- **RocksDB backend** for fast persistent storage\n- **Memory-mapped** file I/O for large datasets\n\n## Compatibility\n\nBlackis implements a significant subset of Redis commands and behavior:\n- Compatible with standard Redis clients\n- Supports Redis Serialization Protocol (RESP)\n- Multi-database support (SELECT 0-15)\n- TTL and expiration handling\n- Pub/Sub messaging patterns\n- Atomic operations and transactions\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Development Guidelines\n- Follow Rust best practices and use `cargo fmt`\n- Add tests for new functionality\n- Update documentation for API changes\n- Ensure web interface works with backend changes\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Author\n\nCreated by Daniel Gerlag.\n\n## Acknowledgments\n\n- Inspired by Redis and its ecosystem\n- Built with modern Rust async ecosystem (Tokio, Axum)\n- Web interface powered by React and Material-UI\n- Storage provided by RocksDB","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielgerlag%2Fblackis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielgerlag%2Fblackis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielgerlag%2Fblackis/lists"}