-
Notifications
You must be signed in to change notification settings - Fork 0
StarLibs
We would like to build an awareness of the great libraries in the .NET eco-system and so we're calling on all pro .NET developers to tweet the libraries they love and use everyday using the twitter hash tag #starlibs. We will be keeping an eye on this hashtag for the best entries for analysis to include in this living document.
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.
ServiceStack likes to belive we're immune to marketing hype and generally does not adopt any .NET libraries at face value. Much time is spent researching and analyzing the competitive landscape to ensure it only picks the best components for use in their systems.
In an effort to provide a good source of high-quality .NET libraries we will be maintaining a list of libraries that have attributes and meets criteria we believe makes good software that promotes good software practices and is 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 where the libraries themselves should be framework agnostic and can be effectively used in any framework.
With so many high-quality OSS software to choose from, we rarely find it is ever a good idea to have your systems bind to closed source proprietary software - which as there commercially motivated, are usually the worst perpetrators of mis information and poor guidance. OSS has many traits that make it usually the best choice: constantly improving, frequent releases, code quality visible to everyone, broader and more active user-base, etc.
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 that it works 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 suffer less dependency hell. In all cases there must be a link available to the latest, self-contained release that users can download from and start using.
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 and enjoyable APIs to use and easiest to test are modelled directly in the programming language, unhibitted by GUI designers. If you prefer Drag N' Drop designers 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, and the most recommended components will be listed first in their respective category. A lot of value can actually be inferred by who the library is recommended by, and readers will be 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 be maintain ownership of the software and is able to 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 libraries resulting from our many years development experience based upon the guiding principles above. It's likely a few libraries recommended wont make the cut, what some may consider to the perfect mix of configurability we may consider to be over architected. As a general rule, the further away the library deviates from the beautiful code definition above, the less likely it is to make it, sorry.
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 - 556 tests, 292KB, benchmarks
A comprehensive C# client for the excellet Redis NoSQL database. Offers both a low-level raw byte access and high-level strong-typed API.
** Recommended By: ** @demisbellot
TODO: Add RavenDB client. @RobAshton?
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.
** Recommended By: ** @demisbellot
Munq IOC - 54 tests, 21KB, benchmarks
A fork of Funq offering some added features tailored for use in Web Hosts
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
TODO: Add protobuf-net. @marcgravell?
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 mix C# source code and HTML markup naturally
** Recommended By: ** @demisbellot
TODO: Add spark view engine. @RobertTheGrey?
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 a minimal working configuration including dependencies
- Your Twitter or GitHub username (to list as a recommendation)
Fill out what you can, at a minimum we will record your recommendation against the library.
- Why ServiceStack?
- What is a message based web service?
- Advantages of message based web services
- Why remote services should use separate DTOs
- Getting Started
- 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 caching options
- Built-in profiling
- Messaging and Redis
- Form Hijacking Prevention
- Auto-Mapping
- HTTP Utils
- Virtual File System
- Config API
- Physical Project Structure
- Modularizing Services
- MVC Integration
- Plugins 3. Request logger 4. Swagger API
- Tests
- Other Languages
- Use Cases
- Performance
- How To
- Future