A feature-rich, unofficial client for catboy.best.
Seamlessly search, download, and manage your osu! beatmaps and beatpacks.
Download the latest release · Features · Installing · Development
directify is an osu!direct-style companion for osu!stable/osu!classic. Search and install
beatmaps straight into your Songs folder, back your library up into portable "beatpacks", and
manage collections, all from one desktop app. The actual beatmap search and download is handled by
catboy.best (or any other compatible mirror you point it at).
- osu!lazer-style search: filter by mode (Standard/Taiko/Catch/Mania), mania key count, genre, language, and a min/max star-rating range, on top of the usual title/artist/tag search.
- Multiple beatmap sources with automatic fallback: ships with catboy.best and osu.direct built in. Add your own compatible mirror, reorder the fallback chain, or disable one without removing it. If your first choice is down, directify quietly tries the next.
- Library management: scans your
Songsfolder directly (no dependency on osu!'s ownosu!.db), shows what's actually installed, and lets you bulk-select maps to add to a collection or delete. - Offline cover art: caches each map's cover image locally on install, and backfills it for maps you already had, so your library still looks right with no internet connection.
- Collections editor: reads and writes osu!stable's
collection.dbdirectly. Changes show up in-game the next time you restart osu!. - Beatpacks (backup/restore): zip your whole library or a hand-picked subset into a portable archive, and restore it on any machine.
- Light/dark theme, a reduce-motion toggle, keyboard shortcuts (press
?in the app), and proxy support (HTTP/HTTPS/SOCKS4/SOCKS5) for restricted networks. - Localized: English, Spanish, and Japanese ship today. More are welcome; see Contributing.
- Grab the latest portable
.exefrom Releases. - Run it. No installer, no admin rights needed.
- That's it. Settings, cached cover art, and everything else directify needs live in your user
AppDatafolder, not next to the.exe, so updating is just replacing the.exewith a newer one. directify checks GitHub Releases on launch and tells you in-app when a newer build is available.
This repo is a pnpm monorepo holding the app itself and the libraries it depends on. The landing page at directify.pvrz.lol is closed-source and lives in a separate, private repo; it isn't part of this codebase.
| Path | What it is |
|---|---|
apps/desktop |
The app: an Electron + React client. Beatmap source adapters live in apps/desktop/src/main/sources (a generic MirrorSource class works against any catboy.best-compatible API); apps/desktop/src/main/source-registry.ts handles the fallback chain and per-source rate limiting. |
packages/shared |
Types shared across the app, plus the collection.db binary reader/writer. |
packages/ui |
The app's design system: theme tokens, Button, Card, Icon, DualRangeSlider, and more. |
pnpm install
pnpm dev:desktop # Electron appBuild a real portable .exe, the same thing the Releases page ships:
pnpm --filter @directify/desktop packageRun the shared-package tests (covers the collection.db round-trip):
pnpm --filter @directify/shared testAdding a language is just a new apps/desktop/src/renderer/src/locales/<code>.json (copy
en.json and translate the values) plus registering it in
apps/desktop/src/renderer/src/i18n.ts. Adding a beatmap source doesn't require any code at all:
add it from Settings, as long as it exposes the same GET /api/search, GET /api/v2/s/:id, and
GET /d/:id shape catboy.best does.
directify is a fan-made, unofficial project. It is not affiliated with or endorsed by catboy.best, osu!, or ppy Pty Ltd.