Skip to content

vext is a high-performance IRC notification daemon for version control systems. It provides real-time commit notifications from Git repositories to IRC channels, with connection pooling to eliminate join/leave spam.

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE
Unknown
LICENSE.txt
Notifications You must be signed in to change notification settings

hyperpolymath/vext

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

vext - Rhodium Standard Edition

Rust 1.70+ Deno 1.40+ License RSR Compliance

1. Overview

vext is a high-performance IRC notification daemon for version control systems. It provides real-time commit notifications from Git repositories to IRC channels, with connection pooling to eliminate join/leave spam.

This is a modernized rewrite of the original irker by Eric S. Raymond, built with:

  • Rust - High-performance async daemon with memory safety

  • Deno/TypeScript - Modern hook scripts and CLI tools

2. Features

  • Async I/O: Built on Tokio for efficient handling of thousands of connections

  • Connection Pooling: Maintains persistent IRC connections, eliminating join/leave spam

  • TLS Support: Secure connections to IRC servers (enabled by default)

  • Rate Limiting: Built-in flood protection with token bucket algorithm

  • Multi-Target: Send notifications to multiple channels/servers simultaneously

  • JSON Protocol: Simple, language-agnostic notification format

  • Color Support: Optional mIRC color codes for enhanced visibility

3. Architecture

┌─────────────────┐     JSON/TCP      ┌─────────────────┐
│   Git Hook      │ ───────────────▶  │   vextd         │
│   (Deno/TS)     │                   │   (Rust)        │
└─────────────────┘                   └────────┬────────┘
                                               │
                                     ┌─────────┴─────────┐
                                     │  Connection Pool  │
                                     └─────────┬─────────┘
                                               │
                              ┌────────────────┼────────────────┐
                              ▼                ▼                ▼
                        ┌──────────┐    ┌──────────┐    ┌──────────┐
                        │ IRC #ch1 │    │ IRC #ch2 │    │ IRC #ch3 │
                        └──────────┘    └──────────┘    └──────────┘

4. Quick Start

4.1. Prerequisites

4.2. Building

# Clone the repository
git clone https://github.com/Hyperpolymath/vext.git
cd vext

# Build everything
just build

# Or build components separately
cargo build --release          # Rust daemon
cd vext-tools && deno check src/**/*.ts  # Deno tools

4.3. Running the Daemon

# Start daemon (listens on 127.0.0.1:6659 by default)
./target/release/vextd

# Start with custom settings
./target/release/vextd --listen 0.0.0.0:6659 --default-server irc.libera.chat

# Debug mode
./target/release/vextd -vv

4.4. Installing Git Hook

# Install hook to a repository
cd /path/to/your/repo
deno run --allow-read --allow-write \
  https://raw.githubusercontent.com/Hyperpolymath/vext/main/vext-tools/src/hooks/install.ts

# Configure the hook
export VEXT_TARGETS="ircs://irc.libera.chat/your-channel"
export VEXT_PROJECT="your-project"

4.5. Sending Notifications

# Using the CLI
./target/release/vext-send \
  --to "ircs://irc.libera.chat/your-channel" \
  --message "Hello from vext!" \
  --project "myproject"

# Or via netcat
echo '{"to":["ircs://irc.libera.chat/test"],"privmsg":"Test message"}' | nc localhost 6659

5. Configuration

5.1. Daemon Options

Option Description Default

--listen

Listen address

127.0.0.1:6659

--default-server

Default IRC server

irc.libera.chat

--default-port

Default IRC port

6697

--tls

Enable TLS

true

--max-connections

Max connections per server

4

--nick

Bot nick prefix

vext

-v, -vv

Verbose logging

INFO

5.2. Hook Environment Variables

Variable Description

VEXT_SERVER

vextd server address (default: 127.0.0.1:6659)

VEXT_TARGETS

Comma-separated IRC target URLs

VEXT_PROJECT

Project name for notifications

VEXT_URL

Base URL for commit links

VEXT_MAX_COMMITS

Max commits to report per push (default: 5)

6. Notification Protocol

Send JSON notifications to the daemon over TCP:

{
  "to": ["ircs://irc.libera.chat/channel1", "irc://irc.oftc.net/channel2"],
  "privmsg": "[project] main abc1234 dev: Add new feature",
  "project": "myproject",
  "branch": "main",
  "commit": "abc1234",
  "author": "developer",
  "url": "https://github.com/user/repo/commit/abc1234",
  "colors": "mirc"
}

6.1. IRC URL Format

  • irc://server/channel - Plain connection (port 6667)

  • ircs://server/channel - TLS connection (port 6697)

  • irc://server:port/channel - Custom port

  • irc://server/channel?key=secret - Channel with key

7. Development

# Run tests
just test

# Format code
just format

# Lint
just lint

# Full validation
just validate

8. Project Structure

vext/
├── vext-core/           # Rust daemon
│   ├── src/
│   │   ├── main.rs      # Entry point
│   │   ├── config.rs    # Configuration
│   │   ├── irc_client.rs# IRC protocol
│   │   ├── listener.rs  # TCP/UDP listener
│   │   ├── pool.rs      # Connection pooling
│   │   └── protocol.rs  # Notification types
│   └── Cargo.toml
├── vext-tools/          # Deno hooks & tools
│   ├── src/
│   │   └── hooks/
│   │       ├── git.ts   # Git post-receive hook
│   │       └── install.ts
│   └── deno.json
└── justfile             # Build automation

9. License

Dual-licensed under MIT OR AGPL-3.0-or-later (Palimpsest licensing).

Choose the license that works best for your use case.

10. Credits

  • Original irker by Eric S. Raymond

  • Modernized by the vext contributors

About

vext is a high-performance IRC notification daemon for version control systems. It provides real-time commit notifications from Git repositories to IRC channels, with connection pooling to eliminate join/leave spam.

Topics

Resources

License

Unknown, Unknown licenses found

Licenses found

Unknown
LICENSE
Unknown
LICENSE.txt

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors 2

  •  
  •