KitchenPC is a free, open-source framework written in C# for working with recipes, shopping lists, and menus. It provides a standardized data model for representing normalized ingredient and recipe information, and allows ingredient usage to be aggregated across recipes automatically. The core KitchenPC framework includes:
- Base classes for describing and working with core recipe-related concepts.
- A recipe modeling engine capable of building sets of recipes that efficiently use a set of ingredients and amounts.
- A natural language parser which can convert human input ("a dozen eggs") to a normalized ingredient usage structure (whole eggs: 12)
- A categorization engine which can take recipe objects and catagorize them as breakfast, lunch, dinner or dessert. This engine can also derive nutrional information based on USDA data, a taste profile (sweet, savory, spicy, mild) based on ingredients and amounts used, dietary flags (vegetarian, gluten-free, low-calorie, etc) and other aspects of the recipe.
- An extensible framework to define how data is loaded and saved to a persistence mechanism, such as a SQL database or full-text search engine.
Getting started is simple, and data can be loaded locally from an XML file for testing. Sample data is included with the source, which includes a few dozen recipes, along with sample menus and shopping lists.
The best way to get up and running is to read the blog post titled Getting Started with KitchenPC which includes an introduction to core concepts as well as several samples.
Install the .NET 10 SDK, then restore, build, and test from the repository root:
dotnet restore src/core.slnx
dotnet build src/core.slnx --configuration Release --no-restore
dotnet test src/UnitTests/UnitTests.csproj --configuration Release --no-build --no-restoreThe build includes KitchenPC.Core, KitchenPC.DB, the unit tests, and the WebApp sample.
Every push and pull request builds and tests the solution, then creates matching prerelease packages for CI validation. Version tags publish KitchenPC.Core and KitchenPC.DB to NuGet with the same version. For example:
git tag -a v1.0.0 -m "KitchenPC 1.0.0"
git push origin v1.0.0NuGet package versions are immutable. Always increment the version for a subsequent release.