Kenyan protesters are demanding President Ruto be removed – what the law says about how that could happen
Kenyan protesters are demanding President Ruto be removed – what the law says about how that could happen
Read this story aloud
Listen to the clean text version of this article
Ready
8 min listen
Audio reading is not supported on this browser.
The process can be lengthy and complicated. However, as Kenya is a democracy, those who believe that Ruto has failed them as president can deny him a second term in the country’s next general election in 2027
In June 2024, many Kenyans took to the streets to protest what they believed were punitive taxes imposed by President William Ruto’s government. Though the president caved in and withdrew the contentious Finance Bill 2024, protesters are unmoved and now insist that he leave office.
No Kenyan president has ever been removed prematurely from office.
The opposition, led by the Azimio La Umoja Coalition, set out to collect 10 million signatures in 2023. This was part of an effort to pressure Ruto to step down. This signature-gathering effort, however, has no constitutional relevance to the removal of a Kenyan president from office.
More To Read
- DP Kindiki hails cooperatives as key to Kenya’s economic transformation
- Civil society groups warn Kenya’s Sh13 trillion debt hurting essential services
- Court grants DCI three more days to hold woman over alleged posts tracking President Ruto’s flights
- Construction of Naivasha–Kisumu–Malaba SGR begins in Narok
- How the new Ngong Road flyover is fueling growth at Dagoretti Corner
- Ruto told to fix Cabinet gender imbalance after court ruling, not reshuffle
Kenya’s democratic constitution is quite clear on how a sitting president can be removed from office. As a legal expert and economist who studies the rule of law and democratisation in Africa, I outline what the law says about how Ruto could, in theory, be removed from office.
The constitution of Kenya guides the process. There are only two legal routes to remove a president before the end of his or her term: on the grounds of incapacity (Article 144) or impeachment (Article 145).
The process can be lengthy and complicated. However, as Kenya is a democracy, those who believe that Ruto has failed them as president can deny him a second term in the country’s next general election in 2027.
Latest Stories
- Government extends security operation in Marsabit, declares multiple areas dangerous for 30 more days
- Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspects
- Mbappé fires France past Paraguay into World Cup quarter-finals
- Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeat
Removal on grounds of incapacity
The removal of a president from office because he or she no longer has the physical or mental capacity to perform the functions of the office may be carried out by a majority of the 349 members of the Kenyan National Assembly, which is one of two houses of parliament.
First, a member of the national assembly, who is supported by at least 25 per cent of all the members, can move a motion to investigate the president’s physical or mental capacity to perform his or her constitutional functions.
If that motion is supported by a majority of all members of the national assembly, then the speaker can inform the country’s chief justice of the resolution within two days.
After receiving notice of the resolution, the chief justice or deputy chief justice has seven days to appoint a special tribunal to investigate the matter.
The special tribunal must consist of five individuals. These are three qualified Kenyan medical practitioners, one advocate of the high court and an individual nominated by the president.
The report of the tribunal must be submitted to the chief justice and the speaker of the national assembly within 14 days. The report is considered final and is not subject to appeal (Article 144(8)).
The speaker must then table the report before the national assembly within seven days.
If the tribunal concludes that the president can’t perform the functions of his or her office, the national assembly must vote on whether to ratify the report. If the majority votes to ratify the report, this will automatically result in the president’s removal from office.
Removal by impeachment
A member of the national assembly may move a motion to impeach a sitting president. The motion must be supported by at least one-third of all members (Article 145(1)).
A sitting president may be impeached on the grounds of a gross violation of a provision of the constitution or of any other law where there are serious reasons for believing that the president has committed a crime under national or international law for gross misconduct.
If the motion to impeach the president is supported by at least two-thirds of all 349 members of the national assembly (or at least 232 members), the speaker then transmits the resolution to the speaker of the senate (the upper house of parliament) within two days.
Within seven days of receiving the notice of the impeachment resolution from the speaker of the national assembly, the speaker of the senate must call the senate to order to hear and investigate the charges against the president.
The Senate may pass a resolution to appoint a special committee, which is made up of 11 of its members, to investigate the charges against the president. The special committee has 10 days to investigate the matter and report to the Senate.
The president and his or her legal counsel are allowed to appear before the special committee during investigations. If the special committee determines and reports to the Senate that
the particulars of any allegation against the President — (a) have not been substantiated, further proceedings shall not be taken under Article 145 in respect of that allegation; or (b) have been substantiated, the Senate shall, after according to the President an opportunity to be heard, vote on the impeachment charges.
If at least two-thirds of the 67 members of the Senate vote in favour of upholding any of the impeachment charges, the president’s mandate will be terminated.
The likelihood of the opposition securing the numbers needed to get these processes going are slim. Presently, of the 349 seats in the national assembly, 179 are held by the government, 158 by the opposition and 12 by independents. In the Senate, the government and opposition each hold 33 seats, with one seat being vacant.
Once a president is removed
What would happen should the Senate convict and remove the president from office? The constitution says the deputy president shall assume office for the remainder of the term of the president (Article 146(2)).
However, if the deputy president is unable to assume the office of president, the speaker of the national assembly shall serve as president. An election for president must then be held within 60 days after the vacancy is created (Article 146(2)(b)).
Democracy and the rule of law
To safeguard against opportunistic interference with the ability of a democratically elected president to perform his or her functions, Kenya’s constitution defines and enshrines very specific grounds for the removal of a sitting president.
Other Topics To Read
Popular discontent or dissatisfaction with the performance of the president isn’t one of these grounds.
The mass protests against the Ruto regime are an expression of Kenyans’ frustration and dissatisfaction with the performance of their government.
While Kenyans, through their elected officials, have the tools to terminate the president’s mandate early, they might want to seriously consider the consequences this would have on their democracy in general and future administrations in particular.
Ruto has been in office for less than two years. Civil society and the protest movement might want to adopt a more constructive approach that seeks increased participation in policy design and implementation. Additionally, Kenyans can exercise their right to oust the regime in 2027 by denying it the votes that it needs to be re-elected.
Top Stories Today
- Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspects
- State extends security operation in Marsabit, declares multiple areas dangerous for 30 more days
- Mbappé fires France past Paraguay into World Cup quarter-finals
- Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeat
- Weekly new Ebola cases reach highest level since outbreak began: WHO
- Kenya reaffirms ties with Rwanda as it marks Liberation Day celebrations
`;
}
return “;
}
function commentActionsMarkup(comment, canComment) {
const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
const likeCount = Number(comment.like_count || 0) > 0
? “
: ”;
const likeButton = canComment && comment.status === ‘approved’
? “
: “;
const replyButton = canComment && comment.status === ‘approved’
? “
: ”;
return `
`;
}
function commentMarkup(comment, canComment, isReply = false) {
const pendingBadge = comment.status && comment.status !== ‘approved’
? “
: ”;
const edited = comment.is_edited
? “
: ”;
const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
? `
`
: “;
return `
`;
}
function replyFormMarkup(commentId) {
return `
`;
}
function setNotice(widget, message, type = ‘info’) {
const notice = widget.querySelector(‘[data-role=”notice”]’);
if (!notice) return;
if (!message) {
notice.hidden = true;
notice.textContent = ”;
notice.classList.remove(‘is-error’);
return;
}
notice.hidden = false;
notice.textContent = message;
notice.classList.toggle(‘is-error’, type === ‘error’);
}
function setCount(widget, total) {
const count = widget.querySelector(‘[data-role=”count”]’);
if (!count) return;
const num = Number(total || 0);
count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
}
function openReplyBox(widget, commentId) {
widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
box.hidden = true;
box.innerHTML = ”;
});
const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (!targetItem) return;
const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
if (!replyBox) return;
replyBox.hidden = false;
replyBox.innerHTML = replyFormMarkup(commentId);
const textarea = replyBox.querySelector(‘textarea’);
if (textarea) textarea.focus();
}
function closeReplyBox(container) {
if (!container) return;
container.hidden = true;
container.innerHTML = ”;
}
async function initCommentsWidget(widget) {
const state = {
articleId: Number(widget.dataset.articleId),
loadUrl: widget.dataset.loadUrl,
storeUrl: widget.dataset.storeUrl,
commentsBaseUrl: widget.dataset.commentsBaseUrl,
canComment: widget.dataset.canComment === ‘1’,
page: 1,
perPage: 10,
sort: ‘newest’,
total: 0,
hasMore: false,
busy: false
};
const list = widget.querySelector(‘[data-role=”list”]’);
const loading = widget.querySelector(‘[data-role=”loading”]’);
const empty = widget.querySelector(‘[data-role=”empty”]’);
const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);
async function loadComments(reset = true) {
if (state.busy) return;
state.busy = true;
setNotice(widget, ”);
loading.hidden = false;
if (reset) {
state.page = 1;
list.innerHTML = ”;
empty.hidden = true;
}
try {
const url = new URL(state.loadUrl, window.location.origin);
url.searchParams.set(‘page’, state.page);
url.searchParams.set(‘per_page’, state.perPage);
url.searchParams.set(‘sort’, state.sort);
const response = await requestJson(url.toString(), {
method: ‘GET’,
headers: {
‘Accept’: ‘application/json’,
‘X-Requested-With’: ‘XMLHttpRequest’
}
});
const items = Array.isArray(response.data) ? response.data : [];
const meta = response.meta || {};
state.total = Number(meta.total || 0);
state.hasMore = !!meta.has_more;
setCount(widget, state.total);
if (reset) {
list.innerHTML = ”;
}
if (!items.length && reset) {
empty.hidden = false;
} else {
empty.hidden = true;
list.insertAdjacentHTML(
‘beforeend’,
items.map(item => commentMarkup(item, state.canComment, false)).join(”)
);
}
loadMoreBtn.hidden = !state.hasMore;
} catch (error) {
if (!list.children.length) {
empty.hidden = false;
empty.textContent = ‘Unable to load comments right now.’;
}
setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
} finally {
loading.hidden = true;
state.busy = false;
}
}
async function submitTopLevelComment(form) {
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘[data-role=”submit-comment”]’);
if (!textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(state.storeUrl, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
textarea.value = ”;
if (response?.data) {
list.insertAdjacentHTML(
‘afterbegin’,
commentMarkup(response.data, state.canComment, false)
);
empty.hidden = true;
if ((response.data.status || ”) === ‘approved’) {
state.total += 1;
setCount(widget, state.total);
}
}
setNotice(widget, response.message || ‘Comment posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post comment’;
}
}
}
async function submitReply(form) {
const commentId = Number(form.dataset.commentId || 0);
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘.ev-comments__reply-submit’);
if (!commentId || !textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
if (response?.data) {
const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (parentItem) {
const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
if (repliesWrap) {
repliesWrap.insertAdjacentHTML(
‘beforeend’,
commentMarkup(response.data, state.canComment, true)
);
}
}
}
closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
setNotice(widget, response.message || ‘Reply posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post reply’;
}
}
}
async function toggleLike(button) {
const commentId = Number(button.dataset.commentId || 0);
if (!commentId) return;
const originalHtml = button.innerHTML;
try {
button.disabled = true;
button.innerHTML = ‘Working…’;
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({})
});
const liked = !!response?.data?.liked;
const likeCount = Number(response?.data?.like_count || 0);
button.classList.toggle(‘is-liked’, liked);
button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
} catch (error) {
button.innerHTML = originalHtml;
setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
} finally {
button.disabled = false;
}
}
if (composerForm) {
composerForm.addEventListener(‘submit’, function (e) {
e.preventDefault();
submitTopLevelComment(composerForm);
});
}
if (sortSelect) {
sortSelect.addEventListener(‘change’, function () {
state.sort = this.value || ‘newest’;
loadComments(true);
});
}
if (loadMoreBtn) {
loadMoreBtn.addEventListener(‘click’, function () {
if (state.busy || !state.hasMore) return;
state.page += 1;
loadComments(false);
});
}
widget.addEventListener(‘click’, function (e) {
const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
if (likeBtn) {
e.preventDefault();
toggleLike(likeBtn);
return;
}
const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
if (replyBtn) {
e.preventDefault();
openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
return;
}
const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
if (cancelReplyBtn) {
e.preventDefault();
closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
}
});
widget.addEventListener(‘submit’, function (e) {
const replyForm = e.target.closest(‘.ev-comments__reply-form’);
if (replyForm) {
e.preventDefault();
submitReply(replyForm);
}
});
loadComments(true);
}
document.addEventListener(‘DOMContentLoaded’, function () {
document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
});
})();
Trending
Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspectsNews
|Lucy Mumbi
|37 minutes ago
Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeatSports
|Erick Kariuki
|1 hour ago
Portugal edge Croatia in dramatic finish to book last-16 spotSports
|The New Times
|2 days ago
Morocco continue historic rise with record-breaking World Cup victory against CanadaSports
|Erick Kariuki
|9 hours ago
UN Rights Chief Volker Türk issues ‘Red Alert’ over escalating violence in Sudan’s El ObeidNews
|Mary Wambui
|1 day ago
Somalia intelligence agency kills Al-Shabaab mortar unit leader in Basra operationSomalia
|Bashir Mbuthia
|11 hours ago
IGAD pushes regional action to tackle plastic pollutionNews
|Rachael Mutabasi
|20 hours ago
Court declares Ruaraka School land public, rules Sh1.5 billion payout illegalNews
|Carolyne Kubwa
|12 hours ago
Ethiopia coffee exports hit record Sh388 billion on rising global demandRegional
|Bashir Mbuthia
|1 day ago
Egypt end 92-year wait to reach World Cup last 16News
|Erick Kariuki
|1 day ago