Expand description
Matchy - Fast Database for IP Address and Pattern Matching
Matchy is a high-performance database library for querying IP addresses, CIDR ranges, and glob patterns with rich associated data. Perfect for threat intelligence, GeoIP, domain categorization, and network security applications.
§Quick Start - Unified Database
use matchy::{Database, DatabaseBuilder, MatchMode, DataValue};
use std::collections::HashMap;
// Build a database with both IP and pattern entries
let mut builder = DatabaseBuilder::new(MatchMode::CaseSensitive);
// Add IP address
let mut data = HashMap::new();
data.insert("threat_level".to_string(), DataValue::String("high".to_string()));
builder.add_entry("1.2.3.4", data)?;
// Add pattern
let mut data = HashMap::new();
data.insert("category".to_string(), DataValue::String("malware".to_string()));
builder.add_entry("*.evil.com", data)?;
// Build and save
let db_bytes = builder.build()?;
// Query the database
let db = Database::from("threats.db").open()?;
// Automatic IP detection
if let Some(result) = db.lookup("1.2.3.4")? {
println!("Found: {:?}", result);
}
// Automatic pattern matching
if let Some(result) = db.lookup("malware.evil.com")? {
println!("Matches pattern: {:?}", result);
}§Key Features
- Unified Queries: Automatically detects IP addresses vs patterns
- Rich Data: Store JSON-like structured data with each entry
- Zero-Copy Loading: Memory-mapped files load instantly (~1ms)
- MMDB Compatible: Drop-in replacement for libmaxminddb
- Shared Memory: Multiple processes share physical RAM
- C/C++ API: Stable FFI for any language
- Fast Lookups: O(log n) for IPs, O(n) for patterns
§Architecture
Matchy uses a hybrid binary format combining IP tree structures with pattern matching automata:
┌──────────────────────────────────────┐
│ Database File Format │
├──────────────────────────────────────┤
│ 1. IP Search Tree (binary trie) │
│ 2. Data Section (deduplicated) │
│ 3. Pattern Matcher (Aho-Corasick) │
│ 4. Metadata │
└──────────────────────────────────────┘
↓ mmap() syscall (~1ms)
┌──────────────────────────────────────┐
│ Memory (read-only, shared) │
│ Ready for queries immediately! │
└──────────────────────────────────────┘Re-exports§
pub use crate::database::Database;pub use crate::database::DatabaseError;pub use crate::database::DatabaseOpener;pub use crate::database::DatabaseOptions;pub use crate::database::DatabaseStats;pub use crate::database::LookupRef;pub use crate::database::QueryResult;pub use crate::database::ReloadEvent;pub use crate::database::ReloadSource;pub use crate::error::MatchyError;pub use crate::error::Result;pub use crate::schema_validation::SchemaError;pub use crate::schema_validation::SchemaValidationError;pub use crate::schema_validation::SchemaValidator;pub use crate::schema_validation::ValidationErrorDetail;pub use matchy_extractor as extractor;
Modules§
- c_api
- C API for Matchy
- database
- Unified database API Unified Database API
- error
- Error types for Paraglob operations Error types for the matchy library
- file_
reader - File reading utilities with automatic gzip decompression Streaming file reader with automatic gzip decompression
- misp_
importer - MISP JSON threat intelligence importer MISP JSON Threat Intelligence Importer
- processing
- Batch processing infrastructure for efficient file analysis
- schema_
validation - Schema validation for yield values
- schemas
- Built-in database schemas for yield value validation
- simd_
utils - SIMD-accelerated utilities for pattern matching
- updater
- Live database with automatic file watching and optional network updates (native only) Live database update support.
- validation
- Database validation for untrusted files
Structs§
- Database
Builder - Unified database builder for creating databases with IP addresses and patterns
Enums§
- Data
Value - Data value type for database entries Data value that can be stored in the data section
- Entry
Type - Entry type classification for database builder
- Format
Error - Errors that can occur during database format operations
- Match
Mode - Match mode for text operations (case sensitive/insensitive) Match mode for text matching operations.
- Paraglob
Error - Main error type for paraglob operations
Constants§
- MATCHY_
VERSION - Library version string
- MATCHY_
VERSION_ MAJOR - Library major version
- MATCHY_
VERSION_ MINOR - Library minor version
- MATCHY_
VERSION_ PATCH - Library patch version
Traits§
- Database
Builder Ext - Extension trait for adding schema validation to DatabaseBuilder
- Entry
Validator - Trait for custom entry validation