
Security News
The Hidden Blast Radius of the Axios Compromise
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.
TinyIpc is a lightweight, serverless .NET inter-process broadcast message bus designed for simplicity and performance in Windows desktop applications.
Benefits
Limitations
Every publish operation reads and writes the entire shared memory mapped file, and every receive operation which is triggered after writes also reads the entire file.
Thus, if high throughput is desired, batch publish several messages at once to reduce I/O operations.
TinyIpc currently supports Windows only due to reliance on platform-specific primitives.
For more details, refer to this issue.
| TinyIPC | IpcChannel | Named Pipes | |
|---|---|---|---|
| Broadcasting to all listeners (except self) | ✓ | ✗ | ✗ |
| Serverless architecture | ✓ | ✗ | ✗ |
| Process privilege agnostic | ✓ | ✓ | ✓ |
| Fully in-memory | ✓ | ✓ | ✓ |
Check ConsoleApp for a sample application.
using var messagebus1 = new TinyMessageBus("ExampleChannel");
using var messagebus2 = new TinyMessageBus("ExampleChannel");
messagebus2.MessageReceived +=
(sender, e) => Console.WriteLine(e.Message.ToString());
while (true)
{
var message = Console.ReadLine();
await messagebus1.PublishAsync(BinaryData.FromString(message));
}
Check GenericHost for a sample application.
// Add a reusable ITinyMessageBus
services.AddTinyMessageBus(options =>
{
options.Name = "ExampleChannel";
});
// Then use ITinyMessageBus via dependency injection
public class SomeService(ITinyMessageBus tinyMessageBus)
{
public Task PublishMessage(string message)
{
return tinyMessageBus.PublishAsync(BinaryData.FromString(message));
}
public async Task Subscribe()
{
await foreach (var message in tinyMessageBus.SubscribeAsync())
{
Console.WriteLine(message.ToString());
}
}
}
You can also add keyed instances with different settings.
services.AddKeyedTinyMessageBus("instance1", options =>
{
options.Name = "Channel1";
});
services.AddKeyedTinyMessageBus("instance2", options =>
{
options.Name = "Channel2";
});
// Then resolve them using [FromKeyedServices(serviceKey)] or via a IServiceProvider
Or you might need to use dependency injection and create multiple instances communicating with the same message bus in the same application.
// Add a factory service to IServiceCollection
services.AddTinyIpcFactory(options =>
{
options.Name = "ExampleChannel";
});
// Later use ITinyIpcFactory to create instances
using var tinyIpcInstance1 = tinyIpcFactory.CreateInstance();
using var tinyIpcInstance2 = tinyIpcFactory.CreateInstance();
tinyIpcInstance2.MessageBus.MessageReceived +=
(sender, e) => Console.WriteLine(e.Message.ToString());
while (true)
{
var message = Console.ReadLine();
await tinyIpcInstance1.MessageBus.PublishAsync(BinaryData.FromString(message));
}
FAQs
.NET inter process broadcast message bus.
We found that tinyipc demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.