Skip to content

Releases: tarantool/tarantool

3.6.3

26 May 11:41

Choose a tag to compare

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.inprogress files were not automatically deleted
    during server startup if the wal_dir value 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 sync state
    for the duration of replication.timeout. This issue was observable in
    box.info.replication[...].upstream and could lead to temporary
    inconveniences, such as the inability to run box.ctl.promote() (when
    election_mode was not off) (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 -0 step value or NaN control values.
  • Fixed error reporting when an error occurs during error handling.
  • Fixed a dangling reference for FFI callbacks.
  • Fixed BC_UNM for a -0 argument in the dual-number mode.
  • Fixed narrowing of unary minus in the dual-number mode.
  • Fixed recording of string.byte(), string.sub(), and string.find().
  • Fixed missing type conversion for BC_FORI slots 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 tzoffset calculations for cases like new({timestamp=x, tz='Zone'})
    (gh-12412).
  • Fixed inconsistency between dates produced by new({tzoffset=x})
    and d:set({tzoffset=x}) where d.tz ~= '' comes before set()
    (gh-7680, gh-12416).
  • Now datetime.new() and datetime_object:set()
    check the timestamp value to be in the valid range (gh-12147).
  • Fixed timestamp type checking in set().
    For backward compatibility the compat.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
    is false) immediately after box.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_size setting was reached (gh-12557).

Uri

  • Fixed a Use-After-Poison crash in uri.format() caused by a long
    URI (ghs-151).

3.5.2

26 May 11:41

Choose a tag to compare

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 _space space (gh-11766).
  • Fixed a bug where box.ctl.promote() returned before the instance became
    writable (gh-10040).
  • Fixed a bug where .xlog.inprogress files were not automatically deleted
    during server startup if the wal_dir value 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.promote invocations with
    box.cfg.election_mode = 'manual' would crash during (gh-11703) or after
    (gh-11708) server configuration via box.cfg.
  • Fixed a bug where a replica on subscribe could get stuck in the sync state
    for the duration of replication.timeout. This issue was observable in
    box.info.replication[...].upstream and could lead to temporary
    inconveniences, such as the inability to run box.ctl.promote() (when
    election_mode was not off) (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_TBAR on aarch64.
  • Fixed stack overflow handling for the trace exit.
  • Fixed dangling CType references.
  • Fixed closing VM state after early OOM.
  • Fixed emitting for IR_MUL on x86/x64.
  • Fixed incorrect stp/ldp instructions fusion on aarch64.
  • Fixed SCEV entry invalidation when returning to a lower frame.
  • Fixed macOS 15 / Clang 16 build.
  • Fixed emitting for IR_HREFK on 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 -0 step value or NaN control values.
  • Fixed error reporting when an error occurs during error handling.
  • Fixed a dangling reference for FFI callbacks.
  • Fixed BC_UNM for a -0 argument in the dual-number mode.
  • Fixed narrowing of unary minus in the dual-number mode.
  • Fixed recording of string.byte(), string.sub(), and string.find().
  • Fixed missing type conversion for BC_FORI slots 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 tzoffset calculations for cases like new({timestamp=x, tz='Zone'})
    (gh-12412).
  • Fixed inconsistency between dates produced by new({tzoffset=x})
    and d:set({tzoffset=x}) where d.tz ~= '' comes before set()
    (gh-7680, gh-12416).
  • Now datetime.new() and datetime_object:set()
    check the timestamp value to be in the valid range (gh-12147).
  • Fixed timestamp type checking in set().
    For backward compatibility the compat.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
    is false) immediately after box.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_size setting was reached (gh-12557).

3.3.5

26 May 11:41

Choose a tag to compare

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 _space space (gh-11766).
  • Fixed a bug where box.ctl.promote() returned before the instance became
    writable (gh-10040).
  • Fixed a bug where .xlog.inprogress files were not automatically deleted
    during server startup if the wal_dir value 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.promote invocations with
    box.cfg.election_mode = 'manual' would crash during (gh-11703) or after
    (gh-11708) server configuration via box.cfg.
  • Fixed a bug where a replica on subscribe could get stuck in the sync state
    for the duration of replication.timeout. This issue was observable in
    box.info.replication[...].upstream and could lead to temporary
    inconveniences, such as the inability to run box.ctl.promote() (when
    election_mode was not off) (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_TBAR on aarch64.
  • Fixed stack overflow handling for the trace exit.
  • Fixed dangling CType references.
  • Fixed closing VM state after early OOM.
  • Fixed emitting for IR_MUL on x86/x64.
  • Fixed incorrect stp/ldp instructions fusion on aarch64.
  • Fixed SCEV entry invalidation when returning to a lower frame.
  • Fixed macOS 15 / Clang 16 build.
  • Fixed emitting for IR_HREFK on 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 -0 step value or NaN control values.
  • Fixed error reporting when an error occurs during error handling.
  • Fixed a dangling reference for FFI callbacks.
  • Fixed BC_UNM for a -0 argument in the dual-number mode.
  • Fixed narrowing of unary minus in the dual-number mode.
  • Fixed recording of string.byte(), string.sub(), and string.find().
  • Fixed missing type conversion for BC_FORI slots 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 tzoffset calculations for cases like new({timestamp=x, tz='Zone'})
    (gh-12412).
  • Fixed inconsistency between dates produced by new({tzoffset=x})
    and d:set({tzoffset=x}) where d.tz ~= '' comes before set()
    (gh-7680, gh-12416).
  • Now datetime.new() and datetime_object:set()
    check the timestamp value to be in the valid range (gh-12147).
  • Fixed timestamp type checking in set().
    For backward compatibility the compat.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
    is false) immediately after box.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_size setting was reached (gh-12557).

