Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
6f4dc99
ci: Support v1 version branch
jpnurmi Oct 14, 2026
8dc1bfb
ci: Drop v1 push filters
jpnurmi Oct 14, 2026
212b6a6
ci(codeql): Analyze v1 pushes
jpnurmi Oct 14, 2026
a6ee584
feat(build): shared library version (#2103)
jpnurmi Oct 14, 2026
040c15f
ci: release archive version (#2105)
jpnurmi Oct 14, 2026
67e0b6d
feat!: make native the default backend (#2186)
jpnurmi Oct 14, 2026
6dcddc8
ci: Publish v1 benchmarks separately
jpnurmi Oct 15, 2026
1e8a9bc
Merge remote-tracking branch 'origin/master' into v1
jpnurmi Oct 15, 2026
3d26077
ref: stabilize screenshot APIs (#2204)
jpnurmi Oct 15, 2026
e7c6058
ref(transport)!: rename and document custom transport factory (#2131)
jpnurmi Oct 15, 2026
a0e2564
perf: add support for batched scope updates (#2107)
jpnurmi Oct 15, 2026
1f7b255
feat(scope): Split global scope and expose isolation scope (#2160)
jpnurmi Oct 15, 2026
5ae31e0
feat(native): Provide crash metadata to `on_crash` (#2174)
jpnurmi Oct 15, 2026
bcbca11
fix: provide `debug_meta.images` to `on_crash` (#2184)
jpnurmi Oct 15, 2026
cc54b28
Merge remote-tracking branch 'origin/master' into v1
jpnurmi Oct 15, 2026
e550d2f
fix(native): honor symbolication option for captured Windows frames
jpnurmi Oct 16, 2026
0f5e3a2
perf(native): Add IPC foundations (#2155)
jpnurmi Oct 16, 2026
4ce28e7
perf(native): Sync scope over IPC (#2157)
jpnurmi Oct 16, 2026
4cef180
Merge remote-tracking branch 'origin/master' into v1
jpnurmi Oct 17, 2026
e5f9615
feat(internal): stdout transport (#2213)
jpnurmi Oct 19, 2026
eaca2f9
fix(native): reduce daemon stack usage (#2211)
jpnurmi Oct 19, 2026
839f510
fix(unwinder): Reduce maps buffer stack usage (#2212)
jpnurmi Oct 19, 2026
ce33b9b
Merge remote-tracking branch 'origin/master' into v1
jpnurmi Oct 19, 2026
65c9d1a
fix(native): Preserve existing alternate signal stacks (#2219)
jpnurmi Oct 20, 2026
567e0e9
Merge remote-tracking branch 'origin/master' into v1
jpnurmi Oct 20, 2026
725ed34
feat(native): add basic crash handling to the daemon (#2220)
jpnurmi Oct 20, 2026
27790f3
fix(native): group proc maps modules by load (#2228)
jpnurmi Oct 20, 2026
50a32b6
ref: Share `process_vm_readv` shim between Linux readers (#2227)
jpnurmi Oct 20, 2026
7aff784
chore!: remove deprecated APIs (#2230)
jpnurmi Oct 21, 2026
0eef20c
ci: mitigate Android emulator setup failures (#2231)
jpnurmi Oct 22, 2026
c450877
fix(native): use localtime_r in the daemon file logger
jpnurmi Oct 22, 2026
712b8c2
test: stabilize flaky transaction timestamp checks (#2233)
jpnurmi Oct 23, 2026
a6afbb1
test: make unit tests work out of the box with CTest (#2234)
jpnurmi Oct 23, 2026
0fdaebc
feat: add `sentry_scope_set_trace` (#2236)
jpnurmi Oct 26, 2026
d9c645c
feat: add `sentry_continue_trace` (#2237)
jpnurmi Oct 26, 2026
3e1a9c8
feat: add `sentry_iter_trace_propagation_headers` (#2240)
jpnurmi Oct 26, 2026
e42bdcb
test: add e2e test for trace propagation (#2243)
jpnurmi Oct 26, 2026
5c72012
chore: promote `http_retry` to stable (#2246)
jpnurmi Oct 26, 2026
4bac98a
perf(scope): avoid unnecessary empty value clones (#2251)
jpnurmi Oct 27, 2026
34b5f37
feat: report host OS context under Wine, Proton and Linux containers …
tustanivsky Oct 27, 2026
c42fe2b
Merge remote-tracking branch 'origin/master' into v1
jpnurmi Oct 29, 2026
5d930d5
feat(native): support ELF modules at non-zero file offsets (#2265)
jpnurmi Oct 29, 2026
fe65354
feat(unwinder): Unwind remote threads with libunwindstack (#2267)
jpnurmi Oct 29, 2026
f815b40
feat(native): support preloading the crash handler (#2268)
jpnurmi Oct 29, 2026
a4a98f3
fix(native): Consume the preload state when a signal falls through
jpnurmi Oct 29, 2026
bfdd59a
fix(native): Skip stack reads for threads without registers
jpnurmi Oct 29, 2026
f15b5e6
feat(native): Support the chain-at-start handler strategy on Android …
jpnurmi Oct 29, 2026
76ed3a8
feat(linux): RISC-V support (#2232)
jpnurmi Oct 29, 2026
79c6494
feat: Add pkg-config support (#1411)
nmandelblit Oct 29, 2026
341a1c2
test: Skip the pkg-config test on Android
jpnurmi Oct 30, 2026
602bdfa
feat(tus): resumable uploads (#2058)
jpnurmi Nov 3, 2026
9c97815
feat(tus): gzip upload chunks with transport compression (#2222)
jpnurmi Nov 3, 2026
ad4bbc5
fix(curl): Stop file uploads at the request body length
jpnurmi Nov 3, 2026
2de9083
Merge remote-tracking branch 'origin/master' into v1
jpnurmi Nov 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions .craft.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,23 @@ changelogPolicy: auto
targets:
- name: github
includeNames: /^(sentry-native).*\.zip$/
excludeNames: /^sentry-native\.zip$/
- name: registry
sdks:
github:getsentry/sentry-native:
maven:io.sentry:sentry-native-ndk:
- name: gcs
includeNames: /^(sentry-native\.zip)$/
includeNames: /^sentry-native-\d+\.\d+\.\d+.*\.zip$/
bucket: sentry-sdk-assets
paths:
- path: /sentry-native/{{version}}/
metadata:
cacheControl: public, max-age=2592000
- name: gcs
id: latest
includeNames: /^sentry-native\.zip$/
bucket: sentry-sdk-assets
paths:
- path: /sentry-native/latest/
metadata:
cacheControl: public, max-age=600
Expand All @@ -32,4 +38,5 @@ targets:
batchType: android
bundleIdPrefix: sentry-native-ndk-
requireNames:
- /^sentry-native.zip$/
- /^sentry-native-\d+\.\d+\.\d+.*\.zip$/
- /^sentry-native\.zip$/
3 changes: 2 additions & 1 deletion .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- master
- v1
paths-ignore:
- "*.md"
pull_request:
Expand Down Expand Up @@ -59,5 +60,5 @@ jobs:
tool: customSmallerIsBetter
output-file-path: benchmark.json
github-token: ${{ secrets.GITHUB_TOKEN }}
benchmark-data-dir-path: ./
benchmark-data-dir-path: ${{ github.ref_name == 'v1' && 'v1/' || './' }}
auto-push: true
49 changes: 43 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,18 @@ jobs:
CC: gcc-9
CXX: g++-9
TEST_X86: 1
- name: Linux Arm32 (gcc-arm-linux-gnueabihf + qemu-user)
- name: Linux Arm32 (cross-GCC + QEMU)
os: ubuntu-24.04-arm
CC: arm-linux-gnueabihf-gcc
CXX: arm-linux-gnueabihf-g++
TEST_ARM32: 1
TEST_QEMU: 1
- name: Linux RISC-V (cross-GCC + QEMU)
os: ubuntu-24.04-arm
CC: riscv64-linux-gnu-gcc
CXX: riscv64-linux-gnu-g++
TEST_RISCV: 1
TEST_QEMU: 1
- name: Linux (GCC 9.5.0)
os: ubuntu-24.04
CC: gcc-9
Expand Down Expand Up @@ -260,6 +266,7 @@ jobs:
TEST_MINGW: ${{ matrix.TEST_MINGW }}
TEST_WINE: ${{ matrix.TEST_WINE }}
TEST_ARM32: ${{ matrix.TEST_ARM32 }}
TEST_RISCV: ${{ matrix.TEST_RISCV }}
TEST_QEMU: ${{ matrix.TEST_QEMU }}
TEST_SYSTEM_PROXY: ${{ matrix.TEST_SYSTEM_PROXY }}
USE_SCCACHE: ${{ matrix.USE_SCCACHE }}
Expand Down Expand Up @@ -297,7 +304,7 @@ jobs:
[ -n "$CC" ] && [ -n "$CXX" ] || { echo "Ubuntu runner configurations require toolchain selection via CC and CXX" >&2; exit 1; }

- name: Installing Linux Dependencies
if: ${{ runner.os == 'Linux' && !env['TEST_X86'] && !env['TEST_ARM32'] && !env['ANDROID_API'] && !matrix.container }}
if: ${{ runner.os == 'Linux' && !env['TEST_X86'] && !env['TEST_ARM32'] && !env['TEST_RISCV'] && !env['ANDROID_API'] && !matrix.container }}
run: |
sudo apt update
# Install common dependencies
Expand Down Expand Up @@ -368,11 +375,29 @@ jobs:
libstdc++6:armhf

- name: Installing qemu-user
if: ${{ runner.os == 'Linux' && env['TEST_QEMU'] && !matrix.container }}
if: ${{ runner.os == 'Linux' && env['TEST_ARM32'] && !matrix.container }}
run: |
sudo apt update
sudo apt install -y qemu-user-static binfmt-support

- name: Installing Linux RISC-V Dependencies
if: ${{ runner.os == 'Linux' && env['TEST_RISCV'] && !matrix.container }}
run: |
sudo dpkg --add-architecture riscv64
sudo apt-get update
sudo apt-get install -y \
cmake \
gcc-riscv64-linux-gnu g++-riscv64-linux-gnu \
zlib1g-dev:riscv64 libssl-dev:riscv64 \
libcurl4-openssl-dev:riscv64 liblzma-dev:riscv64 \
libstdc++6:riscv64
echo "PKG_CONFIG_LIBDIR=/usr/lib/riscv64-linux-gnu/pkgconfig:/usr/share/pkgconfig" >> "$GITHUB_ENV"

- uses: docker/setup-qemu-action@99012661954931238ded8c8b007157a8430204e1 # v4.4.0
if: ${{ runner.os == 'Linux' && env['TEST_RISCV'] && !matrix.container }}
with:
platforms: riscv64

- name: Installing Alpine Linux Dependencies
if: ${{ contains(matrix.container, 'alpine') }}
run: |
Expand Down Expand Up @@ -501,21 +526,29 @@ jobs:

- name: Test (Android)
if: ${{ env['ANDROID_API'] }}
id: android-test
continue-on-error: ${{ env.ANDROID_BOOTED != 'true' }}
uses: reactivecircus/android-emulator-runner@a421e43855164a8197daf9d8d40fe71c6996bb0d # v2.38.0
with:
with: &android-options
api-level: ${{ env.ANDROID_API }}
ndk: ${{ env.ANDROID_NDK }}
arch: ${{ env.ANDROID_ARCH }}
target: google_apis
target: default
emulator-boot-timeout: 1200
script: |
echo "ANDROID_BOOTED=true" >> "$GITHUB_ENV"
# Sync emulator clock with host to avoid timestamp assertion failures
adb shell cmd alarm set-time $(date +%s000) || adb shell su root date $(date -u +%m%d%H%M%Y.%S)
scripts/setup-android-sanitizer.sh "$RUN_ANALYZER"
pip install --upgrade --requirement tests/requirements.txt
pytest --capture=no --verbose tests
(cd ndk && ./gradlew :sentry-native-ndk:connectedDebugAndroidTest --stacktrace)

- name: Retry emulator (Android)
if: ${{ steps.android-test.outcome == 'failure' && env.ANDROID_BOOTED != 'true' }}
Comment thread
jpnurmi marked this conversation as resolved.
Resolved
uses: reactivecircus/android-emulator-runner@a421e43855164a8197daf9d8d40fe71c6996bb0d # v2.38.0
with: *android-options

- name: Test
if: ${{ !env['ANDROID_API'] }}
shell: bash
Expand Down Expand Up @@ -585,8 +618,11 @@ jobs:

- name: Create source archive
run: |
version=$(sed -nE 's/^#[[:space:]]*define[[:space:]]+SENTRY_SDK_VERSION[[:space:]]+"([^"]+)".*/\1/p' include/sentry.h)
test -n "$version"
rm -rf build .c* .e* .git* scripts Makefile external/breakpad/src/tools external/breakpad/src/processor
zip -r sentry-native.zip .
zip -r "sentry-native-$version.zip" .
cp "sentry-native-$version.zip" sentry-native.zip

- name: Build NDK artifacts
working-directory: ndk
Expand All @@ -598,6 +634,7 @@ jobs:
name: ${{ github.sha }}
if-no-files-found: error
path: |
sentry-native-*.zip
sentry-native.zip
ndk/lib/build/distributions/*.zip
ndk/lib/build/intermediates/merged_native_libs/release/mergeReleaseNativeLibs/out/lib/*
4 changes: 2 additions & 2 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ name: 'CodeQL'

on:
push:
branches: [master]
branches: [master, v1]
pull_request:
# The branches below must be a subset of the branches above
branches: [master]
branches: [master, v1]
schedule:
- cron: '17 23 * * 3'

Expand Down
17 changes: 16 additions & 1 deletion .github/workflows/console-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,20 @@ jobs:
echo "mode=BUILD_ONLY" >> "$GITHUB_OUTPUT"
fi

- name: Resolve console branch
id: ref
env:
GH_TOKEN: ${{ github.token }}
SHA: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
ahead() { gh api "repos/$GITHUB_REPOSITORY/compare/$1...$SHA?per_page=1" --jq .ahead_by; }
ref=main nearest=$(ahead master)
# version branches build against the same console branch
for branch in v1; do
if n=$(ahead "$branch" 2>/dev/null) && [[ $n -lt $nearest ]]; then ref=$branch nearest=$n; fi
done
Comment thread
jpnurmi marked this conversation as resolved.
Resolved
echo "console_ref=$ref" >> "$GITHUB_OUTPUT"

# gh workflow run sends a workflow_dispatch event to the console repo.
# native-compat-check.yml must exist on the default branch (main) of
# the console repo for this to work.
Expand All @@ -84,11 +98,12 @@ jobs:
CALLBACK_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
CALLBACK_CONTEXT: ${{ matrix.context }}
MODE: ${{ steps.mode.outputs.mode }}
CONSOLE_REF: ${{ steps.ref.outputs.console_ref }}
PR_NUMBER: ${{ github.event.pull_request.number || github.ref_name }}
run: |
gh workflow run native-compat-check.yml \
--repo "$MATRIX_REPO" \
--ref main \
--ref "$CONSOLE_REF" \
-f native_ref="$NATIVE_REF" \
-f callback_repo="$CALLBACK_REPO" \
-f callback_sha="$CALLBACK_SHA" \
Expand Down
7 changes: 6 additions & 1 deletion .github/workflows/e2e-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,12 @@ jobs:
if: runner.os == 'Linux'
run: |
sudo apt update
sudo apt install -y cmake libcurl4-openssl-dev
sudo apt install -y cmake libcurl4-openssl-dev zlib1g-dev

- name: Set up zlib for Windows
if: runner.os == 'Windows'
shell: powershell
run: . "scripts\install-zlib.ps1"

- name: Set up Python
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/enforce-license-compliance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
push:
branches: [master, main, release/*]
pull_request:
branches: [master, main]
branches: [master, main, v1]

jobs:
enforce-license-compliance:
Expand Down
45 changes: 45 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,50 @@
# Changelog

## Unreleased (v1)

**Breaking / Important behavior changes**:

- The `native` backend is now the default on Linux, macOS, and Windows. ([#2186](https://github.com/getsentry/sentry-native/pull/2186))
- macOS/Linux: shared libraries now use ABI-versioned filenames, such as `libsentry.1.dylib` or `libsentry.so.1` for 1.x. Windows, Android, and static libraries remain unchanged. ([#2103](https://github.com/getsentry/sentry-native/pull/2103))
- NOTE: Applications must package the real versioned library and its symlinks, including `libsentry.1.dylib` or `libsentry.so.1`, because they link to and load the ABI-versioned name.
- Release archives now include the SDK version in the filename, such as `sentry-native-1.0.0.zip`. ([#2105](https://github.com/getsentry/sentry-native/pull/2105))
- Remove deprecated APIs. Migrate to the following alternatives: ([#2230](https://github.com/getsentry/sentry-native/pull/2230))
- `sentry_new_function_transport`: use `sentry_transport_new` and `sentry_transport_set_state`. The send callback now receives a mutable envelope, takes ownership of it, and must free it with `sentry_envelope_free`.
- `sentry_event_value_add_stacktrace`: create a thread with `sentry_value_new_thread`, set its stack with `sentry_value_set_stacktrace`, and add it to the event with `sentry_event_add_thread`.
- `sentry_shutdown`: use `sentry_close`.
- `sentry_sdk_name` and `sentry_sdk_user_agent`: use `sentry_options_get_sdk_name` and `sentry_options_get_user_agent`, or `SENTRY_SDK_NAME` and `SENTRY_SDK_USER_AGENT` for build-time values.
- `sentry_options_set_http_proxy` and `sentry_options_set_http_proxy_n`: use `sentry_options_set_proxy` and `sentry_options_set_proxy_n`.
- `sentry_value_new_user_feedback` and `sentry_value_new_user_feedback_n`: use `sentry_value_new_feedback` and `sentry_value_new_feedback_n`. The constructor arguments are now message, contact email, name, and associated event ID, with lengths following each string in the `_n` variant.
- `sentry_capture_user_feedback`: use `sentry_capture_feedback`.
- `sentry_options_add_view_hierarchy`, `sentry_options_add_view_hierarchy_n`, `sentry_options_add_view_hierarchyw`, and `sentry_options_add_view_hierarchyw_n`: create an attachment with `sentry_attachment_from_file` or its `_n`/wide-string variants, set its type to `SENTRY_ATTACHMENT_TYPE_VIEW_HIERARCHY` with `sentry_attachment_set_type`, and add it with `sentry_add_attachment`. For startup configuration, use `sentry_scope_add_attachment` in a `sentry_options_set_initial_scope` callback.
- `sentry_capture_event_with_scope(event, scope)`: use `sentry_scope_capture_event(scope, event, NULL)`.
- `sentry_clear_crashed_last_run`: remove the call. `sentry_init` clears the crash marker automatically.
- `sentry_regenerate_trace`: use `sentry_start_new_trace`.

**Features**:

- Add `sentry_scope_begin_read`/`sentry_scope_end_read` and `sentry_scope_begin_write`/`sentry_scope_end_write` for consistent reads of multiple scope properties and applying multiple scope changes with a single scope flush. ([#2107](https://github.com/getsentry/sentry-native/pull/2107))
- Add `sentry_scope_acquire` and `sentry_scope_release` to access the isolation scope. ([#2160](https://github.com/getsentry/sentry-native/pull/2160))
- Native: Provide exception metadata, registers, and a basic crashing-thread stack to `on_crash` for crash identification. ([#2174](https://github.com/getsentry/sentry-native/pull/2174))
- Native: reduce disk I/O on scope changes by sending incremental updates to the crash daemon over IPC. ([#2155](https://github.com/getsentry/sentry-native/pull/2155), [#2157](https://github.com/getsentry/sentry-native/pull/2157))
- Add pkg-config support for shared builds. ([#1411](https://github.com/getsentry/sentry-native/pull/1411))
- Native: install handlers for the daemon's own fatal signals and unhandled exceptions, allowing best-effort recovery actions such as dumping pending envelopes before termination. ([#2220](https://github.com/getsentry/sentry-native/pull/2220))
- Linux: add RISC-V 64 support. ([#2232](https://github.com/getsentry/sentry-native/pull/2232))
- Report the host OS in the OS context under Wine and Proton, instead of the Windows version that Wine emulates. On Linux, prefer the host `os-release` inside Steam Runtime and Flatpak containers, and report SteamOS and Bazzite as the OS name. ([#2241](https://github.com/getsentry/sentry-native/pull/2241))
- Add `sentry_scope_set_trace` for per-scope traces. ([#2236](https://github.com/getsentry/sentry-native/pull/2236))
- Add `sentry_continue_trace` to continue incoming traces without a transaction. ([#2237](https://github.com/getsentry/sentry-native/pull/2237))
- Add `sentry_iter_trace_propagation_headers` to propagate traces without a span. ([#2240](https://github.com/getsentry/sentry-native/pull/2240))
- Resume interrupted TUS attachment uploads from the server-provided upload offset. ([#2058](https://github.com/getsentry/sentry-native/pull/2058))
- Compress TUS attachment uploads when `SENTRY_TRANSPORT_COMPRESSION` is enabled. ([#2222](https://github.com/getsentry/sentry-native/pull/2222))

**Fixes**:

- Native/Inproc: provide `debug_meta.images` in events passed to `on_crash`. ([#2184](https://github.com/getsentry/sentry-native/pull/2184))
- Native/Linux: reduce daemon stack usage during minidump creation to avoid stack overflows in environments with limited stack space. ([#2211](https://github.com/getsentry/sentry-native/pull/2211))
- Native/Linux: reduce stack usage when unwinding the crashed thread. ([#2212](https://github.com/getsentry/sentry-native/pull/2212))
- Native/Unix: Preserve existing alternate signal stacks to prevent ASan aborts when the initializing thread exits before SDK shutdown. ([#2219](https://github.com/getsentry/sentry-native/pull/2219))
- Native/Linux: fix oversized `debug_meta.images` entries that overlapped other libraries when a file was mapped more than once. ([#2228](https://github.com/getsentry/sentry-native/pull/2228))

## Unreleased

**Features**:
Expand Down
Loading
Loading