practicode
Socket.dev package health
Personal coding practice, right in your terminal.
practicode is a small Rust TUI for syntax exercises and stdin/stdout coding-test practice. It keeps your problems, settings, and submissions local by default.

First run opens a small home screen for choosing learning or practice.

Practice mode keeps the problem, editor, judge output, and command palette in one terminal.
What You Get
- Syntax learning and coding-test practice from one entry screen.
- Local judging for Python, TypeScript, Java, and Rust.
- A scrollable Ratatui UI with lesson/problem text, editor, run output, result status, and command palette.
- Optional Codex or Claude Code help for hints and generated problems.
Install
npm
npm install -g practicode
practicode
The npm package builds the Rust binary during install. Set PRACTICODE_SKIP_BUILD=1 to skip that step; the launcher will try the same locked Cargo build on first run if the binary is missing.
Cargo
cargo install practicode
practicode
Local checkout
git clone https://github.com/baba9811/practicode.git
cd practicode
npm install
npm start
Language runtimes
Install only the languages you plan to practice. Python uses python3 or python; TypeScript uses node --experimental-strip-types; Java uses javac and java; Rust uses rustc.
macOS
brew install python node
brew install --cask temurin@21
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Windows
winget install -e --id Python.Python.3.12
winget install -e --id OpenJS.NodeJS.LTS
winget install -e --id EclipseAdoptium.Temurin.21.JDK
winget install -e --id Rustlang.Rustup
Restart the terminal after installing so python, node, javac, and rustc are on PATH.
Ubuntu / Debian
sudo apt update
sudo apt install -y python3 nodejs npm openjdk-21-jdk curl build-essential
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
If node --version is below v22.6.0, install a newer Node.js from the official Node.js downloads or your preferred version manager before using TypeScript practice.
Verify runtimes:
python3 --version
node --version
javac -version
rustc --version
References: Python, Node.js, Rust, Eclipse Temurin.
After starting practicode, run /doctor to check these runtimes from inside the TUI.
Check the install:
practicode --version
practicode --smoke
practicode --help
Update
npm is the primary install path:
npm update -g practicode
The app checks npm for newer releases in the background and shows /update in the status line when one is available. Disable that check with PRACTICODE_NO_UPDATE_CHECK=1.
Cargo update
cargo install --force practicode
Local checkout update
git pull --ff-only
npm install
npm start
First Run
On first run, choose a mode:
Learn syntax: study the concept, worked example, mistakes, and self-check; use /ask when stuck; edit the exercise, /run, then /next
Practice coding tests: write code, Esc, /run, then /next when it passes
Use arrow keys to move on the home screen, and Enter or Space to open the selected mode.
Commands
Type / outside the editor to open the command palette. Use up/down to move, Enter to run or complete the selected command, and Esc to cancel.
Most-used commands:
/home | Return to the mode chooser |
/run | Judge the current submission or syntax exercise |
/ask <question> | Ask AI about the current lesson or problem without leaving the TUI |
/next | Open the next problem or lesson |
/back | Go to the previous problem or lesson |
/doctor | Check local runtimes and show install hints |
/profile | Edit language, theme, difficulty, topics, and AI settings |
See docs/COMMANDS.md for the full command list, aliases, AI generation commands, and profile settings.
Local Data
Generated problems and submissions stay local:
.practicode/problem_bank.json | Local/custom/generated problems |
.practicode/problem_notes.md | Optional personal problem-generation notes |
.practicode/problem-state.json | Current problem, history, and settings |
problems/ | Generated problem markdown/index files |
submissions/ | Your answer files |
Those paths are ignored by git.
Safety
/run executes your local submission as a normal process. It is not an OS sandbox.
/hint, AI-backed /next, and /generate send the current problem/submission context to the selected provider CLI.
settings.ai_next_command can run a custom shell command. Save only commands you trust.
- Do not commit tokens, private prompts,
.env, .npmrc, .practicode/, problems/, or submissions/.
Security reporting details live in SECURITY.md.
Contributing
Local checks:
cargo fmt --check
cargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo run -- --smoke
License
practicode is MIT licensed. Third-party dependency license notes are in THIRD_PARTY_LICENSES.md.