Skip to main content

Release Notes

Customer-facing changes in ApertureDB, starting with version 0.19.13. Releases are listed newest first. Links point to the current documentation; older releases may use different parameters or response formats. For deprecated features, removed syntax, and upgrade instructions, see Deprecations and migrations.

0.20.0​

Media and query fixes​

  • Blobs now store a MIME type in _mime_type, which can be returned, filtered, sorted, and indexed without reading the blob contents. The Web UI uses this property for document previews and downloads. See FindBlob.

  • AddBlob accepts an optional mime_type string to set _mime_type at ingestion and skip automatic detection, including remote prefix reads. When omitted, the server detects the type from up to the first 4096 bytes; unrecognized content uses application/octet-stream. See AddBlob.

  • On upgrade, startup initializes missing blob MIME types before serving requests. Required blob objects and remote credentials must be accessible; completed batches survive restart. HTTPS reads now support byte ranges to retrieve content prefixes and seek within remote media.

  • Video transformations preserve audio by default. AddVideo, FindVideo, and FindClip accept with_audio:false to omit it. Applications that relied on silent transformed output should set this option explicitly. URL insertion does not accept audio removal or other transformations.

  • Video operations preserve variable frame timing, accept valid inputs without container frame counts, and report metadata for the stored output. Preview size limits include audio and the finalized container.

  • FindClip applies its requested output codec and container. Clips, intervals, previews, and frame extraction can read only the needed portion of seekable sources; performance depends on the format and source capabilities.

  • Corrected fractional frame retrieval, aspect ratios after video resizing and transposition, and duration metadata when copying video streams. Byte-limited previews retain more frames when the selected or resized output fits. Raw H.264 input can be converted to MP4.

  • Requests rejected for an invalid session or insufficient permissions no longer cause other users’ concurrent writes to fail.

  • Batch requests report a retryable batch failure when the worker computing the result loses its session. Workers with valid sessions are no longer told to sign in again because of another worker’s session failure.

  • Corrected error reporting and audit records: malformed sign-in requests keep their validation errors, command errors retain actionable messages, and requests that fail before authorization are no longer recorded as access denials. Fixed a potential stall when rejecting invalid remote URLs under load.

  • Authorization timings are available separately in graph_authorization_seconds. Graph execution breakdowns no longer count authorization time twice. See GetMetrics for the metric labels.

Security and remote media​

  • User, role, and remote-credential changes now succeed or roll back together with the query’s graph changes. Backups include these settings, and clustered deployments share them across replicas. Replicas may take a short time to reflect changes. See Access Control and Remote credentials.

  • Security changes now apply to subsequent requests after they succeed. Previously, existing sessions could retain outdated permissions, and S3, Google Cloud Storage, or HTTPS reads could continue using credentials after they were changed or removed.

  • Successful sign-in is limited to max_sessions_per_user sessions per user, default 1024. At the limit, signing in revokes the oldest session and its refresh token. Refresh replaces both tokens. User and role changes revoke affected sessions; those users must sign in again.

  • Remote credentials identify an exact S3 bucket, Google Cloud Storage bucket, or HTTPS origin. After an update succeeds, subsequent reads use the new key; removal blocks reads until a credential is registered again. These rules also apply to later batch-page requests. Create or update the credential and wait for success before submitting a query that needs it. Requests already underway may finish with the previous key.

  • HTTPS media reads reuse connections. Fixed requests being refused while old idle connections were closing, even when the request limit had not been reached.

  • Rejected sessions now return code: "unauthenticated" even when the request also encounters invalid media or an unavailable source, so clients can sign in again and retry. Internal failures now use the standard error object used for other query failures.

  • Failed batch queries now release waiting page requests and allow retries. Failed inserts remove newly created media files, and active transfers can finish safely when cached remote connections are replaced.

  • Fixed internal errors for invalid media URLs or missing remote credentials, and failures when creating and removing the same user, role, or credential within one query.

  • Improved authentication performance under concurrent sign-in requests and bounded session and connection reuse with max_sessions_in_cache (default 1024) and max_remote_connections (default 32).

