# @optique/core

> Type-safe combinatorial command-line interface parser

Latest version **1.3.6** (published 2026-10-14) · MIT license · 0 weekly downloads

## Install

```sh
npm install @optique/core
pnpm add @optique/core
yarn add @optique/core
bun add @optique/core
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 1.3.6 |
| Published | 2026-10-14 |
| First published | 2025-08-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=20.0.0 |
| Dependencies | 0 |
| Unpacked size | 3.5 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 738 |
| Author | Hong Minhee |
| Maintainers | hongminhee |
| Keywords | CLI, command-line, commandline, parser, getopt, optparse |

## Links

- npm: https://www.npmjs.com/package/@optique/core
- Repository: https://github.com/dahlia/optique
- Homepage: https://optique.dev/
- Issues: https://github.com/dahlia/optique/issues
- Funding: https://github.com/sponsors/dahlia
- npm.io page: https://npm.io/package/@optique/core

## Alternatives

- [@salesforce/cli](https://npm.io/package/@salesforce/cli.md) — 389.7K weekly downloads
- [@mintlify/cli](https://npm.io/package/@mintlify/cli.md) — 208.9K weekly downloads
- [@grafana/e2e-selectors](https://npm.io/package/@grafana/e2e-selectors.md) — 128.7K weekly downloads
- [mintlify](https://npm.io/package/mintlify.md) — 112.0K weekly downloads
- [@intlayer/cli](https://npm.io/package/@intlayer/cli.md) — 22.8K weekly downloads

## Recent versions

- 1.3.6 (latest) — 2026-10-14
- 1.4.0-dev.2928 (dev) — 2026-10-27
- 1.4.0-dev.2899 — 2026-10-18
- 1.4.0-dev.2897 — 2026-10-18
- 1.4.0-dev.2895 — 2026-10-18
- 1.4.0-dev.2893 — 2026-10-18
- 1.4.0-dev.2892 — 2026-10-14
- 1.2.13 — 2026-10-14
- 1.1.13 — 2026-10-14
- 1.0.15 — 2026-10-14
- 1.0.15-dev.2887 — 2026-10-14
- 1.0.15-dev.2883 — 2026-10-14
- 1.0.15-dev.2880 — 2026-10-14
- 1.0.15-dev.2873 — 2026-10-14
- 1.0.15-dev.2854 — 2026-10-13
- … 989 more at https://npm.io/package/@optique/core/versions

## README

@optique/core
=============

The core package of Optique which provides the shared types and parser
combinators. It is designed to be used in universal JavaScript runtimes,
including Node.js, Deno, Bun, edge functions, and web browsers—although
you usually won't use it directly in browsers.

> [!TIP]
> *Building CLI apps?* Consider *@optique/run* for automatic `process.argv`
> handling and `process.exit()` integration. This core package is perfect for
> libraries, web apps, or when you need full control over argument parsing.


When to use @optique/core
-------------------------

Use *@optique/core* instead when:

 -  Building web applications or libraries
 -  You need full control over argument sources and error handling
 -  Working in environments without `process` (browsers, web workers)
 -  Building reusable parser components

Use *@optique/run* when:

 -  Building CLI applications for Node.js, Bun, or Deno
 -  You want automatic `process.argv` parsing and `process.exit()` handling
 -  You need automatic terminal capability detection (colors, width)
 -  You prefer a simple, batteries-included approach


Quick example
-------------

~~~~ typescript
import { runParser } from "@optique/core/facade";
import { option, argument } from "@optique/core/primitives";
import { object } from "@optique/core/constructs";
import { string, integer } from "@optique/core/valueparser";
import process from "node:process";

const parser = object({
  name: argument(string()),
  age: option("-a", "--age", integer()),
  verbose: option("-v", "--verbose"),
});

const config = runParser(parser, "myapp", process.argv.slice(2), {
  help: { command: true, option: true },
  onError: (exitCode) => process.exit(exitCode),
});

console.log(`Hello ${config.name}!`);
if (config.age) console.log(`You are ${config.age} years old.`);
if (config.verbose) console.log("Verbose mode enabled.");
~~~~

For more resources, see the [docs] and the [*examples/*](/examples/) directory.

[docs]: https://optique.dev/

---
_Source: https://npm.io/package/@optique/core · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
