ServiceStack Mono Repo

All active ServiceStack libraries and NuGet packages are now being developed and maintained in ServiceStack's mono repo:

github.com/ServiceStack/ServiceStack

The new Mono repo has greatly simplified all maintenance efforts around ServiceStack's code base, including building, contributing and debugging, where there's now only 1 repo that needs to be checked out to make changes to any ServiceStack package.

Mono repo project structure

Whilst all projects are contained within the same repo, they continue to be independently maintained in isolated top-level solution folders, containing only the references and test projects each need:

All top-level solutions follow the same uniform project structure which require no other external build tools or scripts other than a default VS .NET install, you can open the .sln in each folder and start utilizing projects immediately.

Debugging ServiceStack

It also dramatically improves the debuggability of ServiceStack source code from your App where you can choose to replace binary package references with source project references. Or for small projects, a simpler alternative is to attach your projects to the main ServiceStack.sln where most ServiceStack projects are readably available for quick reference.

Building All ServiceStack Projects

Building all projects have also been simplified and can be run locally in both Windows and Unix platforms with the scripts below:

Which runs the build.proj MS Build task in the /build folder of each top-level project. The difference between build.proj vs the .sln is that build.proj only builds the library projects deployed to NuGet which it locally copies into a /NuGet folder for easy access to locally modified packages.

We've fortuitously been able to benefit from GitHub's renaming of their main branch since all our repos were created before the change which allowed us to keep the existing structure in the earlier master branch untouched, preserving existing links whilst the new mono repo structure has been added in the new main branch which has now been switched over and become the default branch.

Switching to main branch

If you've previously checked out github.com/ServiceStack/ServiceStack you will need to change the origin branch to use main however for simplicity we'd recommend performing a clean checkout. You can also delete all other ServiceStack repos which are no longer maintained.

Why?

After dropping v4.5 .NET Framework support, deleting platform specific .NET 4.5 implementations & removing legacy projects in our last major v6 Release, we continued embarking on a journey to improve the health and approachability of our code base which up to this point was maintained across multiple repos, each encapsulating a stand-alone library that can be used independently. To enable much of its high level functionality the libraries make usage of core functionality in ServiceStack's common libraries.

Poor cross dependency support

Actively developing cross-repo dependencies has always been a source of friction where previously to debug and maintain changes across all packages we've had to maintain parallel *.Source.csproj for each project that used Project Source references instead of binary references which needed to be checked out and maintained in a separate physical location since .NET doesn't properly handle multiple .csproj's in the same folder. We were hoping support for source references for development and binary references for release would improve in time, however we gave up on this ever improving when the .NET team moved to a mono repo themselves.

Legacy Branches and Releases

For preservation should you need to make changes to support Legacy applications we've included direct links to the previous states of ServiceStack code bases before the migration to its Mono repo:

fx45 branchv5.14v6.0.2master
ServiceStackv5.14 Releasev6.0.2 Releasemaster
ServiceStack.Textv5.14 Releasev6.0.2 Releasemaster
ServiceStack.Redisv5.14 Releasev6.0.2 Releasemaster
ServiceStack.OrmLitev5.14 Releasev6.0.2 Releasemaster
ServiceStack.Awsv5.14 Releasev6.0.2 Releasemaster
ServiceStack.Azurev5.14 Releasev6.0.2 Releasemaster
ServiceStack.Adminv5.14 Releasev6.0.2 Releasemaster
ServiceStack.Stripev5.14 Releasev6.0.2 Releasemaster
ServiceStack.CefGluev5.14 Releasev6.0.2 Releasemaster
  • fx45 branch contains the state of ServiceStack before support for v4.5 .NET Framework & legacy projects was removed
  • v5.14 contains the source code for the last v4.5 .NET Framework release published to NuGet
  • v6.0.2 contains the source code for the last NuGet release before moving to the Mono Repo
  • master branch contains the source code before moving to the master branch

Currently fx45 is effectively equivalent to v5.14 release and master equivalent to v6.0.2 release, but can change in time if new fixes to legacy projects are contributed.