npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

bodrumtaxi

v1.0.2

Published

Bodrum taxi & transfer toolkit — service info, supported locations, and estimated transfer pricing for the Bodrum peninsula.

Readme

Bodrum Taxi

A lightweight Node.js toolkit for Bodrum taxi & transfer information and estimated fare calculations across the Bodrum peninsula.

npm version license: MIT node

🌐 Website: bodrumtaxi.pages.dev


Why this package?

Planning a trip to Bodrum, Türkiye? Whether you are landing at Milas-Bodrum Airport (BJV) and need a transfer to your hotel in Yalıkavak, building a travel app, or just curious how much a ride from Bodrum Center to Turgutreis might cost — bodrumtaxi gives you a tiny, dependency-free helper to:

  • Look up basic information about Bodrum taxi & transfer services.
  • Get the list of popular destinations across the peninsula.
  • Compute a rough fare estimate between any two supported locations.
  • Use it from code (CommonJS / ESM-interop) or directly from the command line.

The package is intentionally small (under 100 lines of logic, zero dependencies), so it loads instantly and is safe to embed anywhere — serverless functions, chatbots, travel widgets, CLI tools, or static-site build steps.


Table of Contents


Features

  • Zero dependencies — installs in milliseconds, ships in ~3 KB.
  • Synchronous API — every function returns a plain object/array, no promises required.
  • Diacritic-tolerant lookups"yalıkavak", "Yalikavak", and "YALIKAVAK" all match.
  • Bidirectional distance lookupA → B and B → A resolve from a single table entry.
  • CLI mode — runnable with node node_modules/bodrumtaxi for a quick overview.
  • Transparent pricing — base fare, per-km rate and currency are exposed as exported constants.
  • Node.js 14+ — works on every actively supported runtime.

Installation

npm install bodrumtaxi

or with Yarn / pnpm:

yarn add bodrumtaxi
pnpm add bodrumtaxi

Quick Start

const bodrumtaxi = require('bodrumtaxi');

// 1. Basic service info
console.log(bodrumtaxi.info().website);
// → 'https://bodrumtaxi.pages.dev'

// 2. List services
console.log(bodrumtaxi.services());
// → [ 'Airport Transfer (Milas-Bodrum)', 'City Taxi', 'VIP Transfer', ... ]

// 3. Estimate a fare
const fare = bodrumtaxi.transferPrice('Milas-Bodrum Airport', 'Yalıkavak');
console.log(`${fare.distanceKm} km — ~${fare.estimatedPrice} ${fare.currency}`);
// → '65 km — ~1825 TRY'

API Reference

All functions are synchronous and return plain JavaScript values. There are no side effects and no network calls.

info()

Returns a snapshot of the service.

bodrumtaxi.info();
// {
//   name: 'Bodrum Taxi',
//   website: 'https://bodrumtaxi.pages.dev',
//   region: 'Bodrum, Muğla, Türkiye',
//   availability: '24/7',
//   description: 'Bodrum peninsula taxi and transfer services: airport transfers, ...'
// }

| Field | Type | Description | | -------------- | -------- | ------------------------------------------------------ | | name | string | Brand name. | | website | string | Canonical URL of the service. | | region | string | Operational region. | | availability | string | Operating hours (always '24/7'). | | description | string | One-sentence summary of the offering. |


services()

Returns the list of service categories.

bodrumtaxi.services();
// [
//   'Airport Transfer (Milas-Bodrum)',
//   'City Taxi',
//   'VIP Transfer',
//   'Hotel Transfer',
//   'Boat / Marina Transfer',
//   'Intercity Transfer'
// ]

Returns: string[] — six service categories, ordered from most-requested to least.


locations()

Returns every location supported by the pricing engine.

bodrumtaxi.locations();
// [
//   'Milas-Bodrum Airport',
//   'Bodrum Center',
//   'Gümbet',
//   'Bitez',
//   'Ortakent',
//   'Yalıkavak',
//   'Türkbükü',
//   'Göltürkbükü',
//   'Turgutreis',
//   'Gündoğan',
//   'Akyarlar',
//   'Yalı'
// ]

Returns: string[] — canonical names. You can pass any casing or any (de)diacriticised variant to transferPrice and it will still match.


transferPrice(from, to)

Estimate the fare between two locations.

bodrumtaxi.transferPrice('Milas-Bodrum Airport', 'Yalıkavak');
// {
//   from: 'Milas-Bodrum Airport',
//   to: 'Yalıkavak',
//   distanceKm: 65,
//   estimatedPrice: 1825,
//   currency: 'TRY',
//   note: 'Estimated fare. For an exact quote visit https://bodrumtaxi.pages.dev'
// }

