NTP Leap Second: Leap Indicator, Smear vs Step & Operator Retrospective

By Richard DEMONGEOT | 20 April 2026 | Reading time: 12 min

The leap second is one of the subtlest and most-dreaded mechanisms in the NTP protocol. Since 1972 it has compensated for the slow deceleration of Earth's rotation to keep UTC in phase with astronomical UT1. For an NTP server operator, each event has been a rehearsed minor crisis: 24 hours of advance warning, a switchover plan, and 48 hours of log scrutiny afterwards.

This page covers what every NTP operator or administrator needs to know: the origin of the mechanism, the 27-event history since 1972, how NTP signals the event, the two competing approaches (step and smear), chrony and ntpd behaviour, and the 2035 abolition voted in 2022.

On this page

1. Why the Earth forces us to add seconds

Since 1972, UTC (Coordinated Universal Time) has been defined as the count of SI seconds emitted by an ensemble of atomic clocks. UT1, on the other hand, is the time defined by the actual rotation of the Earth, measured by VLBI interferometry on distant quasars. The two drift apart because the Earth is slowing down: tidal friction, internal mass redistribution, core-mantle interactions. Over the long term, UT1 falls behind UTC by an average 1 to 2 ms per day — one second every 12 to 24 months on average.

The IERS (International Earth Rotation Service) tracks this drift and, when it approaches 0.9 seconds, publishes a "Bulletin C" announcing a leap second six months in advance. The event takes place either on 30 June or 31 December at 23:59:59 UTC: the 23:59:60 second is inserted (the rare 61-second minute), followed by 00:00:00 of the next day.

In practice since 2020. Earth's rotation has unexpectedly accelerated to the point that some models predict a negative leap second (remove a second) in the coming years — an unprecedented event. The IERS has never triggered one, but NTP implementations must be ready: Leap Indicator 10 signals this case.

2. The 27 leap seconds since 1972

From 1972 through end of 2016, 27 leap seconds were added. All positive. The five most recent, also those experienced by the RDEM infrastructure:

UTC dateLocal day (France)Total since 1972
2005-12-31 23:59:601 January 2006 at 00:59:6023
2008-12-31 23:59:601 January 2009 at 00:59:6024
2012-06-30 23:59:601 July 2012 at 01:59:6025
2015-06-30 23:59:601 July 2015 at 01:59:6026
2016-12-31 23:59:601 January 2017 at 00:59:6027

Since 1 January 2017, the TAI − UTC difference has remained fixed at 37 seconds. No leap second has been added for eight years — a historic record caused by the unexpected acceleration of Earth's rotation.

3. How NTP signals a leap second (Leap Indicator)

The NTP protocol (RFC 5905) reserves the two most significant bits of the first packet byte for the Leap Indicator (LI) field. Four possible values:

LI valueMeaningUsage
00No warningNormal operation (99.9% of the time)
01Last minute of the day will have 61 secondsAnnounced 24 h before addition
10Last minute of the day will have 59 secondsAnnounced for removal (never used to date)
11Clock unsynchronised (alarm)Equivalent to stratum 16

When a Stratum 1 server receives the information (via its GPS/DCF77 refclock, or via the signed leap-seconds.list file from NIST), it starts propagating LI=01 in its responses 24 hours before the event. chrony and ntpd clients read this bit on each poll and schedule the local insertion.

4. Step vs smear: two schools

When 23:59:60 arrives, you must choose what happens on the system side:

4.1 The step approach (insert a 23:59:60 second)

Standard-compliant: the kernel inserts a true 61-second minute. This is the default for chrony and ntpd with leapsecmode=system/step on Linux. Benefit: the clock stays strictly aligned with UTC. Downside: two consecutive identical timestamps, and any application computing timespec.tv_sec - previous can obtain 0, breaking second-based timers.

4.2 The smear approach (spreading)

Popularised by Google in 2011: rather than a one-second jump, the clock is slowed by a few ppm over a 20–24 hour window around the event. Each tick lasts 1.000011574 s instead of exactly 1.0 s — the second is absorbed progressively. Benefit: no non-monotonic timestamp, no broken timer. Downside: during the smear window, the clock is up to 0.5 s off official UTC, which can be visible from a non-smeared external source.

