StarLibs
We would like to build awareness of the great libraries in the .NET eco-system so we're calling on all pro .NET developers to start tweeting the libraries they love and use everyday using the twitter hash tag #starlibs.
We will be keep an eye on this live hashtag for the best entries that we can assess for possible inclusion in this living document. At a minimum you will be providing your dev followers an invaluable service by letting them know the excellent libraries that you hold dearly that empowers your dev experience and makes it an enjoyable one.
We believe due to a history of poor guidance and good marketing, the .NET world is plagued with heavy, bloated, over-architected libraries that have in-efficient implementations, leaky abstractions and poor APIs and designs. Unfortunately in many cases, the most popular software is usually not of the best quality, just the best marketed.
Unfortunately we believe the .NET ecosystem needs this the most as it suffers more from poor guidance given there are very few good quality hubs of information that .NET developers look to. Other vibrant development platforms function in a more open environment and tend to evolve naturally where the best implementations are very well known and tend to bubble to the top.
In .NET the popular libraries tend to be the ones that are best integrated with VS.NET or what comes shipped as part of the .NET Framework. When the motivating use-case for a particular library is to be driven from a designer or wizard or to cater for the entry-level .NET developer we see that in most cases it promotes a less beautiful solution.
So under this environment this list is born, with a hope to provide a good source of high-quality .NET libs for pro developers that would otherwise be unknown. We will carefully filter the recommendations on here and will choose only to link to .NET libraries that meet our test for good quality software.
In an effort to provide a good source of high-quality .NET libraries we will be maintaining a list of .NET libraries that have attributes and meets criteria we believe makes good software that promotes good software practices and is intuitive and enjoyable to use. As a general rule, this list only contains re-usable libraries that have minimal dependencies that allow it to be easily pluggable and freely shared amongst different frameworks and IOC's.
Frameworks are expressly excluded from this list since the idea is for these components to appeal to the broadest set of .NET developers and the libraries themselves should be framework agnostic and can be effectively used inside any framework. Depending on the interest, we'll consider authoring a page on web frameworks as well since there is some renewed and exciting innovation happening in this space recently with many great frameworks to choose from.
With so many high-quality OSS software to choose from, we've rarely found it to be a good idea to have your systems bind to closed source proprietary software. Commercially motivated software companies are usually the worst perpetrators of mis information and poor guidance. OSS has many traits which on most occasions make it the best choice: constantly improving, frequent releases, code quality visible to everyone, broader and more active user-base, easier to diagnose, test, fix and contribute, etc.
With that said, there are some exceptions to this rule i.e. we consider the Razor template engine a high quality lib which is non-OSS although freely available to use.
Testing first or was tested after - we don't care, good software is always well tested to ensure it has minimal number of bugs/regressions and is verified to work as expected.
Smaller libraries usually avoid feature paralysis and are generally designed to solve their particular problem-set more elegantly than their bloated counter parts. Small, self-contained libraries are generally less opaque and invasive, have a shorter learning curve, are more re-usable, easier to upgrade and less-likely to suffer from dependency hell.
We don't believe you should need to read a comprehensive manual or subscribe to a religion just to use a library, and with intuitive, well-designed self-desribing APIs we don't think you have to. So it bears repeating: Heavy weight libraries aren't recommended here and need not apply.
This may also be a style preference but our experience tells us the most succinct APIs which encourage the least ceremony to use and are the easiest to test are modelled directly in the programming language, unhibitted by GUI designers. If you happen to prefer Drag N' Drop designers and wizards that's fine too, this just isn't the list for you.
To keep the selection process as transparent as possible, each component must be recommended. The most recommended components will be listed first in their respective category.
A lot of value can be inferred by who the library is recommended by, this provides readers more context of the style and preferences of the libraries users so potential new users are better able to make up their own mind by researching the recommenders GitHub or twitter profile.
This is more a style preference since you can effectively write bad code in any language. But this requirement is based on our experience that in general good developers do not code in VB.NET :). Having it in C# / F# also stands the best chance for the library to be more portable across frameworks and build-able with the cross-platform MONO toolchain.
Some organization or somebody should maintain ownership of the software who can receive and act on bug reports. We don't mind if the only support available is commercial, as long as its supported.
Software that is dependent on heavy configuration, has more moving parts that makes it harder to configure correctly which in turn makes it more complex to maintain. Complex configurations also inhibit the ability to test the software in isolation and is therefore excluded.
In general the above rules help to achieve and promote beautiful code, that is:
A programmer knows he has achieved perfection not when there is nothing left to add,
but when there is nothing left to take away. -- Antoine St Exupery
Note: this is an opinionated list of hand-picked libraries we believe meet our guiding principles above. Our hope is this list provides some value and offers a good starting point for your own research as they've come recommended by other .NET developers you may look for advice. We also welcome recommendations from other pro .NET OSS developers who have a history of delivering high quality software (see: below).
Simple.Data led by @markrendle - 150 tests, 142KB
A new and very active ORM for .NET taking advantage of the dynamic features in .NET 4.0 to provide a dynamic and intuitive API letting you access virtually every SQL Server in existence today. With SQLite and MongoDB providers nearly finished this is one to watch in the future.
** Recommended By: ** @demisbellot
ServiceStack.Redis led by @demisbellot and @boxerab - 556 tests, 292KB, benchmarks
An efficient C# client for the excellent Redis NoSQL database. Offers both a low-level raw byte access and high-level strong-typed API.
** Recommended By: ** @demisbellot
Raven is a .NET Linq enabled Document Database, focused on providing high performance, schema-less, flexible and scalable NoSQL data store for the .NET and Windows platforms.
** Recommended By: ** @RobAshton
AutoFac led by @nblumhardt - 171KB
Autofac is an IoC container for Microsoft .NET. It manages the dependencies between classes so that applications stay easy to change as they grow in size and complexity.
** Recommended By: ** @demisbellot
Funq IOC led by @kzu - ? tests, 54KB, benchmarks
A high performance DI framework by eliminating all runtime reflection through the use of lambdas and generic functions as factories. Munq IOC is a popular fork tailored for Web Hosts.
** Recommended By: ** @demisbellot
Moq is the only mocking library for .NET developed from scratch to take full advantage of .NET 3.5 (i.e. Linq expression trees) and C# 3.0 features (i.e. lambda expressions) that make it the most productive, type-safe and refactoring-friendly mocking library available.
** Recommended By: ** @demisbellot
FakeItEasy led by @patrik_hagne - 873 tests, 479KB
The easy mocking framework for .Net.
** Recommended By: ** @TheCodeJunkie
The name of, category and 1 sentence describing the library
Simple.Mocking led by @mikwal - 272 tests, 57kb
Easy to use framework for creating mock objects, fakes, stubs with an intuitive and fluent API.
** Recommended By: ** @advisesolutions
protobuf-net by @marcgravell - 427 tests, 137KB, benchmarks
Likely the fastest, full-featured binary serializer to grace .NET shores. protobuf-net is a very efficient implementation of Google's Protocol Buffers.
** Recommended By: ** @demisbellot
ServiceStack.Text by @demisbellot - 218 tests, 98KB, benchmarks
ServiceStack's string text processing library containing the fastest and most compact JSON, JSV and CSV Text Serializers for .NET
** Recommended By: ** @demisbellot
Razor Engine ? tests, 208KB
A very elegant, wrist-friendly syntax providing a succinct DSL-like templating language to naturally mix C# source code and HTML markup
** Recommended By: ** @demisbellot
Spark View Engine led by @RobertTheGrey and @loudej - 618 tests, 314KB
Spark is a view engine for ASP.NET MVC, Castle Project MonoRail, FubuMVC, NancyFx, JessicaFx and OpenRasta frameworks. Or just run it from the Console by itself! The idea is to allow the html to dominate the flow and the code to fit seamlessly. Oh, and it's great for email templating...
** Recommended By: ** @demisbellot
We'd love to hear from you. The best way to recommend a library for inclusion here is to email me directly at demis.bellot@gmail.com please along with your submission include:
- The name of, category and 1 sentence describing the library
- The project maintainer (preferably links to GitHub and Twitter)
- The total number of tests
- The total size in kb of a minimal working configuration including dependencies
- Your Twitter or GitHub username (to add as a recommendation)
Fill out what you can, at a minimum we will record your recommendation against the library.
- Why ServiceStack?
- Important role of DTOs
- What is a message based web service?
- Advantages of message based web services
- Why remote services should use separate DTOs
-
Getting Started
-
Designing APIs
-
Reference
-
Clients
-
Formats
-
View Engines 4. Razor & Markdown Razor
-
Hosts
-
Security
-
Advanced
- Configuration options
- Access HTTP specific features in services
- Logging
- Serialization/deserialization
- Request/response filters
- Filter attributes
- Concurrency Model
- Built-in profiling
- Form Hijacking Prevention
- Auto-Mapping
- HTTP Utils
- Dump Utils
- Virtual File System
- Config API
- Physical Project Structure
- Modularizing Services
- MVC Integration
- ServiceStack Integration
- Embedded Native Desktop Apps
- Auto Batched Requests
- Versioning
- Multitenancy
-
Caching
-
HTTP Caching 1. CacheResponse Attribute 2. Cache Aware Clients
-
Auto Query
-
AutoQuery Data 1. AutoQuery Memory 2. AutoQuery Service 3. AutoQuery DynamoDB
-
Server Events
-
Service Gateway
-
Encrypted Messaging
-
Plugins
-
Tests
-
ServiceStackVS
-
Other Languages
-
Amazon Web Services
-
Deployment
-
Install 3rd Party Products
-
Use Cases
-
Performance
-
Other Products
-
Future