infocyph / talkingbytes
Transport-agnostic communication toolkit for PHP.
1.0.0
2026-07-30 16:22 UTC
Requires
- php: >=8.4
- ext-curl: *
- ext-fileinfo: *
- ext-openssl: *
Requires (Dev)
- infocyph/phpforge: dev-main@dev
Suggests
- ext-grpc: Required for native gRPC transport.
- ext-iconv: Optional fallback for inbound charset conversion when mbstring is unavailable.
- ext-imap: Optional for imap_* address parsing and UTF7-IMAP fallback helpers.
- ext-mbstring: Recommended for robust charset conversion and encoded header handling.
- grpc/grpc: Required for generated PHP gRPC clients.
README
Transport-agnostic communication toolkit for PHP.
TalkingBytes provides a shared middleware/event core with protocol modules for:
- Email (SMTP/sendmail/mail/spool + IMAP/POP3/parser)
- HTTP (cURL + cURL multi)
- Webhook (sign/verify/replay)
- gRPC (adapter + retry + fake caller)
Install
composer require infocyph/talkingbytes
Requirements:
- PHP
>=8.4 ext-curlext-fileinfoext-openssl
Quick Start
HTTP
use Infocyph\TalkingBytes\Http\HttpClient; $result = HttpClient::curl() ->withBearerToken($token) ->timeout(10) ->postJson('https://api.example.com/orders', [ 'order_id' => 1001, 'amount' => 500, ]); if ($result->successful) { $data = $result->response->json(); }
use Infocyph\TalkingBytes\Email\Email; use Infocyph\TalkingBytes\Email\EmailMessage; $result = Email::sender()->usingNull()->send( EmailMessage::new() ->from('sender@example.com') ->to('user@example.com') ->subject('Hello') ->text('Hello from TalkingBytes') );
Webhook
use Infocyph\TalkingBytes\Webhook\Webhook; use Infocyph\TalkingBytes\Webhook\WebhookMessage; $delivery = Webhook::sender($httpClient) ->withSecret('whsec_test') ->send( WebhookMessage::event('order.created') ->url('https://merchant.example.com/webhook') ->payload(['order_id' => 1001]) );
gRPC
use Infocyph\TalkingBytes\Grpc\GrpcClient; use Infocyph\TalkingBytes\Grpc\Receiver\GrpcInboundRequest; use Infocyph\TalkingBytes\Grpc\Receiver\GrpcInboundResponse; use Infocyph\TalkingBytes\Grpc\Sender\GrpcRequest; use Infocyph\TalkingBytes\Grpc\Sender\GrpcResponse; use Infocyph\TalkingBytes\Grpc\GrpcServer; use Infocyph\TalkingBytes\Grpc\GrpcStatus; $client = GrpcClient::using( static fn (GrpcRequest $request): GrpcResponse => new GrpcResponse(GrpcStatus::Ok, ['ok' => true, 'echo' => $request->message]), ); $result = $client->send(new GrpcRequest('/orders.v1.OrderService/Create', [ 'order_id' => 1001, ])); $server = GrpcServer::new()->withHandler( '/orders.v1.OrderService/Create', static fn (GrpcInboundRequest $request): GrpcInboundResponse => GrpcInboundResponse::ok(['received' => $request->message]), );
Security
Protected by PHPForge — an automated quality and security gate for PHP projects.
Documentation
The complete guides cover email, HTTP, webhooks, gRPC, middleware and resilience, security, and testing.
Made with ❤️ for the PHP communityMIT Licensed
Documentation • Security • Code of Conduct • Contributing • Report Bug • Request Feature