Releases: tarantool/tarantool
3.6.3
3.6.3
Date: 2026-05-25
Tag: 3.6.3
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release resolves 36 bugs since 3.6.2.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Tools
Introduced the misc.memprof.available and misc.sysprof.available flags to
determine whether the corresponding profiler is available for the current
Tarantool build (gh-12215).
Bugs fixed
Core
- Fixed a bug where
box.ctl.promote()returned before the instance became
writable (gh-10040). - Fixed a bug where
.xlog.inprogressfiles were not automatically deleted
during server startup if thewal_dirvalue was not the default (gh-12081). - Fixed a bug where a local space could not be truncated when the
_truncate
space was synchronous (gh-12585). - Connections introduced using
box.session.new()are no longer
dropped in the isolated mode (gh-12479).
Replication
- Fixed a bug where the replication could get stuck upon receipt
of a 'promote' entry from a newly elected leader. This was
likely to happen when the receiver itself had been a leader not
long ago and still had some transactions in the synchro queue
not yet written to the journal (gh-12205). - Fixed a bug where a replica on subscribe could get stuck in the
syncstate
for the duration ofreplication.timeout. This issue was observable in
box.info.replication[...].upstreamand could lead to temporary
inconveniences, such as the inability to runbox.ctl.promote()(when
election_modewas notoff) (gh-12025).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-12134). The following
issues were fixed as part of this activity:
- Added
ffi.abi("dualnum"). - Fixed stack checks in varargs calls in the GC64 build.
- Fixed stack checks in
pcall()/xpcall()in the GC64 build. - Fixed the allocation limit for the no-JIT build.
- Fixed handling of OOM errors on stack resizing in
coroutine.resume()and
lua_checkstack(). - Fixed recording of loops with a
-0stepvalue orNaNcontrol values. - Fixed error reporting when an error occurs during error handling.
- Fixed a dangling reference for FFI callbacks.
- Fixed
BC_UNMfor a-0argument in the dual-number mode. - Fixed narrowing of unary minus in the dual-number mode.
- Fixed recording of
string.byte(),string.sub(), andstring.find(). - Fixed missing type conversion for
BC_FORIslots in the dual-number mode. - Fixed various corner cases in VM events.
- Fixed constructor index resolution recording in the JIT compiler.
- Fixed a UBSan warning in
unpack(). - Fixed snapshot purge while recording a function header.
SQL
- Fixed an integer overflow in the SQL built-in function PRINTF
(ghs-161). - Fixed a segfault in the SQL built-in function REPLACE
(ghs-160). - Removed the non-working ON CONFLICT clause for the NULL property
in column definitions within CREATE TABLE statements (gh-12701).
Config
- Fixed a startup failure when a Tarantool 3.x instance configured via
the declarative config joined a 2.x replica set, where the master had
no instance or replica set names stored in its snapshot (gh-10426). - Fixed a bug in the supervised bootstrap strategy when a replica could hang on
startup while joining an already bootstrapped replica set (gh-11318).
Datetime
- Fixed an assertion failure on an ambiguous case where day of year (
yday,
which defines calendar month and month day implicitly) and calendar month
(without a month day) were both defined in the date text. Now such case is
detected and an error is thrown (gh-11347). - Fixed
tzoffsetcalculations for cases likenew({timestamp=x, tz='Zone'})
(gh-12412). - Fixed inconsistency between dates produced by
new({tzoffset=x})
andd:set({tzoffset=x})whered.tz ~= ''comes beforeset()
(gh-7680, gh-12416). - Now
datetime.new()anddatetime_object:set()
check the timestamp value to be in the valid range (gh-12147). - Fixed timestamp type checking in
set().
For backward compatibility thecompat.datetime_setfn_timestamp_type_check
option has been introduced. It's disabled by default for now ('old' behavior),
which means no type check is performed. The 'new' behavior (with type check)
is planned to be set as the default in version 4.x (gh-12411). - Fixed corruption of a datetime object by the
set()function
when an error occurs (gh-12171).
Election
- Fixed a bug where a newly elected leader could become writable (
box.info.ro
isfalse) immediately afterbox.info.election.state == 'leader'but before
it claimed the synchronous transactions queue (box.info.synchro.queue.owner
is not this node). This could occur only when the synchronous queue was
previously unclaimed, which typically happens on cluster startup (gh-12333). - Fixed a bug where a replica could crash or exhibit undefined behavior when
the election leader sent this replica a synchronous replication control
command (promotion or demotion), but the replica received it just before
performing a cascading journal rollback. This could happen if the
wal.queue_max_sizesetting was reached (gh-12557).
Uri
- Fixed a Use-After-Poison crash in
uri.format()caused by a long
URI (ghs-151).
3.5.2
3.5.2
Date: 2026-05-25
Tag: 3.5.2
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release resolves 49 bugs since 3.5.1.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Tools
Introduced the misc.memprof.available and misc.sysprof.available flags to
determine whether the corresponding profiler is available for the current
Tarantool build (gh-12215).
Bugs fixed
Core
- Tarantool does not rename user threads anymore (gh-12175).
- Fixed a crash that could happen if two DDL operations (index build or space
format change) were executed on the same space and a WAL write error occurred
(gh-11833). - Fixed a bug when function IDs grew monotonously, resulting in an overflow
after some amount of function modifications, even if the total number of
functions was constant (gh-11849, gh-11851). - Fixed performance degradation when updating space format or dropping a
space due to inefficient tuple dictionary cleanup (gh-12115). - Fixed a crash with transactional trigger on the
_spacespace (gh-11766). - Fixed a bug where
box.ctl.promote()returned before the instance became
writable (gh-10040). - Fixed a bug where
.xlog.inprogressfiles were not automatically deleted
during server startup if thewal_dirvalue was not the default (gh-12081). - Fixed a bug where a local space could not be truncated when the
_truncate
space was synchronous (gh-12585).
Vinyl
- Fixed a bug when the dump task scheduler was not unthrottled by
box.snapshot()(gh-12342). - Fixed a bug when Tarantool crashed instead of raising an error in case it
failed to apply an upsert statement
(ghs-158).
Replication
- Fixed two related bugs when concurrent
box.ctl.promoteinvocations with
box.cfg.election_mode = 'manual'would crash during (gh-11703) or after
(gh-11708) server configuration viabox.cfg. - Fixed a bug where a replica on subscribe could get stuck in the
syncstate
for the duration ofreplication.timeout. This issue was observable in
box.info.replication[...].upstreamand could lead to temporary
inconveniences, such as the inability to runbox.ctl.promote()(when
election_modewas notoff) (gh-12025). - Fixed a bug where the replication could get stuck upon receipt
of a 'promote' entry from a newly elected leader. This was
likely to happen when the receiver itself had been a leader not
long ago and still had some transactions in the synchro queue
not yet written to the journal (gh-12205).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-11691, gh-12134).
The following issues were fixed as part of this activity:
- Fixed incorrect emitting for
IR_TBARon aarch64. - Fixed stack overflow handling for the trace exit.
- Fixed dangling
CTypereferences. - Fixed closing VM state after early OOM.
- Fixed emitting for
IR_MULon x86/x64. - Fixed incorrect
stp/ldpinstructions fusion on aarch64. - Fixed SCEV entry invalidation when returning to a lower frame.
- Fixed macOS 15 / Clang 16 build.
- Fixed emitting for
IR_HREFKon aarch64. - Added
ffi.abi("dualnum"). - Fixed stack checks in varargs calls in the GC64 build.
- Fixed stack checks in
pcall()/xpcall()in the GC64 build. - Fixed the allocation limit for the no-JIT build.
- Fixed handling of OOM errors on stack resizing in
coroutine.resume()and
lua_checkstack(). - Fixed recording of loops with a
-0stepvalue orNaNcontrol values. - Fixed error reporting when an error occurs during error handling.
- Fixed a dangling reference for FFI callbacks.
- Fixed
BC_UNMfor a-0argument in the dual-number mode. - Fixed narrowing of unary minus in the dual-number mode.
- Fixed recording of
string.byte(),string.sub(), andstring.find(). - Fixed missing type conversion for
BC_FORIslots in the dual-number mode. - Fixed various corner cases in VM events.
- Fixed constructor index resolution recording in the JIT compiler.
- Fixed a UBSan warning in
unpack(). - Fixed snapshot purge while recording a function header.
SQL
- Fixed an issue where no error message would appear when creating
a view with duplicate column names (gh-4545).
Config
- Fixed a startup failure when a Tarantool 3.x instance configured via
the declarative config joined a 2.x replica set, where the master had
no instance or replica set names stored in its snapshot (gh-10426). - Fixed a bug in the supervised bootstrap strategy when a replica could hang on
startup while joining an already bootstrapped replica set (gh-11318).
Datetime
- Fixed an assertion failure on an ambiguous case where day of year (
yday,
which defines calendar month and month day implicitly) and calendar month
(without a month day) were both defined in the date text. Now such case is
detected and an error is thrown (gh-11347). - Fixed
tzoffsetcalculations for cases likenew({timestamp=x, tz='Zone'})
(gh-12412). - Fixed inconsistency between dates produced by
new({tzoffset=x})
andd:set({tzoffset=x})whered.tz ~= ''comes beforeset()
(gh-7680, gh-12416). - Now
datetime.new()anddatetime_object:set()
check the timestamp value to be in the valid range (gh-12147). - Fixed timestamp type checking in
set().
For backward compatibility thecompat.datetime_setfn_timestamp_type_check
option has been introduced. It's disabled by default for now ('old' behavior),
which means no type check is performed. The 'new' behavior (with type check)
is planned to be set as the default in version 4.x (gh-12411). - Fixed corruption of a datetime object by the
set()function
when an error occurs (gh-12171).
Election
- Fixed a bug where a newly elected leader could become writable (
box.info.ro
isfalse) immediately afterbox.info.election.state == 'leader'but before
it claimed the synchronous transactions queue (box.info.synchro.queue.owner
is not this node). This could occur only when the synchronous queue was
previously unclaimed, which typically happens on cluster startup (gh-12333). - Fixed a bug where a replica could crash or exhibit undefined behavior when
the election leader sent this replica a synchronous replication control
command (promotion or demotion), but the replica received it just before
performing a cascading journal rollback. This could happen if the
wal.queue_max_sizesetting was reached (gh-12557).
3.3.5
3.3.5
Date: 2026-05-25
Tag: 3.3.5
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release resolves 49 bugs since 3.3.4.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Tools
Introduce the misc.memprof.available and misc.sysprof.available flags to
determine whether the corresponding profiler is available for the current
Tarantool build (gh-12215).
Bugs fixed
Core
- Tarantool does not rename user threads anymore (gh-12175).
- Fixed a crash that could happen if two DDL operations (index build or space
format change) were executed on the same space and a WAL write error occurred
(gh-11833). - Fixed a bug when function IDs grew monotonously, resulting in an overflow
after some amount of function modifications, even if the total number of
functions was constant (gh-11849, gh-11851). - Fixed performance degradation when updating space format or dropping a
space due to inefficient tuple dictionary cleanup (gh-12115). - Fixed a crash with transactional trigger on the
_spacespace (gh-11766). - Fixed a bug where
box.ctl.promote()returned before the instance became
writable (gh-10040). - Fixed a bug where
.xlog.inprogressfiles were not automatically deleted
during server startup if thewal_dirvalue was not the default (gh-12081). - Fixed a bug where a local space could not be truncated when the
_truncate
space was synchronous (gh-12585).
Vinyl
- Fixed a bug when the dump task scheduler was not unthrottled by
box.snapshot()(gh-12342). - Fixed a bug when Tarantool crashed instead of raising an error in case it
failed to apply an upsert statement
(ghs-158).
Replication
- Fixed two related bugs when concurrent
box.ctl.promoteinvocations with
box.cfg.election_mode = 'manual'would crash during (gh-11703) or after
(gh-11708) server configuration viabox.cfg. - Fixed a bug where a replica on subscribe could get stuck in the
syncstate
for the duration ofreplication.timeout. This issue was observable in
box.info.replication[...].upstreamand could lead to temporary
inconveniences, such as the inability to runbox.ctl.promote()(when
election_modewas notoff) (gh-12025). - Fixed a bug where the replication could get stuck upon receipt
of a 'promote' entry from a newly elected leader. This was
likely to happen when the receiver itself had been a leader not
long ago and still had some transactions in the synchro queue
not yet written to the journal (gh-12205).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-11691, gh-12134).
The following issues were fixed as part of this activity:
- Fixed incorrect emitting for
IR_TBARon aarch64. - Fixed stack overflow handling for the trace exit.
- Fixed dangling
CTypereferences. - Fixed closing VM state after early OOM.
- Fixed emitting for
IR_MULon x86/x64. - Fixed incorrect
stp/ldpinstructions fusion on aarch64. - Fixed SCEV entry invalidation when returning to a lower frame.
- Fixed macOS 15 / Clang 16 build.
- Fixed emitting for
IR_HREFKon aarch64. - Added
ffi.abi("dualnum"). - Fixed stack checks in varargs calls in the GC64 build.
- Fixed stack checks in
pcall()/xpcall()in the GC64 build. - Fixed the allocation limit for the no-JIT build.
- Fixed handling of OOM errors on stack resizing in
coroutine.resume()and
lua_checkstack(). - Fixed recording of loops with a
-0stepvalue orNaNcontrol values. - Fixed error reporting when an error occurs during error handling.
- Fixed a dangling reference for FFI callbacks.
- Fixed
BC_UNMfor a-0argument in the dual-number mode. - Fixed narrowing of unary minus in the dual-number mode.
- Fixed recording of
string.byte(),string.sub(), andstring.find(). - Fixed missing type conversion for
BC_FORIslots in the dual-number mode. - Fixed various corner cases in VM events.
- Fixed constructor index resolution recording in the JIT compiler.
- Fixed a UBSan warning in
unpack(). - Fixed snapshot purge while recording a function header.
SQL
- Fixed an issue where no error message would appear when creating
a view with duplicate column names (gh-4545).
Config
- Fixed a startup failure when a Tarantool 3.x instance configured via
the declarative config joined a 2.x replica set, where the master had
no instance or replica set names stored in its snapshot (gh-10426). - Fixed a bug in the supervised bootstrap strategy when a replica could hang on
startup while joining an already bootstrapped replica set (gh-11318).
Datetime
- Fixed an assertion failure on an ambiguous case where day of year (
yday,
which defines calendar month and month day implicitly) and calendar month
(without a month day) were both defined in the date text. Now such case is
detected and an error is thrown (gh-11347). - Fixed
tzoffsetcalculations for cases likenew({timestamp=x, tz='Zone'})
(gh-12412). - Fixed inconsistency between dates produced by
new({tzoffset=x})
andd:set({tzoffset=x})whered.tz ~= ''comes beforeset()
(gh-7680, gh-12416). - Now
datetime.new()anddatetime_object:set()
check the timestamp value to be in the valid range (gh-12147). - Fixed timestamp type checking in
set().
For backward compatibility thecompat.datetime_setfn_timestamp_type_check
option has been introduced. It's disabled by default for now ('old' behavior),
which means no type check is performed. The 'new' behavior (with type check)
is planned to be set as the default in version 4.x (gh-12411). - Fixed corruption of a datetime object by the
set()function
when an error occurs (gh-12171).
Election
- Fixed a bug where a newly elected leader could become writable (
box.info.ro
isfalse) immediately afterbox.info.election.state == 'leader'but before
it claimed the synchronous transactions queue (box.info.synchro.queue.owner
is not this node). This could occur only when the synchronous queue was
previously unclaimed, which typically happens on cluster startup (gh-12333). - Fixed a bug where a replica could crash or exhibit undefined behavior when
the election leader sent this replica a synchronous replication control
command (promotion or demotion), but the replica received it just before
performing a cascading journal rollback. This could happen if the
wal.queue_max_sizesetting was reached (gh-12557).
3.2.4
3.2.4
Date: 2026-05-25
Tag: 3.2.4
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release resolves 46 bugs since 3.2.3.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Tools
Introduce the misc.memprof.available and misc.sysprof.available flags to
determine whether the corresponding profiler is available for the current
Tarantool build (gh-12215).
Bugs fixed
Core
- Tarantool does not rename user threads anymore (gh-12175).
- Fixed a crash that could happen if two DDL operations (index build or space
format change) were executed on the same space and a WAL write error occurred
(gh-11833). - Fixed a bug when function IDs grew monotonously, resulting in an overflow
after some amount of function modifications, even if the total number of
functions was constant (gh-11849, gh-11851). - Fixed performance degradation when updating space format or dropping a
space due to inefficient tuple dictionary cleanup (gh-12115). - Fixed a crash with transactional trigger on the
_spacespace (gh-11766). - Fixed a bug where
box.ctl.promote()returned before the instance became
writable (gh-10040). - Fixed a bug where
.xlog.inprogressfiles were not automatically deleted
during server startup if thewal_dirvalue was not the default (gh-12081). - Fixed a bug where a local space could not be truncated when the
_truncate
space was synchronous (gh-12585).
Vinyl
- Fixed a bug when the dump task scheduler was not unthrottled by
box.snapshot()(gh-12342). - Fixed a bug when Tarantool crashed instead of raising an error in case it
failed to apply an upsert statement
(ghs-158).
Replication
- Fixed two related bugs when concurrent
box.ctl.promoteinvocations with
box.cfg.election_mode = 'manual'would crash during (gh-11703) or after
(gh-11708) server configuration viabox.cfg. - Fixed a bug where a replica on subscribe could get stuck in the
syncstate
for the duration ofreplication.timeout. This issue was observable in
box.info.replication[...].upstreamand could lead to temporary
inconveniences, such as the inability to runbox.ctl.promote()(when
election_modewas notoff) (gh-12025).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-11691, gh-12134).
The following issues were fixed as part of this activity:
- Fixed incorrect emitting for
IR_TBARon aarch64. - Fixed stack overflow handling for the trace exit.
- Fixed dangling
CTypereferences. - Fixed closing VM state after early OOM.
- Fixed emitting for
IR_MULon x86/x64. - Fixed incorrect
stp/ldpinstructions fusion on aarch64. - Fixed SCEV entry invalidation when returning to a lower frame.
- Fixed macOS 15 / Clang 16 build.
- Fixed emitting for
IR_HREFKon aarch64. - Added
ffi.abi("dualnum"). - Fixed stack checks in varargs calls in the GC64 build.
- Fixed stack checks in
pcall()/xpcall()in the GC64 build. - Fixed the allocation limit for the no-JIT build.
- Fixed handling of OOM errors on stack resizing in
coroutine.resume()and
lua_checkstack(). - Fixed recording of loops with a
-0stepvalue orNaNcontrol values. - Fixed error reporting when an error occurs during error handling.
- Fixed a dangling reference for FFI callbacks.
- Fixed
BC_UNMfor a-0argument in the dual-number mode. - Fixed narrowing of unary minus in the dual-number mode.
- Fixed recording of
string.byte(),string.sub(), andstring.find(). - Fixed missing type conversion for
BC_FORIslots in the dual-number mode. - Fixed various corner cases in VM events.
- Fixed constructor index resolution recording in the JIT compiler.
- Fixed a UBSan warning in
unpack(). - Fixed snapshot purge while recording a function header.
SQL
- Fixed an issue where no error message would appear when creating
a view with duplicate column names (gh-4545).
Config
- Fixed a bug in the supervised bootstrap strategy when a replica could hang on
startup while joining an already bootstrapped replica set (gh-11318). - Fixed a startup failure when a Tarantool 3.x instance configured via
the declarative config joined a 2.x replica set, where the master had
no instance or replica set names stored in its snapshot (gh-10426).
Datetime
- Fixed an assertion failure on an ambiguous case where day of year (
yday,
which defines calendar month and month day implicitly) and calendar month
(without a month day) were both defined in the date text. Now such case is
detected and an error is thrown (gh-11347). - Fixed
tzoffsetcalculations for cases likenew({timestamp=x, tz='Zone'})
(gh-12412). - Fixed inconsistency between dates produced by
new({tzoffset=x})
andd:set({tzoffset=x})whered.tz ~= ''comes beforeset()
(gh-7680, gh-12416). - Now
datetime.new()anddatetime_object:set()
check the timestamp value to be in the valid range (gh-12147). - Fixed timestamp type checking in
set().
For backward compatibility thecompat.datetime_setfn_timestamp_type_check
option has been introduced. It's disabled by default for now ('old' behavior),
which means no type check is performed. The 'new' behavior (with type check)
is planned to be set as the default in version 4.x (gh-12411). - Fixed corruption of a datetime object by the
set()function
when an error occurs (gh-12171).
2.11.9
2.11.9
Date: 2026-04-27
Tag: 2.11.9
Overview
2.x is the old stable release series. Users are encouraged to update to the
latest 3.x release.
This is a bugfix release. It resolves 34 issues since the previous
version.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in terms of binary data layout,
client-server protocol, and replication protocol. This means that upgrades can
be performed with zero downtime for read requests and the order-of-network-lag
downtime for write requests.
Please follow the upgrade procedure to plan your update actions.
Tools
Introduced the misc.memprof.available and misc.sysprof.available flags to
determine whether the corresponding profiler is available for the current
Tarantool build (gh-12215).
Bugs fixed
Core
- Fixed a bug when Tarantool could hang due to
box.watch(gh-9632). - Fixed a bug where
.xlog.inprogressfiles were not automatically deleted
during server startup whenwal_dirwas set to a non-default value (gh-12081). - Introduced the new built-in system event
box.wal_errorthat is broadcast
whenever Tarantool fails to commit a transaction to the write-ahead log
(gh-9405). - Fixed a bug where a local space could not be truncated when the
_truncate
space was synchronous (gh-12585).
Election
- The leader now resigns upon the first encounter with an
ER_WAL_IOwrite
error (gh-9399).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-11691, gh-12134). The
following issues were fixed as part of this activity:
- Fixed incorrect emission of
IR_TBARon aarch64. - Fixed stack overflow handling for trace exit.
- Fixed dangling
CTypereferences. - Fixed VM state closure after early OOM.
- Fixed emission of
IR_MULon x86/x64. - Fixed incorrect
stp/ldpinstructions fusion on aarch64. - Fixed SCEV entry invalidation when returning to a lower frame.
- Fixed builds on macOS 15 / Clang 16.
- Fixed emission of
IR_HREFKon aarch64. - Added
ffi.abi("dualnum"). - Fixed stack checks in varargs calls in the GC64 build.
- Fixed stack checks in
pcall()/xpcall()in the GC64 build. - Fixed the allocation limit for the no-JIT build.
- Fixed handling of OOM errors on stack resizing in
coroutine.resume()and
lua_checkstack(). - Fixed recording of loops with a
-0step value orNaNcontrol values. - Fixed error reporting when an error occurs during error handling.
- Fixed a dangling reference for FFI callbacks.
- Fixed
BC_UNMfor a-0argument in dual-number mode. - Fixed narrowing of unary minus in dual-number mode.
- Fixed recording of
string.byte(),string.sub(), andstring.find(). - Fixed missing type conversion for
BC_FORIslots in dual-number mode. - Fixed various corner cases in VM events.
- Fixed constructor index resolution recording in the JIT compiler.
- Fixed a UBSan warning in
unpack().
Datetime
- Fixed an assertion failure in an ambiguous case where both the day of year
(yday, which implicitly defines the calendar month and month day) and the
calendar month (without a month day) were defined in the date text. Such cases
are now detected and an error is thrown (gh-11347). - Fixed
tzoffsetcalculations for cases such asnew({timestamp=x, tz='Zone'})
(gh-12412). - Fixed inconsistency between dates produced by
new({tzoffset=x})
andd:set({tzoffset=x})whered.tz ~= ''comes beforeset()
(gh-7680, gh-12416). - Now
datetime.new()anddatetime_object:set()
check that the timestamp value is within the valid range (gh-12147). - Fixed timestamp type checking in
set()(gh-12411).
For backward compatibility, the `compat.datetime_setfn_timestamp_type_check``
option has been introduced. It's disabled by default for now ('old' behaviour),
which means no type check is performed. The 'new' behavior (with type check)
is planned to become the default in version 4.x.
3.7.0
3.7.0
Date: 2026-04-22
Tag: 3.7.0
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release introduces 11 improvements and resolves 29 bugs since 3.6.2.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Functionality added or changed
App
- Exposed new
tcp_server_createandtcp_server_loophandles to thesocket
module so a listening socket and accept loop can be driven from different
threads. The existingsocket.tcp_serverbehavior remains unchanged and
is equivalent to a pair oftcp_server_create(),tcp_server_loop()calls.
Core
- Introduced experimental support for application threads. Like the main thread
an application thread runs an event loop and has a Lua state with most
built-in modules available, but it cannot access the database directly.
Application threads are configured with the newthreadsconfiguration
option. For calling other threads, including the main thread, the new Lua
moduleexperimental.threadshas been added (gh-12206). - Usage of custom collations is now deprecated. Support for custom collations
is scheduled to be dropped in Tarantool 4.0. Newer Tarantool versions will
not recover if there are custom collations in the database (gh-12209). - Introduced
box.iproto.export()for exposing a Lua function toIPROTO_CALL
requests without polluting the global Lua namespace (gh-10036).
Replication
- Added the
replication.linearizable_quorumoption controlling the number of
replicas a node must synchronize with before performing a linearizable
transaction. The default value isN - Q + 1, whereNstands for the count
of replicas in the replica set andQis the evaluated
replication_synchro_quorumvalue. The same formula was used internally prior
to this change (gh-11876).
Config
- Now it is allowed to assign and delete nested fields inside schema nodes
of theanytype using deep paths (gh-10204). - Added
config:wait_status(statuses, [timeout])to wait until the instance
reaches one of the specified configuration statuses and returns the actual
status observed when the wait finishes (gh-12389). - Added the
envoption toconfig:get()to explicitly control whether
TT_*environment variables are taken into account (gh-9824).
Log
- With the
verboseoption enabled inhttp.client, libcurl debug logs
are now routed to the Tarantool log instead of stderr (gh-12392).
Metrics
-
Updated the
metricssubmodule to 1.7.0.Changes in 1.7.0:
-
graphite: Added an ability to send metrics to multiple servers.
Backward compatibility with previous plugin versions is preserved.
From now on, theinitmethod assigns a unique name to the created fiber
using the incoming graphite serveropts(if provided). Added a newstop()
method to stop all fibers started by the plugin (gh-540). -
Deleting a replica via
box.space._cluster:delete()no longer leaves
information about that replica in the metrics (it was only removed after
a cluster restart) (gh-538).
-
Tools
- Introduced the
misc.memprof.availableandmisc.sysprof.availableflags to
determine whether the corresponding profiler is available for the current
Tarantool build (gh-12215).
Bugs fixed
Core
- Fixed a bug where
.xlog.inprogressfiles were not automatically deleted
during server startup if thewal_dirvalue was not the default (gh-12081).
Vinyl
- Fixed
vinyl_memoryoverrun during recovery when the memory limit is lower
than at the previous start (gh-12390).
Replication
- Fixed a bug where replication could get stuck upon receipt of a 'promote'
entry from a newly elected leader. This was likely to happen when the receiver
itself had been a leader not long ago and still had some transactions in the
synchro queue not yet written to the journal (gh-12205). - Fixed a bug where a replica on subscribe could get stuck in the
syncstate
for the duration ofreplication.timeout. This issue was observable in
box.info.replication[...].upstreamand could lead to temporary
inconveniences, such as the inability to runbox.ctl.promote()(when
election_modewas notoff) (gh-12025).
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-12134). The following
issues were fixed as part of this activity:
- Added
ffi.abi("dualnum"). - Fixed stack checks in varargs calls in the GC64 build.
- Fixed stack checks in
pcall()/xpcall()in the GC64 build. - Fixed the allocation limit for the no-JIT build.
- Fixed handling of OOM errors on stack resizing in
coroutine.resume()and
lua_checkstack(). - Fixed recording of loops with a
-0stepvalue orNaNcontrol values. - Fixed error reporting when an error occurs during error handling.
- Fixed a dangling reference for FFI callbacks.
- Fixed
BC_UNMfor a-0argument in the dual-number mode. - Fixed narrowing of unary minus in the dual-number mode.
- Fixed recording of
string.byte(),string.sub(), andstring.find(). - Fixed missing type conversion for
BC_FORIslots in the dual-number mode. - Fixed various corner cases in VM events.
- Fixed constructor index resolution recording in the JIT compiler.
- Fixed a UBSan warning in
unpack(). - Fixed snapshot purge while recording a function header.
Config
- Fixed a startup failure when a Tarantool 3.x instance configured via
the declarative config joined a 2.x replica set, where the master had
no instance or replica set names stored in its snapshot (gh-10426). - Fixed a bug in the supervised bootstrap strategy when a replica could hang on
startup while joining an already bootstrapped replica set (gh-11318).
Datetime
- Fixed an assertion failure on an ambiguous case where day of year (
yday,
which defines calendar month and month day implicitly) and calendar month
(without a month day) were both defined in the date text. Now such case is
detected and an error is thrown (gh-11347). - Fixed
tzoffsetcalculations for cases likenew({timestamp=x, tz='Zone'})
(gh-12412). - Fixed inconsistency between dates produced by
new({tzoffset=x})
andd:set({tzoffset=x})whered.tz ~= ''comes beforeset()
(gh-7680, gh-12416). - Now
datetime.new()anddatetime_object:set()
check the timestamp value to be in the valid range (gh-12147).
Election
- Fixed a bug where a newly elected leader could become writable (
box.info.ro
isfalse) immediately afterbox.info.election.state == 'leader'but before
it claimed the synchronous transactions queue (box.info.synchro.queue.owner
is not this node). This could occur only when the synchronous queue was
previously unclaimed, which typically happens on cluster startup (gh-12333). - Fixed a bug where
box.ctl.promote()returned before the instance became
writable (gh-10040). - Fixed a bug where a replica could crash or exhibit undefined behavior when
the election leader sent this replica a synchronous replication control
command (promotion or demotion), but the replica received it just before
performing a cascading journal rollback. This could happen if the
wal.queue_max_sizesetting was reached (gh-12557).
3.6.2
3.6.2
Date: 2026-03-05
Tag: 3.6.2
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release resolves 4 bugs since 3.6.1.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Bugs fixed
Core
- Fixed a crash that could happen if two DDL operations (index build or space
format change) were executed on the same space and a WAL write error occurred
(gh-11833).
Vinyl
- Fixed a bug when the dump task scheduler was not unthrottled by
box.snapshot()(gh-12342). - Fixed a bug when Tarantool crashed instead of raising an error in case it
failed to apply an upsert statement.
SQL
- Fixed an issue where no error message would appear when creating
a view with duplicate column names (gh-4545).
3.6.1
3.6.1
Date: 2026-01-27
Tag: 3.6.1
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release resolves 3 bugs since 3.6.0.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Bugs fixed
Core
- Tarantool does not rename user threads anymore (gh-12175).
- Fixed a crash with a transactional trigger on the
_spacespace (gh-11766).
Metrics
-
Updated the metrics submodule to 1.6.2.
Changes in 1.6.2:
- The
errormessage level displayed when the/proc/<pid>/statfile is missing has been changed toverbose(gh-536).
- The
3.6.0
3.6.0
Date: 2025-12-12
Tag: 3.6.0
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release introduces 8 improvements and resolves 18 bugs since 3.5.1.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Functionality added or changed
Lua
-
Added a new Lua module -
ulid. -
Now the
interfaceparameter is available to be used with the
connectURI. It allows to specify the interface to bind the net.box connection to
(gh-11803). -
Updated the
metricssubmodule from 1.3.0 to 1.6.1.-
Added a new
schemametrics category with theschema_needs_upgrademetric, enabled by default
(gh-524) (gh-529). -
Added a new
memorymetric, enabled by default
(gh-519). -
Added a new
memory_virtmetric, enabled by default
(gh-521). -
Fixed possible
fio.readerrors
(gh-527). -
Added a new
label_keysparameter forcounter()andgauge()metrics
(gh-508).
-
Core
- Space and transactional triggers during recovery are now deprecated
(gh-11756). - Introduced the
box.schema.needs_upgradefunction checking if an
upgrade to a newer Tarantool schema version is required (gh-11877). - Sped up snapshot recovery by up to 70% by offloading MsgPack decoding to
a separate thread (gh-11888). - The
interfaceparameter can now be used inbox.cfg.replicationURIs.
It allows specifying the network interface to bind to for URI connections
(gh-11803). - Introduced new
grantandmetagrantprivileges. They're only grantable on
theuniverse. Thegrantprivilege allows a user to grant any privilege,
exceptinggrantandmetagrant, on an object, object class oruniverse.
Themetagrantallows to grantgrantandmetagrantprivileges. Both only
allow granting to other users, no granting to oneself is allowed by them (gh-11528).
Bugs fixed
Replication
- Fixed two related bugs when concurrent
box.ctl.promoteinvocations with
box.cfg.election_mode = 'manual'would crash during (gh-11703) or after
(gh-11708) server configuration viabox.cfg.
LuaJIT
Backported patches from the vanilla LuaJIT trunk (gh-11691). The following
issues were fixed as part of this activity:
- Fixed incorrect emitting for
IR_TBARon aarch64. - Fixed stack overflow handling for the trace exit.
- Fixed dangling
CTypereferences. - Fixed closing VM state after early OOM.
- Fixed emitting for
IR_MULon x86/x64. - Fixed incorrect
stp/ldpinstructions fusion on aarch64. - Fixed SCEV entry invalidation when returning to a lower frame.
- Fixed macOS 15 / Clang 16 build.
- Fixed emitting for
IR_HREFKon aarch64.
Core
- Users and roles defined in
credentials.*are now synchronized with the
config on reload and instance restart: users and roles removed from config
are dropped automatically, while manually created users and roles remain
untouched (gh-11827).
Manual action required: you have to run the following script
to ensure that all the users and roles are managed solely by the YAML
configuration. It allows to identify users/roles that are kept forever,
because created from Lua (or from configuration on Tarantool version less than
3.6.0), and decide whether to transfer the ownership to the YAML configuration
or finally delete them. - Added character filtering for syslog output according to RFC 3164: only SP
(%d32) and VCHAR (%d33-126) are allowed. Any character < 32 or > 126 is now
escaped (gh-12006). - Fixed a bug when a sequence name could be inaccessible to a user if he had an
access granted on the sequence by another user (gh-12088). - Fixed an invisibility of entries in the
_vuserspace view if a user had a
privilege on theuserentity granted (gh-12089). - Fixed a bug when object privileges could remain granted on revoke if they were
the last ones in the_priventry (gh-11528). - Fixed a bug when function IDs grew monotonously, resulting in an overflow
after some amount of function modifications, even if the total number of
functions was constant (gh-11849, gh-11851). - Fixed performance degradation when updating space format or dropping a
space due to inefficient tuple dictionary cleanup (gh-12115).
Config
- Template variables now expand inside
app.cfg.*androles_cfg.*
(anytype fields) (gh-10595).
3.5.1
3.5.1
Date: 2025-11-21
Tag: 3.5.1
Overview
Tarantool 3.x is the recommended release series. Users of Tarantool 2.11 are
encouraged to update to the latest 3.x release.
This release resolves 25 bugs since 3.5.0.
Please consider the full list of user-visible changes below.
Compatibility
Tarantool 2.x and 3.x are compatible in the binary data layout, client-server
protocol, and replication protocol. It means upgrade may be performed with zero
downtime for read requests and the order-of-network-lag downtime for write
requests.
Please follow the upgrade procedure to plan your update actions.
Users of Tarantool 2.x may be interested in the compat options that
allow to imitate some 2.x behavior. This allows to perform application code
update step-by-step, not all-at-once.
Bugs fixed
Core
- Transaction savepoint functions are now properly exported in the C API
(gh-11731). - Fixed a bug where
box.schema.downgradeto versions 2.11.5+ would erroneously
set schema version to 2.11.1 instead of 2.11.5 (gh-11204). - Fixed a bug when the instance hung during transition to RW
state after promotion with a quorum greater than the
number of registered instances in the replicaset. Now the
transition can be continued by reducing the
replication_synchro_quorumvalue (gh-11574). - Fixed a crash when a tuple field or key part of a fixed decimal type is
MP_NIL(gh-ee-1454). - Fixed an issue when
tostring()is applied to an error raised inside
box.atomic()(gh-11823). - Fixed an issue where the predefined
replicationrole was not treated
as a system role and therefore could be dropped or modified. Now it is
properly protected like other system roles (guest,admin,public,
super) (gh-11848). - Fixed a crash on reconnecting to syslog server (gh-11840).
- Fixed a crash when pagination was used on a
sysviewspace (gh-11953).
Memtx
- Fixed a crash on OOM on insertion in tree index of memtx engine (gh-11788).
- Fixed an MVCC bug when a transaction performing insert-after-delete
with the same primary key (for example,delete{4}followed by
insert{4, 3}) could create secondary key duplicates (gh-11686). - Fixed an MVCC bug when a transaction performing get-after-replace could
dirty-read nothing (gh-11687). - Fixed an MVCC bug that could lead to duplicates in secondary indexes
after a rollback (gh-11660). - Fixed an MVCC bug that could lead to dirty gap read in secondary indexes
after a rollback (gh-11802). - Fixed a crash when using the maximum allowed number of indexes with MVCC
enabled (gh-11929). - Fixed a crash when trying to use pagination along with the key
in RTREE indexes (gh-11963).
Vinyl
- Fixed a bug when a WAL write error could lead to the violation of a unique
constraint in a space with the enableddefer_deletesoption (gh-11969).
Replication
- Fixed a bug where
box.begin{txn_isolation = 'linearizable'}could crash when
the max size of the synchronous transactions queue was reached (the setting
box.cfg.replication_synchro_queue_max_size) (gh-11807). - Fixed a false-positive assertion failure that could occur when calling
box.ctl.make_bootstrap_leader()during recovery (gh-11704). - Fixed the election state corruption after an anonymous replica
becomes non-anonymous (gh-11938). - Fixed a bug where a node configured with
election_mode = 'off'would prevent
nodes withelection_mode = 'candidate'from starting new elections after the
leader death (gh-12018). - Fixed a bug where the replication downstream could get stuck when the replica
hadbox.cfg.replication_synchro_queue_max_sizeset to a smaller value than
the master (gh-11836). - Fixed a bug that a snapshot file could contain an outdated synchronous
replication's confirmation LSN or a term. That was only possible when the
synchronous replication was used (gh-11754).
Lua
- Fixed a bug when a lot of "Connection refused" messages were
printed in the log file when anet.boxconnection fails with
thereconnect_afteroption (gh-10506). - Fixed a bug that caused incorrect display of string uri
parameters in returned uri ofuri.format(gh-11820).
Config
- IPROTO SSL options can now be properly configured by specifying the
iproto.sslsection.