Discover the new tram-train between Nantes and Châteaubriant: an asset for the region in 2025

The Nantes-Châteaubriant tram-train is poised to become a key mobility driver by 2025, strengthening service between the Nantes metropolitan area and northern Loire-Atlantique. With a significant increase in daily journeys, attractive fares, and rising ridership, this line is boosting travel and supporting sustainable regional development. Operated by SNCF and developed using Alstom technology, this new tram-train plays a central role in the Pays de la Loire Region’s strategy to improve public transport and promote green mobility. The gradual expansion of services reflects a clear commitment to adapting the infrastructure to growing needs while integrating with local networks such as the Nantes Métropole TAN network. This connection is also part of a broader context of cooperation with the Brittany Region and interregional TER (regional express train) projects.

A major upgrade to the Nantes-Châteaubriant tram-train service in 2025

Since the beginning of 2025, the number of daily journeys has increased significantly, reaching 50 trains on weekdays and 30 on weekends, thus boosting travel options for residents of the Pays de la Mée and Loire-Atlantique regions.

  • 🛤️
  • 8 daily round trips Nantes-Châteaubriant 🚉
  • 12 round trips Nantes-Nort-sur-Erdre 🚈

5 round trips Nantes-Sucé-sur-Erdre

Extending service until 10:35 pm on Friday evenings facilitates connections to TGV trains towards Paris or Strasbourg, thereby increasing travel flexibility.

  • A service for everyday life and the local area
  • ✅ Enhanced service to meet the challenges of sustainable mobility and the fight against private car use
  • ✅ 64 km line serving seven strategic towns, including Châteaubriant and La Chapelle-sur-Erdre
✅ Integration with local networks and upcoming transport projects in the Pays de la Loire region✅ Greater comfort and frequency thanks to the involvement of stakeholders like Keolis and Nantes MétropoleDay 🚆
Number of journeys 🕒Last departure from Nantes 🕘Monday to Thursday
508:00 PMFriday
5010:35 PMSaturday and Sunday

30

8:00 PM Ridership is growing rapidly and fares are tailored to the local population.Ridership is showing remarkable positive growth, with over one million passengers expected in 2023, representing a 45% increase between 2021 and 2023.

  • This success illustrates the relevance of this line, although it has not yet met initial projections. SNCF emphasizes the crucial role of this service, which carries approximately 4,500 passengers daily.

📈 Strong growth driven by service quality

💼 Commuter pass at €45/month, widely supported by employers

  • 🌱 Aligned with regional objectives for ecological transition and improved accessibility
  • This attractive pricing model promotes accessibility and encourages commuters to choose the tram-train over the car, thus helping to reduce road congestion and limit the region’s carbon footprint. Specific offers and local impact on mobility
  • 🚌 Integration with the Nantes Métropole TAN network for seamless connections
📲 Effective communication via WhatsApp for real-time updates on schedules and construction work

🏢 Logistical support from local partners like La Poste, optimizing the transport chain

  1. Future prospects: extension and interregional connection
  2. The line is preparing for a new phase of expansion starting in December 2025 with:
  3. 🔄 Increase to 25 round trips between Nantes and Nort-sur-Erdre

📅 5 additional trips on Saturdays

🚆 8 round trips on SundaysThis expansion supports the increasing demand and paves the way for future interconnection with the Brittany region, notably with a direct TER (regional express train) link between Rennes and Nantes via Châteaubriant, an initiative that could transform regional mobility.
Extension 📈Current routesPlanned routes December 2025
Nantes ↔ Nort-sur-Erdre12 round trips25 round trips
Saturday5 additional trips

Sunday

