How do feathers grow?

, 25 August 2022
How do feathers grow?
Moulting Robin © Roger Wilmshurst

By Charlotte Owen

WildCall Officer

Feathers are made in feather follicles, just as hairs are made in hair follicles. Both feathers and hair are dead structures, so they cannot repair themselves and must be shed and replaced when damaged or worn out. This process is known as moult.

New feathers look quite different when they first start growing, emerging from the skin as spiny structures called pin feathers. Each new feather is enclosed in a shiny protective sheath, so it retains this spiny structure as it grows longer and the new feather barbs develop within it. Eventually the new feather unfurls, starting from the tip and gradually progressing down towards the base.

moulting Curlew © Barry Yates

Most birds undergo a complete moult once a year. It’s often a gradual process, starting at a focus point on the wings or tail and progressing out from there in an orderly fashion. The two feathers closest to the starting point are the first to fall out, and when their replacements are roughly half-grown, the next feathers in line are shed, and this continues until moult reaches the end of the wing or tail. Robins, Blue Tits, Blackbirds and other garden birds undergo a late-summer moult, after the busy breeding season, and it takes about five weeks to complete. This means they can still fly during moult, though they might not be quite as swift as usual. Some species opt for a faster moult, especially migratory birds in a hurry to grow in their new plumage before an imminent departure date, and they may become briefly flightless as a result.

Ducks, geese and swans opt to lose all of their flight feathers at once. Being heavier birds with relatively short wings, they would be significantly impaired by the loss of one or two flight feathers, so it makes sense for them to shed them all in one go. This makes them very vulnerable but for a much shorter period.

What about baby birds?

Juveniles have to grow all their feathers at once, which is a much more intensive process than a gradual moult. It takes a huge amount of energy and this is one reason why they are always demanding so much food. Their feathers will grow faster if they’ve had more to eat and the variable growth rate results in alternating bands of dark and light on the finished feather, known as growth bars. Each pair of light and dark bands corresponds to a 24 hour period, and measuring the width of these bands can provide information about the baby bird’s daily nutritional intake – with better-fed birds having wider growth bars.

young Wood Pigeon © Glenn Norris

Juvenile feathers are softer and weaker than adult feathers, as a result of the rapid simultaneous growth, and they wear out more quickly. When juveniles moult into their adult plumage, they can do so gradually and so develop a stronger, sleeker adult plumage.

Most garden birds moult straight into their final adult plumage but others, like gulls, undergo several moults over several years before they attain their full adult plumage. This means it’s possible to age a bird based on its appearance, though it’s not always easy!

