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
95%
MIT

OmniRoute

AI Agents

80,476

A free, open-source AI gateway connecting Claude Code, Codex, Cursor, Cline, and Copilot to 237 AI providers (90+ free) through one endpoint, with automatic fallback and token-compression to stretch free-tier limits further.

View details
87
Repo Health
70
Technical
70
Dependency
Built with
TypeScript 95%
Updated 5 days ago
TypeScript
99%
Apache 2.0

Onlook

AI Design Tools · Design Tools

26,996

An open-source, AI-first visual editor that lets designers and developers build, style, and deploy React apps directly in code — no handoff required.

View details
63
Repo Health
80
Technical
64
Dependency
Built with
TypeScript 99%
Updated 1 weeks ago
TypeScript
95%
MIT

Open Lovable

AI Development

28,793

An open-source AI app builder that scrapes a live website and recreates it as a modern React app through chat — built by Firecrawl as a self-hostable example of the Lovable.dev workflow.

View details
50
Repo Health
66
Technical
69
Dependency
Built with
TypeScript 95%
Updated 2 weeks ago
Go
36%

OpenPanel

Devops · Hosting Control Panel

764

Docker-powered web hosting control panel that gives every user a fully isolated environment with dedicated web server, database, and networking — VPS-grade security on shared hardware.

View details
87
Repo Health
75
Technical
63
Dependency
Built with
Go 36%
HTML 30%
TypeScript 24%
Updated 6 days ago
TypeScript
93%
Apache 2.0

Openship

Devops · Hosting Control Panel

14,912

Openship is an open-source, self-hostable deployment platform that points at a repo and builds, ships, routes, and TLS-terminates the app — driven from a desktop app, web dashboard, or CLI.

View details
84
Repo Health
85
Technical
65
Dependency
Built with
TypeScript 93%
Updated 5 days ago
Rust
99%
GPL 3.0

Pake

Developer Tools

62,284

Turn any webpage into a lightweight native desktop app with one command — built on Rust/Tauri instead of Electron, producing installers nearly 20x smaller (typically under 10MB) for macOS, Windows, and Linux.

View details
94
Repo Health
75
Technical
72
Dependency
Built with
Rust 99%
Updated 5 days ago
TypeScript
98%
MIT

Promptfoo

AI Development

26,358

An open-source CLI and library for evaluating and red-teaming LLM applications — replace trial-and-error prompt engineering with systematic evals, vulnerability scanning, and CI/CD integration.

View details
90
Repo Health
73
Technical
67
Dependency
Built with
TypeScript 98%
Updated 5 days ago
TypeScript
99%
MIT

Sanity

CMS

6,370

Open-source headless CMS with a fully customizable React Studio, real-time collaborative editing, structured content modeling, and GROQ query language

View details
92
Repo Health
90
Technical
66
Dependency
Built with
TypeScript 99%
Updated 5 days ago
Python
100%
Other

Sourcebot

AI Code Assistants · Developer Tools · Search

4,005

A self-hosted, AI-powered code search engine that indexes every repo across GitHub, GitLab, Bitbucket, Gitea, Gerrit, and Azure DevOps, so both engineers and coding agents can search, browse, and ask questions about your codebase from one place.

View details
86
Repo Health
83
Technical
61
Dependency
Built with
Python 100%
Updated 1 weeks 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