ora

An elegant, dependency-light terminal spinner for Node.js command-line apps and scripts.

Library
npm
v9.4.1
9,767 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
57 /100 Fair
Development Activity 36
Maintenance 36
Community 56
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
88 /100 Excellent
Architecture 85
Code Quality 90
Innovation 88
Learning Curve 90

Ora is a widely used terminal spinner library for Node.js that shows an animated loading indicator while long-running work is in progress. With a single call you get a configurable spinner with text, colors, and prefix/suffix labels that you can update live, then finalize into a green success, red failure, or yellow warning symbol.

Designed for modern Node.js (ESM, private class fields, Node 20+), Ora automatically detects whether it is running in an interactive TTY, hides the cursor, discards stray stdin, and coexists cleanly with your own console.log output. It powers loading feedback in countless CLIs, build tools, and automation scripts.

What You Get

  • A configurable spinner (text, color, prefix/suffix text, indent, custom frames) that can be updated live via getters and setters
  • Terminal-aware behavior: automatic TTY/CI detection, cursor hiding, stdin discarding, and a line-spinner fallback on non-Unicode Windows terminals
  • Completion helpers - .succeed(), .fail(), .warn(), .info(), and .stopAndPersist() - that stop the spinner and print a persisted symbol and message
  • An oraPromise() helper that wires a spinner to a promise, resolving with .succeed() and rejecting with .fail() automatically
  • Access to the full cli-spinners catalog and clean coexistence with regular console.log output

Common Use Cases

  • Showing loading feedback while a CLI fetches data, installs packages, or calls a slow API
  • Reporting step-by-step progress in build scripts and automation with success/failure symbols
  • Wrapping a promise-returning task so status is reflected automatically without manual start/stop calls

Under The Hood

Architecture - Ora is a single ES module (index.js) built around one Ora class that encapsulates all state in private fields (#frameIndex, #stream, #hookedStreams, #color) and exposes a small public surface plus a default ora() factory and an oraPromise() helper. On start it resolves the target stream (default process.stderr), decides whether it is enabled by probing TTY/CI state, hides the cursor via cli-cursor, optionally discards stdin, and installs write hooks on the stream so its own frames and the caller’s console output interleave cleanly. A timer advances #frameIndex through the chosen spinner’s frames, and each render clears the previous lines (tracked in #linesToClear) before writing the next frame, using synchronized-output escape sequences where supported.

Tech Stack - Pure modern JavaScript targeting Node.js >=20 as an ESM-only package (“type”: “module”, exports map with bundled TypeScript types in index.d.ts). It composes a set of focused sindresorhus utilities as dependencies: chalk for color, cli-cursor for cursor control, cli-spinners for the frame catalog, log-symbols for completion glyphs, is-interactive and is-unicode-supported for environment detection, stdin-discarder for input handling, and string-width for correct width math. Tooling is xo (lint), tsd (type tests), and the built-in node —test runner.

Code Quality - The code is clean and disciplined: private class fields enforce encapsulation, helper methods like #internalWrite and #tryRender keep render logic DRY, and edge cases (buffer vs string chunks, line-terminating writes, non-Unicode Windows terminals, worker threads) are handled explicitly. Test coverage is strong - test.js contains roughly 100 tests exercised via the native test runner, plus type-level tests in index.test-d.ts.

API Design - The developer experience is excellent and a big reason for Ora’s popularity. A single ora('text').start() gets you going, mutable properties (spinner.text, spinner.color) make live updates obvious, and the completion methods (.succeed/.fail/.warn/.info) read naturally and return the instance for chaining. oraPromise() removes boilerplate for the common promise case, and the bundled, thoroughly documented TypeScript types make the whole surface discoverable in the editor.

Used by 42 apps in this directory

TypeScript
98%
MPL 2.0

Logto

Authentication

14,769

Open-source auth infrastructure for SaaS and AI apps with OIDC, SAML, and RBAC

View details
92
Repo Health
83
Technical
63
Dependency
Built with
TypeScript 98%
Updated 1 weeks ago
JavaScript
55%
Other

Lokus

Knowledge Management · Note Taking

829

Local-first note-taking with graph view, canvas & AI plugins—your Markdown files, zero telemetry, blazing-fast Rust performance.

View details
75
Repo Health
75
Technical
64
Dependency
Built with
JavaScript 55%
HTML 21%
Rust 12%
Updated 2 months ago
TypeScript
99%
Apache 2.0

Mastra Code

AI Code Assistants

29,041

"A coding agent that never compacts" — a terminal-based AI coding agent built on the Mastra framework, with Observational Memory instead of context compaction, multi-model support, and OAuth login for Claude Max or ChatGPT Plus.

View details
90
Repo Health
73
Technical
65
Dependency
Built with
TypeScript 99%
Updated 6 days ago
TypeScript
87%
MIT

medusa

Ecommerce

36,897

The most flexible open-source commerce platform — build B2C, B2B, and marketplace applications with modular, composable commerce primitives.

View details
94
Repo Health
87
Technical
63
Dependency
Built with
TypeScript 87%
JavaScript 12%
Updated 1 weeks ago
Clojure
57%
Other

Metabase

Analytics

49,827

The open-source BI platform that lets anyone ask questions and build dashboards without writing SQL — with an embedded analytics SDK and AI-powered query assistant included.

View details
95
Repo Health
84
Technical
62
Dependency
Built with
Clojure 57%
TypeScript 38%
Updated 6 days ago
TypeScript
96%
AGPL 3.0

Midday

Invoicing Finance · Productivity

15,091

All-in-one AI-powered business operations platform for freelancers and solo entrepreneurs to manage invoicing, time tracking, banking, and financial intelligence.

View details
51
Repo Health
78
Technical
67
Dependency
Built with
TypeScript 96%
Updated 4 months ago
TypeScript
97%
Other

nango

Authentication · Automation · Developer Tools

12,963

Build product integrations with AI using 800+ APIs — auth, proxy, and TypeScript functions on production-grade infrastructure.

View details
94
Repo Health
85
Technical
67
Dependency
Built with
TypeScript 97%
Updated 1 weeks ago
TypeScript
99%
Other

NocoBase

Low Code Platforms · No Code Platforms

24,686

Open-source AI + no-code platform that lets coding agents and people collaborate to build business systems fast on proven infrastructure.

View details
94
Repo Health
81
Technical
63
Dependency
Built with
TypeScript 99%
Updated 6 days ago
TypeScript
98%
Other

Novu

Developer Tools

40,195

Open-source communication infrastructure that connects your products and AI agents to every channel your users live on — Inbox, Email, SMS, Push, Chat, and more.

View details
93
Repo Health
80
Technical
64
Dependency
Built with
TypeScript 98%
Updated 6 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers