Interactive Arrival Guide: Cam Ranh Int’l Airport (CXR)
https://cdn.tailwindcss.com
https://cdn.jsdelivr.net/npm/chart.js
body {
font-family: ‘Inter’, sans-serif;
background-color: #f8fafc; /* slate-50 */
}
.active-tab {
background-color: #0d9488; /* teal-600 */
color: white;
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
}
.inactive-tab {
background-color: #f1f5f9; /* slate-100 */
color: #475569; /* slate-600 */
}
.chart-container {
position: relative;
width: 100%;
height: 200px;
max-width: 700px;
margin-left: auto;
margin-right: auto;
max-height: 250px;
}
@media (min-width: 640px) {
.chart-container {
height: 220px;
}
}
@media (min-width: 1024px) {
.chart-container {
height: 250px;
}
}
.step-card {
border-left-width: 4px;
transition: all 0.3s ease-in-out;
}
Arrive in Vietnam Stress-Free
Skip the long immigration queues at Cam Ranh (CXR) Airport. Use our interactive guide to plan your arrival and see how our Fast Track service can save you hours.
Interactive Arrival Planner
Select your visa type to see your personalized arrival process.
E-Visa / Visa-Free
Visa on Arrival (VOA)
Estimated Wait Time Comparison:
The Fast Track Advantage
Our agent meets you at the gate and escorts you through priority lanes, bypassing all queues for a swift, VIP entry.
Pre-Arrival Checklist
📋 Documents
✓ Passport (min. 6 months validity)
✓ Printed E-Visa or VOA Approval Letter
✓ Return/Onward flight details
✓ Hotel booking confirmation
💵 VOA Essentials
✓ Completed NA1 Form
✓ Passport Photo (4×6 cm)
✓ Cash for Stamping Fee (USD/VND)
⚠️ No ATMs in VOA area!
About Cam Ranh Airport (CXR)
✈️
International Terminal
All international flights arrive at the modern and clean Terminal 2 (T2).
📍
Location
35km south of Nha Trang City Center, about a 45-minute drive.
🚕
Transport Options
Taxi (~400k VND), Ride-Hail Apps (Grab), Shuttle Bus (~65k VND), or Pre-booked Private Car.
Need a Visa? Let the Experts Handle It.
Avoid common mistakes and confusing paperwork. Our visa experts ensure your application is submitted perfectly for a hassle-free, guaranteed-success process. Get your visa with a fast turnaround and a simple form.
Apply for Your Visa Now
© 2024 CXR Interactive Arrival Guide. All rights reserved.
This is an informational tool based on the guide by VietnamImmigration.org.
document.addEventListener(‘DOMContentLoaded’, () => {
const menuButton = document.getElementById(‘menu-button’);
const mobileMenu = document.getElementById(‘mobile-menu’);
menuButton.addEventListener(‘click’, () => {
mobileMenu.classList.toggle(‘hidden’);
});
document.querySelectorAll(‘#mobile-menu a’).forEach(link => {
link.addEventListener(‘click’, () => {
mobileMenu.classList.add(‘hidden’);
});
});
const visaTabs = document.querySelectorAll(‘.visa-tab’);
const processFlowContainer = document.getElementById(‘process-flow’);
const fastTrackAdvantageText = document.getElementById(‘fast-track-advantage-text’);
const processData = {
evisa: {
standard: [
{ name: ‘Deplane & Follow Signs’, icon: ‘✈️’, time: 5 },
{ name: ‘Immigration Queue’, icon: ‘🕒’, time: 45 },
{ name: ‘Baggage Claim’, icon: ‘🧳’, time: 20 },
{ name: ‘Customs Check’, icon: ‘✅’, time: 5 },
],
fastTrack: [
{ name: ‘Meet & Greet at Gate’, icon: ‘🤝’, time: 2 },
{ name: ‘Priority Immigration’, icon: ‘⭐’, time: 5 },
{ name: ‘Baggage Claim’, icon: ‘🧳’, time: 20 },
{ name: ‘Customs Check’, icon: ‘✅’, time: 5 },
],
advantageText: “Our agent meets you at the gate and escorts you through priority lanes, bypassing the main immigration queue for a swift, VIP entry.”
},
voa: {
standard: [
{ name: ‘Deplane & Follow Signs’, icon: ‘✈️’, time: 5 },
{ name: ‘VOA Counter Queue’, icon: ‘📄’, time: 60 },
{ name: ‘Immigration Queue’, icon: ‘🕒’, time: 30 },
{ name: ‘Baggage Claim’, icon: ‘🧳’, time: 20 },
{ name: ‘Customs Check’, icon: ‘✅’, time: 5 },
],
fastTrack: [
{ name: ‘Meet & Greet at Gate’, icon: ‘🤝’, time: 2 },
{ name: ‘Agent Handles VOA’, icon: ‘⭐’, time: 10 },
{ name: ‘Priority Immigration’, icon: ‘⭐’, time: 5 },
{ name: ‘Baggage Claim’, icon: ‘🧳’, time: 20 },
{ name: ‘Customs Check’, icon: ‘✅’, time: 5 },
],
advantageText: “Our agent handles the entire VOA process for you—paperwork and payment—while you relax. Then, you’ll be escorted through the priority immigration lane.”
}
};
function createStepHTML(step, index, total, isFastTrack = false) {
const color = isFastTrack ? ‘teal’ : ‘slate’;
return `
${step.icon}
${step.name}
Approx. ${step.time} mins
${index < total – 1 ? `
` : ”}
`;
}
function updateProcessFlow(visaType) {
const data = processData[visaType];
const standardFlowHTML = data.standard.map((step, i) => createStepHTML(step, i, data.standard.length)).join(”);
const fastTrackFlowHTML = data.fastTrack.map((step, i) => createStepHTML(step, i, data.fastTrack.length, true)).join(”);
processFlowContainer.innerHTML = `
Standard Process
${standardFlowHTML}
Fast Track Process
${fastTrackFlowHTML}
`;
fastTrackAdvantageText.textContent = data.advantageText;
}
const ctx = document.getElementById(‘time-chart’).getContext(‘2d’);
const timeChart = new Chart(ctx, {
type: ‘bar’,
data: {
labels: [‘Standard Arrival’, ‘Fast Track Arrival’],
datasets: [{
label: ‘Total Time (minutes)’,
data: [],
backgroundColor: [
‘rgba(100, 116, 139, 0.6)’, // slate-500
‘rgba(13, 148, 136, 0.6)’ // teal-600
],
borderColor: [
‘rgba(100, 116, 139, 1)’,
‘rgba(13, 148, 136, 1)’
],
borderWidth: 1
}]
},
options: {
indexAxis: ‘y’,
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
display: false
},
tooltip: {
callbacks: {
label: function(context) {
return ` Estimated time: ${context.raw} minutes`;
}
}
}
},
scales: {
x: {
beginAtZero: true,
title: {
display: true,
text: ‘Minutes’
}
},
y: {
grid: {
display: false
}
}
}
}
});
function updateChart(visaType) {
const data = processData[visaType];
const standardTotalTime = data.standard.reduce((sum, step) => sum + step.time, 0);
const fastTrackTotalTime = data.fastTrack.reduce((sum, step) => sum + step.time, 0);
timeChart.data.datasets[0].data = [standardTotalTime, fastTrackTotalTime];
timeChart.update();
}
visaTabs.forEach(tab => {
tab.addEventListener(‘click’, () => {
const visaType = tab.dataset.visa;
visaTabs.forEach(t => {
t.classList.remove(‘active-tab’);
t.classList.add(‘inactive-tab’);
});
tab.classList.add(‘active-tab’);
tab.classList.remove(‘inactive-tab’);
updateProcessFlow(visaType);
updateChart(visaType);
});
});
// Initial load
updateProcessFlow(‘evisa’);
updateChart(‘evisa’);
});