Features of standalone and server versions of VelocityDB

Standalone Version Server Version
Scalable (smart caching enables millions of database to be used without running out of memory). From the smallest to the largest databases in the world, VelocityDB can handle it nicely
High Performance (objects are created the same way transient objects are and are made persistent efficiently when requested, persistence does not change the object, just adds an object identifier)
Any serializeable object can be persisted
Compression (optional at page level, controlled by user for each database location)
Encryption (optional at page level, controlled by user for each database location)
Indexes (Declarative by using Index attribute in class definitions, index BTree's are maintained automatically by the system)
Copy all database files to a local directory (A very simple and easy way to backup your data)
Export & Import to/from CSV files (Each type of object gets its own csv file)
Optional automatic backup of all data in a database location to a backup location
Variable page size (from a few bytes to GB’s depending on how many objects and their sizes). Databases and pages do not contain any unused bytes (unlike fixed size database pages), only space for allocated objects
Auto recovery build in (no journal files required)
Transaction control, ACID (Atomicity, Consistency, Isolation, Durability) is supported.
Choice of Pessimistic locking and Optimistic locking
Change event subscription and notification
Page level locking
In-Memory Only Option turns VelocityDB into a powerful In-Memory database. It can be used in combination with High Availability functionality replicating data between servers.
Database level locking
Each persistent object has an object identifier, a 32 bit Database number – a 16 bit Page number – a 16 bit Slot number, (stored as a single 64 bit number)
[UseOidShort] attribute for references within a Database. Use attribute for an entire class or for selected fields of a class.
Shared cache for all users (on server side)
Local cache for each client
Pure C#, no SQL and no unmanaged code with a small set of easy to use API
Small footprint, the C# DLL is ~500 KB, the server is 11 KB
Automatic use of efficient binary search lookups with LINQ query over a BTreeSet using CompareByField comparator.
Scalable, compact and super-efficient BTreeSet<Key> and BTreeMap<Key> collections are provided for keeping track of large sorted collections. Other collections provided include: VelocityDbHashSet<T>, SortedSetAny<Key>, SortedMap<Key, Value> and, VelocityDbList<Key>
Spatial access methods, an RTree collection is provided inspired by a description on Wikipedia with some enhancements. We have plans to add polygon API, let us know if you need it?
A WeakReference<T> class is provided that avoids pinning of large graphs of related objects. Objects are brought back on demand (we save the object identifier in the WeakReference)
Persistent objects can be unpersisted which removes the object from the persistent storage, and then again can be used as any transient object. These can later be persisted again, possibly in a different database
Databases can be distributed to as many hosts as required
A popular database term these days is Sharding, the distributable nature of VelocityDB supports this. You define each partition by creating database locations (host+path) for a range of database id's. You can reconfigure these locations whenever you need to.
Linq, Use it with; Indexes, persistent collections, Databases or session (AllObjects<T>())    
No Database catalog, only database locations
Automatic deadlock detection
Automated tracking of all update transactions and what they update
Using Windows Authentication when accessing server(s)
Placement class for selecting where to store persistent objects. Each persistent class can also help decide about the placement by overriding some base class API. Persistent placement can further be controlled by the field attribute: [ObjectsPerPage(1)] which specifies how many objects are allowed on the same page (in this case 1).
Transient data members in persistent objects are supported by tagging them [NonSerialized]
Auto Increment on a field, similar to feature in SQL, by tagging them [AutoIncrement]
Invalidate only cached pages updated by a different client (session) instead of all pages within a Database when a page or more has been updated by another client transaction
LINQPad Driver
A fast, easy to use browser
odbBrowser