coregex

package module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 27, 2025 License: MIT Imports: 1 Imported by: 0

README ΒΆ

coregex - Production-Grade Regex Engine for Go

5-50x faster than stdlib through multi-engine architecture and SIMD optimizations

GitHub Release Go Version Go Reference GitHub Actions Go Report Card License GitHub Stars GitHub Issues


A production-grade regex engine for Go with dramatic performance improvements over the standard library. Inspired by Rust's regex crate, coregex uses a multi-engine architecture with SIMD-accelerated prefilters to achieve 5-50x speedup on typical workloads.

Features

⚑ Performance

  • πŸš€ 5-50x faster than Go's regexp package through intelligent prefiltering
  • 🎯 SIMD-accelerated search with AVX2/SSSE3 assembly (10-15x faster substring search)
  • πŸ“Š Multi-pattern search (Teddy SIMD algorithm for 2-8 literals)
  • πŸ” Aho-Corasick for many literals
  • πŸ’Ύ Zero allocations in hot paths through object pooling

πŸ—οΈ Architecture

  • 🧠 Meta-engine orchestrates strategy selection (DFA/NFA/bounded backtracking)
  • ⚑ Lazy DFA with configurable caching (on-demand state construction)
  • πŸ”„ Pike VM (Thompson's NFA) for guaranteed O(nΓ—m) performance
  • 🎭 One-pass DFA for simple patterns (no backtracking needed)
  • πŸ“Œ Prefilter coordination (memchr/memmem/teddy/aho-corasick)

🎯 API Design

  • Simple, drop-in replacement for regexp package
  • Configuration system for performance tuning
  • Thread-safe with concurrent compilation support
  • Comprehensive error handling

Installation

go get github.com/coregx/coregex

Requirements:

  • Go 1.25 or later
  • Zero external dependencies (except golang.org/x/sys for CPU feature detection)

Quick Start

Basic Usage
package main

import (
	"fmt"
	"log"

	"github.com/coregx/coregex"
)

func main() {
	// Compile a regex pattern
	re, err := coregex.Compile(`\b\w+@\w+\.\w+\b`)
	if err != nil {
		log.Fatal(err)
	}

	// Find first match
	text := []byte("Contact us at support@example.com for help")
	if match := re.Find(text); match != nil {
		fmt.Printf("Found email: %s\n", match)
	}

	// Find all matches
	matches := re.FindAll(text, -1)
	for _, m := range matches {
		fmt.Printf("Match: %s\n", m)
	}
}
Advanced Configuration
package main

import (
	"log"

	"github.com/coregx/coregex"
)

func main() {
	// Create custom configuration for performance tuning
	config := coregex.DefaultConfig()
	config.DFAMaxStates = 10000        // Limit DFA cache size
	config.EnablePrefilter = true       // Use SIMD prefilters (default)
	config.UseObjectPools = true        // Zero-allocation mode (default)

	// Compile with custom config
	re, err := coregex.CompileWithConfig(`pattern`, config)
	if err != nil {
		log.Fatal(err)
	}

	// Use regex...
	text := []byte("search this text")
	match := re.Find(text)
	if match != nil {
		log.Printf("Found: %s", match)
	}
}
Performance Example
package main

import (
	"fmt"
	"regexp"
	"time"

	"github.com/coregx/coregex"
)

func benchmarkSearch(pattern string, text []byte) {
	// stdlib regexp
	start := time.Now()
	reStdlib := regexp.MustCompile(pattern)
	for i := 0; i < 10000; i++ {
		reStdlib.Find(text)
	}
	stdlibTime := time.Since(start)

	// coregex
	start = time.Now()
	reGoregex := coregex.MustCompile(pattern)
	for i := 0; i < 10000; i++ {
		reGoregex.Find(text)
	}
	coregexTime := time.Since(start)

	speedup := float64(stdlibTime) / float64(coregexTime)
	fmt.Printf("Speedup: %.1fx faster\n", speedup)
}

Performance Benchmarks

SIMD Primitives (vs stdlib):

  • memchr (single byte): 12.3x faster (64KB input)
  • memmem (substring): 14.2x faster (64KB input, short needle)
  • teddy (multi-pattern): 8.5x faster (2-8 patterns)

Regex Search (vs regexp):

  • Email extraction: 15-25x faster
  • URL matching: 10-20x faster
  • Log parsing: 30-50x faster (with prefilter optimization)

See benchmarks/ for detailed comparisons.

Supported Features

v0.1.0 (Current)
Feature Status Notes
SIMD Primitives βœ… memchr, memchr2/3, memmem, teddy
Literal Extraction βœ… Prefix/suffix/inner literals
Prefilter System βœ… Automatic strategy selection
Meta-Engine βœ… DFA/NFA orchestration
Lazy DFA βœ… On-demand state construction
Pike VM (NFA) βœ… Thompson's construction
One-pass DFA βœ… For simple patterns
Unicode support βœ… Via regexp/syntax
Captures βœ… Numbered groups
Named captures πŸ“… v0.2.0 Planned
Look-around πŸ“… v0.3.0 Lookahead/lookbehind
Backreferences ❌ Incompatible with O(n) guarantee
Regex Syntax

coregex uses Go's regexp/syntax for pattern parsing, supporting:

  • βœ… Character classes [a-z], \d, \w, \s
  • βœ… Quantifiers *, +, ?, {n,m}
  • βœ… Anchors ^, $, \b, \B
  • βœ… Groups (...) and alternation |
  • βœ… Unicode categories \p{L}, \P{N}
  • βœ… Case-insensitive matching (?i)
  • βœ… Non-capturing groups (?:...)
  • ❌ Backreferences (not supported - O(n) performance guarantee)

Known Limitations

v0.1.0 (Experimental)

What Works:

  • βœ… All standard regex syntax (except backreferences)
  • βœ… Unicode support via regexp/syntax
  • βœ… SIMD acceleration on AMD64 (AVX2/SSSE3)
  • βœ… Cross-platform (fallback to pure Go on other architectures)
  • βœ… Thread-safe compilation and execution
  • βœ… Zero external dependencies

Current Limitations:

  • ⚠️ Experimental API - May change in v0.2+
  • ⚠️ No named capture groups yet (planned v0.2.0)
  • ⚠️ No look-around assertions yet (planned v0.3.0)
  • ⚠️ SIMD only on AMD64 (ARM NEON planned v0.4.0)

Performance Notes:

  • πŸš€ Best speedup on patterns with literal prefixes/suffixes
  • πŸš€ Excellent for log parsing, email/URL extraction
  • ⚑ May be slower than stdlib on trivial patterns (overhead)
  • ⚑ First match slower (compilation cost), repeated matches faster

See CHANGELOG.md for detailed version history.

Documentation

Development

Building
# Clone repository
git clone https://github.com/coregx/coregex.git
cd coregex

# Build all packages
go build ./...

# Run tests
go test ./...

# Run tests with race detector
go test -race ./...

# Run benchmarks
go test -bench=. -benchmem ./simd/
go test -bench=. -benchmem ./prefilter/
Testing
# Run all tests
go test ./...

# Run specific package tests
go test ./simd/ -v
go test ./meta/ -v

# Run with coverage
go test -cover ./...

# Run linter (golangci-lint required)
golangci-lint run
Pre-release Check

Before creating a release, run the comprehensive validation script:

bash scripts/pre-release-check.sh

This checks:

  • βœ… Go version (1.25+)
  • βœ… Code formatting (gofmt)
  • βœ… go vet passes
  • βœ… All tests pass (with race detector)
  • βœ… Test coverage >70%
  • βœ… golangci-lint passes
  • βœ… Documentation present

Contributing

Contributions are welcome! This is an experimental project and we'd love your help.

Before contributing:

  1. Read CONTRIBUTING.md - Git Flow workflow and guidelines
  2. Check open issues
  3. Join GitHub Discussions

Ways to contribute:

  • πŸ› Report bugs and edge cases
  • πŸ’‘ Suggest features
  • πŸ“ Improve documentation
  • πŸ”§ Submit pull requests
  • ⭐ Star the project
  • πŸ§ͺ Benchmark against stdlib and report results

Priority areas:

  • ARM NEON SIMD implementation (v0.4.0)
  • Named capture groups (v0.2.0)
  • Look-around assertions (v0.3.0)
  • More comprehensive benchmarks
  • Real-world performance testing

Comparison with Other Libraries

Feature coregex stdlib regexp regexp2
Performance πŸš€ 5-50x faster Baseline Slower (backtracking)
SIMD acceleration βœ… AVX2/SSSE3 ❌ No ❌ No
Prefilters βœ… Automatic ❌ No ❌ No
Multi-engine βœ… DFA/NFA/PikeVM ❌ Single ❌ Backtracking only
O(n) guarantee βœ… Yes βœ… Yes ❌ No (exponential worst-case)
Backreferences ❌ Not supported ❌ Not supported βœ… Supported
Named captures πŸ“… v0.2.0 βœ… Supported βœ… Supported
Look-around πŸ“… v0.3.0 ❌ Limited βœ… Supported
API compatibility ⚠️ Similar - Different
Maintained βœ… Active βœ… Stdlib βœ… Active

When to use coregex:

  • βœ… Performance-critical applications (log parsing, text processing)
  • βœ… Patterns with literal prefixes/suffixes
  • βœ… Multi-pattern search (email/URL extraction)
  • βœ… When you need O(n) performance guarantee

When to use stdlib regexp:

  • βœ… Simple patterns where performance doesn't matter
  • βœ… You need named captures NOW (coming in v0.2.0)
  • βœ… Maximum stability and API compatibility

When to use regexp2:

  • βœ… You need backreferences (not supported by coregex)
  • βœ… Complex look-around assertions (v0.3.0 for coregex)
  • ⚠️ Accept exponential worst-case performance

Architecture Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Meta-Engine                          β”‚
β”‚  (Strategy Selection: DFA/NFA/One-pass)                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”
     β”‚  Prefilter    β”‚ ──► memchr (single byte)
     β”‚  Coordinator  β”‚ ──► memmem (substring)
     β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ ──► teddy (2-8 patterns, SIMD)
             β”‚         ──► aho-corasick (many patterns)
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β”‚                                         β”‚
β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”΄β”€β”€β”€β”€β”
β”‚ Lazy    β”‚  β”‚ Pike VM  β”‚  β”‚ One-pass   β”‚  β”‚ Literalβ”‚
β”‚ DFA     β”‚  β”‚ (NFA)    β”‚  β”‚ DFA        β”‚  β”‚Extract β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜
     β”‚             β”‚              β”‚             β”‚
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚ SIMD Primitives β”‚
              β”‚ (AVX2/SSSE3)    β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key components:

  1. Meta-Engine - Intelligent strategy selection based on pattern analysis
  2. Prefilter System - Fast rejection of non-matching candidates
  3. Multi-Engine Execution - DFA for speed, NFA for correctness
  4. SIMD Primitives - 10-15x faster byte/substring search

See package documentation on pkg.go.dev for API details.


Part of the CoreGX (Core Go eXtensions) ecosystem:

  • More projects coming soon!

Inspired by:


License

This project is licensed under the MIT License - see the LICENSE file for details.


Acknowledgments

  • Rust regex crate team for architectural inspiration
  • Russ Cox for Thompson's NFA articles and RE2
  • Intel for Hyperscan and Teddy algorithm
  • Go team for regexp/syntax parser
  • All contributors to this project

Support


Status: ⚠️ EXPERIMENTAL - v0.1.0 released, API may change in 0.x versions

Current Version: v0.1.0 (2025-01-26)

Ready for: Testing, benchmarking, feedback, and experimental use Production readiness: API stability expected in v1.0.0

Next Release: v0.2.0 (Q1 2025) - Named captures, API refinements


Built with performance and correctness in mind by the CoreGX community πŸš€

Documentation ΒΆ

Overview ΒΆ

Package coregex provides a high-performance regex engine for Go.

coregex achieves 5-50x speedup over Go's stdlib regexp through:

  • Multi-engine architecture (NFA, Lazy DFA, prefilters)
  • SIMD-accelerated primitives (memchr, memmem, teddy)
  • Literal extraction and prefiltering
  • Automatic strategy selection

The public API is compatible with stdlib regexp where possible, making it easy to migrate existing code.

Basic usage:

// Compile a pattern
re, err := coregex.Compile(`\d+`)
if err != nil {
    log.Fatal(err)
}

// Find first match
match := re.Find([]byte("hello 123 world"))
fmt.Println(string(match)) // "123"

// Check if matches
if re.Match([]byte("hello 123")) {
    fmt.Println("matched!")
}

Advanced usage:

// Custom configuration
config := coregex.DefaultConfig()
config.MaxDFAStates = 50000
re, err := coregex.CompileWithConfig("(a|b|c)*", config)

Performance characteristics:

  • Patterns with literals: 5-50x faster (prefilter optimization)
  • Simple patterns: comparable to stdlib
  • Complex patterns: 2-10x faster (DFA avoids backtracking)
  • Worst case: guaranteed O(m*n) (ReDoS safe)

Limitations (v1.0):

  • No capture groups (coming in v1.1)
  • No replace functions (coming in v1.1)
  • No multiline/case-insensitive flags (coming in v1.1)

Index ΒΆ

Examples ΒΆ

Constants ΒΆ

This section is empty.

Variables ΒΆ

This section is empty.

Functions ΒΆ

func DefaultConfig ΒΆ

func DefaultConfig() meta.Config

DefaultConfig returns the default configuration for compilation.

Users can customize this and pass to CompileWithConfig.

Example:

config := coregex.DefaultConfig()
config.EnableDFA = false // Use NFA only
re, _ := coregex.CompileWithConfig("pattern", config)

Types ΒΆ

type Regex ΒΆ

type Regex struct {
	// contains filtered or unexported fields
}

Regex represents a compiled regular expression.

A Regex is safe to use concurrently from multiple goroutines, except for methods that modify internal state (like ResetStats).

Example:

re := coregex.MustCompile(`hello`)
if re.Match([]byte("hello world")) {
    println("matched!")
}

func Compile ΒΆ

func Compile(pattern string) (*Regex, error)

Compile compiles a regular expression pattern.

Syntax is Perl-compatible (same as Go's stdlib regexp). Returns an error if the pattern is invalid.

Example:

re, err := coregex.Compile(`\d{3}-\d{4}`)
if err != nil {
    log.Fatal(err)
}
Example ΒΆ

ExampleCompile demonstrates basic pattern compilation and matching.

package main

import (
	"fmt"

	"github.com/coregx/coregex"
)

func main() {
	re, err := coregex.Compile(`\d+`)
	if err != nil {
		panic(err)
	}

	fmt.Println(re.Match([]byte("hello 123")))
}
Output:

true

func CompileWithConfig ΒΆ

func CompileWithConfig(pattern string, config meta.Config) (*Regex, error)

CompileWithConfig compiles a pattern with custom configuration.

This allows fine-tuning of performance characteristics.

Example:

config := coregex.DefaultConfig()
config.MaxDFAStates = 100000 // Larger cache
re, err := coregex.CompileWithConfig("(a|b|c)*", config)
Example ΒΆ

ExampleCompileWithConfig demonstrates custom configuration.

package main

import (
	"fmt"

	"github.com/coregx/coregex"
)

func main() {
	config := coregex.DefaultConfig()
	config.MaxDFAStates = 50000 // Increase cache size

	re, err := coregex.CompileWithConfig("(a|b|c)*", config)
	if err != nil {
		panic(err)
	}

	fmt.Println(re.MatchString("abcabc"))
}
Output:

true

func MustCompile ΒΆ

func MustCompile(pattern string) *Regex

MustCompile compiles a regular expression pattern and panics if it fails.

This is useful for patterns known to be valid at compile time.

Example:

var emailRegex = coregex.MustCompile(`[a-z]+@[a-z]+\.[a-z]+`)
Example ΒΆ

ExampleMustCompile demonstrates panic-on-error compilation.

package main

import (
	"fmt"

	"github.com/coregx/coregex"
)

func main() {
	re := coregex.MustCompile(`hello`)
	fmt.Println(re.MatchString("hello world"))
}
Output:

true

func (*Regex) Find ΒΆ

func (r *Regex) Find(b []byte) []byte

Find returns a slice holding the text of the leftmost match in b. Returns nil if no match is found.

Example:

re := coregex.MustCompile(`\d+`)
match := re.Find([]byte("age: 42"))
println(string(match)) // "42"
Example ΒΆ

ExampleRegex_Find demonstrates finding the first match.

package main

import (
	"fmt"

	"github.com/coregx/coregex"
)

func main() {
	re := coregex.MustCompile(`\d+`)
	match := re.Find([]byte("age: 42 years"))
	fmt.Println(string(match))
}
Output:

42

func (*Regex) FindAll ΒΆ

func (r *Regex) FindAll(b []byte, n int) [][]byte

FindAll returns a slice of all successive matches of the pattern in b. If n > 0, it returns at most n matches. If n <= 0, it returns all matches.

Example:

re := coregex.MustCompile(`\d+`)
matches := re.FindAll([]byte("1 2 3"), -1)
// matches = [[]byte("1"), []byte("2"), []byte("3")]
Example ΒΆ

ExampleRegex_FindAll demonstrates finding all matches.

package main

import (
	"fmt"

	"github.com/coregx/coregex"
)

func main() {
	re := coregex.MustCompile(`\d`)
	matches := re.FindAll([]byte("a1b2c3"), -1)
	for _, m := range matches {
		fmt.Print(string(m), " ")
	}
	fmt.Println()
}
Output:

1 2 3

func (*Regex) FindAllString ΒΆ

func (r *Regex) FindAllString(s string, n int) []string

FindAllString returns a slice of all successive matches of the pattern in s. If n > 0, it returns at most n matches. If n <= 0, it returns all matches.

Example:

re := coregex.MustCompile(`\d+`)
matches := re.FindAllString("1 2 3", -1)
// matches = ["1", "2", "3"]
Example ΒΆ

ExampleRegex_FindAllString demonstrates finding all string matches.

package main

import (
	"fmt"

	"github.com/coregx/coregex"
)

func main() {
	re := coregex.MustCompile(`\w+`)
	words := re.FindAllString("hello world test", -1)
	for _, word := range words {
		fmt.Print(word, " ")
	}
	fmt.Println()
}
Output:

hello world test

func (*Regex) FindIndex ΒΆ

func (r *Regex) FindIndex(b []byte) []int

FindIndex returns a two-element slice of integers defining the location of the leftmost match in b. The match is at b[loc[0]:loc[1]]. Returns nil if no match is found.

Example:

re := coregex.MustCompile(`\d+`)
loc := re.FindIndex([]byte("age: 42"))
println(loc[0], loc[1]) // 5, 7
Example ΒΆ

ExampleRegex_FindIndex demonstrates finding match positions.

package main

import (
	"fmt"

	"github.com/coregx/coregex"
)

func main() {
	re := coregex.MustCompile(`\d+`)
	loc := re.FindIndex([]byte("age: 42"))
	fmt.Printf("Match at [%d:%d]\n", loc[0], loc[1])
}
Output:

Match at [5:7]

func (*Regex) FindString ΒΆ

func (r *Regex) FindString(s string) string

FindString returns a string holding the text of the leftmost match in s. Returns empty string if no match is found.

Example:

re := coregex.MustCompile(`\d+`)
match := re.FindString("age: 42")
println(match) // "42"
Example ΒΆ

ExampleRegex_FindString demonstrates finding a match in a string.

package main

import (
	"fmt"

	"github.com/coregx/coregex"
)

func main() {
	re := coregex.MustCompile(`\w+@\w+\.\w+`)
	email := re.FindString("Contact: user@example.com")
	fmt.Println(email)
}
Output:

user@example.com

func (*Regex) FindStringIndex ΒΆ

func (r *Regex) FindStringIndex(s string) []int

FindStringIndex returns a two-element slice of integers defining the location of the leftmost match in s. The match is at s[loc[0]:loc[1]]. Returns nil if no match is found.

Example:

re := coregex.MustCompile(`\d+`)
loc := re.FindStringIndex("age: 42")
println(loc[0], loc[1]) // 5, 7

func (*Regex) Match ΒΆ

func (r *Regex) Match(b []byte) bool

Match reports whether the byte slice b contains any match of the pattern.

Example:

re := coregex.MustCompile(`\d+`)
if re.Match([]byte("hello 123")) {
    println("contains digits")
}

func (*Regex) MatchString ΒΆ

func (r *Regex) MatchString(s string) bool

MatchString reports whether the string s contains any match of the pattern.

Example:

re := coregex.MustCompile(`hello`)
if re.MatchString("hello world") {
    println("matched!")
}

func (*Regex) String ΒΆ

func (r *Regex) String() string

String returns the source text used to compile the regular expression.

Example:

re := coregex.MustCompile(`\d+`)
println(re.String()) // `\d+`

Directories ΒΆ

Path Synopsis
dfa
lazy
Package lazy implements a Lazy DFA (Deterministic Finite Automaton) engine for regex matching.
Package lazy implements a Lazy DFA (Deterministic Finite Automaton) engine for regex matching.
internal
sparse
Package sparse provides a sparse set data structure for efficient membership testing.
Package sparse provides a sparse set data structure for efficient membership testing.
Package literal provides types and operations for extracting literal sequences from regex patterns for prefilter optimization.
Package literal provides types and operations for extracting literal sequences from regex patterns for prefilter optimization.
Package meta implements the meta-engine orchestrator that automatically selects the optimal regex execution strategy.
Package meta implements the meta-engine orchestrator that automatically selects the optimal regex execution strategy.
Package nfa provides a Thompson NFA (Non-deterministic Finite Automaton) implementation for regex matching.
Package nfa provides a Thompson NFA (Non-deterministic Finite Automaton) implementation for regex matching.
Package prefilter provides fast candidate filtering for regex search using extracted literal sequences.
Package prefilter provides fast candidate filtering for regex search using extracted literal sequences.
Package simd provides SIMD-accelerated string operations for high-performance byte searching.
Package simd provides SIMD-accelerated string operations for high-performance byte searching.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL