Skip to content

Releases: TheThingsNetwork/lorawan-stack

v3.15.0

17 Sep 12:15
4a40303
Compare
Choose a tag to compare

Added

  • RPC to query supported PHY versions for a given Band ID.
  • Non-TLS LNS endpoint support.

Changed

  • Update to Go 1.17.
  • LBS timestamp rollover threshold.
  • Layout of error pages.
  • The Application Server worker pools may now drop workers if they are idle for too long.
  • Improved error page UX in the Console.

Fixed

  • Entity purge handling for non-admin users in the Console.
  • URL field validation in webhook forms in the Console when value is not trimmed.
  • Not rendering site header and footer for error pages in some situations.
  • Not providing a copy button for error pages in some situations.
  • Improved errors for invalid URLs.
  • Limit length of search queries within tables in the Console to 50 to comply with API validation.
  • External Join Server address handling in end device creation form in the Console.
  • Updating supports_class_b field in the end device general settings page in the Console.

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.15
  • docker pull thethingsnetwork/lorawan-stack:3.15.0
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.15
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.15.0

v3.14.2

27 Aug 14:06
7663069
Compare
Choose a tag to compare

Added

  • CLI warnings about insecure connections.
  • CLI warnings about using the --all flag.
  • Packet Broker network listed switch in the Console.
  • Improved errors for invalid command-line flags.
  • Validation of entity attributes in the Console, with regards to maximum length for keys and values.
  • CLI command to decode raw LoRaWAN frames (ttn-lw-cli lorawan decode), useful for debugging purposes.
  • Options to restore or purge deleted applications, gateways and organizations in the Console.
  • Handling of default mac settings values when manually registering end devices in the Console.
  • Add a new class_b_c_downlink_interval field that can be configured to set the minimum interval between a network initiated downlink (Class B & Class C) and an arbitrary downlink per device.
  • Retrieve count of upstream messages from the Storage Integration by end device.
    • See the new GetStoredApplicationUpCount RPC.
    • See the new ttn-lw-cli applications storage count and ttn-lw-cli end-devices storage count CLI commands.

Changed

  • The Identity Server now returns a validation error when trying to update the EUIs of an end device.
  • Network Server no longer accepts RX metadata from Packet Broker if the originating forwarder network equals the current Network Server (by NetID and cluster ID, based onns.net-id and ns.cluster-id configuration). This avoids duplicate RX metadata as well as redundant downlink scheduling attempts through Packet Broker after the cluster's Gateway Server already failed to schedule.
  • Usability of the end device import function in the Console.
    • Show a per-device report when errors occur.
    • More structural changes to the process to improve UX.

Removed

  • Packet Broker mutual TLS authentication; only OAuth 2.0 is supported now.
  • request_details from errors in the Console.

Fixed

  • Generated CLI configuration for The Things Stack Community Edition.
  • End device access with limited rights in the Console.
  • Parsing of ID6 encoded EUIs from Basic Station gateways.
  • Warnings about unknown fields when getting or searching for gateways.
  • Internal Server Errors from pkg/identityserver/store.
  • Console rendering blank pages in outdated browsers due to missing or incomplete internationalization API.
  • Error in edit user form (Console) when submitting without making any changes.
  • description field not being fetched in edit user form (admin only) in the Console.
  • Ignore invalid configuration when printing configuration with ttn-lw-cli config or ttn-lw-stack config.
  • Emails about API key changes.
  • Avoid rendering blank pages in the Console for certain errors.
  • Blank page crashes in the Console for certain browsers that do not fully support Intl API.
  • End device session keys handling in the Console.
  • Byte input width in Safari in the Console.

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.14
  • docker pull thethingsnetwork/lorawan-stack:3.14.2
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.14
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.14.2

v3.14.1

06 Aug 11:26
v3.14.1
0be1360
Compare
Choose a tag to compare

Added

  • New config option --as.packages.timeout to control the message processing timeout of application packages.
  • Option to view and copy error details in full view errors in the Console.
  • Metrics for CUPS requests.
  • Language chooser in the footer in the Console.
  • Japanese language support in the Console.

