CS Duale reiterates climate change target in first Kenya Forest Service visit
CS Duale reiterates climate change target in first Kenya Forest Service visit
Read this story aloud
Listen to the clean text version of this article
Ready
3 min listen
Audio reading is not supported on this browser.
The visit marked Duale’s initial efforts to familiarise himself with the ministry’s key areas during his early days in office
On Monday, Aden Duale, Cabinet Secretary for Environment, Climate Change, and Forestry, visited the Kenya Forest Service (KFS) headquarters in Karura, Nairobi.
The visit marked Duale’s initial efforts to familiarise himself with the ministry’s key areas during his early days in office.
Accompanied by Gitonga Mugambi, the Forestry Principal Secretary, Duale was received by the Kenya Forest Service leadership, including Chief Conservator of Forests Alex Lemarkoko and KFS Board Chairman Titus Korir.
More To Read
- The world has the science to transform food systems: The next frontier is scaling it
- A Super El Niño is coming: Five hard‑won lessons the world can learn from Africa
- Slum residents urged to adopt ‘localised solutions’ to mitigate climate change effects
- How the cocoa price crash is crushing West African farmers
- Nearly 60 people killed in Ivory Coast floods since May
- EU, IOM launch regional programme to tackle climate displacement, response
The formalities included an inspection of a guard of honour presented by Kenya Forest officers, as well as discussions with the KFS Board, management, and staff.
Duale underscored the crucial role of environmental conservation in achieving Kenya’s national target of 30 per cent tree cover. This goal is part of the broader national strategy to combat climate change and ensure sustainable development in the country.
After taking over the ministry from CS Soipan Tuya, who was appointed to lead the defence docket, Duale highlighted the urgent need to rehabilitate Nairobi’s rivers, which have suffered significant pollution over the years.
Latest Stories
- Mandera anti-illicit alcohol drive intensifies as officers target brewing and distribution rings
- Treasury denies claims government plans to borrow Sh1 trillion from sacco savings for infrastructure fund
- Police to mount checkpoints across Nairobi ahead of 2026 Saba Saba commemoration, warn against unlawful acts
- Government to launch forceful disarmament in Tana River County after amnesty ends
The rivers, contaminated by industrial waste, agricultural runoff, and encroachment by private entities, have become a focal point for his environmental agenda.
Environment CS Aden Duale plants a tree at the Kenya Forest Service (KFS) headquarters in Karura, Nairobi County on Monday, August 19, 2024. (Phoot: Aden Duale/X)
Environment CS Aden Duale plants a tree at the Kenya Forest Service (KFS) headquarters in Karura, Nairobi County on Monday, August 19, 2024. (Phoot: Aden Duale/X)
Duale stated that Nairobi, as the host city for the United Nations Environment Programme (UNEP), has a responsibility to restore its reputation as a green city.
To achieve this, he plans to collaborate closely with Nairobi Governor Johnson Sakaja, with their joint efforts focusing on rejuvenating the city’s green spaces, which have been under pressure due to urban expansion and environmental degradation.
During his address, Duale issued a stern warning to those who have encroached on forested areas and riparian zones. He declared that his leadership would not tolerate such activities.
“We cannot allow the illegal use of riparian land for construction or farming,” he said.
Duale also emphasised the importance of adhering to the law in environmental conservation efforts. He emphasised the importance of removing unauthorised dumpsites along the banks of the Nairobi River as part of a larger river restoration project.
In a post on his social media accounts, Duale reiterated his commitment to balancing economic growth with environmental preservation. He emphasised the need for Kenya to continue its leadership in sustainable practices.
“Our focus will be on balancing economic growth with environmental preservation, ensuring Kenya’s continued leadership in sustainable practices,” he said.
Other Topics To Read
Top Stories Today
- Saba Saba 2026: Police announce checkpoints in Nairobi
- Government denies plan to tap sacco savings for National Infrastructure Fund
- Woman arrested as Mandera intensifies war on illicit alcohol trade
- Government warns Tana River gun holders as forceful disarmament looms
- Suspects held over Kisii Linda Mwananchi violence as court awaits case file
- Duale, Oduor accused of defying High Court order on KNDI appointments
`;
}
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
Government to launch forceful disarmament in Tana River County after amnesty endsCoast
|Abdirahman Khalif
|5 hours ago
Peace team sounds alarm over gang attacks on worship centres and peaceful gatheringsNational
|Abdirahman Khalif
|5 hours ago
Mandera anti-illicit alcohol drive intensifies as officers target brewing and distribution ringsNorthern Kenya
|Abdirahman Khalif
|4 hours ago
Burkina Faso tightens grip on NGOs with new ban on exploitative humanitarian imagesAfrica
|Rachael Mutabasi
|18 hours ago
Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeatSports
|Erick Kariuki
|1 day ago
CS Duale, Attorney General Oduor face contempt case over failure to implement KNDI court orderNews
|Carolyne Kubwa
|7 hours ago
Supreme Court rules public pension schemes don’t have to follow government procurement rulesNational
|Carolyne Kubwa
|10 hours ago
Eastern Africa ramps up cross-border disease preparedness after regional simulation exerciseRegional
|Farhiya Hussein
|11 hours ago
EU appoints new envoy to Kenya as Somalia ambassador moves to senior Africa role in major diplomatic reshuffleRegional
|Abdirahman Khalif
|15 hours ago
2026 FIFA World Cup fixtures (Round of 16)Infographics
|Charity Pancras
|12 hours ago