Leave a comment
Time Δ Debug Message - Perch Runway 3.2
1782980099.58810 [906] SELECT p.pagePath, pr.routePattern, pr.routeRegExp, p.pageTemplate, pr.routeOrder, s.settingValue AS siteOffline FROM swt_pages_staging p LEFT JOIN swt_page_routes pr ON p.pageID=pr.pageID LEFT JOIN swt_settings s ON s.settingID='siteOffline' UNION SELECT NULL AS pagePath, pr2.routePattern, pr2.routeRegExp, pr2.templatePath AS pageTemplate, pr2.routeOrder, NULL AS siteOffline FROM swt_page_routes pr2 WHERE templateID!=0 ORDER BY routeOrder ASC, pagePath ASC
1782980099.61490.0269Matched route: news/[slug:s]
1782980099.61510.0001Server address: 216.73.217.103
1782980099.61510Using master page: /templates/pages/blog/post.php
1782980099.61510Page arguments:
Array
(
    [0] => /news/how-do-feathers-grow
    [s] => how-do-feathers-grow
    [1] => how-do-feathers-grow
)
1782980099.61550.0004 [1] SELECT * FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1782980099.61650.001 [86] SELECT DISTINCT settingID, settingValue FROM swt_settings WHERE userID=0
1782980099.61860.0021 [1] SELECT locationID FROM swt_shop_tax_locations WHERE locationIsHome=1 LIMIT 1
1782980099.61940.0008INSERT INTO swt_shop_cart(memberID,locationID,currencyID,cartPricing,cartProperties) VALUES(NULL,'1',47,'standard','[]')
1782980099.62150.0021 [1] SELECT * FROM swt_shop_cart WHERE cartID=22512806
1782980099.62220.0006 [1] SELECT * FROM swt_shop_cart WHERE cartID=22512806
1782980099.62290.0007 [nil] SELECT * FROM swt_shop_sales WHERE saleFrom<='2026-07-02 08:15:00' AND saleTo>'2026-07-02 08:15:00' AND saleActive=1 AND saleDeleted IS NULL ORDER BY saleOrder ASC
1782980099.62450.0016 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='how-do-feathers-grow')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-07-02 08:15:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 10
1782980099.62710.0026 [1] SELECT FOUND_ROWS() AS `count`
1782980099.62790.0008 [1] SELECT * FROM swt_blog_posts WHERE postID=2853 AND postStatus='Published' AND postDateTime<='2026-07-02 08:15:00'
1782980099.6290.0011 [13] SELECT * FROM swt_blog_sections ORDER BY sectionTitle ASC
1782980099.62970.0007 [1] SELECT * FROM swt_blogs ORDER BY blogTitle ASC
1782980099.63040.0007 [1] SELECT * FROM swt_categories WHERE catID=181 LIMIT 1
1782980099.63110.0007Using template: /templates/blog/post.html
1782980099.63140.0003 [162] SELECT catID, catPath FROM swt_categories
1782980099.63240.001 [1] SELECT * FROM swt_blog_posts WHERE postStatus='Published' AND postDateTime<='2026-07-02 08:15:00' AND postSlug='how-do-feathers-grow'
1782980099.65380.0214Using template: /templates/blog/post.html
1782980099.65440.0007 [250] SELECT country, countryID FROM swt_shop_countries WHERE countryActive=1 ORDER BY country ASC
1782980099.65630.0018Using template: /templates/pages/attributes/seo.html
1782980099.65650.0003 [1] SELECT regionID, regionTemplate, regionPage, regionRev AS rev FROM swt_content_regions WHERE regionKey='Banner image' AND (regionPage='/news/post' OR regionPage='*')
1782980099.65760.001 [nil] SELECT * FROM ( SELECT idx.itemID, c.regionID, idx.pageID, c.itemJSON, idx2.indexValue as sortval FROM swt_content_index idx JOIN swt_content_items c ON idx.itemID=c.itemID AND idx.itemRev=c.itemRev AND idx.regionID=c.regionID JOIN swt_content_index idx2 ON idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev AND idx2.indexKey='_order' WHERE ((idx.regionID=104 AND idx.itemRev=0)) AND idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev ) as tbl GROUP BY itemID, pageID, itemJSON, sortval, regionID ORDER BY sortval ASC
1782980099.6590.0014 [82] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageDepth >=0 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1782980099.66240.0034 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1782980099.66320.0008 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1782980099.66550.0023Using template: /templates/navigation/ps_nav_template.html
1782980099.66550.0001 [6] Using template: /templates/navigation/ps_nav_template_children.html
1782980099.66640.0009 [4] Using template: /templates/navigation/ps_nav_template_children.html
1782980099.66680.0005 [29] Using template: /templates/navigation/ps_nav_template_children.html
1782980099.66930.0025 [10] Using template: /templates/navigation/ps_nav_template_children.html
1782980099.67030.001 [7] Using template: /templates/navigation/ps_nav_template_children.html
1782980099.67090.0006 [9] Using template: /templates/navigation/ps_nav_template_children.html
1782980099.67330.0024 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' OR pageSortPath='/news/post' LIMIT 1
1782980099.67450.0012 [1] SELECT * FROM swt_pages_staging WHERE pageHidden=0 AND pageNew=0 AND pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition
1782980099.67740.0029 [1] Using template: /templates/navigation/breadcrumbs.html
1782980099.67810.0006Using template: /templates/blog/post.html
1782980099.67840.0004 [1] SELECT * FROM swt_blog_authors WHERE authorID='1' LIMIT 1
1782980099.67940.001Using template: /templates/blog/author.html
1782980099.67990.0005 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='how-do-feathers-grow')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-07-02 08:15:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 1
1782980099.68220.0023 [1] SELECT FOUND_ROWS() AS `count`
1782980099.68290.0007 [1] Using template: /templates/blog/post.html
1782980099.68690.004Using template: /templates/blog/comment_form.html
1782980099.68810.0012 [nil] SELECT * FROM swt_blog_comments WHERE 1=1 AND postID=2853 AND commentStatus='LIVE' ORDER BY FIELD(webmentionType, 'like', 'repost', 'comment', NULL) ASC, commentDateTime ASC
1782980099.73990.0519 [0] Using template: /templates/blog/comment.html
1782980099.74020.0002Using template: /templates/blog/post.html
1782980099.74050.0003 [1] SELECT * FROM swt_blog_authors WHERE authorID='1' LIMIT 1
1782980099.74150.001 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/what-we-do' OR pageSortPath='/what-we-do' LIMIT 1
1782980099.74220.0007 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-002' LIMIT 1
1782980099.74280.0006 [7] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-002%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1782980099.74530.0026 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1782980099.7460.0006 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1782980099.74810.0021 [6] Using template: /templates/navigation/footer-nav.html
1782980099.7490.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
1782980099.74960.0006 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
1782980099.75020.0005 [38] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' ORDER BY pageTreePosition ASC
1782980099.75290.0027 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1782980099.75350.0006 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1782980099.75560.0021 [10] Using template: /templates/navigation/footer-nav.html
1782980099.75990.0043 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/visit' OR pageSortPath='/visit' LIMIT 1
1782980099.76080.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-004' LIMIT 1
1782980099.76130.0005 [30] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-004%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1782980099.76390.0026 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1782980099.76470.0008 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1782980099.76680.0021 [29] Using template: /templates/navigation/footer-nav.html
1782980099.76970.0029 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
1782980099.77060.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
1782980099.77130.0007 [11] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1782980099.77360.0023 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1782980099.77420.0006 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1782980099.77620.002 [10] Using template: /templates/navigation/footer-nav.html
1782980099.77750.0013Request time: 0.1931
1782980099.77760Process time: 0.1929
1782980099.77760Memory: 1.6287