Changed

  • Cache Root CA for client TLS configuration.
  • Identity Server no longer allows removing the _ALL right from entity collaborators if that leaves the entity without any collaborator that has the _ALL right.
  • The Network Server application uplink queue may now be skipped if the Application Server peer is available at enqueue time.
  • The interval for updating gateways in Packet Broker is now 10 minutes (was 5 minutes) and the timeout is 5 seconds (was 2 seconds).

Fixed

  • Improved errors when ordering search requests by non-existent fields.
  • LNS authentication key handling for gateways in the Console.

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.14
  • docker pull thethingsnetwork/lorawan-stack:3.14.1
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.14
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.14.1

v3.14.0

23 Jul 10:47
v3.14.0
f04bf50
Compare
Choose a tag to compare

Added

  • Gateway antenna placement; unknown, indoor or outdoor. This can now be specified with CLI, e.g. for the first antenna: ttn-lw-cli gateways set <gateway-id> --antenna.index 0 --antenna.placement OUTDOOR. The antenna placement will be reported to Packet Broker Mapper.
    • This requires a database schema migration (ttn-lw-stack is-db migrate) because of the added columns.
  • Payload formatter length validation in the Console.
  • User session management (listing and deleting) in the Identity Server and the CLI.
  • Improved logging for the OAuth server.
  • LR-FHSS modulation
    • Additional fields for the Gateway and Rx Metadata API. This requires a database schema migration (ttn-lw-stack is-db migrate) because of the added columns.
    • Support for LR-FHSS fields when translating uplink messages with the UDP protocol.
  • Network Server now appends network identifiers in forwarded uplink messages. These are populated from the ns.net-id and the new ns.cluster-id configuration option.
    • See the new uplink_message.network_identifiers.net_id, uplink_message.network_identifiers.cluster_id and uplink_message.network_identifiers.tenant_id fields.
    • This can be useful for HTTP webhooks to determine the Network Server that received and forwarded an uplink message.
  • GetDefaultMACSettings RPC for requesting the default and desired MAC settings for a Band (Frequency Plan) and LoRaWAN regional parameters version.
  • Error handling for missing templates in device repository form in the Console.
  • Opt out of Packet Broker for individual gateways, see the new disable_packet_broker_forwarding gateway option.
    • This requires a database schema migration (ttn-lw-stack is-db migrate) because of the added columns.
    • This is only relevant when Packet Broker is enabled and configured by the network operator.
  • Gateways are now disconnected when settings affecting the connection with Gateway Server change. Use the gs.fetch-gateway-interval and gs.fetch-interval-jitter to configure how often the gateway is fetched from the entity registry.
  • Small UX improvements to the LoRaCloud DAS forms in the Console.
  • End device first activation timestamp in the Identity Server end device store.
    • This requires a database schema migration (ttn-lw-stack is-db migrate) because of the added columns.
  • AppJs interface for applications to get the LoRaWAN AppSKey directly from the Join Server.
  • Console support for DevEUI generation from the configured DevEUI address block.
    • This requires console.ui.dev-eui-issuing-enabled and console.ui.dev-eui-app-limit to be set with the same values as in the Identity Server configuration.

Changed

  • When a gateway uplink message contains duplicate data uplinks, only the one with the highest RSSI are forwarded.
  • The HTTP port now allows HTTP/2 connections over cleartext (h2c).
  • ttn-lw-stack ns-db migrate command records the schema version and only performs migrations if on a newer version.
    • Use the --force flag to force perform migrations.
  • Any authenticated user in the network can now list the collaborators of entities in the network.
  • The search RPCs no longer require fields to be specified in the field mask when those fields are already specified as filters.
  • When generating client configuration with the CLI use command, automatically set the correct Identity Server and OAuth Server addresses for The Things Stack Cloud and The Things Stack Community Edition.

Removed

  • The old log format.

