DataLoom.CSharp 0.1.0

dotnet add package DataLoom.CSharp --version 0.1.0
                    
NuGet\Install-Package DataLoom.CSharp -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DataLoom.CSharp" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DataLoom.CSharp" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="DataLoom.CSharp" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DataLoom.CSharp --version 0.1.0
                    
#r "nuget: DataLoom.CSharp, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DataLoom.CSharp@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DataLoom.CSharp&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=DataLoom.CSharp&version=0.1.0
                    
Install as a Cake Tool

Data Loom

Data Loom is a messaging system with persistence.

The end-goal is to create a language agnostic pub/sub messaging system that has persistent storage and act as a repository to keep state for applications that communicate with each other.

This project is for me to learn Go, some networking, SDK development etc. and NOT meant to be a stable product for use. While I am verifying some functionality with testing, I am not being as thorough with testing, logging, features nor documentation that would/should be required for a fully developed project for use in a production environment.

TLDR: This README provides a basic overview of the project. Other documentation for getting started, more details about various aspects of the project, and usage of the project under the /docs/ directory and includes:

Overview

⚠️ Note: This project is for learning purposes. It's not intended to be a stable production system. While some functionality is verified with testing, logging, and documentation are minimal, and the system may contain bugs.

Topics

Similar to Kafka, topics act as the "topic of conversation" or "state variables" that clients can publish on or subscribe to.

Clients can subscribe to topics and receive messages in real time, with optional message persistence and retrieval (getting values without another client publishing to a topic).

Topic Schemas

Clients can register topics with a schema (a json structure) that acts as a type definition that all clients will need comply with in order to publish on a particular topic. The server will validate all messages being sent and ensure they comply with the latest topic schema. The goal for having schemas for topics is that in client side code you can have everything be typed and ensure the data you are passing and receiving conforms to a specific shape.

Server

The server acts as a message broker, and also handles authorization, persistence, state and the schemas for individual "topics".

As of now, it has some configuration and can use either Badger (embedded key-value in Go) or SQLite for persistence of state. It is planned to also have no persistence be an option, but for now the default in Badger.

Clients and SDKs

Currently, the C# SDK is created but untested. There are stretch goals to create SDKs for Go and Typescript and have them be packages available to use that abstracts away all connection and messaging to the server.

Clients can connect to the server without needing the SDK and just connect via websockets and use the API.

Persistence

The server will also persist the latest state for all of the topics. This can help keep state if the server or any clients go down. There is a stretch goal to have storage be either the latest state or to keep a time-series based approach which would allow for "replaying" or analyzation of data over time.

Currently there is only Badger implementation for persistent storage with SQLite being implelemented but untested yet.

Current State

  • Core functionality implemented: topic creation, subscription, publishing, persistence.
  • Some simple tests in place for message sending and receiving, along with simple stress tests, but not very robust yet.
  • Not yet fully hardened for production use.
  • Super basic auth with api key that is passed with inital Authorization header.

Upcoming

  • C# SDK is created with some testing + stress testing
  • SQLite persistence is created but untested.
  • Server pre-built binary for use without compilation and maybe a docker image.
  • Better and more robust testing.
  • Stretch goal of a Typescript SDK
  • Configurable IP Address Binding
  • Fixing persistence logging and ACKs when "no-persistence" is configured

License

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

This project uses Badger, licensed under the Apache License 2.0.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 180 10/3/2025