LONDON – The UK inflation rate, as measured by the consumer price index (CPI), fell last month by the most in a year, providing some relief for households and businesses. However, stubborn services costs remain a reminder that challenges persist for policymakers.
The Office for National Statistics (ONS) said headline CPI rose 3.0% y/y in January, in line with estimates and down from the prior 3.4% print. On the month, the index also matched forecasts, falling 0.5% after a 0.4% rise previously.
Annual core CPI, which excludes energy, food, alcohol and tobacco, grew 3.1% last month, slowing by a tenth from December but coming in a tenth above forecasts. Statisticians said the CPI goods rate fell to 1.6% y/y from 2.2%, while services inflation eased to 4.4% from 4.5%.
Outlining the drivers behind the cooling headline rate, ONS Chief Economist Grant Fitzner said: “Inflation fell markedly in January to its lowest annual rate since March last year, driven partly by a decrease in petrol prices.
“Airfares were another downward driver this month, with prices dropping back following the increase in December. Lower food prices also helped push the rate down, particularly for bread, cereals and meat.” Monthly airfare prices fell by more in January than they did a year earlier, reflecting base effects.
Rising costs for restaurants and hotels, healthcare and apparel partially offset the decline.
Jonathan Moyes, head of investment research at the Wealth Club, said investors would hear much more about base effects in the coming months. “Big inflationary spikes from energy, employers’ national insurance, and the private school fee VAT hike earlier in 2025 should roll out of the 12-month window for inflation as we move through 2026. This will have a cooling effect on inflation, and we should see inflation fall back to 2% this year.”
Factory gate prices
Producer output prices also softened in January. Statisticians said annual output price growth rose 2.5%, below the 2.9% consensus and down from December’s downwardly revised 3.1%. On the month, output prices were flat after a revised 0.1% decline previously.
Producer input prices fell 0.2% over the year, following a downwardly revised 0.5% decline previously. On the month, the index rose an in-line 0.4% after a negatively revised 0.5% drop.
“The cost of raw materials for businesses fell over the past year, driven by lower crude oil prices, while the increase in the cost of goods leaving factories slowed,” Fitzner added.
The Import Price Index (IPI) fell 0.6% in the year to January, while the Export Price Index (EPI) rose 2.0%.
Source: ONS - CPI annual inflation rate lowest since March 2025
A weakening outlook for earnings
On Tuesday, the ONS published its latest employment report, showing softer employment and wage growth.
ONS Director of Economic Statistics Liz McKeown said private sector wage growth continued to slow and was now at its lowest rate in five years. “Public sector pay growth also slowed in the latest period but remains elevated, still affected by some pay awards being implemented earlier in 2025 than in 2024, although this effect has now started to diminish.”
Implications for monetary policy
On 5 February, Bank of England policymakers narrowly voted to keep interest rates on hold at 3.75%. However, the central bank signalled that the Base Rate could be lowered again soon. Markets are currently pricing in roughly an 80% probability of a move.
“It’s no secret that inflation will decline steeply in April, perhaps to below 2.0%, as this is when the raft of rises in government-set prices and taxes in 2025 drop out of the annual comparison,” said Ruth Gregory, deputy chief UK economist at Capital Economics. “And if we are right in thinking that CPI inflation will average 1.8% in Q4 this year, then the MPC may ultimately end up cutting rates further than investors expect, to 3.00% this year, with the chances of the next rate cut happening in March rather than our current forecast of April edging higher.”
/*jshint esversion: 6 */
var socket;
var assigned_server = 3001;
var distributor_server = 3010;
var publisher_channel = '';
var broadcaster_channel = '';
var remote_ip = '';
var session_info = {};
var logging_interval;
var logging_interval_time = 120000;
var socket_emits = 0;
var session_start_time;
var reconnectionDelayGrowFactor = 1.2;
var reconnection_delay = 1000;
var playing = false;
var connected_to_assigned = false;
var socket_close_timeout;
var player_disconnected_annoucement_play_delay = 1500;
var player_disconnected_annoucement_play_timeout = null;
self.onmessage = function (msg) {
switch(msg.data.action) {
case 'Reactivate': reactivate(); break;
case 'ConnectDistributor': connect_to_distributor(msg); break;
case 'SessionStaticInfo': session_static_info(msg); break;
case 'SessionInfo': update_session_info(msg.data); break;
case 'PauseLogging': clearTimeout(logging_interval); break;
case 'RestartLogging': postMessage({action: 'RequestSessionStaticInfo' }); break;
case 'JoinPublisherChannel': join_publisher_channel(msg.data); break;
case 'JoinPlayerChannel': join_player_channel(msg.data); break;
case 'CheckChannelStatus': check_channel_status(msg.data); break;
case 'PlayerLogResponse': player_log_response(msg.data); break;
case 'CloseSocket': close_socket(); break;
case 'RequestMessageSearch': request_message_search(msg.data); break;
case 'RequestMoreMessages': request_more_messages(msg.data); break;
case 'PlayerDisconnectedAnnoucementTimeoutStart': player_disconnected_annoucement_timeout_start(); break;
case 'PlayerDisconnectedAnnoucementTimeoutClear': player_disconnected_annoucement_timeout_clear(); break;
}
};
function player_disconnected_annoucement_timeout_clear() {
clearTimeout(player_disconnected_annoucement_play_timeout);
player_disconnected_annoucement_play_timeout = null;
}
function player_disconnected_annoucement_timeout_start() {
player_disconnected_annoucement_play_timeout = setTimeout(function() { send_play_disconnect_annoucement(); }, player_disconnected_annoucement_play_delay );
}
function send_play_disconnect_annoucement() {
postMessage({action: "PlayDisconnectAnnoucement"});
}
function reactivate() {
playing = false;
connect_to_assigned_server();
}
function player_log_response(data) {
var data_array = {};
data_array.type = 'PlayerLogResponse';
data_array.respond_to_socket_final = data.respond_to_socket_final;
data_array.respond_to_socket = data.respond_to_socket;
data_array.player_socket_id = data.player_socket_id;
data_array.logs = data.logs;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function request_message_search(data) {
var data_array = {};
data_array.type = 'request_message_search';
data_array.publisher_channel = data.publisher_channel;
data_array.search_term = data.search_term;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function request_more_messages(data) {
var data_array = {};
data_array.type = 'request_more_messages';
data_array.publisher_channel = data.publisher_channel;
data_array.last_record_id = data.last_record_id;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function check_channel_status(data) {
var data_array = {};
data_array.type = 'check_channel_status';
data_array.app_name = data.app_name;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1 && connected_to_assigned) { socket.send(msg_string); }
else { setTimeout(function() { check_channel_status(data); },500); }
}
function check_channel_status_response(data) {
postMessage({ action: 'CheckChannelStatusReponse', stream_status: data.stream_status.status, onair: data.stream_status.onair, connected: data.stream_status.connected });
}
function join_publisher_channel(data) {
var data_array = {};
data_array.type = 'join_publisher_channel';
if (typeof data.api_key !== 'undefined') { data_array.api_key = data.api_key; }
else {
data_array.publisher_channel = data.publisher_channel;
data_array.username = data.username;
data_array.subscriber_group = data.subscriber_group;
data_array.display_name = data.display_name;
data_array.single_sign_on = data.single_sign_on;
data_array.remote_ip = data.remote_ip;
data_array.http_referrer = data.http_referrer;
data_array.current_page = data.current_page;
data_array.php_session_id = data.php_session_id;
data_array.from_react = data.from_react;
}
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) {
socket.send(msg_string); }
postMessage({action: 'PublisherChannelJoined' });
}
function session_static_info(msg) {
set_static_session_info(msg.data);
start_log();
}
function connect_to_distributor(msg) {
publisher_channel = msg.data.publisher_channel;
remote_ip = msg.data.remote_ip;
socket = new WebSocket("wss://ws.livesquawk.com/ws"+distributor_server);
socket.onopen = function(event) { request_server_assignment(); };
socket.onmessage = function(event) {
var msg_string = event.data.toString();
var data = JSON.parse(msg_string);
switch(data.type) {
case 'server_assignment_response': server_assignment_response(data); break;
}
};
}
function session_info_interval() {
postMessage({action: 'RequestSessionInfo' });
logging_interval = setTimeout(session_info_interval,logging_interval_time);
}
function server_assignment_response(data) {
assigned_server = data.selected_server;
socket.close();
connect_to_assigned_server();
}
function request_server_assignment() {
var data_array = {};
data_array.type = 'request_server_assignment';
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function connect_to_assigned_server() {
socket = new WebSocket("wss://ws.livesquawk.com/ws"+assigned_server);
socket.onopen = function(event) {
postMessage({ action: 'VisibleConsole',console_string: "Connected to server "+assigned_server });
console.log("Connected to server "+assigned_server);
postMessage({ action: 'ConnectedToAssigned' });
connected_to_assigned = true;
if (playing) {
postMessage({ action: 'RejoinPlayerChannel' });
}
};
socket.onmessage = function(event) {
var msg_string = event.data.toString();
var data = JSON.parse(msg_string);
if (data.type != 'server_ping') { /* console.log(data.type); */ }
switch(data.type) {
case 'reconnect': postMessage({ action: 'VisibleConsole',console_string: "Reconnected" }); break;
case 'reload': postMessage({ action: 'Reload' }); break;
case 'start_log_response': start_log_response(data); break;
case 'application_refresh_start': application_refresh_start(data); break;
case 'application_refresh_stop': application_refresh_stop(data); break;
case 'player_log_request':
case 'check_channel_status_response': check_channel_status_response(data); break;
case 'PlayerLogRequest':
case 'new_tweet':
case 'new_latest_news':
case 'delete_report':
case 'add_report':
case 'add_ref_doc':
case 'calendar_change':
case 'calendar_insert':
case 'calendar_delete':
case 'new_note':
case 'AppStart':
case 'AppStop':
case 'BroadcasterStarted':
case 'BroadcasterStopped':
case 'added_cme_report':
case 'updated_cme_report':
case 'added_cme_commentary':
case 'updated_cme_commentary':
case 'server_assignment_response':
case 'initial_messages':
case 'message_categories':
case 'more_messages':
case 'matched_messages':
pass_straight_to_post_message(data);
break;
case 'output':
case 'server_ping':
case 'reconnect':
case 'disconnect':
break;
}
};
socket.onerror = function(event) {
postMessage({ action: 'VisibleConsole',console_string: "LS Socket Error" + event.type });
console.log(event);
postMessage({ action: 'LSSocketConnectionError' });
};
socket.onclose = function(event) {
console.log('Socket is closed. Reconnect will be attempted in 1 second.', event.reason);
socket_close_timeout = setTimeout(connect_to_assigned_server, reconnection_delay);
reconnection_delay = reconnection_delay*reconnectionDelayGrowFactor;
connected_to_assigned = false;
};
}
function close_socket() {
clearTimeout(socket_close_timeout);
socket_close_timeout = null;
socket.onclose = function(event) {};
socket.onmessage = function(event) {};
socket.onerror = function(event) {};
socket.close(1000);
console.log('Socket Closed');
}
function pass_straight_to_post_message(data) {
data.action = data.type;
postMessage(data);
}
function join_player_channel(data) {
var data_array = {};
data_array.type = 'join_player_channel';
data_array.player_channel = data.player_channel;
data_array.remote_ip = data.remote_ip;
data_array.username = data.username;
data_array.app_name = data.app_name;
data_array.onair_status = data.onair_status;
data_array.http_referrer = data.http_referrer;
data_array.current_page = data.current_page;
data_array.php_session_id = data.php_session_id;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
postMessage({action: 'PlayerChannelJoined' });
playing = true;
}
function start_log_response(data) {
session_info.session_id = data.log_record_id;
session_info_interval();
}
function application_refresh_start(data) {
if (data.app_name == session_info.application_name) { postMessage({action: 'ApplicationRefreshStart' }); }
}
function application_refresh_stop(data) {
if (data.app_name == session_info.application_name) { postMessage({action: 'ApplicationRefreshStop' }); }
}
function set_static_session_info(data) {
session_info.browser_codename = data.browser_codename;
session_info.browser_name = data.browser_name;
session_info.user_agent = data.user_agent;
session_info.browser_version = data.browser_version;
session_info.cookies_enabled = data.cookies_enabled;
session_info.platform = data.platform;
session_info.player_version = data.player_version;
session_info.stream = data.stream;
session_info.connection_protocol = data.protocol;
session_info.delay_target = data.delay_target;
session_info.session_email = data.session_email;
session_info.remote_ip = data.remote_ip;
session_info.php_session_id = data.php_session_id;
session_info.application_name = data.application_name;
session_info.http_referrer = data.http_referrer;
}
function start_log() {
var session_start_date = new Date();
session_start_time = session_start_date.getTime();
var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var session_start_date_string = session_start_date.getDate() + " " + months[session_start_date.getMonth()] + " " + session_start_date.getFullYear();
var data_array = {};
data_array.type = 'webrtc_start_log';
data_array.remote_ip = session_info.remote_ip;
data_array.username = session_info.session_email;
data_array.php_session_id = session_info.php_session_id;
data_array.webrtc_protocol = '';
data_array.session_start_time = (session_start_time/1000).toFixed(0);
data_array.stream_name = session_info.stream;
data_array.session_start_date = session_start_date_string;
var msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
function update_session_info(data) {
var data_array = {};
var msg_string = '';
var current_date = new Date();
var current_time = current_date.getTime();
session_info.protocol = data.protocol;
session_info.curr_delay = (data.effective_latency / 1000).toFixed(2);
session_info.session_length = current_time - session_start_time;
session_info.ping_time = data.ping_time;
session_info.jitter = data.jitter;
session_info.packet_loss = data.packet_loss;
session_info.effective_latency = data.effective_latency;
session_info.mean_opinion_score = data.mean_opinion_score;
session_info.restarts = data.restarts;
if (socket_emits == 0) {
data_array = {};
data_array.type = 'webrtc_log_data_full';
data_array.connection_protocol = session_info.protocol;
data_array.threshold = 0;
data_array.curr_delay = session_info.curr_delay;
data_array.session_length = session_info.session_length;
data_array.date = current_time;
data_array.browser_codename = session_info.browser_codename;
data_array.browser_name = session_info.browser_name;
data_array.user_agent = session_info.user_agent;
data_array.browser_version = session_info.browser_version;
data_array.cookies_enabled = session_info.cookies_enabled;
data_array.platform = session_info.platform;
data_array.player_version = session_info.player_version;
data_array.stream = session_info.stream;
data_array.restarts = session_info.restarts;
data_array.delay_target = 0;
data_array.op_sys = '';
data_array.flash_version = '';
data_array.remote_ip = session_info.remote_ip;
data_array.http_referrer = session_info.http_referrer;
data_array.php_session_id = session_info.php_session_id;
data_array.user_email = session_info.session_email;
data_array.webrtc_protocol = session_info.protocol;
data_array.ping_time = session_info.ping_time;
data_array.jitter = session_info.jitter;
data_array.packet_loss = session_info.packet_loss;
data_array.effective_latency = session_info.effective_latency;
data_array.mean_opinion_score = session_info.mean_opinion_score;
data_array.session_id = session_info.session_id;
msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
else {
data_array = {};
data_array.type = 'webrtc_log_data';
data_array.session_id = session_info.session_id;
data_array.php_session_id = session_info.php_session_id;
data_array.connection_protocol = session_info.protocol;
data_array.restarts = session_info.restarts;
data_array.threshold = 0;
data_array.curr_delay = session_info.curr_delay;
data_array.session_length = session_info.session_length;
data_array.date = current_time;
data_array.webrtc_protocol = session_info.protocol;
data_array.ping_time = session_info.ping_time;
data_array.jitter = session_info.jitter;
data_array.packet_loss = session_info.packet_loss;
data_array.effective_latency = session_info.effective_latency;
data_array.mean_opinion_score = session_info.mean_opinion_score;
data_array.stream = session_info.stream;
msg_string = JSON.stringify(data_array);
if (socket.readyState == 1) { socket.send(msg_string); }
}
socket_emits++;
if (socket_emits == 100) { socket_emits = 0; }
}
- Headline inflation slows, as core overshoots forecasts
- Cost of food and drink back below 4.0%
- Producer prices signal easing pipeline pressures
- Wage growth cools to five-year low
- Markets lean toward near-term BoE rate cut
By Harry Daniels
LiveSquawk News
@HarryDaniels71
18 February 2026 | 12:30 GMT
LONDON – The UK inflation rate, as measured by the consumer price index (CPI), fell last month by the most in a year, providing some relief for households and businesses. However, stubborn services costs remain a reminder that challenges persist for policymakers.
The Office for National Statistics (ONS) said headline CPI rose 3.0% y/y in January, in line with estimates and down from the prior 3.4% print. On the month, the index also matched forecasts, falling 0.5% after a 0.4% rise previously.
Annual core CPI, which excludes energy, food, alcohol and tobacco, grew 3.1% last month, slowing by a tenth from December but coming in a tenth above forecasts. Statisticians said the CPI goods rate fell to 1.6% y/y from 2.2%, while services inflation eased to 4.4% from 4.5%.
Outlining the drivers behind the cooling headline rate, ONS Chief Economist Grant Fitzner said: “Inflation fell markedly in January to its lowest annual rate since March last year, driven partly by a decrease in petrol prices.
“Airfares were another downward driver this month, with prices dropping back following the increase in December. Lower food prices also helped push the rate down, particularly for bread, cereals and meat.” Monthly airfare prices fell by more in January than they did a year earlier, reflecting base effects.
Rising costs for restaurants and hotels, healthcare and apparel partially offset the decline.
Jonathan Moyes, head of investment research at the Wealth Club, said investors would hear much more about base effects in the coming months. “Big inflationary spikes from energy, employers’ national insurance, and the private school fee VAT hike earlier in 2025 should roll out of the 12-month window for inflation as we move through 2026. This will have a cooling effect on inflation, and we should see inflation fall back to 2% this year.”
Producer output prices also softened in January. Statisticians said annual output price growth rose 2.5%, below the 2.9% consensus and down from December’s downwardly revised 3.1%. On the month, output prices were flat after a revised 0.1% decline previously.
Producer input prices fell 0.2% over the year, following a downwardly revised 0.5% decline previously. On the month, the index rose an in-line 0.4% after a negatively revised 0.5% drop.
“The cost of raw materials for businesses fell over the past year, driven by lower crude oil prices, while the increase in the cost of goods leaving factories slowed,” Fitzner added.
The Import Price Index (IPI) fell 0.6% in the year to January, while the Export Price Index (EPI) rose 2.0%.
On Tuesday, the ONS published its latest employment report, showing softer employment and wage growth.
ONS Director of Economic Statistics Liz McKeown said private sector wage growth continued to slow and was now at its lowest rate in five years. “Public sector pay growth also slowed in the latest period but remains elevated, still affected by some pay awards being implemented earlier in 2025 than in 2024, although this effect has now started to diminish.”
On 5 February, Bank of England policymakers narrowly voted to keep interest rates on hold at 3.75%. However, the central bank signalled that the Base Rate could be lowered again soon. Markets are currently pricing in roughly an 80% probability of a move.
“It’s no secret that inflation will decline steeply in April, perhaps to below 2.0%, as this is when the raft of rises in government-set prices and taxes in 2025 drop out of the annual comparison,” said Ruth Gregory, deputy chief UK economist at Capital Economics. “And if we are right in thinking that CPI inflation will average 1.8% in Q4 this year, then the MPC may ultimately end up cutting rates further than investors expect, to 3.00% this year, with the chances of the next rate cut happening in March rather than our current forecast of April edging higher.”