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

@serifpersia/dango

v3.8.0

Published

A web application for watching anime.

Readme

A local-first anime web app focused on performance, privacy, and personal library tracking.

License: MIT Github stars App version

Provider Status

Animation


dango is a lightweight, self-hosted Node.js application built for querying anime metadata, managing personal watchlists, and logging viewing progress through a fast local interface.

Highlights

  • Hardware Efficient: Engineered with a minimal footprint to run effortlessly on low-spec hardware, SBCs, and mobile environments.
  • Metadata & Discovery: Browse trending titles, search catalog entries, and view release schedules locally.
  • Multi-Provider Playback: Switch seamlessly between multiple third-party streaming providers directly within the player interface.
  • Watch Along: Create a room below a direct HLS anime, TV, or movie player and share the invite. Each viewer uses their own Dango; the host controls playback. No port forwarding needed. End the room when finished, or it expires after six hours.
  • Watchlist Tracking: Categorize titles (Watching, Completed, Plan to Watch) with fine-grained progress states.
  • Library Insights: Built-in dashboard tracking viewing habits, personal stats, and completion ratios.
  • Trackers & Sync: Bi-directional AniList and MyAnimeList sync for anime and manga, plus username and XML list imports.
  • Expanded Media Hub: Dedicated interfaces for Manga, ASMR, and TV/Movies.
  • LAN Security: Optional LAN authentication with password enforcement for multi-device local network deployments.
  • Profiles: Separate libraries, tracker/cloud connections and preferences, with optional profile passwords and custom images.

Join the dango Discord server

Be part of the dango community where you can connect with fellow users, ask questions, and share your experiences:

Discord Server


Installation

Prerequisites

| Requirement | Supported Version | Notes | | :---------- | :--------------------- | :-------------------------------------------------------- | | Node.js | >= 22.12.0 | Required runtime (Download) | | npm | Bundled with Node | Global install (npm install -g @serifpersia/dango) | | pnpm | 11 (npm i -g pnpm) | Only needed for source development (run.bat / run.sh) |


Quick Install (CLI)

Install the global CLI binary via npm:

npm install -g @serifpersia/dango

Launch the interface from anywhere:

dango

[!IMPORTANT] Once the server initializes, navigate to http://localhost:3000 in your browser (or whatever PORT you set, see Manual Setup). The background process runs locally until terminated (Ctrl + C or q key press as well as window X button closing action).


Release Zip (no install)

No npm install needed - dependencies ship inside the zip, client is prebuilt:

  1. Download and extract dango.zip from Releases.
  2. Install Node.js 22.12+ (node --version to check).
  3. Launch using run.bat (Windows) or ./run.sh (Linux/macOS), then open http://localhost:3000 (http://localhost:$PORT if you changed it).

Android Installation

Run standard dango via Termux:

  1. Install Termux (obtain via F-Droid).
  2. Update base dependencies:
    pkg update
    pkg upgrade -y
  3. Install Node.js:
    pkg install nodejs -y
  4. Install and run dango:
    npm install -g @serifpersia/dango
    dango
  5. Open your mobile browser at http://localhost:3000 (http://localhost:$PORT if you changed it).

A standalone bundle packaging Node.js, dango, and a local WebView container.

  1. Grab the latest .apk from Releases.
  2. Install the APK (allow Install from Unknown Sources when prompted).
  3. Open the app. Core runtimes auto-provision on first launch.

Compiling from Source:

cd android-app
python fetch-termux-node.py

# Windows
build-debug.bat

# Linux / macOS
chmod +x build-debug.sh && ./build-debug.sh

Build requirements: Python 3, JDK 17+, Android SDK (Platform 36, Build-Tools 36.0.0).


Manual Setup (Development)

The project is structured as a pnpm workspace (client and server) managed by a unified lockfile. You need Node.js 22.12+ and pnpm 11 (npm install -g pnpm).

# Clone the repository
git clone https://github.com/serifpersia/dango.git
cd dango

# Install dependencies (root + workspaces)
pnpm install

# Compile workspaces (Vite frontend + tsc backend)
pnpm run build

Run via interactive environment scripts:

# Linux / macOS
chmod +x run.sh && ./run.sh

# Windows
run.bat

Set PORT to change the backend port (default: 3000) and DEV_PORT to change the Vite frontend port (default: 5173). The dev proxy and the Google OAuth callback follow both values automatically. They are read from the environment of the process you launch, not from dango's .env, so export them in the shell before starting:

