From 6b4c4f82ad48519e3c76ca227dab379251183e94 Mon Sep 17 00:00:00 2001 From: Andres Contreras Date: Thu, 8 Oct 2026 17:03:55 -0700 Subject: [PATCH] Brand netfly documentation with the shared Firefly identity --- README.md | 22 ++++++++++++---------- assets/brand/banner-dark.svg | 1 + assets/brand/banner-light.svg | 1 + assets/brand/banner.png | Bin 0 -> 44256 bytes assets/brand/logo-dark.svg | 1 + assets/brand/logo-light.svg | 1 + docs/README.md | 15 +++++++++++++-- 7 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 assets/brand/banner-dark.svg create mode 100644 assets/brand/banner-light.svg create mode 100644 assets/brand/banner.png create mode 100644 assets/brand/logo-dark.svg create mode 100644 assets/brand/logo-light.svg diff --git a/README.md b/README.md index 58babe2..dc65928 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,25 @@ -``` - _____.__ _____.__ -_/ ____\__|______ _____/ ____\ | ___.__. -\ __\| \_ __ \_/ __ \ __\| |< | | - | | | || | \/\ ___/| | | |_\___ | - |__| |__||__| \___ >__| |____/ ____| - \/ \/ -``` +

+ + + netfly — Firefly for .NET + +

-# Firefly Framework for .NET +# netfly — Firefly for .NET **A production-grade platform for building reactive, event-driven, resilient microservices on .NET 10.** -The Firefly Framework provides the cross-cutting machinery that every +netfly provides the cross-cutting machinery that every non-trivial business service needs — error envelopes, idempotency, correlation propagation, CQRS, event-driven messaging, event sourcing, sagas, configuration servers, identity adapters, document management, notifications, callbacks, webhooks — behind a single, opinionated composition pattern. +**netfly** is the product name. Package and namespace identifiers remain +`FireflyFramework.*`; existing APIs, configuration keys and repository URLs +are unchanged. + This repository is the official .NET port of the Java/Spring Boot [`org.fireflyframework`](https://fireflyframework.org) platform. It preserves every public contract, configuration key, and wire format from diff --git a/assets/brand/banner-dark.svg b/assets/brand/banner-dark.svg new file mode 100644 index 0000000..585764b --- /dev/null +++ b/assets/brand/banner-dark.svg @@ -0,0 +1 @@ +netfly for .NETnetfly - .NET framework by Firefly \ No newline at end of file diff --git a/assets/brand/banner-light.svg b/assets/brand/banner-light.svg new file mode 100644 index 0000000..10c7906 --- /dev/null +++ b/assets/brand/banner-light.svg @@ -0,0 +1 @@ +netfly for .NETnetfly - .NET framework by Firefly \ No newline at end of file diff --git a/assets/brand/banner.png b/assets/brand/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..45704168e55da354c359e6c0df34e17823110407 GIT binary patch literal 44256 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 LP38Ox=J)>(netfly - .NET framework by Firefly \ No newline at end of file diff --git a/assets/brand/logo-light.svg b/assets/brand/logo-light.svg new file mode 100644 index 0000000..a1d3ce8 --- /dev/null +++ b/assets/brand/logo-light.svg @@ -0,0 +1 @@ +netfly - .NET framework by Firefly \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index f2284a5..d349ea0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,9 +1,20 @@ -# Firefly Framework Documentation +

+ + + netfly — Firefly for .NET + +

-Long-form documentation for the .NET port of the Firefly Framework. +# netfly — Firefly for .NET + +Long-form documentation for netfly, the .NET member of the Firefly Framework. Each file targets a specific audience or task; this index is the recommended starting point. +The product name is **netfly**. Package names, namespaces and APIs retain their +existing `FireflyFramework.*` identifiers; installation commands and repository +URLs remain unchanged. + | Document | Audience | What it covers | |---|---|---| | [`INSTALL.md`](INSTALL.md) | Anyone consuming the packages | Installing from NuGet.org (stable) vs. GitHub Packages (pre-release) vs. local project references; one-time `nuget.config` template; PAT creation; CI authentication. |