At the same time, SNCF is continuing essential maintenance work to guarantee the longevity and reliability of the service, despite a slight disruption to the schedule that will continue until March 2025. Discover the new tram-train between Nantes and Châteaubriant: an asset for the region in 2025 Choose a data point to display: Train frequency
Number of daily trips Fares (€) Daily users /* * Interactive infographic on the Nantes-Châteaubriant tram-train 2025 * Fictitious data from the 2025 project * All strings are in French and easily editable in the variable ‘texts’ * Chart.js library used in CDN (version 4.3.0) * Accessible and efficient, without heavy additional dependencies. */ // French texts for easy internationalization const texts = { title: “Discover the new tram-train between Nantes and Châteaubriant: an asset for the region in 2025”, selectionLabel: “Choose a data point to display:”, frequentiel: “Train frequency per hour”, routes: “Number of daily trips”, fares: “Fares (€)”, users: “Daily users”, descriptionFrequency: “On average, a train passes every 15 to 45 minutes depending on the time of day, facilitating daily travel.”, descriptionRoutes: “The tram-train offers approximately 40 trips per day in each direction, ensuring regular and reliable service.”, descriptionFares: “Affordable fares for all travelers, with prices tailored to regular and occasional users.” descriptionUsers: “More than 3,000 daily users are expected, which helps reduce road traffic and pollution.” colors: { frequency: “#1f78b4”, routes: “#33a02c”, fares: “#e31a1c”, users: “#ff7f00” } }; / Structured simulated data for each category // 1) Frequency: trains per hour – dummy data simulating a daily schedule const dataFrequency = { labels: texts.TimeAxis, description: texts.FrequencyDescription, color: texts.colors.frequency, label: texts.frequency }; // 2) Number of daily trips – total in each direction const dataTrips = { description: texts.descriptionTrips, color: texts.colors.trips, label: texts.trips }; / 3) Fares in euros (€) const dataFares = { labels: texts.pricesCategories, description: texts.descriptionPrices, color: texts.colors.prices, label: texts.prices }; / 4) Estimated daily users const dataUsers = { description: texts.descriptionUsers, color: texts.colors.users, label: texts.users }; / Simple mapping for dynamic access const dataSets = { frequency: dataFrequency, trips: dataTrips, fares: dataFares, users: dataUsers }; const selectElement = document.getElementById(“choixInfo”); const descriptionEl = document.getElementById(“descriptionData”); const ctx = document.getElementById(“chartTramTrain”).getContext(“2d”); / Initial chart configuration (Bar chart) let chartInstance = null; / Function to create or update the chart based on the selection function afficherDonnees(type) { // Destroy the old instance to avoid layering if (chartInstance) chartInstance.destroy(); / Choose the chart type based on category for better readability let chartType = “bar”; let options = { responsive: true, animation: {duration: 700}, plugins: { legend: {display: false}, tooltip: { callbacks: { label: context => { let val = context.parsed.y !== undefined ? context.parsed.y: context.parsed.x; if(type === “rates”) return `${val} €`; if(type === “frequency”) return val + “trains/hour”; if(type === “users”) return val.toLocaleString(“fr-FR”) + “users”; if(type === “journeys”) return val + “journeys”; return val; } } }, title: { display: true, text: data.label, font: {size: 18, weight: ‘600’} } }, scales: {} }; // Adapt axes according to data type if(type === “frequency”) { options.scales = { y: { beginAtZero: true, title: {display:true, text:”Number of trains per hour”}, ticks: {stepSize:1} }, x: { title: {display:true, text:”Time of day”} } }; } else if(type === “journeys”) { options.scales = { y: { beginAtZero: true, title: {display:true, text:”Number of journeys”} }, x: { title: {display:true, text:”Direction”} } }; } else if(type === “tarifs”) { options.scales = { y: { beginAtZero: true, title: {display:true, text:”Price in €”}, ticks: { callback: val => val + “€” } }, x: { title: {display:true, text:”Tariff Type”} } }; } else if(type === “usagers”) { // Single use, simplified presentation, no multiple y-scale chartType = “bar”; options.scales = { y: { beginAtZero: true, title: {display:true, text:”Number of users”}, ticks: { callback: val => val.toLocaleString(“fr-FR”) } }, x: { title: {display:true, text:””} } }; } // Creating the Chart.js graph with the chosen data chartInstance = new Chart(ctx, { type: chartType, data: { labels: data.labels, datasets: [{ label: data.label, data: data.values, backgroundColor: data.couleur, borderRadius: 5, maxBarThickness: 50 }] }, options: options }); / Updating the accessible text description descriptionEl.textContent = data.description; descriptionEl.focus();

}

  • // Initialization with the default data
  • displayData(selectElement.value);
  • / // Handling the change event on the select element for dynamic updates

selectElement.addEventListener(“change”, e => { displayData(e.target.value); });

/*

* If you wish to enrich the data using a free public API,

  • * here is an example of a free weather API call (Open-Météo) for Nantes
  • * (useful for a future extension displaying weather conditions around the tram)
  • *

* Free public API without a key: https://open-meteo.com/

* Example URL:

* https://api.open-meteo.com/v1/forecast?latitude=47.2184&longitude=-1.5536&hourly=temperature_2m
*

* JSON response excerpt:
* {

* “latitude”:47.2184,
* “longitude”:-1.5536,

* “hourly”: {
* }

* }
*/ Impact of the tram-train on Châteaubriant and the surrounding communities

cc-castelbriantais
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.