Parameters

| Name | Type | Description | | ------ | -------- | ------------------------------------------------ | | from | string | Origin location name (case/diacritic insensitive). | | to | string | Destination location name. |

Returns an object with:

| Field | Type | Description | | ---------------- | -------- | ------------------------------------------------------------ | | from | string | The origin you passed in (echoed back, untouched). | | to | string | The destination you passed in. | | distanceKm | number | Approximate road distance in kilometres. | | estimatedPrice | number | BASE_FARE + (distanceKm × PER_KM) in TRY. | | currency | string | Always 'TRY' in v1. | | note | string | Reminder that this is an estimate, plus a link to the site. |

Failure mode — when either name cannot be resolved, the function returns:

{
  error: true,
  message: 'Location not found: "Mars" → "Yalıkavak". Use locations() to list supported names.'
}

Calling transferPrice('Bodrum Center', 'Bodrum Center') returns a valid result with distanceKm: 0 and estimatedPrice: 200 (the base fare).


Constants

For full transparency, the pricing constants and version are exported:

const { BASE_FARE, PER_KM, CURRENCY, VERSION } = require('bodrumtaxi');
console.log(BASE_FARE); // 200
console.log(PER_KM);    // 25
console.log(CURRENCY);  // 'TRY'
console.log(VERSION);   // '1.0.0'

How pricing works

The fare formula is intentionally simple and easy to audit:

estimatedPrice = BASE_FARE + (distanceKm × PER_KM)

| Constant | Value | Meaning | | ----------- | -------- | --------------------------------------------- | | BASE_FARE | 200 | Pickup / start charge in TRY | | PER_KM | 25 | Per-kilometre cost in TRY | | CURRENCY | 'TRY' | Turkish Lira |

Distances are stored in a hand-curated lookup table built from typical road routes across the Bodrum peninsula. Lookups are bidirectional — only one direction needs to be in the table for both A → B and B → A to resolve.

This is not a routing engine and does not factor in:

  • Real-time traffic
  • Time of day / night surcharge
  • Vehicle class (sedan, minibus, VIP)
  • Tolls or seasonal price changes
  • Number of passengers or luggage

Treat the returned estimatedPrice as a rough order-of-magnitude figure, not a quote.


Supported locations

Approximate road distances used by the engine:

| Route | Distance | | -------------------------------------- | -------- | | Milas-Bodrum Airport → Bodrum Center | 36 km | | Milas-Bodrum Airport → Gümbet | 38 km | | Milas-Bodrum Airport → Bitez | 40 km | | Milas-Bodrum Airport → Ortakent | 42 km | | Milas-Bodrum Airport → Yalı | 45 km | | Milas-Bodrum Airport → Gündoğan | 48 km | | Milas-Bodrum Airport → Türkbükü | 50 km | | Milas-Bodrum Airport → Göltürkbükü | 52 km | | Milas-Bodrum Airport → Turgutreis | 55 km | | Milas-Bodrum Airport → Akyarlar | 60 km | | Milas-Bodrum Airport → Yalıkavak | 65 km | | Bodrum Center → Gümbet | 3 km | | Bodrum Center → Bitez | 6 km | | Bodrum Center → Ortakent | 10 km | | Bodrum Center → Yalı | 12 km | | Bodrum Center → Gündoğan | 14 km | | Bodrum Center → Türkbükü | 16 km | | Bodrum Center → Yalıkavak | 18 km | | Bodrum Center → Göltürkbükü | 18 km | | Bodrum Center → Turgutreis | 20 km | | Bodrum Center → Akyarlar | 25 km |

Need a route that is not in the table? Open an issue and we will add it in a minor release.


CLI usage

After installing the package you can invoke it directly:

node node_modules/bodrumtaxi

You will see a friendly summary like:

===================================
  bodrumtaxi v1.0.0
  Bodrum Taxi & Transfer
===================================
Website: https://bodrumtaxi.pages.dev

Services:
  - Airport Transfer (Milas-Bodrum)
  - City Taxi
  - VIP Transfer
  - Hotel Transfer
  - Boat / Marina Transfer
  - Intercity Transfer

Sample fare (Airport → Yalıkavak):
  65 km, ~1825 TRY

API: info(), services(), locations(), transferPrice(from, to)

Examples

Build a tiny "fare of the day" widget

const { transferPrice, locations } = require('bodrumtaxi');

const all = locations();
const from = 'Milas-Bodrum Airport';
const to = all[Math.floor(Math.random() * all.length)];

