---
title: Base Collector
slug: changelog/base-collector
docTags: 
createdAt: 2025-12-23T08:32:18.728Z
---

:::hint{type="warning"}
Always check the compatibility matrix below before installing a new version.
:::

## Compatibility

Collectors of all versions >= v1.0.0 are compatible with all Factry Historian versions >= v4.0.0, in both directions. However, for certain functionalities, certain minimum versions of the collector and Factry Historian are required.
More information is always available in the release notes.

### Feature Compatibility Matrix

This is the compatibility matrix for version listed on this page. If you have downloaded a newer version than the one listed on this page please check the release notes of that version.

| Feature                 | Base Collector Version | Factry Historian Version |
| ----------------------- | ---------------------- | ------------------------ |
| State Saving            | >= v2.5.0              | >= v7.0.0                |
| GRPC Streaming (broken) | >= v2.6.0              | >= v7.1.0                |
| GRPC Streaming (fixed)  | >= v3.3.0              | >= v7.1.0                |
| OS, ARCH detection      | >= v2.8.0              | /                        |
| Windows 7, 8 support    | \< 3.0.0               | /                        |
| Measurement Metadata    | >= v4.1.0              | >= v8.2.0                |

## v4.3.1

### Bug fixes

- Fixed a collector hanging on "Initializing collector" at startup, due to a deadlock in the sending of the initial state.
- Fixed every log line being written twice. The log file on Windows, and stdout elsewhere, were registered as an output twice when the collector fetched its settings from Historian at startup.

## v4.3.0

### Features

- `CollectorHandle` now exposes the collector state through `State()` and `SetState()`. A collector implementation can read and write its persisted state without holding a `*Collector`.
- `CollectorHandle` now exposes the cache directory through `CachePath`.

### Changes

- Collector statistics are sent every minute instead of every 30 seconds.
- Updated `factry-ca` to the certificate renewal commit.

### Bug fixes

- Fixed collector state updates being dropped. A collector that keeps a cursor in its state, such as a last update time, lost every second update and that value never reached Historian.
- Fixed a collector staying idle after it was resumed. The stored measurements were re-sent before `SetStatus` returned, so a collector that rebuilds its measurement state in `SetStatus` could drop them and then wait for a measurement to change in Historian.

## v4.2.0

### Features

- The collector now reports a `Storage blocked` health status when it cannot write to disk, and checks this at startup so storage problems surface immediately instead of silently losing data.

### Changes

- Added a `GRPCCallTimeout` setting (default `2m`) so an unresponsive Historian can no longer block the collector indefinitely.

### Bug fixes

- A hung or dropped connection to Historian no longer blocks data sending or shutdown.
- Buffered data is removed from disk only after Historian confirms it was received, preventing data loss.
- Fixed a crash when a numeric measurement had a missing or non-numeric value.
- Fixed noise filtering and compression getting stuck after `NaN` or `Inf` values.
- Fixed a possible crash when processing points concurrently.

## v4.1.3

### Bug fixes

- Support TLS connections to a historian served with a publicly trusted certificate (e.g. behind a reverse proxy). Set `ALLOW_INSECURE=true` for a plaintext connection instead.

## v4.1.2

### Bug fixes

- Fixed collector self-update not working

## v4.1.1

### Bug fixes

- Preserve UUID and settings during collector loading

## v4.1.0

### Features

- Added typed `Metadata` support on `CreateMeasurement`. Each property carries an explicit `DataType` (`string`, `number`, or `boolean`) and a matching `Value`.
- Decrease the impact of frequently repeated log lines by compressing them into summarized log entries

### Changes

- Upgraded to `historian-proto` v2.0.0. Backwards compatible with older Factry Historian versions as long as `Metadata` is not populated on `CreateMeasurement` — sending typed `Metadata` requires a Historian that speaks historian-proto v2.

### Bug fixes

- Resolved an issue where a collector could enter an indefinite restart loop if its update failed
- Fixed a problem in the collector installer where it tried to uninstall the collector service, even if the service wasn't installed before

## v4.0.4

### Bug fixes

- Fixed an issue where the settings page of a newly created collector would appear empty in Historian, preventing configuration of the collector.

## v4.0.3

### Bug fixes

- Fixed issue where NoiseFilterMaxTimeBetweenEmits setting was not being applied

## v4.0.2

### Bug fixes

- Fixed an issue on windows where the working directory was set too late, causing the base path to be incorrect

## v4.0.1

### Bug fixes

- Fixed migration hooks running again on every restart if current and target versions are the same, which could cause issues with certain migrations that were not designed to run multiple times.

### Changes

- Disable collector operations after a collector has been deleted

## v4.0.0

### Changes

- Refactored the base collector to support better modularity and extensibility for future features.
- Allow using an unencrypted connection to Historian instead of using Historian's self-signed certificate for gRPC communication; allowing deployments behind reverse proxies that handle TLS termination.

## v3.5.3

### Bug fixes

- Fixed a collector crash when a nil, non-numeric, or non-finite (NaN or Inf) value passed through `Noise Filtering` or `Swinging Door Compression`. Such values now pass through unfiltered and leave the compression state intact.
- Fixed a crash that could occur under load when compression state was updated from multiple threads at the same time.

## v3.5.2

### Bug fixes

- Fixed an issue where a gRPC stream would not be closed properly on error when sending buffered points.

## v3.5.1

### Bug fixes

- Fixed an issue where 1.5s was not considered a valid duration for certain settings in `Swinging Door Compression` and `Noise Filtering`.

## v3.5.0

### Changes

