# Release Notes

## FoundationDB Alpha 5

### Language support

- FoundationDB now supports Ruby

- FoundationDB now supports Node.js

- FoundationDB now supports Java and other JVM languages.

### Features

- A new backup system allows scheduled backups of a snapshot of the FoundationDB database to an external filesystem.

- Integrated HTML documentation

- Snapshot reads allow API clients to selectively relax FoundationDB’s strong isolation guarantee. Appropriate use can of them can reduce Conflict ranges but makes reasoning about concurrency harder.

- Streaming modes allow API clients to adjust how FoundationDB transfers data for range reads for improved performance.

- Client APIs automatically detect the appropriate network interface (local address) when connecting to a cluster, and will look for a Default cluster file.

### Compatibility

- Tuples encoded with prior alpha versions are incompatible with the tuple layer in Alpha 5.

- Databases created with Alpha 4 will be compatible. (See Upgrading from older versions for upgrade instructions)

- Databases created before Alpha 4 will be incompatible. (See Upgrading from older versions for details)

### Changes to all APIs

- The API version has been updated to 14.

- Snapshot reads (see Features, above).

- Streaming modes (see Features, above).

- Automatic network interface detection (see Features, above).

- The tuple layer supports unicode strings (encoded as UTF-8), has a more compact encoding, and is not compatible with data from prior versions.

- Reversed range reads are now exposed through a separate parameter rather than via a negative `limit`.

- Extensible options are now exposed at the network, cluster, database and transaction levels. The parameters to `fdb_setup_network()` and `fdb.init()` have been replaced by network options.

- Option enumerations are available in a machine-readable format for the benefit of third-party language binding developers.

### Python API changes

- `fdb.open()` can be called with no parameters to use the Default cluster file.

- Waiting on a Future object has changed from `.get()` to `.wait()`

- Reversed range reads can by specified by passing a slice object with a -1 step.

- The convenience read methods on `fdb.Database` are now transactional.

### C API changes

- Byte limits exposed in `fdb_transaction_get_range()`. These are not currently exposed by any of the higher level clients (and usually streaming modes should be preferred).

- `fdb_future_get_keyvalue_array()` returns an explicit flag indicating whether there is more data in the range beyond the limits passed to `fdb_transaction_get_range()`.

- `fdb_transaction_get_range_selector` has been eliminated - `fdb_transaction_get_range()` always takes key selectors.