# @arcjet/sprintf

> Arcjet platform-independent replacement for util.format

Latest version **1.14.1** (published 2026-10-07) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @arcjet/sprintf
pnpm add @arcjet/sprintf
yarn add @arcjet/sprintf
bun add @arcjet/sprintf
```

## 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.14.1 |
| Published | 2026-10-07 |
| First published | 2024-06-10 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=22.21.0 <23 \|\| >=24.5.0 |
| Dependencies | 0 |
| Unpacked size | 20.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 685 |
| Author | Arcjet |
| Maintainers | quinn-arcjet, davidmytton |
| Keywords | arcjet, format, sprintf, util, utility |

## Links

- npm: https://www.npmjs.com/package/@arcjet/sprintf
- Repository: https://github.com/arcjet/arcjet-js
- Homepage: https://arcjet.com
- Issues: https://github.com/arcjet/arcjet-js/issues
- npm.io page: https://npm.io/package/@arcjet/sprintf

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 1.14.1 (latest) — 2026-10-07
- 1.10.0-rc.1 (rc) — 2026-08-07
- 1.14.0 — 2026-10-01
- 1.13.0 — 2026-09-16
- 1.12.0 — 2026-09-08
- 1.11.0 — 2026-08-26
- 1.10.0 — 2026-08-11
- 1.10.0-rc.0 — 2026-08-04
- 1.9.1 — 2026-07-15
- 1.9.0 — 2026-07-15
- 1.8.0 — 2026-07-07
- 1.8.0-rc.0 — 2026-07-07
- 1.7.0 — 2026-07-06
- 1.7.0-rc.1 — 2026-07-06
- 1.7.0-rc.0 — 2026-07-03
- … 49 more at https://npm.io/package/@arcjet/sprintf/versions

## README

<!-- trunk-ignore-all(markdownlint/MD001) -->

<a href="https://arcjet.com" target="_arcjet-home">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://arcjet.com/logo/arcjet-dark-lockup-voyage-horizontal.svg">
    <img src="https://arcjet.com/logo/arcjet-light-lockup-voyage-horizontal.svg" alt="Arcjet Logo" height="128" width="auto">
  </picture>
</a>

# `@arcjet/sprintf`

<p>
  <a href="https://www.npmjs.com/package/@arcjet/sprintf">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/npm/v/%40arcjet%2Fsprintf?style=flat-square&label=%E2%9C%A6Aj&labelColor=000000&color=5C5866">
      <img alt="npm badge" src="https://img.shields.io/npm/v/%40arcjet%2Fsprintf?style=flat-square&label=%E2%9C%A6Aj&labelColor=ECE6F0&color=ECE6F0">
    </picture>
  </a>
</p>

[Arcjet][arcjet] platform-independent replacement for [util.format][node-util].

This package is platform-independent in order to support multiple runtimes in varying environments, such as Edge Runtime, Node.js, Bun, Deno, and Cloudflare Workers.

- [npm package (`@arcjet/sprintf`)](https://www.npmjs.com/package/@arcjet/sprintf)
- [GitHub source code (`sprintf/` in `arcjet/arcjet-js`)](https://github.com/arcjet/arcjet-js/tree/main/sprintf)

## What is this?

This is an internal utility to help us format log messages.
It’s a fork of [`pinojs/quick-format-unescaped`][quick-format-unescaped].
We chose to fork so that we can maintain as much compatibility as possible
while being more restrictive.

## When should I use this?

You should not use this but use
[`pinojs/quick-format-unescaped`][quick-format-unescaped] or one of the
alternatives instead.
This package matches our current needs which are likely different from yours.

## Install

This package is ESM only.
Install with npm in Node.js:

```sh
npm install @arcjet/sprintf
```

## Use

```ts
import { sprintf } from "@arcjet/sprintf";

console.log(sprintf("Hello %s", "world")); // => "Hello world"
console.log(sprintf("1 %i %d", 2, 3.0)); // => "1 2 3"
```

## API

This package exports the identifier
[`sprintf`][api-sprintf].
The default export is also [`sprintf`][api-sprintf].

This package exports no [TypeScript][] types.

### `sprintf(template, …values)`

Formats a string by replacing placeholders with the provided values. See
[Substitutions](#substitutions) below for the supported placeholder types.

###### Parameters

- `template` (`string`)
  — the format string with placeholders
- `values` (`Array<unknown>`)
  — values to interpolate into the template

###### Returns

The formatted string (`string`).

## Substitutions

Substitutions will be made for the following character sequences if the matching
argument conforms to the type. For example, `"%d"` will only be replaced by a
number, not a string or object.

Object substitution supports any value that is not `undefined`.

- `%d` | `%f` - Replaced if provided with a number.
- `%i` - Replaced if provided with a number after `Math.floor` is called on it.
- `%O` | `%o` | `%j` - Replaced if provided with any value after
  `JSON.stringify` is called on it. Objects with circular references will be
  replaced with `[Circular]`. Functions will be replaced with the function name
  or `<anonymous>` if unnamed.
- `%s` - Replaced if provided with a string.
- `%%` - Replaced by the literal `%` character.

## License

[Apache License, Version 2.0][apache-license] © [Arcjet Labs, Inc.][arcjet]

Derivative work based on [`quick-format-unescaped`][quick-format-unescaped]
licensed under [MIT][quick-format-unescaped-license] © David Mark Clements.
Our work is more restrictive while maintaining as much compatibility as
possible.

[apache-license]: http://www.apache.org/licenses/LICENSE-2.0
[api-sprintf]: #sprintftemplate-values
[arcjet]: https://arcjet.com
[node-util]: https://nodejs.org/docs/latest-v18.x/api/util.html#utilformatformat-args
[quick-format-unescaped-license]: https://github.com/pinojs/quick-format-unescaped/blob/20ebf64/LICENSE
[quick-format-unescaped]: https://github.com/pinojs/quick-format-unescaped/blob/20ebf64/index.js
[typescript]: https://www.typescriptlang.org/

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