HTTP services and deployment​

  • The Web UI displays the updated user and role responses, including names such as status and info. Changes to your account confirm success before asking you to sign in again, and newly added personal tokens remain available to copy from the confirmation. Browser tabs share sign-in and coordinate session renewal. Open the Web UI over HTTPS, or localhost for local use. Protected pages also open correctly from bookmarks and offer a retry when account details cannot be loaded. Temporary network failures during renewal no longer sign out every tab.

  • Bounding-box previews in the Web UI update as you change coordinates and labels. Save keeps the changes; Cancel discards them. Failed saves and deletes show an error and preserve the draft, and repeated Save clicks no longer create duplicate boxes.

  • HTTP services now run independently of the native database gateway, with support for workflow WebSockets and streamed responses, including notebook sessions, Grafana Live, and streaming chat.

  • Helm and OpenTofu packages include the HTTP service without requiring an ingress controller. Workflow HTTP routes can be configured with http.routes.

  • HTTP redirects and Grafana links use the configured public port, including direct NodePort access and deployments behind an external load balancer.

  • Valid certificate replacements are loaded automatically. Existing connections can finish with the previous certificate; invalid replacements leave the last valid certificate active.

  • Fixed REST requests that could disconnect before receiving a delayed database response when the client requested connection closure.

  • Improved gateway readiness checks to wait for its listeners and required TLS certificate before accepting routed traffic.

Compatibility and upgrade notes​

  • Supported upgrades import users, roles, personal tokens, and usable remote credentials. Existing sessions and refresh tokens are not retained: sign in again after upgrading. Manage security settings through the API afterward; editing the old access-control files no longer changes access.

  • Submit Authenticate and RefreshToken as single-command queries.

  • Workers sharing a batched result must sign in as the same user. Refreshing a session or signing in again preserves that result until it expires. Access is checked for every page. See batch.

  • Update credential commands to use origin and key. The old name, service, resources, add_resources, and remove_resources selectors are no longer accepted. GetCredentials returns origin names without keys. Review imported registrations as described in Remote credentials.

  • GetUsers now returns accounts under users; GetRoles returns definitions under roles. Both responses include status and returned alongside the result object. Update clients that read names directly from the command response. This also permits accounts and roles named status.

  • Remove session_cache_max_age_sec and sessions_file_refresh_rate_sec from configuration; they are no longer accepted. See Configuration File for current settings.

  • Startup rejects incompatible database contents. Rehearse the upgrade on a restored backup; if startup rejects the database, preserve its data and logs and contact support rather than deleting files to force it to open.

  • In Helm and OpenTofu configuration, replace ingress host and TLS settings with http settings and remove bundled ingress-controller configuration. HTTP exposure is configured through http.service; service continues to configure native database exposure. Remove service.enabled and use the desired Service type instead. Both Services are always created. Use ClusterIP for private access. Point web DNS at the new HTTP Service’s external address; the native database endpoint remains separate.

  • For direct NodePort access, set fixed HTTP and HTTPS NodePorts under http.service. Behind an external load balancer, set http.publicPort (Helm) or http.public_port (OpenTofu) to the public port, normally 443; backend NodePorts can then be allocated automatically.

  • Docker Compose now uses the versioned aperturedata/http-proxy image. Registry mirrors must include it. Replace HTTP_MAX_BODY_SIZE with HTTP_BODY_LIMIT in bytes (256m becomes 268435456), and replace HTTP_PROXY_READ_TIMEOUT with HTTP_TIMEOUT_SECONDS in seconds. Remove upstream NGINX_IMAGE overrides; a full-image override now uses HTTP_PROXY_IMAGE and must provide the matching ApertureData proxy image. Use the upgrade command with --remove-orphans in the Compose guide to remove the previous HTTP service and release its published ports.

  • Public HTTP redirects to HTTPS when TLS is enabled. Configure API clients with the HTTPS URL directly; applications that follow redirects must preserve the request method and body for status 308.

See Deploy with Docker Compose, Deploy with Helm, and Deploy with OpenTofu for current configuration examples. Follow Changing a deployment when applying the new packages.

0.19.16​

Features and improvements​

  • Improved error messages for invalid constraint expressions, including operator and scalar-function arguments.

  • Fixed delays when the WebUI calculates the total size of returned blobs.

  • Fixed handling of configured memory limits larger than 32 bits and added validation to reject numeric configuration values that would overflow.

  • Published all ApertureData service images for both AMD64 and ARM64.

  • Bundled Prometheus and Loki configuration in versioned ApertureData images shared by Docker Compose, Helm, and OpenTofu deployment packages.

  • Published each Docker Compose layout in its own repository: aperturedata/aperturedb-compose-single-node, aperturedata/aperturedb-compose-distributed-local, and aperturedata/aperturedb-compose-distributed-cloud. See Deploy with Docker Compose for package references.

  • Expanded the query, response, configuration, and deployment documentation.

