Offline-first DSA interview prep in your terminal.
Search 3,310 questions, browse 17,931 company mappings, run mock sessions, and track progress locally.
Dooma turns scattered interview-prep data into a focused terminal workflow. It gives you a fast way to find what companies ask, open the exact LeetCode-style problem, mark progress, keep notes, and come back later without accounts, dashboards, or network dependency after installation.
pip install dooma
doomaInterview prep usually fails in the handoff between "what should I solve?" and "did I actually make progress?" Dooma keeps that loop short:
- Company-first discovery: see question pools for companies like Google, Amazon, Meta, Microsoft, and Bloomberg.
- Fast local search: jump from rough text like
two sumorbinary treeto matching questions. - Local progress tracking: solved, attempted, skipped, bookmarks, notes, and streaks live in your own
~/.doomadirectory. - Offline-first runtime: the packaged dataset ships with a prebuilt index, so the CLI does not parse thousands of YAML files on every launch.
- Contributor-friendly data model: canonical data stays as readable YAML; the generated runtime index is reproducible.
| Area | Current state |
|---|---|
| Unique questions | 3,310 |
| Company-question mappings | 17,931 |
| Companies | 662 |
| Difficulty split | 808 easy, 1,757 medium, 745 hard |
| Active sheet coverage | Blind 75 has 71 mapped questions |
| Runtime index | dooma/data/index.json, generated from YAML |
| Local state | ~/.dooma/state.db and ~/.dooma/config.json |
| Python support | 3.9+ |
From PyPI:
pip install doomaFrom source:
git clone https://github.com/im-anishraj/dooma.git
cd dooma
pip install -e ".[dev]"Check the install:
dooma doctorLaunch the interactive hub:
doomaThe home screen gives you the main workflows:
1 practice Pattern-first question browser
2 browse Browse patterns & companies
3 search Fuzzy search questions
4 sheet Curated roadmaps
5 mock Timed mock interview
6 dashboard Your progress stats
7 guide Commands, workflows, and support
8 quit Exit Dooma
You can also run commands directly:
dooma search "two sum"
dooma companies --limit 10
dooma question two-sum
dooma random --difficulty medium
dooma mock --count 5
dooma statsdooma companies --limit 5
dooma browse companies
dooma practice --company googleThe company lists are sorted by available question volume. Current top pools include Google, Amazon, Meta, Microsoft, and Bloomberg.
dooma search "two sum"
dooma search --limit 5 "binary search"Search uses fuzzy title/topic matching through RapidFuzz, which makes it useful even when you only remember part of a problem name.
dooma question two-sumQuestion screens show difficulty, status, URL, top companies, and local notes when present.
dooma mock --count 5
dooma mock --count 3 --difficulty hardMock mode samples questions, starts a timer, and lets you open, solve, or skip each prompt.
dooma dashboard
dooma stats
dooma bookmarksProgress is intentionally local. Dooma does not require sign-in and does not upload your activity.
Inside practice, company, sheet, and random-question flows:
| Key | Action |
|---|---|
o |
Open the problem URL in your browser |
m |
Cycle status: unsolved -> attempted -> solved -> skipped |
b |
Bookmark or unbookmark the question |
n |
Add or edit a local note |
q |
Go back |
| Command | Purpose |
|---|---|
dooma |
Open the interactive command hub |
dooma guide / dooma help |
Show commands, workflows, and support links |
dooma version / dooma --version / dooma -V |
Print the installed version |
dooma doctor |
Check Python, dataset, config, and local database health |
dooma search <query> |
Search questions by keyword |
dooma question <slug> |
Open one question by slug |
dooma companies |
List companies with the largest question pools |
dooma browse companies |
Browse companies interactively |
dooma patterns |
List pattern taxonomy entries |
dooma sheets |
List available sheets |
dooma sheet blind-75 |
Work through the mapped Blind 75 sheet |
dooma practice |
Browse questions interactively, optionally filtered |
dooma random |
Open a random filtered question |
dooma mock |
Start a timed random session |
dooma dashboard / dooma stats |
Show local progress |
dooma bookmarks |
Show bookmarked questions |
dooma config --reset |
Reset onboarding config |
Dooma has two kinds of data:
- Packaged dataset: YAML files in
dooma/data/are the source of truth for questions, companies, sheets, and pattern taxonomy. - Runtime index:
dooma/data/index.jsonis generated from YAML so installed users get fast startup without parsing roughly 4,000 YAML files each run. - User state: progress, notes, bookmarks, and streaks are stored locally in SQLite at
~/.dooma/state.db. - Config: onboarding choices live in
~/.dooma/config.json.
The CLI is offline-first after installation. It opens problem URLs only when you ask it to open a browser.
The company-wise dataset is the most complete part of Dooma today. Some roadmap structures are intentionally present before their mappings are complete:
| Dataset area | Status |
|---|---|
| Company mappings | Active: 17,931 mappings across 662 companies |
| Questions | Active: 3,310 unique question records |
| Blind 75 | Active: 71 mapped questions |
| Pattern taxonomy | Present: 25 pattern entries |
| Pattern-tagged questions | Not populated yet |
| NeetCode 150 / Striver SDE | Sheet definitions exist, mappings are not populated yet |
This transparency matters for contributors: the highest-impact data work today is completing pattern tags and sheet mappings.
dooma/
cli/ Typer app registration and home screen
commands/ Practice, browse, search, sheet, mock, dashboard
data/ Canonical YAML dataset plus generated index.json
dataset/ Legacy JSON snapshot
config.py Local onboarding/config state
db.py SQLite progress, bookmarks, notes, streaks
display.py Rich terminal rendering and logo output
loader.py Prebuilt index loader with YAML fallback
search.py RapidFuzz search helpers
scripts/
build_index.py Rebuild dooma/data/index.json from YAML
benchmark_loader.py
tests/ CLI, loader, search, display, and state tests
Set up a local environment:
git clone https://github.com/im-anishraj/dooma.git
cd dooma
pip install -e ".[dev]"Run the core checks:
ruff check .
mypy dooma
python -m pytestWhen dataset YAML changes, rebuild and verify the runtime index:
python scripts/build_index.py
python scripts/build_index.py --check
python scripts/benchmark_loader.pyBuild release artifacts locally:
python -m pip install build twine
python -m build
python -m twine check dist/*The most useful contributions are practical and data-driven:
- Add missing pattern tags to questions.
- Complete NeetCode 150 and Striver SDE sheet mappings.
- Improve fuzzy-search ranking for ambiguous queries.
- Add regression tests for interactive command flows.
- Improve dataset validation scripts.
- Polish Windows, macOS, and Linux terminal rendering edge cases.
Please read CONTRIBUTING.md before opening a pull request. Keep PRs focused and include the relevant test or data-index check.
Dooma is not a LeetCode replacement, online judge, or solution database. It does not submit code, scrape your account, or sync progress to a server. It is a fast local command center for deciding what to solve next and remembering your progress.
Releases are versioned in pyproject.toml and published to PyPI from GitHub Releases through the repository publish workflow. See RELEASE.md for versioning rules.
Community expectations are documented in CODE_OF_CONDUCT.md. The project is released under the MIT License.