Operational pitfall. A client querying a smeared server and a step-mode server during the 24-hour window will see a false ticker — the two sources diverge by hundreds of milliseconds. Rule: homogenise the leap-second policy across all servers configured in a single chrony.conf.

4.3 Who does what in 2026

OperatorApproachWindow
Google (time.google.com)Smear24 h around UTC midnight
AWS (time.aws.com)Smear24 h around UTC midnight
Facebook / MetaSmear (linear 18 h)18 h centred on the event
Cloudflare (time.cloudflare.com)Step (compliant)
NIST / time.nist.govStep
NTP Pool (pool.ntp.org)Varies per operator
RDEM Systems (ntp.rdem-systems.com)Step (RFC-compliant)

5. chrony: leapsecmode, smoothtime, leapsectz

chrony 4.x offers four modes, configured via leapsecmode in chrony.conf:

# /etc/chrony/chrony.conf

# Recommended mode for a production Stratum 2+ server:
# delegate leap insertion to the Linux kernel
leapsecmode system

# Alternative 1: 1-second step applied immediately
# leapsecmode step

# Alternative 2: progressive correction via slew (default rate 400 ppm)
# leapsecmode slew

# Alternative 3: smearing, with smoothtime
# leapsecmode ignore
# smoothtime 400 0.001 leaponly

# To test without waiting for the next event: local leap list file
leapsectz right/UTC
leapseclist /usr/share/zoneinfo/leap-seconds.list

The directive smoothtime 400 0.001 leaponly enables smearing limited to leap events. Maximum applied offset is 0.5 s, spread over ~1000 seconds, compatible with most jump-sensitive applications.

6. ntpd: leapfile, tinker step, kernel mode

ntpd (reference or ntpsec) reads the leap-seconds.list file maintained by NIST:

# /etc/ntp.conf

# Signed reference file, updated by IERS/NIST
leapfile /usr/share/zoneinfo/leap-seconds.list

# Default behaviour: compliant 1-second step
# Disable if needed with:
# tinker step 0

# To use Linux kernel mode on sync:
# enable kernel

The leap-seconds.list file must be updated regularly — it expires 6 months after issuance. Automate via cron:

0 3 * * 1 wget -q -O /usr/share/zoneinfo/leap-seconds.list https://data.iana.org/time-zones/tzdb-leap-seconds.list

7. What RDEM observed since 2005

Operator retrospective. Our NTP infrastructure has been running continuously since 2005 and has been through five leap seconds (2005, 2008, 2012, 2015, 2016). What we observed at each event, regardless of year:

The 2016-12-31 event stands out as the most recent and the one where consumer tooling (smartphones, internet routers) had best converged toward correct behaviour. The ecosystem is more mature than in 2005 or 2008, when we had to explain LI=01 in client logs.

Did a leap event expose your clients to false tickers? Our sister site documents false-ticker detection and mitigation. To observe live impact on offset during the transition, the ntp-tester.eu live tool displays values second-by-second. For regulated entities subject to NIS 2 — audited temporal integrity, every leap event must be traced in the sync log as continuity evidence.

8. Preparing for the next event

Even without an announcement on the horizon, maintaining the capacity to handle a leap second is part of NTP hygiene:

  1. Verify the leap-seconds.list file on each server: head /usr/share/zoneinfo/leap-seconds.list must show a future expiration date.
  2. Test leap mode on a staging server by manually injecting a leap file with a near date: logs must show correct anticipation.
  3. Document the policy (step or smear) per infrastructure segment, and ensure a single client does not mix the two upstream.
  4. Audit critical applications: any logic doing if (new_ts == old_ts) or assert ts_diff > 0 must be reviewed.
  5. Schedule an observation window around the announced date if an event is triggered. The probability of a leap second before 2035 is low but non-zero.

9. The 2035 abolition: what to expect

In November 2022, the 27th General Conference on Weights and Measures (CGPM) voted the resolution abolishing leap seconds by 2035. The text plans to:

For NTP, this changes nothing in the protocol — the Leap Indicator field stays in place for archives and legacy systems. Its activation simply becomes exceptional, then zero. chrony and ntpd implementations will continue to support the mechanism for several more decades for compatibility.

Further reading. If you operate a server on the NTP Pool, see our guide to running an NTP pool server which covers volunteer-operator best practices. For the architectural foundation, see our NTP infrastructure since 2005 and our Raspberry Pi + GPS Stratum 1 server.

Resources and references