I want to host my own Nuget package feed, but I can't use Nuget.Server because the feed will be hosted on an Apache server with only PHP available. So, unless you know an existing PHP library that can do it, I have
to generate the feed myself in PHP. Not fun, but I can do it...

However, I have some questions about some of the elements used in the Atom feed :

What is the PackageHash property ? I guess it's just a hash for integrity check, but which algorithm is used to compute it ?

How are the dependencies specified ? From what I can see, it's just the package ids and their versions, separated by pipes. But how do you specify minVersion/maxVersion ? I can find any example of that in the official Nuget
feed.

The first challenge you'll face is that what we have isn't a static atom feed, but an
odata feed. Our clients expect that we'll be able to query on that feed using the odata query syntax so a regular atom feed won't cut it.

The package hash is SHA512.

Dependencies are separated by | and are in the format id:versionspec. More information can be found on there version spec
here.

I suggest you run NuGet with fiddler on so you can see the http requests being made. That'll give you an idea of the expectations on the feed. Not that it's conceivable that you could implement a subset of OData that's just good enough for the
NuGet client. At the very least, you'll have to support queries to get a specific package id record.

I wonder if in the future our client could support static feeds as an option. Basically, it would download the whole thing and query locally. This would work fine for small feeds. But it requires client changes.

Here is a random idea: it should be possible to write a generic static to OData feed proxy. It would be a server that acts a full NuGet OData server, but its implementation would be to suck static feeds from random other places, and to expose them
as full OData. Of course, someone would need to write and host such thing, but in theory it could be done :)