# What Programming Language Is the Caveman Project Written In?

> Discover the programming language behind the Caveman project. Learn that this Node.js application is built with JavaScript and requires version 18+ to run.

- Repository: [Julius Brussee/caveman](https://github.com/JuliusBrussee/caveman)
- Tags: getting-started
- Published: 2026-07-03

---

**The Caveman project is written in JavaScript (Node.js) and requires Node.js version 18 or higher to run.**

The Caveman project is a Node.js-based CLI tool developed by JuliusBrussee that installs an "always-on" coding assistant rule into software repositories. Understanding the caveman project programming language is essential for contributors and users who want to extend the tool or debug installation issues. While the core functionality is implemented in JavaScript, the repository also includes auxiliary scripts written in other languages for specific tasks.

## JavaScript and Node.js Runtime

Caveman is fundamentally a Node.js application. The [`package.json`](https://github.com/JuliusBrussee/caveman/blob/main/package.json) manifest explicitly declares the runtime requirement in the engines field, specifying `"node": ">=18"` as the minimum supported version. This dependency on Node.js is reflected throughout the codebase, from the CLI entry point to the file system operations that install the caveman rules into target repositories.

### package.json Configuration

The project's manifest file defines the JavaScript entry point and CLI configuration. The `bin` field maps the `caveman` command to a JavaScript file, while the `engines` field enforces the Node.js 18+ requirement. This configuration ensures that all JavaScript modules execute within a compatible Node.js environment that supports the modern ECMAScript features used in the codebase.

### Core Installer Implementation

The functional heart of the project resides in [`src/tools/caveman-init.js`](https://github.com/JuliusBrussee/caveman/blob/main/src/tools/caveman-init.js), a pure JavaScript module that uses core Node.js APIs. This file handles the installation of caveman rules by writing configuration files to the appropriate directories within a target repository. The implementation relies on standard Node.js modules such as `fs` for file system operations and `path` for cross-platform path resolution.

```javascript
const fs = require('fs');
const path = require('path');

const RULE_BODY = `Respond terse like smart caveman.
...
Switch level: /caveman lite|full|ultra|wenyan`;

```

## Key Source Files and Architecture

The repository structure clearly separates the JavaScript implementation from auxiliary tooling. The following files constitute the primary codebase:

- **[`package.json`](https://github.com/JuliusBrussee/caveman/blob/main/package.json)** – Defines the Node runtime, package metadata, and the CLI entry point that registers the `caveman` binary.
- **[`src/tools/caveman-init.js`](https://github.com/JuliusBrussee/caveman/blob/main/src/tools/caveman-init.js)** – Contains the core installer logic that writes caveman rule files for supported AI agents.
- **[`bin/install.js`](https://github.com/JuliusBrussee/caveman/blob/main/bin/install.js)** – Acts as a thin wrapper that invokes the installer when users run the `caveman` command.
- **[`install.sh`](https://github.com/JuliusBrussee/caveman/blob/main/install.sh)** – A shell script that bootstraps the installation via curl, but delegates execution to the JavaScript tooling.

After installation via npm, users interact with the JavaScript CLI:

```bash

# After npm install, the `caveman` command is available:

caveman init          # drops the always‑on caveman rule into a repo

caveman –help         # shows usage

```

## Auxiliary Python Scripts

While JavaScript powers the core functionality, the repository includes Python scripts for specific operational tasks. The file [`benchmarks/run.py`](https://github.com/JuliusBrussee/caveman/blob/main/benchmarks/run.py) contains performance benchmarking helpers written in Python. These scripts are auxiliary and do not constitute part of the runtime application; they exist solely for development and performance testing purposes.

## Summary

- The caveman project programming language is **JavaScript (Node.js)**, requiring Node.js 18 or higher.
- Core functionality resides in **[`src/tools/caveman-init.js`](https://github.com/JuliusBrussee/caveman/blob/main/src/tools/caveman-init.js)** and **[`bin/install.js`](https://github.com/JuliusBrussee/caveman/blob/main/bin/install.js)**, utilizing Node.js APIs like `fs` and `path`.
- The **[`package.json`](https://github.com/JuliusBrussee/caveman/blob/main/package.json)** manifest defines the runtime constraints and CLI entry point.
- **Python** appears only in auxiliary benchmarking scripts ([`benchmarks/run.py`](https://github.com/JuliusBrussee/caveman/blob/main/benchmarks/run.py)), not in the application runtime.

## Frequently Asked Questions

### Is Caveman a Python or JavaScript project?

Caveman is primarily a JavaScript project that runs on Node.js. While the repository includes a Python script at [`benchmarks/run.py`](https://github.com/JuliusBrussee/caveman/blob/main/benchmarks/run.py) for performance testing, the CLI tool, installer, and all agent integrations are implemented in JavaScript.

### What Node.js version is required to run Caveman?

The [`package.json`](https://github.com/JuliusBrussee/caveman/blob/main/package.json) specifies `"node": ">=18"` in the engines field, meaning Caveman requires Node.js version 18 or higher. Attempting to run the tool on older Node.js versions will result in engine compatibility errors.

### Can I run Caveman without Node.js installed?

No, Caveman cannot run without Node.js. The core implementation in [`src/tools/caveman-init.js`](https://github.com/JuliusBrussee/caveman/blob/main/src/tools/caveman-init.js) and the CLI entry point both depend on Node.js-specific APIs such as `require('fs')` and `require('path')` to manipulate the file system and install rules.

### Are there any TypeScript files in the Caveman repository?

Based on the source analysis of the JuliusBrussee/caveman repository, the implementation uses plain JavaScript (`.js` files) rather than TypeScript. The codebase relies on Node.js CommonJS modules (`require` statements) rather than ES modules or TypeScript compilation.