Fixed

  • Network Server ADR algorithm data rate adjustment behavior on negative margin.
  • CLI gateway set --antenna.remove command failing to remove gateway antennas in some cases.
  • CLI gateway set --antenna.gain <gain> command crashing when no gateway antennas are present.
  • Webhook template path variable expansion of query parameters.
  • LBS LNS Auth Secret displays garbage value when updated.
  • Transmit confirmation messages for LoRa Basics Station gateways.
  • Instability and frequent crashes when internet connection is lost in the Console.
  • Panic in GCS when CUPS rotation is set without a key.
  • Rate limiting for GatewayRegistry.GetGatewayIdentifiersForEUI is now applied per gateway EUI.
  • Network Server ensures that the Band ID in the end device version identifiers match the configured Frequency Plan of the device.

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.14
  • docker pull thethingsnetwork/lorawan-stack:3.14.0
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.14
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.14.0

v3.13.3

02 Jul 10:16
v3.13.3
1ffabee
Compare
Choose a tag to compare

Added

  • Email sent to admins when an OAuth client is requested by a non-admin user.
  • Packet Broker UI in the Console (admin only).
  • New config option --console.oauth.cross-site-cookie to control access to OAuth state cookie between origins.
    • This option needs to be set to true (default is false) in multi-cluster deployments in order to support OAuth clients that use POST callbacks.
  • Application Server forwards upstream messages of type ApplicationDownlinkSent for application downlink messages that were acknowledged with a TxAck message from the gateway.
    • MQTT clients can subscribe to the topic v3/{application-id}/devices/{device-id}/down/sent.
    • For HTTP webhooks, make sure that the Downlink Sent messages are enabled.
  • Query for the most recent application messages from the Storage Integration API with the new last parameter (for example, ?last=10m or ?last=2h). See also --last argument for the ttn-lw-cli applications storage get and ttn-lw-cli end-devices storage get commands.
  • A location solved message is published automatically by Application Server when the decoded payload contains coordinates (e.g. latitude and longitude, among other combinations, as well as support for accuracy and altitude).
  • Configuration option to include Packet Broker metadata in uplink messages: pba.home-network.include-hops. By default, this is now disabled.
  • Update gateway identity, status, antennas, frequency plan, location and receive and transmit rates to Packet Broker Mapper. Mapping is enabled when the Forwarder role is enabled. The following new configuration options are introduced to change the default behavior:
    • gs.packetbroker.update-gateway-interval: Update gateway interval
    • gs.packetbroker.update-gateway-jitter: Jitter (fraction) to apply to the update interval to randomize intervals
    • gs.packetbroker.online-ttl-margin: Time to extend the online status before it expires
    • pba.mapper-address: Address of Packet Broker Mapper
    • pba.forwarder.gateway-online-ttl: Time-to-live of online status reported to Packet Broker

Changed

  • Low-level log messages from the go-redis library are printed only when the log level is set to DEBUG.
  • GS will discard repeated gateway uplink messages (often received due to buggy gateway forwarder implementations). A gateway uplink is considered to be repeated when it has the same payload, frequency and antenna index as the last one.
    • The new gs_uplink_repeated_total metric counts how many repeated uplinks have been discarded.
    • A gs.up.repeat event is emitted (once per minute maximum) for gateways that are stuck in a loop and forward the same uplink message.
  • For ABP sessions, the CLI now requests a DevAddr from the Network Server instead of generating one from the testing NetID.
  • Descriptions, tooltips and defaults for checkboxes for public gateway status and location in the Console.
  • All HTTP requests made by The Things Stack now contain a User-Agent header in the form of TheThingsStack/{version}.
  • No connection to Packet Broker is being made when neither the Forwarder nor the Home Network role is enabled.
  • Increase the default size limit for payload formatter scripts to 40KB (up from 4KB). The maximum size enforced at API level is 40KB (up from 16KB).

Fixed

  • Parse error in Webhook Templates.
  • Application deletion handling in the Console.
  • Error when logging into the Console when using connections without TLS.
  • Account for antenna gain when the gateway is not authenticated (i.e. UDP gateway).
  • Preserve antenna gain when the gateway status message contains GPS coordinates.
  • Location map coordinate selection in the Console.
  • Rights required for reading scheduled downlinks.

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.13
  • docker pull thethingsnetwork/lorawan-stack:3.13.3
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.13
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.13.3

