practicode 0.1.13

Local-first coding-test practice in a Rust terminal UI with optional AI help.
Documentation

practicode

Rust Ratatui Local first AI ready crates.io npm CI 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.

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 install practicode
practicode
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.

brew install python node
brew install --cask temurin@21
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
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.

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 install --force practicode
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:

Command Action
/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:

Path Purpose
.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.