npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

digitalomanai

v2.0.5

Published

DigitalOman.ai — offline AI assistant for the terminal. Runs a local Llama 3.2 1B on your own machine, with web search, document and image analysis, mail, ERP connectivity, notes and transcription.

Readme

DigitalOman.ai

An offline AI assistant you install like any other npm package and start from a terminal — on Linux, macOS or Windows. It runs Llama 3.2 1B on your own machine: no account, no API key, and nothing leaving the device unless you connect a cloud provider yourself.

npm install -g digitalomanai
digitalomanai

The command opens the app in its own window. It is not a browser tab.

Installing downloads everything the app needs — the language model and the image, speech and OCR components, about 980 MB in total — so that when the window opens, every feature in it already works. Budget a few minutes for the install. A download that fails does not fail the install: the app fetches whatever is missing when it first starts.

To install without downloading the weights (a CI image, a Docker layer, a machine you will provision later):

DIGITALOMANAI_SKIP_DOWNLOAD=1 npm install -g digitalomanai

What you get

| | | |---|---| | Chat | Streaming conversation with a local model, full history, per-conversation titles | | Documents | PDF, DOCX, XLSX, PPTX and 70+ text and code formats — read, summarise, ask about | | Images | On-device OCR, image recognition and object detection — and if the chosen model cannot see images, that reading is passed to it as text so the question still gets answered | | Web | Search, and an in-app reader that pulls a page's text for the model | | AI Academy | Guided learning sessions | | AI Gallery | Image search with a saved-recents shelf | | Mail | IMAP inbox and SMTP sending | | ERP | Tally and SQL Server connectivity, saved read-only queries, charts and dashboards | | Notes · To Do · Transcribe | Notes with DOCX/HTML export, tasks that feed the model context, speech-to-text | | Cloud providers | Optional — Gemini, ChatGPT, Claude, Groq, Mistral, DeepSeek, Qwen, or any custom streaming endpoint |

Everything works with no network once the model is downloaded, except the features that are inherently online (web search, mail, cloud providers).


Requirements

  • Node 20 or newer
  • ~2.5 GB disk — about 1.6 GB of dependencies, a 770 MB model and 172 MB of image/speech components
  • 4 GB RAM to run the 1B comfortably; a GPU is used automatically when one is available and the weights fit, otherwise it runs on the CPU

No compiler and no build tools. Every native component ships as a prebuilt binary for your platform.


First run

$ digitalomanai

  DigitalOman.ai v2.0.0
  server  http://127.0.0.1:7331
  data    /home/you/.config/DigitalOman.ai
  window  open (Electron)

  Close the window or press Ctrl+C to stop.

The model downloads once, into your data directory, with the progress shown on the splash screen. It resumes where it stopped if the connection drops.

Offline install. If the machine has no internet, copy the .gguf across and point at it — nothing is downloaded:

digitalomanai model import ./Llama-3.2-1B-Instruct.Q4_K_M.gguf
# or, without copying it:
DIGITALOMANAI_MODEL=/path/to/model.gguf digitalomanai

The name does not have to match: capitalisation, dots and dashes are ignored when the model is looked up, so a copy from any mirror is recognised rather than downloaded a second time.

These are fetched during installation too, so this is only needed if the install could not reach the network:

digitalomanai model download --ml     # image, speech and OCR components
digitalomanai model download --all    # those and the language model

digitalomanai doctor shows what is already on disk.


Terminal use

The window is not the only way in. Every subcommand goes through the same code the window does, so the two can never disagree.

digitalomanai chat "explain a GGUF quantisation in two sentences"
digitalomanai ask report.pdf "what were the Q3 revenue figures?"
digitalomanai ask receipt.jpg "how much was the total?"
digitalomanai read contract.docx > contract.txt
digitalomanai search "oman logistics 2026"

digitalomanai model list
digitalomanai provider use local        # or: gemini, claude, openai…
digitalomanai mail list --unread
digitalomanai erp query <id> <queryId>
digitalomanai notes list --json