v3.13.2

17 Jun 12:56
4a2e92c
Compare
Choose a tag to compare

Added

  • Configurable log formats with the log.format configuration option.
    • The console format that prints logs as more human-friendly text. This is the new default.
    • The json format that prints logs as JSON. This is the recommended format for production deployments.
    • The old format (deprecated). This can be used if you need to adapt your log analysis tooling before v3.14.
  • ttn_lw_gs_ns_uplink_latency_seconds, ttn_lw_ns_as_uplink_latency_seconds and ttn_lw_gtw_as_uplink_latency_seconds metrics to track latency of uplink processing.
  • Signing of releases.
  • Hard delete option to delete applications, gateways and organizations in the Console.

Changed

  • Relaxed the cookie policy for cross-origin requests from Strict to Lax.
  • Changed the cookie policy for OAuth state to None.

Deprecated

  • The old log format is deprecated and will be removed in v3.14.

Fixed

  • Permissions issue for reading and writing gateway secrets in the Console.
  • Current and future rights selection for organization collaborators in the Console.
  • Current and future rights selection for user api keys in the Console.
  • Low or no throughput of message handling from Packet Broker when the ingress is high when Packet Broker Agent starts.
  • Unset ADR bit in downlink messages to multicast devices.

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.13
  • docker pull thethingsnetwork/lorawan-stack:3.13.2
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.13
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.13.2

v3.13.1

04 Jun 09:54
v3.13.1
76bc6cf
Compare
Choose a tag to compare

Added

  • More contextual tooltips to end device and gateway form fields in the Console.
  • Warnings in the Console when changing or revoking your own access to an entity.

Changed

  • Do not print error line logs for rate limited gRPC and HTTP API requests.
  • The ttn_lw_log_log_messages_total metric was renamed to ttn_lw_log_messages_total and has an additional error_name label.
  • Authenticated users now have access to gateway status and location when those are set to public.
  • Cookies are no longer allowed in cross-origin requests to the HTTP API. Applications must instead use Bearer tokens in the Authorization header.

Fixed

  • Downlink queue eviction on FCnt mismatch.
  • End device payload formatter view crashing in the Console.
  • End device overview frequently crashing in the Console.
  • Panic on empty downlink in zero indexed downlink token.

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.13
  • docker pull thethingsnetwork/lorawan-stack:3.13.1
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.13
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.13.1

v3.13.0

20 May 16:51
c13776e
Compare
Choose a tag to compare

Added

  • Searching Packet Broker networks with --tenant-id-contains and --name-contains flags.
  • Listing all listed Packet Broker networks with ttn-lw-cli packetbroker networks list.
  • Include end device version identifiers in upstream messages (see uplink_message.version_ids.brand_id, uplink_message.version_ids.model_id, uplink_message.version_ids.firmware_version, uplink_message.version_ids.hardware_version and uplink_message.version_ids.band_id fields).
  • Reporting uplink and downlink message delivery state changes to Packet Broker. This will be used for statistical purposes (e.g. which message is processed successfully or why it errored) as well as LoRaWAN roaming (the XmitDataAns result code).
  • Setting API key expiry via --api-key-expiry flag using RFC3339 format.
    • This requires a database schema migration (ttn-lw-stack is-db migrate) because of the added columns.
  • Events storage in the Redis events backend. This can be enabled with the new events.redis.store.enable option. The new options events.redis.store.ttl, events.redis.store.entity-ttl, events.redis.store.entity-count and events.redis.store.correlation-id-count can be used to configure retention.
  • RPC to find related events by correlation ID.
  • CLI command events find-related.
  • Support for loading Device Repository profiles from different vendors if specified. This allows reusing standard end device profiles from module makers and LoRaWAN end device stack vendors.
  • Filtering out verbose events in the event views in the Console.
  • The gs.up.forward event now includes the host an uplink was forwarded to.
  • Previews for *.update events in the Console.
  • The Console can now show recent historical events in networks that have events storage enabled.
  • Add a new mac_settings.desired_max_eirp field that can be configured to set the desired MaxEIRP value per device.
  • Support loading rate limiting profile configuration from external sources. When set, they will override embedded configuration. See rate-limiting.config-source, rate-limiting.directory, rate-limiting.url and rate-limiting.blob.* configuration options.
  • IssueDevEUI RPC for requesting a DevEUI from a configured IEEE MAC block for devices per application.
    • This requires a database schema migration (ttn-lw-stack is-db migrate) because of the added eui_blocks table and dev_eui_counter
      column in applications table.
    • This requires a new dev-eui-block configuration setting.

