Skip to content
A fruitful way to REST
C# Other
  1. C# 99.6%
  2. Other 0.4%
Branch: develop
Clone or download
Latest commit 69adb72 Oct 17, 2017
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea Added JetBrains IDE ignore patterns and Project Rider files. Sep 19, 2016
app Fix stack overflow in ListDelta on mono Sep 27, 2017
tests Make test run on R# runner (with shadow copy enabled) Sep 27, 2017
vms/trusty Add trusty vagrant config to simplify diagnosing CI build problems Oct 17, 2017
.gitattributes Added .gitattributes for eol=crlf enforcement Feb 26, 2015
.travis.yml Added contributing section May 30, 2016
Clean.cmd Added NHibernate test project, plus snapshot binaries of NH and FNH. Dec 10, 2012
GitVersion.yml Upgraded GitVersionTask from v3.5.3 to v3.6.5 and renamed GitVersionC… Sep 21, 2017
LICENSE Shamefully added myself to the LICENSE May 30, 2016
Pomona.sln Remove item from solution May 24, 2016
Pomona.sln.DotSettings Upgraded GitVersionTask from v3.5.3 to v3.6.5 and renamed GitVersionC… Sep 21, 2017
Pomona.sln.iml Added JetBrains IDE ignore patterns and Project Rider files. Sep 19, 2016
Pomona.v2.ncrunchsolution Added Codefactor badges to the build status/version table. Sep 16, 2016
build-packages.cmd Fix build-packages.cmd script. Now builds using VS2015 C#6 compiler. Nov 27, 2015 Replace broken test run script Oct 17, 2017



Pomona is a framework built for exposing a domain model in a RESTful and hypermedia-driven manner. It embraces the concept of convention over configuration, and provides opiniated defaults on how domain model objects is exposed as HTTP resources.

Pomona was born out of frustrations with the difficulties of exposing a complex business domain model as a RESTful web service.

master develop future
GitHub GitHub release - -
NuGet NuGet NuGet -
Travis Master Develop Future
AppVeyor Master Develop Future
Codefactor Codefactor Codefactor Codefactor

Table of Contents

  1. Overview
  2. Documentation
  3. Contributing
  4. Get in touch
  5. License
  6. Acknowledgements


To illustrate what Pomona does, here's a diagram:

Pomona - Overview

  1. Starting on the top left, in the client:
    1. A Linq statement is written inside a client application against a statically typed and auto-generated client library.
    2. The query is run through a Linq Provider and translated to an HTTP query string.
  2. Inside the server:
    1. The HTTP query string is received by the Pomona Server and parsed back into a Linq Expression Tree.
    2. The Linq Expression is fed through a (custom) Linq Provider that can execute it against any back-end datastore supporting Linq as a query method.
    3. The Data is mapped from Data Transfer Objects, to database objects, back into DTOs and fed through a JSON serializer.
  3. Back inside the client:
    1. The JSON is deserialized to statically typed DTOs.
    2. The DTOs are made available to the client with just the data requested with the initial .Select() statement.

This is in many ways similar to what Falcor does, only in a statically typed way tailored for .NET instead of a Promise-based approach for JavaScript.


To get started with Pomona please read the documentation.


Do you want to contribute to Pomona? Lovely! Contributions of any kind are highly appreciated! Just make sure you've read and agreed to the contribution guidelines before submitting a pull request.

Get in touch


Copyright Karsten N. Strand, Asbjørn Ulsberg, PayEx and contributors. Pomona is provided as-is under the MIT License.


Thanks to:

You can’t perform that action at this time.