3.2.4

26 May 11:41

Choose a tag to compare

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 _space space (gh-11766).
  • Fixed a bug where box.ctl.promote() returned before the instance became
    writable (gh-10040).
  • Fixed a bug where .xlog.inprogress files were not automatically deleted
    during server startup if the wal_dir value 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.promote invocations with
    box.cfg.election_mode = 'manual' would crash during (gh-11703) or after
    (gh-11708) server configuration via box.cfg.
  • Fixed a bug where a replica on subscribe could get stuck in the sync state
    for the duration of replication.timeout. This issue was observable in
    box.info.replication[...].upstream and could lead to temporary
    inconveniences, such as the inability to run box.ctl.promote() (when
    election_mode was not off) (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_TBAR on aarch64.
  • Fixed stack overflow handling for the trace exit.
  • Fixed dangling CType references.
  • Fixed closing VM state after early OOM.
  • Fixed emitting for IR_MUL on x86/x64.
  • Fixed incorrect stp/ldp instructions fusion on aarch64.
  • Fixed SCEV entry invalidation when returning to a lower frame.
  • Fixed macOS 15 / Clang 16 build.
  • Fixed emitting for IR_HREFK on 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 -0 step value or NaN control values.
  • Fixed error reporting when an error occurs during error handling.
  • Fixed a dangling reference for FFI callbacks.
  • Fixed BC_UNM for a -0 argument in the dual-number mode.
  • Fixed narrowing of unary minus in the dual-number mode.
  • Fixed recording of string.byte(), string.sub(), and string.find().
  • Fixed missing type conversion for BC_FORI slots 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 tzoffset calculations for cases like new({timestamp=x, tz='Zone'})
    (gh-12412).
  • Fixed inconsistency between dates produced by new({tzoffset=x})
    and d:set({tzoffset=x}) where d.tz ~= '' comes before set()
    (gh-7680, gh-12416).
  • Now datetime.new() and datetime_object:set()
    check the timestamp value to be in the valid range (gh-12147).
  • Fixed timestamp type checking in set().
    For backward compatibility the compat.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

29 Apr 13:18

Choose a tag to compare

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.inprogress files were not automatically deleted
    during server startup when wal_dir was set to a non-default value (gh-12081).
  • Introduced the new built-in system event box.wal_error that 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_IO write
    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_TBAR on aarch64.
  • Fixed stack overflow handling for trace exit.
  • Fixed dangling CType references.
  • Fixed VM state closure after early OOM.
  • Fixed emission of IR_MUL on x86/x64.
  • Fixed incorrect stp/ldp instructions fusion on aarch64.
  • Fixed SCEV entry invalidation when returning to a lower frame.
  • Fixed builds on macOS 15 / Clang 16.
  • Fixed emission of IR_HREFK on 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 -0 step value or NaN control values.
  • Fixed error reporting when an error occurs during error handling.
  • Fixed a dangling reference for FFI callbacks.
  • Fixed BC_UNM for a -0 argument in dual-number mode.
  • Fixed narrowing of unary minus in dual-number mode.
  • Fixed recording of string.byte(), string.sub(), and string.find().
  • Fixed missing type conversion for BC_FORI slots 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 tzoffset calculations for cases such as new({timestamp=x, tz='Zone'})
    (gh-12412).
  • Fixed inconsistency between dates produced by new({tzoffset=x})
    and d:set({tzoffset=x}) where d.tz ~= '' comes before set()
    (gh-7680, gh-12416).
  • Now datetime.new() and datetime_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

23 Apr 12:08

Choose a tag to compare

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_create and tcp_server_loop handles to the socket
    module so a listening socket and accept loop can be driven from different
    threads. The existing socket.tcp_server behavior remains unchanged and
    is equivalent to a pair of tcp_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 new threads configuration
    option. For calling other threads, including the main thread, the new Lua
    module experimental.threads has 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 to IPROTO_CALL
    requests without polluting the global Lua namespace (gh-10036).

Replication

  • Added the replication.linearizable_quorum option controlling the number of
    replicas a node must synchronize with before performing a linearizable
    transaction. The default value is N - Q + 1, where N stands for the count
    of replicas in the replica set and Q is the evaluated
    replication_synchro_quorum value. 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 the any type 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 env option to config:get() to explicitly control whether
    TT_* environment variables are taken into account (gh-9824).

Log

  • With the verbose option enabled in http.client, libcurl debug logs
    are now routed to the Tarantool log instead of stderr (gh-12392).

Metrics

  • Updated the metrics submodule 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, the init method assigns a unique name to the created fiber
      using the incoming graphite server opts (if provided). Added a new stop()
      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.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 .xlog.inprogress files were not automatically deleted
    during server startup if the wal_dir value was not the default (gh-12081).

Vinyl

  • Fixed vinyl_memory overrun 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 sync state
    for the duration of replication.timeout. This issue was observable in
    box.info.replication[...].upstream and could lead to temporary
    inconveniences, such as the inability to run box.ctl.promote() (when
    election_mode was not off) (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 -0 step value or NaN control values.
  • Fixed error reporting when an error occurs during error handling.
  • Fixed a dangling reference for FFI callbacks.
  • Fixed BC_UNM for a -0 argument in the dual-number mode.
  • Fixed narrowing of unary minus in the dual-number mode.
  • Fixed recording of string.byte(), string.sub(), and string.find().
  • Fixed missing type conversion for BC_FORI slots 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 tzoffset calculations for cases like new({timestamp=x, tz='Zone'})
    (gh-12412).
  • Fixed inconsistency between dates produced by new({tzoffset=x})
    and d:set({tzoffset=x}) where d.tz ~= '' comes before set()
    (gh-7680, gh-12416).
  • Now datetime.new() and datetime_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
    is false) immediately after box.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_size setting was reached (gh-12557).

3.6.2

05 Mar 08:36

Choose a tag to compare

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

27 Jan 14:49

Choose a tag to compare

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 _space space (gh-11766).

Metrics

  • Updated the metrics submodule to 1.6.2.

    Changes in 1.6.2:

    • The error message level displayed when the /proc/<pid>/stat file is missing has been changed to verbose (gh-536).

3.6.0

12 Dec 14:17

Choose a tag to compare

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 interface parameter is available to be used with the
    connect URI. It allows to specify the interface to bind the net.box connection to
    (gh-11803).

  • Updated the metrics submodule from 1.3.0 to 1.6.1.

    • Added a new schema metrics category with the schema_needs_upgrade metric, enabled by default
      (gh-524) (gh-529).

    • Added a new memory metric, enabled by default
      (gh-519).

    • Added a new memory_virt metric, enabled by default
      (gh-521).

    • Fixed possible fio.read errors
      (gh-527).

    • Added a new label_keys parameter for counter() and gauge() metrics
      (gh-508).

Core

  • Space and transactional triggers during recovery are now deprecated
    (gh-11756).
  • Introduced the box.schema.needs_upgrade function 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 interface parameter can now be used in box.cfg.replication URIs.
    It allows specifying the network interface to bind to for URI connections
    (gh-11803).
  • Introduced new grant and metagrant privileges. They're only grantable on
    the universe. The grant privilege allows a user to grant any privilege,
    excepting grant and metagrant, on an object, object class or universe.
    The metagrant allows to grant grant and metagrant privileges. 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.promote invocations with
    box.cfg.election_mode = 'manual' would crash during (gh-11703) or after
    (gh-11708) server configuration via box.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_TBAR on aarch64.
  • Fixed stack overflow handling for the trace exit.
  • Fixed dangling CType references.
  • Fixed closing VM state after early OOM.
  • Fixed emitting for IR_MUL on x86/x64.
  • Fixed incorrect stp/ldp instructions fusion on aarch64.
  • Fixed SCEV entry invalidation when returning to a lower frame.
  • Fixed macOS 15 / Clang 16 build.
  • Fixed emitting for IR_HREFK on 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 _vuser space view if a user had a
    privilege on the user entity granted (gh-12089).
  • Fixed a bug when object privileges could remain granted on revoke if they were
    the last ones in the _priv entry (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.* and roles_cfg.*
    (any type fields) (gh-10595).

3.5.1

21 Nov 14:33

Choose a tag to compare

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.downgrade to 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_quorum value (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 replication role 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 sysview space (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 enabled defer_deletes option (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 with election_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
    had box.cfg.replication_synchro_queue_max_size set 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 a net.box connection fails with
    the reconnect_after option (gh-10506).
  • Fixed a bug that caused incorrect display of string uri
    parameters in returned uri of uri.format (gh-11820).

Config

  • IPROTO SSL options can now be properly configured by specifying the
    iproto.ssl section.