A modern, feature-rich LeetCode CLI built with TypeScript.
- 🔐 Cookie-based authentication - Secure login using browser cookies
- 📋 List problems - Filter by difficulty, status, tags, and search
- 📖 Beautiful problem display - Formatted output with examples and constraints
- 📝 Generate solution files - Auto-organized by difficulty and category
- 🧪 Test solutions - Run against sample test cases
- 📤 Submit solutions - Submit directly to LeetCode
- 📊 View statistics - Track your progress
- 🎯 Daily challenge - Get today's problem
- ⏱️ Interview timer - Timed practice with solve time tracking
- 📸 Solution snapshots - Save, restore, and compare solution versions
- 👥 Collaborative coding - Solve problems with a partner
- 📁 Workspaces - Isolate contexts (interview prep, study, contests)
- ⚙️ Configurable - Set language, editor, and working directory
- 📂 Smart file discovery - Use problem ID, filename, or full path
- 🔄 Git Sync - Auto-sync solutions to GitHub/GitLab
- 🚀 Auto-update notifications - Get notified when updates are available
npm install -g @night-slayer18/leetcode-cli# Login with your LeetCode cookies
leetcode login
# Get today's daily challenge
leetcode daily
# Pick a problem and generate solution file
leetcode pick 1
# Test your solution (any format works!)
leetcode test 1 # Problem ID
leetcode test 1.two-sum.java # Filename
leetcode test ./Easy/Array/1.two-sum.java # Full path
# Submit your solution
leetcode submit 1| Command | Description |
|---|---|
login |
Login with LeetCode browser cookies |
logout |
Clear stored credentials |
whoami |
Check login status |
today |
Show daily progress & challenge |
list |
List problems with filters |
show <id> |
Display problem description |
hint <id> |
Show hints for a problem |
pick <id> |
Generate solution file |
pick-batch <ids> |
Pick multiple problems |
bookmark <action> |
Manage problem bookmarks |
note <id> |
Manage problem notes |
daily |
Show today's challenge |
random |
Get a random problem |
test <id|file> |
Test solution against sample cases |
submit <id|file> |
Submit solution to LeetCode |
submissions <id> |
View past submissions |
stat [username] |
Show user statistics |
timer <id> |
Interview mode with timer |
snapshot <cmd> |
Save and restore solution versions |
diff <id> |
Compare solution with past submissions |
collab <cmd> |
Collaborative coding with a partner |
workspace <cmd> |
Manage workspaces for different contexts |
config |
View or set configuration |
sync |
Sync solutions to Git repository |
update |
Check for CLI updates |
changelog |
View release notes and breaking changes |
# List all problems
leetcode list
# Filter by difficulty
leetcode list -d easy
leetcode list -d medium
leetcode list -d hard
# Pagination
leetcode list --page 2 -n 10
# Search by keyword
leetcode list -s "binary tree"leetcode show 1
leetcode show two-sum# Show hints one at a time (press Enter for next)
leetcode hint 1
leetcode hint two-sum
# Show all hints at once
leetcode hint 1 --all# Generate solution file (uses default language)
leetcode pick 1
# Specify language
leetcode pick 1 --lang python3
# Skip opening in editor
leetcode pick 1 --no-openAll formats work for both test and submit:
# Using problem ID (auto-finds the file)
leetcode test 20
leetcode submit 20
# Using filename
leetcode test 20.valid-parentheses.java
leetcode submit 20.valid-parentheses.java
# Using full path
leetcode test ./Easy/String/20.valid-parentheses.java
# With custom test case
leetcode test 20 -c "[1,2,3]\n4"
# Visual debugging (ASCII visualization for arrays, trees, etc.)
leetcode test 1 --visualizeFetch and solve a random problem.
# Get random problem
leetcode random
# Filter by difficulty
leetcode random -d hard
# Filter by topic tag
leetcode random -t dp
# Pick immediately
leetcode random -d medium --pickView past submissions and download code.
# List last 20 submissions
leetcode submissions 1
# View details of last accepted submission
leetcode submissions 1 --last
# Download last accepted solution
leetcode submissions 1 --download# Show today's progress & challenge
leetcode today
# Pick multiple problems at once
leetcode pick-batch 1 2 3 -l python3
# Bookmark problems
leetcode bookmark add 1
leetcode bookmark list
# Keep personal notes
leetcode note 1 edit# Basic stats (solved count, rank, streak)
leetcode stat
# Weekly activity table (last 12 weeks)
leetcode stat -c
# Skill breakdown by topic tags
leetcode stat -s
# 7-day trend chart
leetcode stat -t# Sync all solutions to your configured git repo
leetcode sync# Start timer for a problem (default: Easy=20m, Medium=40m, Hard=60m)
leetcode timer 1
# Custom time limit
leetcode timer 1 -m 30
# View your solve time stats
leetcode timer --stats
# Stop active timer
leetcode timer --stop# Host a collaboration session
leetcode collab host 1
# Share the room code with your partner
# Partner joins with:
leetcode collab join ABC123
# Both solve the problem, then sync
leetcode collab sync
# Compare solutions
leetcode collab compare
# Check session status
leetcode collab status
# Leave session
leetcode collab leave# Save current approach
leetcode snapshot save 1 "brute-force"
# Try a new approach, then save
leetcode snapshot save 1 "hash-map"
# List all saved versions
leetcode snapshot list 1
# Compare approaches
leetcode snapshot diff 1 1 2
# Restore if needed
leetcode snapshot restore 1 brute-force# Compare with last accepted submission
leetcode diff 1
# Show unified diff (line-by-line changes)
leetcode diff 1 --unified
# Compare with specific submission
leetcode diff 1 --submission 12345
# Compare with local file
leetcode diff 1 --file other-solution.pyIsolate your problem-solving contexts (e.g., interview prep vs daily practice).
# Show current workspace
leetcode workspace current
# List all workspaces
leetcode workspace list
# Create new workspace
leetcode workspace create interview -w ~/leetcode-interview
# Switch workspace
leetcode workspace use interview
# Delete workspace (files not deleted)
leetcode workspace delete old-workspaceEach workspace has its own config, timer history, and solution snapshots.
# View current config
leetcode config
# Interactive setup
leetcode config -i
# Set specific options
leetcode config --lang python3
leetcode config --editor code
leetcode config --workdir ~/leetcode
leetcode config --repo https://github.com/username/leetcode-solutions.gitSolution files are automatically organized by difficulty and category:
leetcode/
├── Easy/
│ ├── Array/
│ │ └── 1.two-sum.java
│ └── String/
│ └── 20.valid-parentheses.java
├── Medium/
│ └── Array/
│ └── 15.3sum.java
└── Hard/
└── Array/
└── 4.median-of-two-sorted-arrays.java
| Language | Extension |
|---|---|
| TypeScript | .ts |
| JavaScript | .js |
| Python3 | .py |
| Java | .java |
| C++ | .cpp |
| C | .c |
| C# | .cs |
| Go | .go |
| Rust | .rs |
| Kotlin | .kt |
| Swift | .swift |
This CLI uses cookie-based authentication. To login:
- Open leetcode.com in your browser
- Login to your account
- Open DevTools (F12) → Application → Cookies → leetcode.com
- Run
leetcode loginand paste yourLEETCODE_SESSIONandcsrftokenvalues
Config is stored at ~/.leetcode/config.json:
{
"credentials": {
"session": "...",
"csrfToken": "..."
},
"config": {
"language": "java",
"editor": "code",
"workDir": "/path/to/leetcode",
"repo": "https://github.com/username/leetcode-solutions.git"
}
}- Node.js >= 20.0.0
# Clone and install
git clone https://github.com/night-slayer18/leetcode-cli.git
cd leetcode-cli
npm install
# Build
npm run build
# Run tests
npm test
# Run with coverage
npm test -- --coverageSee docs/testing.md for detailed testing documentation.
You can run the CLI using Docker without installing Node.js.
-
Pull the image:
docker pull nightslayer/leetcode-cli:latest
-
Setup Shell Function (Add to your shell config):
Bash/Zsh (
~/.bashrcor~/.zshrc):leetcode() { docker run -it --rm \ -w /root/leetcode \ -v "$(pwd)/leetcode:/root/leetcode" \ -v "$HOME/.leetcode:/root/.leetcode" \ nightslayer/leetcode-cli:latest "$@" }
Fish (
~/.config/fish/config.fish):function leetcode docker run -it --rm \ -w /root/leetcode \ -v (pwd)/leetcode:/root/leetcode \ -v $HOME/.leetcode:/root/.leetcode \ nightslayer/leetcode-cli:latest $argv end
PowerShell (
$PROFILE):function leetcode { docker run -it --rm ` -w /root/leetcode ` -v "${PWD}/leetcode:/root/leetcode" ` -v "$env:USERPROFILE/.leetcode:/root/.leetcode" ` nightslayer/leetcode-cli:latest $args }
-
Usage:
leetcode list leetcode pick 1
-
Build the image:
docker build -t leetcode-cli . -
Run commands:
docker run -it --rm \ -w /root/leetcode \ -v "$(pwd)/leetcode:/root/leetcode" \ -v "$HOME/.leetcode:/root/.leetcode" \ leetcode-cli list
Note: We mount
~/.leetcodeto persist login credentials andleetcodefolder to save solution files.
Apache-2.0 © night-slayer18
