{"id":21714721,"url":"https://github.com/warriordog/activitypubsharp","last_synced_at":"2025-08-20T16:33:03.538Z","repository":{"id":74098095,"uuid":"570768143","full_name":"warriordog/ActivityPubSharp","owner":"warriordog","description":"Modular implementation of ActivityPub in C#","archived":false,"fork":false,"pushed_at":"2024-10-16T13:11:14.000Z","size":1178,"stargazers_count":47,"open_issues_count":33,"forks_count":10,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-12-15T12:34:30.314Z","etag":null,"topics":["activitypub","activitystreams","csharp","dotnet","federation","fediverse","json-ld"],"latest_commit_sha":null,"homepage":"https://warriordog.github.io/ActivityPubSharp/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/warriordog.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-11-26T04:03:17.000Z","updated_at":"2024-11-26T11:46:12.000Z","dependencies_parsed_at":"2023-10-02T18:17:01.580Z","dependency_job_id":"fc66ede5-58ee-4956-8cfb-43297ba7afae","html_url":"https://github.com/warriordog/ActivityPubSharp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/warriordog%2FActivityPubSharp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/warriordog%2FActivityPubSharp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/warriordog%2FActivityPubSharp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/warriordog%2FActivityPubSharp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/warriordog","download_url":"https://codeload.github.com/warriordog/ActivityPubSharp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230438185,"owners_count":18225870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["activitypub","activitystreams","csharp","dotnet","federation","fediverse","json-ld"],"created_at":"2024-11-26T00:38:17.737Z","updated_at":"2024-12-19T13:08:47.651Z","avatar_url":"https://github.com/warriordog.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# ActivityPubSharp - C# implementation of ActivityPub\n\n[![Build Status](https://github.com/warriordog/ActivityPubSharp/actions/workflows/build-dotnet.yml/badge.svg)](https://github.com/warriordog/ActivityPubSharp/actions/workflows/build-dotnet.yml)\n[![NuGet Snapshot](https://github.com/warriordog/ActivityPubSharp/actions/workflows/publish-snapshot.yml/badge.svg)](https://github.com/warriordog/ActivityPubSharp/actions/workflows/publish-snapshot.yml)\n\n❗❗ **Please note - this project is incomplete and not ready for production use.\nThe information here describes the design and technical goals of ActivityPubSharp, not the currently implemented functionality.\nPlease see [the issues tracker](https://github.com/warriordog/ActivityPubSharp/issues) for detailed status.**\n\n## About\nActivityPubSharp is a toolkit of modular packages that support the use of ActivityPub in .NET applications.\nLow-level APIs offer raw - but safe - access to strongly-typed models, while high-level interfaces support ergonomic and standards-compliant use of the protocol.\nSpecial utility types and integrated JSON-LD converters further abstract ActivityPub's rougher edges, bringing the user experience up to par with more traditional APIs.\nFor more information, see the introduction post - [*What is ActivityPubSharp?*](https://github.com/warriordog/ActivityPubSharp/discussions/63)\n\n### Modularity\nModularity and Abstraction are keys goals of this project.\nIt should be simple to integrate this library at any appropriate level of abstraction.\nLow-level apps can utilize the [strongly-typed models](Source/ActivityPub.Types) and utility types, but bring their own parser, logic, and other components.\nMid-level apps may want to use the [HTTP client](Source/ActivityPub.Client) or [abstract server logic](Source/ActivityPub.Server).\nOn the other hand, high-level apps will likely desire framework integration and custom middleware.\n\nTo support these varying use cases, ActivityPubSharp is split into multiple separate NuGet packages.\nWhile separate and self-contained, these packages are designed to work together and will seamlessly integrate through Dependency Injection.\nA typical use case will include the highest-level \"main\" package needed for the application, and then as many \"secondary\" packages as desired for extra functionality.\n\n| Package                        | Links                                                                                                                   | Description                                                                                                                                                                    | Use Case                                                                       |\n|--------------------------------|-------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|\n| ActivityPub.Types              | [NuGet](https://www.nuget.org/packages/ActivityPub.Types), [Source](Source/ActivityPub.Types)                           | Serializable type definitions for ActivityPub types. Includes utility classes to handle polymorphic properties.                                                                | You only need the ActivityPub object types, and nothing else.                  |\n| ActivityPub.Common             | [NuGet](https://www.nuget.org/packages/ActivityPub.Common), [Source](Source/ActivityPub.Common)                         | Core utilities, services, and configuration for all ActivityPub use cases.                                                                                                     | You are using any other part of this library.                                  |\n| ActivityPub.Client             | [NuGet](https://www.nuget.org/packages/ActivityPub.Client), [Source](Source/ActivityPub.Client)                         | Implementation of the Client conformance class. Supports the client side of [Client to Server interactions](https://www.w3.org/TR/activitypub/#client-to-server-interactions). | You are implementing the Client conformance class.                             |\n| ActivityPub.Server             | [NuGet](https://www.nuget.org/packages/ActivityPub.Server), [Source](Source/ActivityPub.Server)                         | Implementation of the Server conformance class. Supports the server side of [Client to Server interactions](https://www.w3.org/TR/activitypub/#client-to-server-interactions). | You are implementing the Server conformance class, with or without Federation. |\n| ActivityPub.Server.AspNetCore  | [NuGet](https://www.nuget.org/packages/ActivityPub.Server.AspNetCore), [Source](Source/ActivityPub.Server.AspNetCore)   | Extends Server package with bindings and middleware for ASP.NET Core.                                                                                                          | You are implementing a server that will utilize ASP.NET.                       |\n| ActivityPub.Extension.Mastodon | [NuGet](https://www.nuget.org/packages/ActivityPub.Extension.Mastodon), [Source](Source/ActivityPub.Extension.Mastodon) | Extended type definitions and logic for integration with Mastodon.                                                                                                             | You are communicating with a Mastodon server.                                  |\n\n### Non-goals\nAs the name suggests, ActivityPubSharp is focused specifically on ActivityPub rather than ActivityStreams, JSON-LD, or any other relational data standard.\nWhile ActivityStreams *is* implemented as an underlying component of ActivityPub, it cannot be used standalone with this library.\nThe same is true of JSON-LD.\nIf there is ever a conflict between specifications, then the [ActivityPub spec](https://www.w3.org/TR/activitypub/) spec will be considered authoritative.\n\nAt present, ActivityPubSharp intends to offer only a subset of JSON-LD support.\nThe included serializers support all features that are necessary for ActivityPub and integration with mainstream fediverse software, but that is all.\nAttempting to parse other forms of linked data may fail catastrophically.\nIn the future, it will be possible to inject a user-provided compaction/normalization layer through DI.\nAdvanced applications can use this feature to support JSON-LD while still using ActivityPubSharp's high-level APIs.\n\n### Customization\nActivityPubSharp utilizes Dependency Injection to customize and extend the library.\nFor example, included services all utilize the [`IJsonLdSerializer` interface](Source/ActivityPub.Types/Conversion/JsonLdSerializer.cs) which enables user code to replace or modify the default JSON support.\nMost default implementations expose configuration objects that are compatible with the Options Pattern.\nUser-accessible DI services and and options are described in the README for each individual package.\n\n## Getting Started\n\nActivityPubSharp is not yet production-ready.\nMost high-level functionality is not implemented.\nThere is, however, [an example package](Example) available with reference code.\n\n## Technical Details\n\n### Requirements\n* .NET 8 or newer\n* Any supported platform - no native code is used\n\n### Design Goals\n* Minimal dependencies - software supply chain risks are an underappreciated threat. ActivityPubSharp keeps minimal dependencies to reduce the supply chain footprint.\n* Modern .NET - ActivityPubSharp has set .NET 8 as the minimum supported version. This unfortunately excludes some projects, but is critical for System.Text.Json support.\n* Ergonomic and Conventional APIs - mid/high level APIs should feel and function like typical .NET APIs. An important goal (and difficult challenge) of this project is abstracting ActivityPub's dynamic nature to better fit with C#'s strongly-typed model.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwarriordog%2Factivitypubsharp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwarriordog%2Factivitypubsharp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwarriordog%2Factivitypubsharp/lists"}