digitalomanai doctor                    # check this machine
digitalomanai serve --port 8080         # server only, no window
digitalomanai --dev                     # open with devtools attached

chat and ask stream to stdout and put progress on stderr, so redirecting gives you just the answer:

digitalomanai chat "summarise this" > answer.txt

The window

digitalomanai opens a real application window, and falls back rather than failing if it can't:

  1. Electron — a dedicated window with its own icon and taskbar entry. This is installed by default as an optional dependency.
  2. Chrome / Edge / Brave / Vivaldi in app mode — a clean window with no tab strip or address bar, if Electron isn't available.
  3. Your default browser — a tab.
  4. The URL, printed — on a headless box or over SSH. Forward the port and open it from your own machine.

Closing the window stops the server. Killing the terminal closes the window.

To force a browser instead of Electron:

DIGITALOMANAI_NO_ELECTRON=1 digitalomanai

Cloud providers

The local model is the default and needs no configuration. To use a hosted model instead, open the model picker in the app and add a key — or point at any OpenAI-compatible endpoint under Custom endpoint, where the request body comes pre-filled with a working template you can edit:

{"model":"my-model","stream":true,"messages":[{"role":"user","content":"{prompt}"}]}

{prompt} is replaced with your message; {key} in the auth header is replaced with your API key. Switch back at any time with digitalomanai provider use local.


Where your data lives

| | | |---|---| | Linux | ~/.config/DigitalOman.ai | | macOS | ~/Library/Application Support/DigitalOman.ai | | Windows | %APPDATA%\DigitalOman.ai |

Conversations, notes, tasks and models are plain files there. API keys, mail passwords and ERP credentials are encrypted with AES-256-GCM under a key file that only your user account can read.

digitalomanai where prints the path. DIGITALOMANAI_HOME overrides it.


Environment variables

| Variable | Effect | |---|---| | DIGITALOMANAI_HOME | Data directory | | DIGITALOMANAI_MODEL | Use a specific .gguf instead of the default | | DIGITALOMANAI_ML_DIR | Where OCR / vision / speech weights are cached | | DIGITALOMANAI_BROWSER | Browser to use for the window | | DIGITALOMANAI_NO_ELECTRON | Skip Electron, use a browser window | | DIGITALOMANAI_SKIP_DOWNLOAD | Install without fetching the model and components | | DIGITALOMANAI_DEBUG | Print stack traces on error | | NO_COLOR | Disable colour |


Architecture

Three processes, deliberately:

  digitalomanai (node)                    the app
    ├── HTTP server on 127.0.0.1          serves the UI, carries the RPC
    ├── llama worker (forked node)        model weights and inference
    └── window process (Electron)         draws the UI, nothing else

The split is not incidental. Electron's allocator kills large CPU-side model loads with SIGILL, so inference never runs under Electron — the window process only renders HTML served over HTTP and holds no credentials, no model and no Node access (contextIsolation on, nodeIntegration off). A build check enforces that no module outside src/cli/shell.js imports Electron.

src/
  core/      the engine: model, documents, ML, mail, ERP, web, storage
  server/    HTTP server + the RPC surface (was Electron's IPC channels)
  cli/       argument parsing, subcommands, window launching, Electron shell
  web/       the UI

src/web/js/bridge.js exposes window.api over fetch and EventSource with exactly the shape Electron's preload.js used to provide — which is why the UI runs unmodified.


Development

bun install
bun run check          # parse, load, bridge-surface and isolation checks
node bin/digitalomanai.js

bun run check is wired into prepack, so a broken tree cannot be published.


Licence

Proprietary, and free to use — see LICENSE.md. You may install and run it on any number of machines, for personal or commercial work, and do whatever you like with what it produces. You may not modify, redistribute or resell the software itself.

The source is published so you can see what runs on your machine, not so it can be copied into something else.

Built with Llama. The model is downloaded to your machine rather than distributed here, and your use of those weights is governed by the Llama 3.2 Community License and Meta's Acceptable Use Policy.