QWKSync.NET is a small, dependency-free .NET library that safely and predictably moves QWK and REP files between a local application and a remote endpoint. It operates strictly at the transport and orchestration level—discovering files, ordering them deterministically, transferring them atomically, and reporting results—without parsing, validating, or interpreting packet contents.
- File-level transfer orchestration for QWK and REP packets
- Atomic downloads with temporary file handling and cleanup
- Deterministic ordering of packets (newest first, with lexicographic fallback)
- Transport abstraction with built-in LocalFolderTransport
- Single-flight concurrency guarantees to prevent conflicts
- Stateless operation with no history or caching
- Cancellation support throughout all operations
- Progress reporting via standard .NET interfaces
- Zero third-party dependencies
QWKSync.NET is available on NuGet:
dotnet add package QwkSyncOr add to your .csproj:
<ItemGroup>
<PackageReference Include="QwkSync" Version="1.0.0" />
</ItemGroup>using QwkSync;
// Create a profile pointing to the remote endpoint
QwkSyncProfile profile = new QwkSyncProfile
{
Endpoint = new Uri("file:///path/to/remote/folder"),
TransportId = "local-folder"
};
// Create a plan specifying local directories
QwkSyncPlan plan = new QwkSyncPlan
{
LocalInboxDirectory = "/path/to/local/inbox",
LocalOutboxDirectory = "/path/to/local/outbox"
};
// Create a client and run the sync
QwkSyncClient client = new QwkSyncClient();
using CancellationTokenSource cts = new CancellationTokenSource();
QwkSyncResult result = await client.SyncAsync(profile, plan, cts.Token);
// Check the result
Console.WriteLine($"Outcome: {result.Outcome}");
if (result.Issues.Count > 0)
{
foreach (QwkSyncIssue issue in result.Issues)
{
Console.WriteLine($" - {issue.Description}");
}
}src/QwkSync/- Core librarysrc/QwkSync.Http/- HTTP transport extensiontests/QwkSync.Tests/- Core library teststests/QwkSync.Http.Tests/- HTTP transport teststools/QwkSync.LocalDemo/- Demonstration tooldocs/- Documentation
MIT License. See LICENSE file for details.