4.5.0
Last updated
Last updated
3/13/2025
4.5 introduces a new , that is designed to efficiently handle large binary objects, with built-in support for streaming large content/media in and out of storage. This provides significantly better performance and functionality for large unstructured data, such as HTML, images, video, and other large files. Components can leverage this functionality through the JavaScript Blob
interface, and the new createBlob
function. Blobs are fully replicated and integrated. Harper can also coerce strings to Blob
s (when dictated by the field type), making it feasible to use blobs for large string data, including with MQTT messaging.
4.5 adds two new password hashing algorithms for better security (to replace md5):sha256
: This is a solid general purpose of password hashing, with good security properties and excellent performance. This is the default algorithm in 4.5.argon2id
: This provides the highest level of security, and is the recommended algorithm that do not require frequent password verifications. However, it is more CPU intensive, and may not be suitable for environments with a high frequency of password verifications.
4.5 includes numerous new analytics for resources and storage, including page faults, context switches, free space, disk usage, and other metrics.
The default port for replication has been changed from 9925 to 9933.
Accessing record properties from resource instances should be accessible through standard property access syntax, regardless of whether the property was declared in a schema. Previously only properties declared in a schema were accessible through standard property access syntax. This change allows for more consistent and intuitive access to record properties, regardless of how they were defined. It is still recommended to declare properties in a schema for better performance and documentation.
Harper now includes functionality for automatically trying to clean up and evict non-essential data when storage is running low. When free space drops below 40% (configurable), Harper will start to:
Evict older entries from caching tables
Evict older audit log entries
Remove older rotated logs files These efforts will become progressively more aggressive as free space decreases.
When sharding is being used, Harper can now honor write requests with residency information that will not be written to the local node's table. Harper also now allows nodes to be declaratively configured as part of a shard.
Certificates can now be revoked by configuring nodes with a list of revoked certificate serial numbers.
loadEnv
Componentserver.authenticateUser
APIIn addition to the server.getUser
API that allows for retrieval of users by username, the server.authenticateUser
API is now available which will always verify the user by the provided password.
Performance of delivery of messages has been improved.
HarperDB now supports HTTP/2 for all API endpoints. This can be enabled with the http2
option in the configuration file.
harperdb
symlinkUsing import from 'harperdb'
will more consistently work when directly running a component locally.
By default, transactions can now be reused after calling transaction.commit()
.
The GraphQL query endpoint can be configured to listen on different ports. GraphQL query endpoing is now also disabled by default, to avoid any conflicts.
Glob file handling for specifying files used by components has been improved for better consistency.
Table.getRecordCount()
is now available to get the number of records in a table.
Previously the root path for a resource in the REST API would return a record count. However, this is a significant performance hazard and was never documented to exist, so this has been removed to ensure better performance and reliability.
Note that downgrading from 4.5 to 4.4 is not supported.
There is a that can be used to load environmental variables from a .env in a component.
The now includes new statistics for replication, including the timestamps of last received transactions, sent transactions, and committed transactions.
Resources can be defined with nested paths and directly accessed by the exact path without requiring a trailing slash. The id.property
syntax for accessing properties in URLs will only be applied to properties that are declared in a schema. This allows for URLs to generally include dots in paths without being interpreted as property access. A new on resources that allows for more direct URL path handling as well.