(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-WVPM8SFZ'); Metro Route Search - All India Metro Route Map (function () { // GA4/GTM tracking — one push per click on the navbar's "nearest station" // geo-pin icon. Plain <a href> link (no client-side routing), so this just // records the click before the browser's normal navigation proceeds — no // preventDefault/delay needed. Same pattern as the locale-picker's own // ym-locale-option tracking below. var navNearestBtn = document.querySelector('.ym-nearest-station-nav'); if (navNearestBtn) { navNearestBtn.addEventListener('click', function () { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'ym_nav_nearest_station_click' }); }); } })(); (function () { // GA4/GTM tracking — one push per language actually chosen from the // locale picker modal. Plain <a href> links (no client-side routing), so // this just records the click before the browser's normal navigation // proceeds — no preventDefault/delay needed. Skips the currently-active // locale's own row (re-clicking your current language isn't a "switch"). document.querySelectorAll('.ym-locale-option').forEach(function (el) { el.addEventListener('click', function () { if (el.getAttribute('data-locale-active') === '1') return; window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'ym_language_switch', to_locale: el.getAttribute('data-locale-code') || '' }); }); }); })();

Search metro route, stations, & nearby

Filter by city

Loading cities…

Recently viewed


Your saved routes

(function () { 'use strict'; var STRAPI_BASE = "https:\/\/metro.yoinfra.com"; var BASE_PATH = ""; // Current locale's code ('en' when default) and URL prefix ('' for // English). Search results here span stations/neighborhoods/attractions // across ANY city/zone — not pre-scoped to one zone the way // route-search.php is — so, same as nearby-search.php's fix, the locale // prefix used per result is NOT a flat constant: buildLocalePrefix() below // re-validates against each result's own zone_id, mirroring // LocaleResolver::isLocaleAllowedForZone()'s English/Hindi-universal, // regional-locale-only-in-its-mapped-zone rule. Previously this carried // the page's own locale through unconditionally — e.g. searching "Agra" // from a /gu/ (Gujarati) page produced an invalid /gu/agra-cantt-... link, // since Gujarati is Ahmedabad/Surat-only, not Agra's zone. var LOCALE_CODE = "en"; var LOCALE_PREFIX = ""; // Mirrors config/app.php's NETWORK_LOCALE_MAP (zone_id => regional locale // code) — same source of truth LocaleResolver::isLocaleAllowedForZone() // reads server-side. Duplicated here (JSON) since the redirect decision // happens entirely client-side, per search result. var NETWORK_LOCALE_MAP = {"15":"kn","14":"mr","36":"mr","39":"mr","22":"mr","24":"mr","17":"ta","16":"te","18":"ml","19":"bn","23":"gu","38":"gu"}; // Resolve the correct locale-prefixed path for a redirect to `path`, given // the destination's own zone_id (or null/undefined if unknown) — English // and Hindi are universal, a regional locale is only valid when zoneId // maps to THIS locale in NETWORK_LOCALE_MAP; anything else falls back to // plain English (no prefix), matching linkTo()'s "safe default". function buildLocalePrefix(zoneId) { if (LOCALE_CODE === 'en') return ''; if (LOCALE_CODE === 'hi') return LOCALE_PREFIX; if (zoneId === undefined || zoneId === null) return ''; // unknown zone — safe default is English return NETWORK_LOCALE_MAP[String(zoneId)] === LOCALE_CODE ? LOCALE_PREFIX : ''; } function localeUrl(path, zoneId) { var prefix = buildLocalePrefix(zoneId); return BASE_PATH + (prefix ? '/' + prefix : '') + path; } // ── i18n strings (from `translations`, page_type=home-search) ─────────── var I18N = { couldntLoadCities: "Couldn't load cities.", typeStation: "Station", typeArea: "Area", typeAttraction: "Attraction", moreSavedSuffix: "more saved routes", searching: "Searching\u2026", noResultsPrefix: "No results for", clearFilterSentence: "Try clearing the {city} filter.", tryStationPlace: "Try a station name, place, or attraction.", searchUnavailable: "Search unavailable \u2014 please try again." }; // ── localStorage — city filter is new here; recent-views and saved-routes // reuse the SAME keys/APIs already used elsewhere in v2 (page-footer.php // writes ym_recent_views; saved-routes.js owns window.YoMetroSavedRoutes). var LS_CITY = 'ym_city'; var LS_RECENT = 'ym_recent_views'; function lsGet(key) { try { return JSON.parse(localStorage.getItem(key)); } catch (e) { return null; } } function lsSet(key, val) { try { localStorage.setItem(key, JSON.stringify(val)); } catch (e) {} } function getRecent() { return lsGet(LS_RECENT) || []; } function getCity() { return lsGet(LS_CITY) || ''; } function setCity(c) { lsSet(LS_CITY, c); } function getSaved() { return (window.YoMetroSavedRoutes && window.YoMetroSavedRoutes.getAll) ? window.YoMetroSavedRoutes.getAll() : []; } function esc(s) { return String(s == null ? '' : s).replace(/[&<>"]/g, function (m) { return { '&': '&', '<': '<', '>': '>', '"': '"' }[m]; }); } var TYPE_META = { station: { icon: 'bi-train-front-fill', color: '#0ea5e9', label: I18N.typeStation }, nearby: { icon: 'bi-geo-alt-fill', color: '#10b981', label: I18N.typeArea }, attraction: { icon: 'bi-star-fill', color: '#f59e0b', label: I18N.typeAttraction } }; function typeMeta(t) { return TYPE_META[t] || { icon: 'bi-search', color: '#94a3b8', label: '' }; } // ── DOM refs ──────────────────────────────────────────────────────────── var input = document.getElementById('hsInput'); var dropdown = document.getElementById('hsDropdown'); var defaultPane = document.getElementById('hsDefault'); var resultsPane = document.getElementById('hsResults'); var resultsList = document.getElementById('hsResultsList'); var clearBtn = document.getElementById('hsClearBtn'); var cityChipsWrap = document.getElementById('hsCityChips'); var activeCityChip = document.getElementById('hsActiveCityChip'); var activeCityName = document.getElementById('hsActiveCityName'); var recentSection = document.getElementById('hsRecentSection'); var recentList = document.getElementById('hsRecentList'); var savedSection = document.getElementById('hsSavedSection'); var savedList = document.getElementById('hsSavedList'); var activeCity = getCity(); var debounceTimer = null; var dropdownOpen = false; var cityChipEls = []; // ── City chips — fetched from Strapi (cities with an active metro network), // not hardcoded, so this stays correct as networks are added ────────── function loadCityChips() { var url = STRAPI_BASE + '/api/' + "cities" + '?fields[0]=name' + '&filters[metro_networks][network_status][$eq]=active' + '&sort=name:asc&pagination[pageSize]=15'; fetch(url).then(function (r) { return r.json(); }).then(function (json) { var cities = (json.data || []).map(function (c) { return c.name; }) .filter(function (v, i, arr) { return arr.indexOf(v) === i; }); cityChipsWrap.innerHTML = ''; cityChipEls = cities.map(function (c) { var btn = document.createElement('button'); btn.type = 'button'; btn.className = 'city-chip btn btn-sm'; btn.dataset.city = c; btn.style.cssText = 'border:1.5px solid #e2e8f0;border-radius:20px;padding:3px 12px;' + 'font-size:.78rem;font-weight:500;background:#f8fafc;color:#475569;transition:all .15s'; btn.textContent = c; btn.addEventListener('click', function (e) { e.stopPropagation(); applyCity(activeCity === c ? '' : c); input.focus(); }); btn.addEventListener('mouseenter', function () { if (this.dataset.city !== activeCity) { this.style.background = '#f0eeff'; this.style.borderColor = '#a78bfa'; this.style.color = '#5D4DA8'; } }); btn.addEventListener('mouseleave', function () { if (this.dataset.city !== activeCity) { this.style.background = '#f8fafc'; this.style.borderColor = '#e2e8f0'; this.style.color = '#475569'; } }); cityChipsWrap.appendChild(btn); return btn; }); if (activeCity) highlightCityChip(); }).catch(function () { cityChipsWrap.innerHTML = '<div class="text-muted small">' + esc(I18N.couldntLoadCities) + '</div>'; }); } function highlightCityChip() { cityChipEls.forEach(function (btn) { var on = btn.dataset.city === activeCity; btn.style.background = on ? '#ede9fe' : '#f8fafc'; btn.style.color = on ? '#5D4DA8' : '#475569'; btn.style.borderColor = on ? '#5D4DA8' : '#e2e8f0'; btn.style.fontWeight = on ? '700' : '500'; }); } function applyCity(city) { activeCity = city; setCity(city); if (city) { activeCityName.textContent = city; activeCityChip.classList.remove('d-none'); activeCityChip.style.display = 'inline-flex'; } else { activeCityChip.classList.add('d-none'); activeCityChip.style.display = 'none'; } highlightCityChip(); if (input.value.trim().length >= 2) triggerSearch(input.value.trim()); } activeCityChip.addEventListener('click', function (e) { e.stopPropagation(); applyCity(''); input.focus(); }); // ── Recently viewed (reads what page-footer.php already writes) ───────── function renderRecent() { var items = getRecent(); if (!items.length) { recentSection.classList.add('d-none'); return; } recentSection.classList.remove('d-none'); recentList.innerHTML = ''; items.slice(0, 5).forEach(function (item) { var m = typeMeta(item.type); var a = document.createElement('a'); a.href = item.url; a.className = 'text-decoration-none d-flex align-items-center gap-2 py-2 px-1 rounded-2'; a.style.cssText = 'color:#334155;font-size:.875rem;transition:background .12s'; a.onmouseover = function () { this.style.background = '#f8fafc'; }; a.onmouseout = function () { this.style.background = 'transparent'; }; a.innerHTML = '<i class="bi ' + esc(m.icon) + '" style="color:' + esc(m.color) + ';font-size:.85rem;flex-shrink:0;width:18px;text-align:center"></i>' + '<span class="text-truncate flex-grow-1">' + esc(item.title) + '</span>' + (item.city ? '<span class="text-muted" style="font-size:.75rem;flex-shrink:0">' + esc(item.city) + '</span>' : '') + '<i class="bi bi-arrow-up-left text-muted" style="font-size:.7rem;flex-shrink:0"></i>'; recentList.appendChild(a); }); } // ── Saved routes (reads window.YoMetroSavedRoutes, already implemented) ── function renderSaved() { var routes = getSaved(); if (!routes.length) { savedSection.classList.add('d-none'); return; } savedSection.classList.remove('d-none'); savedList.innerHTML = ''; routes.slice(0, 3).forEach(function (r) { var a = document.createElement('a'); a.href = r.url; a.className = 'text-decoration-none d-flex align-items-center gap-2 py-2 px-1 rounded-2'; a.style.cssText = 'color:#334155;font-size:.875rem;transition:background .12s'; a.onmouseover = function () { this.style.background = '#f8fafc'; }; a.onmouseout = function () { this.style.background = 'transparent'; }; a.innerHTML = '<i class="bi bi-signpost-2-fill" style="color:#5D4DA8;font-size:.85rem;flex-shrink:0;width:18px;text-align:center"></i>' + '<span class="text-truncate flex-grow-1">' + esc(r.fromName) + ' → ' + esc(r.toName) + '</span>' + '<span class="text-muted" style="font-size:.75rem;flex-shrink:0">' + esc(r.networkShortName || '') + '</span>'; savedList.appendChild(a); }); if (routes.length > 3) { var more = document.createElement('button'); more.type = 'button'; more.className = 'btn btn-link btn-sm p-0 mt-1 text-purple text-decoration-none'; more.style.fontSize = '.78rem'; more.textContent = '+ ' + (routes.length - 3) + ' ' + I18N.moreSavedSuffix; more.onclick = function () { var drawer = document.getElementById('savedRoutesDrawer'); if (drawer && window.bootstrap) window.bootstrap.Offcanvas.getOrCreateInstance(drawer).show(); closeDropdown(); }; savedList.appendChild(more); } } // ── Dropdown open/close ─────────────────────────────────────────────────── function openDropdown() { if (dropdownOpen) return; dropdownOpen = true; dropdown.classList.remove('d-none'); input.setAttribute('aria-expanded', 'true'); } function closeDropdown() { dropdownOpen = false; dropdown.classList.add('d-none'); input.setAttribute('aria-expanded', 'false'); defaultPane.classList.remove('d-none'); resultsPane.classList.add('d-none'); } function showDefaultPane() { renderRecent(); renderSaved(); defaultPane.classList.remove('d-none'); resultsPane.classList.add('d-none'); openDropdown(); } // ── Search — parallel Strapi queries across the three real entity types ── var activeAbort = null; function buildStationUrl(q) { var url = STRAPI_BASE + '/api/' + "metro-stations" + '?fields[0]=name&fields[1]=slug&populate[city][fields][0]=name' + '&populate[metro_network][fields][0]=zone_id' + '&filters[name][$containsi]=' + encodeURIComponent(q) + '&pagination[pageSize]=5'; if (activeCity) url += '&filters[city][name][$eq]=' + encodeURIComponent(activeCity); return url; } function buildNeighborhoodUrl(q) { var url = STRAPI_BASE + '/api/' + "neighborhoods" + '?fields[0]=name&fields[1]=slug&populate[city][fields][0]=name' + '&populate[city][populate][metro_networks][fields][0]=zone_id' + '&populate[city][populate][metro_networks][fields][1]=network_status' + '&filters[name][$containsi]=' + encodeURIComponent(q) + '&pagination[pageSize]=5'; if (activeCity) url += '&filters[city][name][$eq]=' + encodeURIComponent(activeCity); return url; } function buildAttractionUrl(q) { var url = STRAPI_BASE + '/api/' + "attractions" + '?fields[0]=name&fields[1]=slug&populate[city][fields][0]=name' + '&filters[name][$containsi]=' + encodeURIComponent(q) + '&filters[active][$eq]=true' + '&pagination[pageSize]=5'; if (activeCity) url += '&filters[city][name][$eq]=' + encodeURIComponent(activeCity); return url; } function triggerSearch(query) { clearTimeout(debounceTimer); if (activeAbort) { activeAbort.abort(); activeAbort = null; } defaultPane.classList.add('d-none'); resultsPane.classList.remove('d-none'); resultsList.innerHTML = '<div class="px-3 py-3 text-muted small d-flex align-items-center gap-2">' + '<div class="spinner-border spinner-border-sm" role="status"></div>' + esc(I18N.searching) + '</div>'; openDropdown(); debounceTimer = setTimeout(function () { var controller = new AbortController(); activeAbort = controller; Promise.all([ fetch(buildStationUrl(query), { signal: controller.signal }).then(function (r) { return r.json(); }).catch(function () { return { data: [] }; }), fetch(buildNeighborhoodUrl(query), { signal: controller.signal }).then(function (r) { return r.json(); }).catch(function () { return { data: [] }; }), fetch(buildAttractionUrl(query), { signal: controller.signal }).then(function (r) { return r.json(); }).catch(function () { return { data: [] }; }) ]).then(function (results) { activeAbort = null; var stations = (results[0].data || []).map(function (s) { var zoneId = (s.metro_network && s.metro_network.zone_id != null) ? s.metro_network.zone_id : null; return { type: 'station', name: s.name, city: s.city?.name || '', url: localeUrl('/' + s.slug, zoneId) }; }); var neighborhoods = (results[1].data || []).map(function (n) { // Neighborhoods have no direct network relation — resolve zone_id // via the city's metro_networks (first active one), same // convention as nearby-search.php's $_nsCityZoneById. var cityNetworks = (n.city && n.city.metro_networks) || []; var activeNet = cityNetworks.find(function (net) { return net.network_status === 'active'; }); var zoneId = activeNet ? activeNet.zone_id : null; return { type: 'nearby', name: n.name, city: n.city?.name || '', url: localeUrl('/metro-station-near-' + n.slug, zoneId) }; }); var attractions = (results[2].data || []).map(function (a) { // travel-guide is an EN-only page bucket (see forceEnglishLinkTo() / // static.php's EN-only split) — always unprefixed, regardless of // the current locale, unlike the station/nearby results above. return { type: 'attraction', name: a.name, city: a.city?.name || '', url: BASE_PATH + '/travel-guide/attraction-' + a.slug }; }); renderResults(query, stations.concat(neighborhoods, attractions)); }).catch(function (err) { if (err.name === 'AbortError') return; resultsList.innerHTML = '<p class="text-danger px-3 py-2 small mb-0">' + esc(I18N.searchUnavailable) + '</p>'; }); }, 280); } function renderResults(query, items) { resultsList.innerHTML = ''; if (!items.length) { var clearFilterHtml = I18N.clearFilterSentence.replace('{city}', '<strong>' + esc(activeCity) + '</strong>'); resultsList.innerHTML = '<div class="px-3 py-3 text-center">' + '<i class="bi bi-search text-muted d-block mb-1" style="font-size:1.4rem;opacity:.4"></i>' + '<p class="small text-muted mb-1">' + esc(I18N.noResultsPrefix) + ' <strong>' + esc(query) + '</strong></p>' + (activeCity ? '<p class="small text-muted mb-0">' + clearFilterHtml + '</p>' : '<p class="small text-muted mb-0">' + esc(I18N.tryStationPlace) + '</p>') + '</div>'; return; } var order = ['station', 'nearby', 'attraction']; var grouped = {}; items.forEach(function (item) { if (!grouped[item.type]) grouped[item.type] = []; grouped[item.type].push(item); }); order.forEach(function (type) { var group = grouped[type]; if (!group || !group.length) return; var m = typeMeta(type); var label = document.createElement('div'); label.style.cssText = 'padding:6px 12px 2px;font-size:.68rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#94a3b8;'; label.textContent = m.label + 's'; // English pluralization; translated labels may already be plural-appropriate in their own language resultsList.appendChild(label); group.forEach(function (item) { var a = document.createElement('a'); a.href = item.url; a.className = 'd-flex align-items-center gap-2 text-decoration-none px-3 py-2'; a.style.cssText = 'color:#1e293b;font-size:.875rem;transition:background .12s;border-bottom:1px solid #f1f5f9'; a.onmouseover = function () { this.style.background = '#f0eeff'; }; a.onmouseout = function () { this.style.background = 'transparent'; }; var escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); var highlighted = esc(item.name).replace(new RegExp('(' + escapedQuery + ')', 'gi'), '<mark style="background:#ede9fe;color:#5D4DA8;padding:0;border-radius:2px">$1</mark>'); a.innerHTML = '<i class="bi ' + esc(m.icon) + '" style="color:' + esc(m.color) + ';font-size:.85rem;flex-shrink:0;width:18px;text-align:center"></i>' + '<span class="flex-grow-1">' + highlighted + '</span>' + (item.city ? '<span class="text-muted" style="font-size:.75rem;flex-shrink:0">' + esc(item.city) + '</span>' : '') + '<i class="bi bi-arrow-right text-muted" style="font-size:.75rem;flex-shrink:0"></i>'; a.addEventListener('click', function () { // Pre-emptive write so it shows on return to home even before the // destination page's own page-footer.php tracker fires — same // shape/key so it dedupes cleanly either way. try { var list = getRecent().filter(function (r) { return r.url !== item.url; }); list.unshift({ url: item.url, title: item.name, type: item.type, city: item.city, ts: Date.now() }); lsSet(LS_RECENT, list.slice(0, 8)); } catch (e) {} // GA4/GTM tracking — one push per search result actually clicked // (the meaningful "search succeeded" signal here, since this box // fires a live query on every keystroke — tracking each query // would be noise, not signal). try { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'ym_home_search_result_click', search_query: query, result_type: item.type, result_name: item.name, city_filter: activeCity || null }); } catch (e) {} }); resultsList.appendChild(a); }); }); } // ── Input events ────────────────────────────────────────────────────────── input.addEventListener('focus', function () { if (this.value.trim().length >= 2) triggerSearch(this.value.trim()); else showDefaultPane(); }); input.addEventListener('input', function () { var q = this.value.trim(); clearBtn.classList.toggle('d-none', q.length === 0); if (q.length === 0) showDefaultPane(); else if (q.length >= 2) triggerSearch(q); }); clearBtn.addEventListener('click', function (e) { e.stopPropagation(); clearTimeout(debounceTimer); if (activeAbort) { activeAbort.abort(); activeAbort = null; } input.value = ''; clearBtn.classList.add('d-none'); showDefaultPane(); input.focus(); }); document.addEventListener('click', function (e) { if (!dropdown.contains(e.target) && e.target !== input && !activeCityChip.contains(e.target)) closeDropdown(); }); input.addEventListener('keydown', function (e) { if (e.key === 'Escape') { closeDropdown(); input.blur(); } }); // ── Init ────────────────────────────────────────────────────────────────── loadCityChips(); if (activeCity) applyCity(activeCity); })();
22+
Metro Networks
50+
Metro Lines
830+
Metro Stations
90k+
Metro Routes
(function () { var grid = document.getElementById('home-networks-grid'); var sortEl = document.getElementById('home-networks-sort'); if (!grid || !sortEl) return; // Captured once, in the original (status-sorted) DOM order — sorting // never mutates this array, only the order cards are appended in. var items = Array.prototype.slice.call(grid.querySelectorAll('.home-network-card-wrapper')); sortEl.addEventListener('change', function () { var mode = sortEl.value; if (mode === 'default') { items.forEach(function (item) { grid.appendChild(item); }); return; } var sorted = items.slice().sort(function (a, b) { if (mode === 'name-asc' || mode === 'name-desc') { var an = a.getAttribute('data-name') || ''; var bn = b.getAttribute('data-name') || ''; return mode === 'name-asc' ? an.localeCompare(bn) : bn.localeCompare(an); } var ac = (a.getAttribute('data-city') || '').toLowerCase(); var bc = (b.getAttribute('data-city') || '').toLowerCase(); return ac.localeCompare(bc); }); sorted.forEach(function (item) { grid.appendChild(item); }); }); })();

  • Keep yourself before yellow line before boarding (generally all platform have it).
  • Keep gap and distance from doors to allow other passengers to board the train.
  • If Station staff suggest something please follow the instructions.
  • Take care of your loose items like Saree, Dupatta, Dhoti and Bag etc. while boarding and de-boarding the train.
  • Take care of your Bag/Purse/Luggage/Mobile while traveling or waiting at metro stations.
  • Inform train operator in case any passenger/article stuck between train doors by pressing Passenger Emergency Alarm button/Handle.
  • Take care and keep eye on the children & infants while traveling with them.
  • Do not push co-passengers while boarding or de-boarding.
  • Do not make noise or play music openly in train and metro premise.
  • Do not fight with other passengers, if there is any issue get help from metro security.
  • Do not try to enter/exit when train doors are being close. better late than never.
  • Do not obstruct the closing of the train doors.
  • Show your metro smart card or token at the entry gate or exit gate for the opening of flaps.
  • Use of smart card gives you 10% discount on travel fee.
  • Please ensure that entry or exit with a travel smart card was followed by a valid the system. In case of mismatch penalty will be payable as per business rule of metro department.
  • Carrying token beyond exit gate is a punishable offence and attracts a fine or imprisonment.
  • The refund of unused token can be returned within 60 minutes of purchase from purchasing station only.

  • Kolkata Metro: First Metro in India First metro in India. It is first in India to have the third rail for power supply and the first to use fully metro coaches made in India by ICF & BEML.
  • Delhi Metro: Largest Metro System in India India's largest rapid transit/metro system. Having constructed a massive network of about 389 Km with 285 stations (including NOIDA-Greater NOIDA Corridor and Rapid Metro, Gurugram).
  • Rapid Metro Gurgaon: Fully Privately Financed India's first fully privately financed metro. Currently undertaken by Delhi Metro.
  • Noida Metro: Operated under Delhi Metro Currently undertaken by Delhi Metro, contracted for one year to operate.
  • Namma Metro: First metro in southern India First metro in southern India, the first to have the third rail for power supply in southern India, and the first to introduce Wi-Fi onboard trains.
  • Mumbai Metro: India's first PPP Metro India's first public private partnership (PPP) metro system with Reliance group. 14 lines and line extensions are at different stages of execution.
  • Jaipur Metro: Double Storey Elevated Double-story elevated road and Metro track project for the first time in the country.
  • Chennai Metro - Connects Two lines through loop line First metro rail in the country to connect two lines (blue & green) through loop line to run direct service from the airport to central even though had interchange station at Alandur. First metro in India for underground stations with sliding doors.
  • Kochi Metro: India's first CBTC metro system First Indian metro to go live with CBTC (communication-based train control ) signalling.
  • Lucknow Metro: Fastest built and commissioned metro system in the world The fastest built and commissioned metro system in the world. Construction of the line begun on 27 September 2014 with the 8.5 km and began its commercial operation on 5 September 2017, making it the fastest built metro rail system in the country.
  • Hyderabad Metro: India's First Driver less metro India's first metro to have CBTC and integrated telecommunications and supervision systems, i.e. driver less metro.
{ "@context": "https://schema.org", "@graph": [ { "@type": "Organization", "@id": "https://yometro.com/#organization", "name": "YoMetro", "url": "https://yometro.com", "logo": { "@type": "ImageObject", "url": "https://yometro.com/images/logo/yometro-color-logo.svg" }, "sameAs": [ "https://www.facebook.com/yometro", "https://www.instagram.com/yometro_com/", "https://x.com/yometro_com", "https://www.youtube.com/@yometro_com" ] }, { "@type": "WebSite", "@id": "https://yometro.com/#website", "url": "https://yometro.com", "name": "YoMetro", "publisher": { "@id": "https://yometro.com/#organization" }, "potentialAction": { "@type": "SearchAction", "target": { "@type": "EntryPoint", "urlTemplate": "https://yometro.com/from-{source}-to-{destination}" }, "query-input": "required name=source name=destination" } } ] } (function () { try { var savedCity = JSON.parse(localStorage.getItem('ym_city') || 'null') || ''; if (!savedCity) return; var grid = document.getElementById('home-networks-grid'); if (!grid) return; var cards = Array.from(grid.querySelectorAll('.home-network-card-wrapper')); var match = cards.find(function (card) { return (card.dataset.city || '').toLowerCase().indexOf(savedCity.toLowerCase()) !== -1; }); if (match) grid.insertBefore(match, grid.firstChild); } catch (e) {} })();
Book Metro Tickets on ixigo — First Free Metro Ticket Book Metro Tickets on ixigo — First Free Metro Ticket


Saved Routes
No saved routes yet. Tap Save Route on any route page.
/* ── Notification dropdown ─────────────────────────────────────────────────── */ window.yoMetroPageContext = { pageType: "home", stationId: 0, lineId: 0, networkId: 0, locale: "en"}; (function () { var SESSION_KEY = 'ym_near_me_shown'; if (sessionStorage.getItem(SESSION_KEY)) return; var modalEl = document.getElementById('nearMeModal'); if (!modalEl || !window.bootstrap) return; var modal = null; function getModal() { return modal || (modal = new bootstrap.Modal(modalEl)); } function dismissModal() { sessionStorage.setItem(SESSION_KEY, '1'); getModal().hide(); } document.getElementById('nearMeModalNoBtn')?.addEventListener('click', dismissModal); document.getElementById('nearMeModalYesBtn')?.addEventListener('click', function () { sessionStorage.setItem(SESSION_KEY, '1'); }); modalEl.addEventListener('hide.bs.modal', function () { sessionStorage.setItem(SESSION_KEY, '1'); }); setTimeout(function () { getModal().show(); }, 120000); })(); document.addEventListener('DOMContentLoaded', function () { document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(function (el) { new bootstrap.Tooltip(el); }); document.querySelectorAll('[data-bs-toggle="popover"]').forEach(function (el) { new bootstrap.Popover(el, { html: true }); }); }); (function () { const UID = "cwc16a53"; function boot() { if (typeof initYoBot !== 'function') { setTimeout(boot, 100); return; } initYoBot({ uid: UID, strapiBase: "https:\/\/metro.yoinfra.com", basePath: "", zoneId: 31, neighborhoodCollection: "neighborhoods", persist: true, // conversation survives page navigation within the same tab/session — see yobot-engine.js's persistence comment streamEl: document.getElementById(UID + '-stream'), stepEl: document.getElementById(UID + '-step'), chatInput: document.getElementById(UID + '-chat-input'), chatSendBtn: document.getElementById(UID + '-chat-send'), launchBtn: document.getElementById(UID + '-launch'), launchIcon: document.getElementById(UID + '-launch-icon'), panel: document.getElementById(UID + '-panel'), resetBtn: document.getElementById(UID + '-reset'), closeBtn: document.getElementById(UID + '-close') }); } boot(); })();

x server