Skip to main content
On this page

@std/path

Overview Jump to heading

Utilities for working with OS-specific file paths.

Functions from this module will automatically switch to support the path style of the current OS, either windows for Microsoft Windows, or posix for every other operating system, eg. Linux, MacOS, BSD etc.

To use functions for a specific path style regardless of the current OS import the modules from the platform sub directory instead.

Basic Path Operations

import * as path from "@std/path"; import { assertEquals } from "@std/assert"; // Get components of a path if (Deno.build.os === "windows") { assertEquals(path.basename("C:\\Users\\user\\file.txt"), "file.txt"); assertEquals(path.dirname("C:\\Users\\user\\file.txt"), "C:\\Users\\user"); assertEquals(path.extname("C:\\Users\\user\\file.txt"), ".txt"); } else { assertEquals(path.basename("/home/user/file.txt"), "file.txt"); assertEquals(path.dirname("/home/user/file.txt"), "/home/user"); assertEquals(path.extname("/home/user/file.txt"), ".txt"); } // Join path segments if (Deno.build.os === "windows") { assertEquals(path.join("C:\\", "Users", "docs", "file.txt"), "C:\\Users\\docs\\file.txt"); } else { assertEquals(path.join("/home", "user", "docs", "file.txt"), "/home/user/docs/file.txt"); } // Normalize a path if (Deno.build.os === "windows") { assertEquals(path.normalize("C:\\Users\\user\\..\\temp\\.\\file.txt"), "C:\\Users\\temp\\file.txt"); } else { assertEquals(path.normalize("/home/user/../temp/./file.txt"), "/home/temp/file.txt"); } // Resolve absolute path if (Deno.build.os === "windows") { const resolved = path.resolve("C:\\foo", "docs", "file.txt"); assertEquals(resolved, "C:\\foo\\docs\\file.txt"); assertEquals(path.isAbsolute(resolved), true); } else { const resolved = path.resolve("/foo", "docs", "file.txt"); assertEquals(resolved, "/foo/docs/file.txt"); assertEquals(path.isAbsolute(resolved), true); } // Get relative path if (Deno.build.os === "windows") { assertEquals(path.relative("C:\\Users", "C:\\Users\\docs\\file.txt"), "docs\\file.txt"); assertEquals(path.relative("C:\\Users", "D:\\Programs"), "D:\\Programs"); } else { assertEquals(path.relative("/home/user", "/home/user/docs/file.txt"), "docs/file.txt"); assertEquals(path.relative("/home/user", "/var/data"), "../../var/data"); } 

Path Parsing and Formatting

import * as path from "@std/path"; import { assertEquals } from "@std/assert"; if (Deno.build.os === "windows") { const parsedWindows = path.parse("C:\\Users\\user\\file.txt"); assertEquals(parsedWindows.root, "C:\\"); assertEquals(parsedWindows.dir, "C:\\Users\\user"); assertEquals(parsedWindows.base, "file.txt"); assertEquals(parsedWindows.ext, ".txt"); assertEquals(parsedWindows.name, "file"); // Format path from components (Windows) assertEquals( path.format({ dir: "C:\\Users\\user", base: "file.txt" }), "C:\\Users\\user\\file.txt" ); } else { const parsedPosix = path.parse("/home/user/file.txt"); assertEquals(parsedPosix.root, "/"); assertEquals(parsedPosix.dir, "/home/user"); assertEquals(parsedPosix.base, "file.txt"); assertEquals(parsedPosix.ext, ".txt"); assertEquals(parsedPosix.name, "file"); // Format path from components (POSIX) assertEquals( path.format({ dir: "/home/user", base: "file.txt" }), "/home/user/file.txt" ); } 

URL Conversion

import * as path from "@std/path"; import { assertEquals } from "@std/assert"; // Convert between file URLs and paths if (Deno.build.os === "windows") { assertEquals(path.fromFileUrl("file:///C:/Users/user/file.txt"), "C:\\Users\\user\\file.txt"); assertEquals(path.toFileUrl("C:\\Users\\user\\file.txt").href, "file:///C:/Users/user/file.txt"); } else { assertEquals(path.fromFileUrl("file:///home/user/file.txt"), "/home/user/file.txt"); assertEquals(path.toFileUrl("/home/user/file.txt").href, "file:///home/user/file.txt"); } 

Path Properties

import * as path from "@std/path"; import { assertEquals } from "@std/assert"; // Check if path is absolute if (Deno.build.os === "windows") { assertEquals(path.isAbsolute("C:\\Users"), true); assertEquals(path.isAbsolute("\\\\Server\\share"), true); assertEquals(path.isAbsolute("C:relative\\path"), false); assertEquals(path.isAbsolute("..\\relative\\path"), false); } else { assertEquals(path.isAbsolute("/home/user"), true); assertEquals(path.isAbsolute("./relative/path"), false); assertEquals(path.isAbsolute("../relative/path"), false); } // Convert to namespaced path (Windows-specific) if (Deno.build.os === "windows") { assertEquals(path.toNamespacedPath("C:\\Users\\file.txt"), "\\\\?\\C:\\Users\\file.txt"); assertEquals(path.toNamespacedPath("\\\\server\\share\\file.txt"), "\\\\?\\UNC\\server\\share\\file.txt"); } else { // On POSIX, toNamespacedPath returns the path unchanged assertEquals(path.toNamespacedPath("/home/user/file.txt"), "/home/user/file.txt"); } 

Glob Pattern Utilities

import * as path from "@std/path"; import { assertEquals } from "@std/assert"; // Check if a string is a glob pattern assertEquals(path.isGlob("*.txt"), true); // Convert glob pattern to RegExp const pattern = path.globToRegExp("*.txt"); assertEquals(pattern.test("file.txt"), true); // Join multiple glob patterns if (Deno.build.os === "windows") { assertEquals(path.joinGlobs(["src", "**\\*.ts"]), "src\\**\\*.ts"); } else { assertEquals(path.joinGlobs(["src", "**\/*.ts"]), "src/**\/*.ts"); } // Normalize a glob pattern if (Deno.build.os === "windows") { assertEquals(path.normalizeGlob("src\\..\\**\\*.ts"), "**\\*.ts"); } else { assertEquals(path.normalizeGlob("src/../**\/*.ts"), "**\/*.ts"); } 

For POSIX-specific functions:

import { fromFileUrl } from "@std/path/posix/from-file-url"; import { assertEquals } from "@std/assert"; assertEquals(fromFileUrl("file:///home/foo"), "/home/foo"); 

For Windows-specific functions:

import { fromFileUrl } from "@std/path/windows/from-file-url"; import { assertEquals } from "@std/assert"; assertEquals(fromFileUrl("file:///home/foo"), "\\home\\foo"); 

Functions for working with URLs can be found in @std/path/posix.

Add to your project Jump to heading

deno add jsr:@std/path 

See all symbols in @std/path on

When to use @std/path Jump to heading

Use it anywhere you build, normalize, or inspect file paths. It handles POSIX and Windows differences so your code stays portable.

Examples Jump to heading

import { basename, dirname, extname, join, resolve } from "@std/path"; const file = join("content", "posts", "hello.md"); console.log(dirname(file)); // content/posts console.log(basename(file)); // hello.md console.log(extname(file)); // .md console.log(resolve(".", "assets")); // absolute path 

Tips Jump to heading

  • Prefer join over string concatenation.
  • Use fromFileUrl/toFileUrl when moving between file URLs and paths.
  • For OS-specific logic, import from @std/path/posix or @std/path/windows.

Did you find what you needed?