PORT=4000 DEV_PORT=5174 pnpm run dev
PORT=4000 pnpm start

You can also set ports as launch options. These override the corresponding environment variables:

dango --port 4000
dango dev --port 4000 --dev-port 5174
# From a source checkout:
pnpm start --port 4000
pnpm run dev --port 4000 --dev-port 5174

OAuth callbacks follow the port, and redirect URIs are registered with the provider:

| Provider | Registered redirect URIs | | :------- | :---------------------------------------------------------------------------------------------------------- | | AniList | http://localhost:3000/api/tracker/anilist/callback | | Google | http://localhost:3000/api/auth/google/callback and http://localhost:5173/api/auth/google/callback (dev) |

Sign-in breaks with redirect_uri_mismatch when the port you run on is not on that list, so a custom port needs your own AniList client and your own Google OAuth client (see Settings). GitHub uses the device flow and rclone needs no local port, so both keep working on any port.

Command Reference

| Command | Action | | :----------------------------------- | :----------------------------------------- | | dango | Start the installed client daemon | | dango --version | Display current installed version | | pnpm run dev | Start full dev stack via orchestrator.js | | pnpm --filter dango-client run dev | Run Vite frontend independently | | pnpm --filter dango-server run dev | Run backend via tsx watch | | pnpm -r run lint | Run ESLint passes across all packages |


Storage & Persistence

dango stores SQLite databases, cached indices, and credentials in the OS application data registry rather than the global node_modules path:

| Platform | Default Path | | :---------- | :----------------------------------------------- | | Windows | %APPDATA%\dango | | macOS | ~/Library/Application Support/dango | | Linux | $XDG_DATA_HOME/dango or ~/.local/share/dango |

[!IMPORTANT] Legacy installs will automatically migrate .env variables and SQLite records from older server/ structures into the proper user directory on launch.


Data Synchronization

dango is local-first: primary application state lives in your local SQLite store. Cloud syncing creates point-in-time JSON snapshots to maintain seamless backups across multiple installations.

Sync Priority Engine:
[1] GitHub Sync ──(fallback)──> [2] Google Drive ──(fallback)──> [3] Rclone

1. GitHub Sync

  1. Open Settings → Synchronization.
  2. Click Sign in with GitHub.
  3. Authorize via the OAuth device code flow.

dango creates a private repository named dango-sync-data to read/write JSON snapshots (sync.json for production, sync.dev.json for development).

2. Google Drive

  1. Open Settings → Synchronization.
  2. Click Sign in with Google and authorize permissions.

Data writes directly to a sandbox appDataFolder on your personal Drive. To clear backups, revoke app permissions under Google Drive's Manage Apps menu.

[!IMPORTANT] Advanced users can supply their own custom Github and Google OAuth Client ID & Secret in settings.

3. Rclone (Third-Party Remotes)

Used as a manual fallback for services like Mega, Dropbox, or custom WebDAV:

  1. Ensure rclone is installed and mapped to your system PATH.
  2. Configure your desired target via rclone config.
  3. Pick your configured remote profile inside Settings → Synchronization.

Tracker Integrations

AniList

Bidirectional sync for anime and manga. Go to Trackers, connect, then Sync Now (anime) / Start Sync (manga). Progress and statuses merge both ways; remote-only entries import, local-only entries push. AniList requires no setup.

MyAnimeList

Release builds use Dango's auth worker (no setup). For your own app, create one at MAL API settings, register your-origin/api/tracker/mal/callback, and paste client ID/secret in Trackers (or set MAL_CLIENT_ID/MAL_CLIENT_SECRET). MAL needs the secret even with PKCE. MAL_AUTH_WORKER_URL points self-built releases at a worker.

Sync Now merges your authenticated list both ways. Remote-only entries import, local-only push, missing entries are never deleted. Unmatched titles are reported, not guessed. Username and XML imports work without login. Manga sync links by exact title first, then searches up to 25 unlinked titles per sync.

Progress is pushed on Sync Now (and on playback once an episode reaches 80% for the active tracker). MAL tokens refresh automatically; credentials stay on this server and are excluded from library exports. Disconnect removes local tokens. Server needs HTTPS access to myanimelist.net, api.myanimelist.net, and graphql.anilist.co.


Disclaimer & Legal

dango is an open-source, local-first web app. It does not host or distribute unauthorized media or copyrighted video assets. Users are solely responsible for ensuring their usage aligns with relevant local laws and digital copyright regulations.

License

Distributed under the terms of the MIT License.