const fare = transferPrice(from, to);
if (fare.error) {
  console.error(fare.message);
} else {
  console.log(`Today's pick: ${from} → ${to} ≈ ${fare.estimatedPrice} ${fare.currency}`);
}

List every airport-departure fare, sorted

const { transferPrice, locations } = require('bodrumtaxi');

const fares = locations()
  .filter(loc => loc !== 'Milas-Bodrum Airport')
  .map(to => transferPrice('Milas-Bodrum Airport', to))
  .filter(f => !f.error)
  .sort((a, b) => a.estimatedPrice - b.estimatedPrice);

for (const f of fares) {
  console.log(`${f.to.padEnd(20)} ${f.distanceKm.toString().padStart(3)} km   ~${f.estimatedPrice} ${f.currency}`);
}

Use it inside an Express endpoint

const express = require('express');
const { transferPrice } = require('bodrumtaxi');

const app = express();

app.get('/fare', (req, res) => {
  const { from, to } = req.query;
  const result = transferPrice(from, to);
  if (result.error) return res.status(400).json(result);
  return res.json(result);
});

app.listen(3000);

Forgiving input (diacritics & casing)

const { transferPrice } = require('bodrumtaxi');

transferPrice('milas-bodrum airport', 'YALIKAVAK').distanceKm; // 65
transferPrice('Yalıkavak', 'Milas-Bodrum Airport').distanceKm; // 65 (reverse)
transferPrice('  Bodrum Center  ', 'gumbet').distanceKm;       // 3

Error handling

transferPrice never throws. On unrecognised input it returns an error-shaped object instead, so you can branch with a simple if:

const result = transferPrice('Atlantis', 'Bitez');
if (result.error) {
  // Handle gracefully — show suggestions, log, fall back, etc.
  console.warn(result.message);
} else {
  // Happy path
  renderQuote(result);
}

This shape was chosen so the function can be used safely inside Array.prototype.map and other pipelines without try/catch noise.


About Bodrum

Bodrum is a coastal town and district in Muğla Province on Türkiye's southwestern Aegean coast. It sits across from the Greek island of Kos and is known for its castle, marina, vibrant nightlife and the surrounding peninsula villages — Yalıkavak, Türkbükü, Bitez, Gümbet, Turgutreis and more — each with its own character.

Most international visitors arrive at Milas-Bodrum Airport (IATA: BJV), located about 36 km north of Bodrum Center. From there, the most common onward transport is a pre-booked taxi or transfer, which is exactly the use case this package was built around.


Website languages

The companion website at bodrumtaxi.pages.dev is fully localised into 10 languages, reflecting the international mix of visitors to the Bodrum peninsula. You can switch languages from the selector in the site header.

| Code | Language | Native name | | ---- | ---------- | ----------- | | 🇬🇧 EN | English | English | | 🇹🇷 TR | Turkish | Türkçe | | 🇩🇪 DE | German | Deutsch | | 🇫🇷 FR | French | Français | | 🇪🇸 ES | Spanish | Español | | 🇳🇱 NL | Dutch | Nederlands | | 🇵🇱 PL | Polish | Polski | | 🇷🇴 RO | Romanian | Română | | 🇪🇪 ET | Estonian | Eesti | | 🇷🇺 RU | Russian | Русский |

Note on scope: This npm package itself ships API labels and messages in English only — localisation is handled at the website layer. If you are embedding bodrumtaxi in a multilingual UI, translate the displayed fields (from, to, note, etc.) in your own presentation code.


Disclaimer

This package is an independent open-source utility. The fare formula and distance table are best-effort approximations and do not constitute a price quote. Real-world pricing varies with:

  • Vehicle type and capacity
  • Time of day and seasonal demand
  • Traffic and route choice
  • Tolls, luggage handling and waiting time
  • Local regulations and operator pricing

For an accurate, bookable quote please visit bodrumtaxi.pages.dev.


Roadmap

Possible future additions (no commitments):

  • 🌍 Additional Bodrum peninsula villages and stops.
  • 💱 Currency conversion helper (EUR, USD, GBP).
  • 🌙 Night-tariff and seasonal multipliers.
  • 🛣️ Distance lookup as a standalone export.
  • 📦 ESM build alongside CommonJS.
  • 🧪 Test suite with vitest once the API stabilises.

If any of these would be useful to you, please open a feature request on the website.


Contributing

Bug reports, distance corrections and new locations are very welcome. Because the package is tiny, contributions usually consist of:

  1. Adding or correcting a row in the internal _DISTANCES table.
  2. Updating the documentation table above to match.
  3. Bumping the patch version.

Please keep the package dependency-free — that is a deliberate design constraint.


License

MIT © 2026 Taximatic


Links