FellowAiden 1.1.0

dotnet add package FellowAiden --version 1.1.0
                    
NuGet\Install-Package FellowAiden -Version 1.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="FellowAiden" Version="1.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FellowAiden" Version="1.1.0" />
                    
Directory.Packages.props
<PackageReference Include="FellowAiden" />
                    
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 FellowAiden --version 1.1.0
                    
#r "nuget: FellowAiden, 1.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 FellowAiden@1.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=FellowAiden&version=1.1.0
                    
Install as a Cake Addin
#tool nuget:?package=FellowAiden&version=1.1.0
                    
Install as a Cake Tool

FellowAiden (.NET)

NuGet NuGet downloads CI

A .NET client for the Fellow Aiden coffee brewer's cloud API. A port of the TypeScript client fellow-aiden (repo), itself based on the Python library 9b/fellow-aiden.

Unofficial — not affiliated with or endorsed by Fellow.

Other implementations

Language Package Repository
TypeScript / JavaScript fellow-aiden (npm) fellow-aiden-ts
.NET (this repo) FellowAiden (NuGet) fellow-aiden-dotnet
Python (original) † fellow-aiden (PyPI) 9b/fellow-aiden

† The original library that inspired these ports. It may be unmaintained and might not currently work against the live API.

Install

dotnet add package FellowAiden

Targets .NET 8. No third-party dependencies (uses HttpClient + System.Text.Json).

Quick start

using FellowAiden;

// Authentication is async, so use the static factory.
using var aiden = await FellowAidenClient.CreateAsync(new FellowAidenOptions
{
    Email = Environment.GetEnvironmentVariable("FELLOW_EMAIL")!,
    Password = Environment.GetEnvironmentVariable("FELLOW_PASSWORD")!,
});

Console.WriteLine($"{aiden.DisplayName} ({aiden.BrewerId})");

foreach (var p in await aiden.GetProfilesAsync())
{
    Console.WriteLine($"{p.Title} [{p.Id}]");
}

API

Construction & auth

  • FellowAidenClient.CreateAsync(options, innerHandler?, ct) — construct, authenticate, load the device.
  • new FellowAidenClient(options, innerHandler?) then await AuthenticateAsync() — manual flow. innerHandler lets you inject a handler (e.g. for testing).
  • AuthenticateAsync() — (re)log in; also called automatically once on a 401.

FellowAidenOptions: Email, Password, BrewerId?, BaseUrl?, UserAgent?, MaxRetries?.

Device

  • DisplayName / BrewerId properties — the bound device
  • GetBrewersAsync(refresh = false, ct) — every brewer on the account (id, name, config), for accounts with more than one Aiden
  • GetDeviceConfigAsync(refresh = false, ct)
  • AdjustSettingAsync(setting, value, ct)
Multiple brewers on one account

By default the client binds the account's first device. To target a specific Aiden, list them and pass the id via FellowAidenOptions.BrewerId:

using var account = await FellowAidenClient.CreateAsync(new FellowAidenOptions { Email = email, Password = password });
foreach (var b in await account.GetBrewersAsync())
{
    Console.WriteLine($"{b.DisplayName} [{b.Id}]");
}

// Bind a specific brewer for subsequent operations.
using var office = await FellowAidenClient.CreateAsync(new FellowAidenOptions
{
    Email = email, Password = password, BrewerId = "dev-2",
});

Profiles

  • GetProfilesAsync(refresh = false, ct)
  • GetProfileByTitleAsync(title, fuzzy = false, ct) — exact (case-insensitive) by default; fuzzy uses a difflib-equivalent ratio > 0.65.
  • CreateProfileAsync(profile, ct) — validates first.
  • UpdateProfileAsync(profileId, profile, ct)
  • DeleteProfileByIdAsync(profileId, ct)
  • GenerateShareLinkAsync(profileId, ct)
  • ParseBrewLinkUrlAsync(link, ct) / CreateProfileFromLinkAsync(link, ct)

Schedules

  • GetSchedulesAsync(refresh = false, ct)
  • CreateScheduleAsync(schedule, ct) — validates first.
  • ToggleScheduleAsync(scheduleId, enabled, ct)
  • DeleteScheduleByIdAsync(scheduleId, ct)

Validation

CoffeeProfile.Validate() and CoffeeSchedule.Validate() enforce the same rules as the Python/TS originals (ratio 14–20 step 0.5, temperatures 50–98.5 step 0.5, bloom ratios, ranges, title charset, schedule days/water/profileId) and throw FellowAidenValidationException with all failures. The allowed grids are exposed on AllowedValues. The client validates automatically on create/update. Other failures throw FellowAidenApiException (status + body) or FellowAidenAuthException; all derive from FellowAidenException.

Sample

samples/FellowAiden.Sample — set FELLOW_EMAIL / FELLOW_PASSWORD then dotnet run --project samples/FellowAiden.Sample.

Releasing

Bump <Version> in src/FellowAiden/FellowAiden.csproj, then push an annotated tag (a lightweight git tag vX is not pushed by --follow-tags):

git tag -a v1.2.3 -m "v1.2.3"
git push --follow-tags

The tag triggers release.yml, which builds, tests, packs, and publishes to NuGet via trusted publishing (OIDC — no API key stored).

License

MIT.

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
1.1.0 253 7/10/2026
1.0.1 129 6/25/2026
1.0.0 120 6/9/2026