Changed

  • User IDs now have a minimum length of 2 instead of 3, so that more users coming from v2 can keep their username.
  • Disabled device uplink simulation and downlink message sending when skipping payload crypto.
  • The UpdateAPIKey RPCs now take a fieldmask.
  • The Gateway Server no longer sends gs.up.drop event if the Network Server does not handle an uplink message, or if the uplink does not match the DevAddr prefix of an upstream.
  • Maximum size for user-defined payload formatter scripts.
    • The default cap is at 4KB, see the new as.formatters.max-parameter-length config option.
    • A maximum cap of 16KB per script is set at the API level.
    • This only prevents setting large payload formatter scripts for new devices and applications; it does not remove payload formatters from existing applications and devices. Scripts sourced from the Device Repository are not affected. See issue #4053 for more context on this change.
  • LoRa Basics Station router_config message omits hardware specific fields.
  • Showing "Last seen" information in end device tables (replacing "Created").

Removed

  • The gs.status.forward event.

Fixed

  • OAuth token exchange for OAuth clients that use Basic auth.
  • The CLI now properly returns a non-zero exit status code on invalid commands.
  • Gateway connection requests with zero EUI are rejected.
  • End device payload formatter reset to FORMATTER_NONE in the Console.
  • Memory issues when importing end devices in the Console.

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.13
  • docker pull thethingsnetwork/lorawan-stack:3.13.0
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.13
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.13.0

v3.12.3

06 May 09:41
v3.12.3
e448d20
Compare
Choose a tag to compare

Release notes

Changed

  • Optimized storage of recent application uplinks in Application Server.

Fixed

  • Validation of OAuth token exchange requests from the CLI.
  • Validation of join-request types when using the Crypto Server backend.
  • Fetching AppSKey when the session is rebuilt but the identifier did not change.

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.12
  • docker pull thethingsnetwork/lorawan-stack:3.12.3
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.12
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.12.3

v3.12.2

30 Apr 09:08
v3.12.2
3403b39
Compare
Choose a tag to compare

⚠️ Known Issues

  • The OAuth login flow of ttn-lw-cli does not work with v3.12.2. Instead, you can use ttn-lw-cli login --api-key NNSXS.etc.etc to login with an API key.

Added

  • Contextual tooltips to form fields in the Console.
  • C-Style uint32_t representation for end device address field.
  • Gateway Configuration Server to the cluster package.
    • This introduces a new config option cluster.gateway-configuration-server that needs to be set in multi-instance deployments.
  • Uplink storage for integrations in the Application Server. The number of uplinks stored per end device may be configured via the config option as.uplink-storage.limit.
  • LoRaCloud GLS multi frame request support.
  • LoRaCloud GNSS request support.
  • LoRaCloud WiFi request support.

Changed

  • Allow the LinkADRReq commands to lower the data rate used by the end devices.

Fixed

  • Occasional crashes in the ratelimit middleware.
  • Handling of zero EUI CUPS update-info requests.
  • Backend validation messages for some forms.
  • Gateway downlink message previews not displaying correctly in the event view of the Console.
  • Importing end devices from the Console would occasionally ignore some device MAC settings fields.

Release notes

Docker images

  • docker pull thethingsnetwork/lorawan-stack:3.12
  • docker pull thethingsnetwork/lorawan-stack:3.12.2
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.12
  • docker pull ghcr.io/thethingsnetwork/lorawan-stack:3.12.2