RxInfer Usage Telemetry

RxInfer has two separate telemetry features:

  1. A minimal package usage counter (enabled by default)
  2. Optional session sharing for better support and development insights
Note

The telemetry implementation in RxInfer has been designed with careful consideration of the community discussion about telemetry in Julia packages, particularly the discourse thread "Pkg.jl telemetry should be opt-in". We've aimed to strike a balance between gathering useful information for package development while respecting user privacy and control.

The following table compares the key properties of RxInfer's two telemetry features.

PropertyPackage Usage CounterSession Sharing
Entirely AnonymousYesYes
Shared Across Julia SessionsNoNo
Enabled by defaultYes (opt-out)No (opt-in)
Deletion Request SupportNo (UUIDs not persistent, we cannot backtrace the session to a specific user)Yes* (only if users save their session ID and share it with us anonymously with the form below, otherwise we cannot backtrace the session to a specific user)
Can Be Disabled for a Specific Julia SessionYesYes (disabled by default)
Can Be Disabled for All Julia SessionsYesYes (disabled by default)
Can Be Disabled with Environment VariableYesYes (disabled by default)
Customizable BehaviorYes (with Preferences.jl, see Package Usage Counter manual)Yes (with Preferences.jl, see Session Sharing manual)
Can Be Enabled for a Specific Julia SessionYesYes
Can Be Enabled for All Julia SessionsYesYes
What Is Being RecordedOnly timestamp and random UUIDSession metadata & errors, no actual data
Real-Time Sharing of Recorded DataYes (on package load)Optional (manual/automatic)
Local Access to Recorded DataN/A (No data is collected)Yes (via session inspection, see Session Summary manual)
Enables Extra Support from Core DevelopersNoYes* (if users are willing to share their session ID when opening a GitHub issue or a discussion on the GitHub repository, otherwise we cannot backtrace the session to a specific user)
Performance ImpactNegligible (only on package load)Minimal (async sharing)
CI Environment BehaviorAutomatically disabledAutomatically disabled

Users are welcome to join our regular online meetings where we analyze the collected data and discuss how it helps shape RxInfer's development.

Package Usage Counter

By default, RxInfer counts how many times the package is loaded via using RxInfer. This counter:

  • Only records a timestamp and a random UUID for deduplication
  • UUIDs are not persistent and are re-generated for each session
  • Does not collect any code, data, or environment information
  • Is completely anonymous
  • Helps us understand how widely RxInfer is used

[Disabling Package Usage Counter

You can disable the counter in several ways:

  1. Using Julia functions:

    using RxInfer
    RxInfer.disable_rxinfer_using_telemetry!() # Requires Julia restart
  2. Using environment variables:

    export LOG_USING_RXINFER=false

The counter is also automatically disabled in:

  1. CI environments (detected via CI=true environment variable)
  2. When telemetry is disabled via disable_rxinfer_using_telemetry!()
  3. When the telemetry endpoint is set to nothing
RxInfer.log_using_rxinferFunction
log_using_rxinfer()

Send an anonymous usage statistics event to the telemetry endpoint on using RxInfer. This function makes an asynchronous HTTP POST request to the configured endpoint. See RxInfer.set_telemetry_endpoint! to configure the endpoint. If the telemetry endpoint is set to nothing, this function does nothing. The call sends only timestamp and a random UUID. The request is made asynchronously to avoid blocking the user's workflow. See RxInfer.disable_rxinfer_using_telemetry! to disable telemetry on using RxInfer. Alternatively, set the environment variable LOG_USING_RXINFER to false to disable logging.

source
RxInfer.set_telemetry_endpoint!Function
set_telemetry_endpoint!(endpoint)

Set the telemetry endpoint URL for RxInfer.jl at compile time. This endpoint is used for collecting anonymous usage statistics to help improve the package.

The change requires a Julia session restart to take effect.

Arguments

  • endpoint: The URL of the telemetry endpoint as a String or nothing`
source

Session Sharing

RxInfer includes a built-in session tracking feature (detailed in Session Summary) that helps you monitor and debug your inference tasks. You can choose to share these sessions with core developers to:

  • Get better support when encountering issues
  • Help improve RxInfer through real-world usage insights
  • Contribute to community-driven development

Read more about what data is present in the session history in the Session Summary manual.

How to Share Sessions

You can share your session data either manually or automatically.

Manual Sharing

Use the share_session_data function to manually share your session:

RxInfer.share_session_dataFunction
share_session_data(session = RxInfer.default_session(); show_progress::Bool = true)

Share your session data to help improve RxInfer.jl and its community. This data helps us:

  • Understand how the package is used in practice
  • Identify areas for improvement
  • Make informed decisions about future development
  • Share aggregate usage patterns in our community meetings

The data is organized in a structured way:

  1. Basic session info (Julia version, OS, etc.)
  2. Anonymous statistics about different types of package usage
  3. Information about individual labeled runs

All data is anonymous and only used to improve the package. We discuss aggregate statistics in our public community meetings to make the development process transparent and collaborative.

Arguments

  • session::Session: The session object containing data to share
  • show_progress::Bool = true: Whether to display progress bars during sharing

Progress Display

When show_progress is true (default), the function displays:

  • A blue progress bar for sharing session statistics
  • A green progress bar for sharing labeled runs
source

Automatic Sharing

You can enable automatic session sharing after each session update:

When automatic sharing is enabled:

  • Session data is shared after each session update
  • Sharing is done asynchronously (won't block your code)
  • No progress bars or messages are shown
  • Failed sharing attempts are silently ignored

Using Session IDs in Issues

When you share a session and then open a GitHub issue, include your session ID. This helps us:

  • Link your issue to the shared session data
  • Understand your usage context
  • Provide more accurate and helpful support

Deleting Shared Data

If you wish to delete previously shared session data, you can contact the core developers through GitHub issues at RxInfer.jl or anonymously with the following form.

When requesting deletion, you must provide the session UUID. Without this identifier, we cannot trace specific sessions back to individual users. See the Session Summary manual for details on how to obtain your session ID.

Privacy and Control

Remember:

  • Session sharing is completely optional
  • All statistics are anonymous, UUIDs are not persistent and are re-generated for each session
  • No actual data is shared, only meta information (e.g., type of data, number of observations)
  • You can inspect the sharing code in src/telemetry.jl
  • We only use this data to help improve RxInfer and provide better support

We appreciate your help in making RxInfer better! Whether you choose to enable telemetry or share sessions, your contribution helps us improve the package for everyone.

Developers Reference

RxInfer.to_firestore_invokeFunction
to_firestore_invoke(invoke::SessionInvoke, stats_id::UUID)

Convert a SessionInvoke object to a Firestore-compatible document format. Includes a reference to the parent session stats.

source
RxInfer.to_firestore_valueFunction
to_firestore_value(value)

Convert a Julia value to a Firestore-compatible value format. Returns a NamedTuple with the appropriate Firestore field type.

source
RxInfer.to_firestore_documentFunction
to_firestore_document(data::NamedTuple)

Convert a Julia NamedTuple to a Firestore document format. Returns a NamedTuple with fields in Firestore format.

source
RxInfer.to_firestore_session_statsFunction
to_firestore_session_stats(stats::SessionStats, session_id::UUID)

Convert a SessionStats object to a Firestore-compatible document format. Includes a reference to the parent session.

source