Install
Para is a parse-time syntax extension over TypeScript. The .pts parser lives in the ParaBun fork of Bun — mainline Bun does not recognize the syntax. To use Para on a host that isn’t ParaBun itself, you need three things:
- The ParaBun transpiler to compile
.pts→.js. The output is plain JavaScript and runs anywhere; ParaBun is only needed at build time. - A bundler alias that maps
para:*import specifiers to the@para/*npm packages. One regex line of bundler config. - The runtime packages — install only the ones you actually use.
A standalone @para/transpile npm package (no ParaBun required) is on the roadmap. Until it ships, the build host needs ParaBun installed; runtime hosts (browser, Lambda, Workers, Node, Bun, Deno) do not.
1. Install ParaBun on the build host
Section titled “1. Install ParaBun on the build host”curl -fsSL https://raw.githubusercontent.com/airgap/parabun/main/install.sh | bashThis installs the parabun binary (with pb as a short alias) into ~/.parabun/bin/.
2. Install the runtime packages
Section titled “2. Install the runtime packages”Install only the modules your code uses. Each module is its own npm package:
npm install @para/signals # reactive primitivesnpm install @para/parallel # Worker-pool pmap / preducenpm install @para/arena # Pool helper + no-op scope()npm install @para/simd # Wasm v128 kernelsnpm install @para/csv # RFC 4180 streaming parsernpm install @para/arrow # in-memory tables + IPC + Parquetnpm install @para/rtp # RFC 3550 packet framingnpm install @para/mcp # Model Context Protocol client@para/pipeline is the runtime backing the Para Lang |> operator. It’s
pulled in transitively by @para/transpile when you use .pts files; you
don’t need to install or import from it directly.
All @para/* packages are pure JS / Wasm with no native dependencies and target ES2022.
3. Configure your bundler
Section titled “3. Configure your bundler”A single regex rule maps every para:* specifier to the matching @para/* package:
import { defineConfig } from "vite";
export default defineConfig({ resolve: { alias: [{ find: /^para:(.*)$/, replacement: "@para/$1" }], },});esbuild
Section titled “esbuild”import { build } from "esbuild";
await build({ entryPoints: ["src/main.js"], bundle: true, outfile: "dist/main.js", plugins: [{ name: "para-alias", setup(b) { b.onResolve({ filter: /^para:/ }, args => ({ path: require.resolve(`@para/${args.path.slice(5)}`), })); }, }],});webpack
Section titled “webpack”module.exports = { resolve: { alias: { "para:signals": "@para/signals", "para:arena": "@para/arena", "para:parallel": "@para/parallel", "para:pipeline": "@para/pipeline", "para:simd": "@para/simd", "para:arrow": "@para/arrow", "para:csv": "@para/csv", "para:rtp": "@para/rtp", "para:mcp": "@para/mcp", }, },};4. Build
Section titled “4. Build”parabun build src/main.pts --outdir dist/The output is standard JavaScript. Bundle it with your normal toolchain (vite build, webpack, etc.); the alias takes care of the para:* imports.
Editor extension
Section titled “Editor extension”A VS Code-family extension provides the .pts / .ptsx / .pjs / .pjsx TextMate grammar and an LSP with hover, go-to-definition, semantic highlighting, purity diagnostics, and operator documentation.
curl -fsSL https://raw.githubusercontent.com/airgap/parabun/main/install-extension.sh | bashThe script installs into any of code, cursor, or kiro it finds on $PATH.
Platform notes
Section titled “Platform notes”The build step (Bun + bundler) runs on Linux, macOS, and Windows. The output is standard JavaScript; runtime targets are anywhere a JavaScript engine runs. All @para/* packages target ES2022.