- Added `Swinging Door Compression` as a new way to compress data before sending it to Factry Historian.
- Added `Noise Filtering` as a new way to filter out noisy data before sending it to Factry Historian.
- Added a workaround for Windows systems to avoid issues with log messages being overwritten in Factry Historian due to time precision limitations.

## v3.4.0

- Added `TimeoutGracePeriod` setting that controls how long a collector can attempt a clean shutdown before being forcefully stopped

## v3.3.1

- Added validation for `CollectionInterval` and `CollectionOffset` settings to ensure they are valid.

## v3.3.0

### Buffer & streaming

- Use file streams to read buffer disk files
- Use GRPC streams to send buffer disk files to Factry Historian

### Other changes

- Added `group` property to group `Ticker`, `Buffer` and `Logs` settings

## v3.2.0

### Buffer & Diskqueue

- Don’t write empty buffer files and stop buffer writes when memory is empty
- Stop processing the disk-queue when shutting down

### Settings Migration

- Always use the last-fetched collector settings during migration

### Windows Installer

- Wait for the target process to exit before completing installation on Windows

## v3.1.1

- Fixed polling mechanism getting stuck on stop

## v3.1.0

- Changed logic of sending initial measurements to. All measurements fetched from historian or the cache are sent on the `Added` channel in a non-blocking way.
  Also, all measurements fetched from historian are sent on the `Added` channel, not only the `Active` or `Discovered` ones, so the behavior is the same as when loading measurements from the cache.

## v3.0.0

- Removed support for windows 7 and 8
- Changed handling of health updates to be separate from the logs

## v2.8.1

- Fixed polling of collector for updates getting stuck

## v2.8.0

- Added detection of the collector's OS and ARCH to base collector, it no longer depends on `GOOS` and `GOARCH` environment variables since they not always contain the correct arm version.

## v2.7.4

- Improved handling of the collector state to make sure state changes from Factry Historian are not overwritten by the collector

## v2.7.3

- Disabled streaming

## v2.7.2

- Changed the permissions with which the systemd environment file is saved to 0600

## v2.7.1

- Fixed an issue with the cleanup of timers in High Availability mode

## v2.7.0

- Added new collector settings for a timestamp range filter
  - `AllowedFutureDuration`: Defines the maximum duration into the future from the current time (collector's perspective) that a source timestamp is considered valid.
  - `AllowedPast`: Defines the earliest allowable point in time for source timestamps. This can be specified either as a fixed timestamp (e.g., 2023-07-01T00:00:00Z) or as a duration in the past relative to the current time (e.g., 1w for 1 week ago).
  - `BadTimestampAction`: Specifies the action to take when a timestamp is found to be outside the allowed ranges. Discard: the point is discarded. SendWithCurrent: the point is sent with the current timestamp and BadTimestampOutOfRange instead.

## v2.6.1

- Resolved an issue where collectors with migration functions would create empty settings during new installations.

## v2.6.0

- Separated the processing of item types in the buffer, allowing statistics and logs to be handled asynchronously when managing a backlog of points
- Use streaming when sending data to the historian to lower the impact of high latency connections
- Update the default GRPC compression to optimize for speed over compression

## v2.5.2

- Fixed an issue with semantic version comparison

## v2.5.1

- Properly close the collector when an upgrade is finished

## v2.5.0

- Added support for a collector saving it's state to cache and in Historian. The state can be edited in the Historian UI.
- Added support for migration hooks for the collector to run when the collector is upgraded.

## v2.4.8

- Fixed windows 7 compatibility issue
- Fixed initial measurements getting zeroed prematurely

## v2.4.6

- Fixed base collector repeatedly sending measurements on the Added channel

## v2.4.5

- Changed when measurements are first loaded

## v2.4.4

- Fixed an issue with HA timer compatibility

## v2.4.3

- Free memory for garbage collection after taking items from the buffer
- Added environment variable PPROF\_PORT to run profiler if variable is set to a port number greater than 1024

## v2.4.2

- Made sure the collector binary is unique for each installed collector

## v2.4.0

- Expanded system statistics with: total disk space, total memory and free memory

## v2.3.1

- Improved logging during collector upgrade

## v2.3.0

- Added functionality for collectors to update themselves

## v2.2.0

- Added auto-onboarding of measurements

## v2.1.1

### Bug fixes

- Fixed sending of collector statistics

## v2.1.0

- Added timestamp formatters to generalize the formatting of timestamps as strings

## v2.0.0

- Added functionality for discovering measurements
- Removed `Deleted` channel. Deleted measurements are now sent on the `Updated` channel with status `Deleted`

## v1.2.21

- Minor bug fixes and improvements

## v1.2.20

- Minor bug fixes and improvements

## v1.2.19

- Added logging on add/update/delete of measurement

## v1.2.18

- Update historian-server to v6.0.5
- Add Datatype to Measurements fetched from Historian

## v1.2.17

- Add timestamp parser to base collector

## v1.2.16

### Bug fixes

- Fixed nil pointer exception in status processing

## v1.2.15

### Changes

- Added StatusGood setting to accept other statuses as Good status

## v1.2.14

### Changes

- Improved logging for failover collector
- Better mac compatibility for debugging

## v1.2.13

### Changes

- Starting the HTTP server for collector failover will retry periodically until the server is started

### Changes

- Add a check for `Unstable` health in collector redundancy

## v1.2.11

### Changes

- Added a function to get the remaining memory buffer size

## v1.2.10

### Bug fixes

- Fixed issue with loading the timezone data on windows

## v1.2.9

### Changes

- Rename default collector binary name to factry-type-collector\_version(.exe)

## v1.2.8

### Changes

- Installer attempts to continue if installing binary returns an error

## v1.2.7

### Changes

- Added release notes and docs for the base collector