Compatibility and upgrade notes​

  • When upgrading Docker Compose from 0.19.15, remove upstream PROMETHEUS_IMAGE and LOKI_IMAGE overrides or replace them with aperturedata/prometheus:0.19.16 and aperturedata/loki:0.19.16 (or matching mirrored images or digests). The packages now rely on the configuration inside these images. Keeping an upstream Prometheus image silently stops ApertureDB metric collection. Update registry mirrors to include the new images.

  • The database now correctly enforces configured memory limits larger than 32 bits. Check memory headroom before upgrading: the default memory guard starts aborting queries above 93% of the configured limit. Numeric configuration values that previously overflowed are now rejected.

Follow Changing a deployment when applying the new deployment packages.

0.19.15​

Features and improvements​

  • Added read-only access to objects at authorized HTTPS origins, with anonymous, Basic, or Bearer authentication configured through CreateCredential. Even anonymous access requires an authorized origin. Only public HTTPS destinations are supported; redirects are not followed.

  • Improved handling of large FindBlob responses. Requests that exceed the response-size limit return an error; use smaller result pages when retrieving large blobs.

  • Property names can now contain forward slashes and start with a digit, slash, or hyphen. See properties for naming rules.

  • Improved index use in queries that combine multiple filters.

  • Added Deploying ApertureDB guides for self-hosted installations using Docker Compose, Helm, and OpenTofu.

  • Docker Compose installations can configure services, resource limits, image overrides, and TLS certificates through one environment file.

  • Added the Alt+Enter shortcut for running custom queries in the WebUI.

  • Expanded query examples and consolidated migration guidance in Deprecations and migrations.

Compatibility and upgrade notes​

  • Databases on 0.19.13 must first upgrade to 0.19.14, then to 0.19.15. Version 0.19.15 cannot perform the 0.19.14 database conversion.

  • GetSchema now returns property objects with count and type, replacing [matched, indexed, type] arrays. Read index definitions from GetIndexes, whose response uses indexes and returned instead of entities and connections. Update clients that parse these fields.

See Database upgrades and Deprecations and migrations for the migration details, descriptor engine aliases, and checkpoint configuration changes.

0.19.14​

Features and improvements​

  • Added native array properties, including null elements, with membership, element-access, length, and whole-array comparisons. Array indexes can accelerate membership and selected element queries. See properties, constraints, and CreateIndex.

  • Added whole-string similarity matching and relevance-ranked full-text search with typo tolerance. See Text search expressions for the supported functions and index requirements.

  • Improved exact descriptor search performance and fixed nearest-neighbor results that could include deleted descriptors.

  • Fixed an issue with manually requested checkpoints.

  • Added deprecated-usage metrics to help identify queries that need updating.

  • Updated GetApiSchema to describe the current API.

Compatibility and upgrade notes​

See Deprecations and migrations for the 0.19.14 index-command changes, request syntax migrations, and database conversion requirements.

0.19.13​

Features and improvements​

  • Added configurable ordered, substring, and property-type indexes, including case-sensitive and case-insensitive text options.

  • Added case-insensitive string operations to query expressions.

  • Added the transpose operation for images and videos. See operations.

  • Compatibility: See Deprecations and migrations for the media flip operation migration.

  • Added support for AWS default credentials and Google Cloud Application Default Credentials for the database’s own storage. Credentials registered for user-supplied object URLs remain separate.

  • Improved query performance and reporting of storage write failures.

Compatibility and upgrade notes​

The following index-command status changes from 0.19.12 can break clients that distinguish successful no-ops from errors:

  • Creating an identical normalized index definition with CreateIndex now returns status: -1 with An identical index definition already exists in info, instead of status: 2. In 0.19.13, different parameter configurations on the same class/property can coexist; this failure applies to an identical definition after defaults are normalized.

  • CreateIndex rejection of an index on a computed property now returns status: -1 instead of status: 5.

  • RemoveIndex now rejects removal of a protected built-in index with status: -1; previously its removal succeeded with status: 0. Removing an absent ordinary index still succeeds with status: 0.

A duplicate-index failure rolls back graph writes in the same transaction. Do not treat that failed transaction as a completed migration. See Failures and retrying writes and the recovery guidance in CreateIndex. Inspect definitions with GetIndexes before creating missing indexes; use the request and response formats for your server version. Later releases change index identity and selectors, as described in Deprecations and migrations.

The status codes themselves have not been renumbered. These conditional-add and deletion outcomes remain unchanged: AddDescriptorSet with an existing set name and AddEntity with matching if_not_found return 2; AddConnection with if_not_found returns 2 when every source/destination pair already has a matching connection. AddConnection returns 1 for empty endpoints and 0 when it creates connections. DeleteEntity with no matches returns 0 with count: 0. See Responses and the individual command references for other outcomes.