Open Source · MIT Licensed · Community Driven

Help Build the Future of Algorithm Education

Eigenvue is an open-source platform for interactive algorithm visualization across classical CS, deep learning, generative AI, and quantum computing. Every contribution makes these concepts more accessible to learners worldwide.

22+
Algorithms
4
Domains
3
Packages
MIT
License

Quick Start

Get the development environment running in under two minutes.

Prerequisites

Node.js
20+
npm
10+
Python
3.10+
Git
2.30+
terminal
# Clone the repository
$ git clone https://github.com/eigenvue/eigenvue.git
$ cd eigenvue
# Install web dependencies and start the dev server
$ cd web && npm install && npm run dev
▶ ready on http://localhost:3000
# In a separate terminal, install Python package
$ cd python && pip install -e ".[dev]"

For the full setup guide including the docs site, editor config, and troubleshooting, see the Development Setup docs.

Contribution Workflow

From fork to merged PR — here's how a typical contribution flows.

1

Fork & Clone

terminal
# Fork on GitHub, then clone your fork
$ git clone https://github.com/<you>/eigenvue.git
$ cd eigenvue
2

Create a Branch

terminal
# Create a descriptive feature branch
$ git checkout -b feature/add-linear-search
3

Install & Develop

terminal
# Install dependencies and start the dev server
$ cd web && npm install && npm run dev
▶ ready on http://localhost:3000
4

Test & Lint

terminal
# Run all checks before committing
$ npm run lint && npm run typecheck && npm run test
✓ All checks passed
5

Commit & Push

terminal
# Use Conventional Commits format
$ git commit -m "feat(algorithms): add linear search generator"
$ git push origin feature/add-linear-search
6

Open a Pull Request

terminal
# Open a PR on GitHub targeting main
$ gh pr create --title "feat: add linear search" --body "..."
✓ PR #42 created — CI checks running...

Project Architecture

Eigenvue is a monorepo with three main workspaces and shared infrastructure.

eigenvue/
eigenvue/
├── algorithms/          # Algorithm definitions (meta.json + generators)
│   ├── classical/       # Binary search, sorting, graph traversal
│   ├── deep-learning/   # Perceptron, backprop, convolution
│   ├── generative-ai/   # Tokenization, attention, transformers
│   └── quantum/         # Bloch sphere, quantum gates, Grover's
├── web/                 # Next.js web application
│   └── src/
│       ├── engine/      # Canvas 2D rendering engine
│       ├── components/  # React components
│       └── lib/         # Utilities, constants, SEO
├── python/              # PyPI package (pip install eigenvue)
│   └── src/eigenvue/
│       ├── generators/  # Python algorithm implementations
│       └── runner.py    # Generator runner
├── node/                # npm package (npm install eigenvue)
├── docs/                # Astro Starlight documentation
├── shared/              # Cross-language types & schemas
│   ├── types/           # Step, VisualAction, CodeHighlight
│   └── fixtures/        # Golden test fixtures
├── scripts/             # Build & validation scripts
└── tests/               # Integration & end-to-end tests
web/

Next.js 15 · React 19 · Tailwind 4 · Canvas 2D

The interactive web application with algorithm visualizations, code editor, and step-by-step playback.

python/

Python 3.10+ · Ruff · mypy · pytest

The PyPI package that mirrors TypeScript generators for use in Jupyter notebooks and scripts.

docs/

Astro · Starlight · MDX

The documentation site with contributor guides, API reference, and algorithm-specific docs.

shared/

TypeScript Types · JSON Schema · Fixtures

Cross-language type definitions, validation schemas, and golden test fixtures for parity checks.

Adding an Algorithm

The most impactful contribution — here's the process from start to finish.

1

Define Metadata

Create a meta.json in algorithms/<category>/<name>/ with the algorithm's name, description, category, complexity, and input schema.

algorithms/<category>/<name>/meta.json
2

Write the TypeScript Generator

Implement a generator function that takes input parameters and yields Step objects with visual actions, code highlights, and explanations.

algorithms/<category>/<name>/generator.ts
3

Write the Python Generator

Mirror the TypeScript generator in Python. Both must produce byte-identical JSON output for the same inputs.

python/src/eigenvue/generators/<name>.py
4

Register the Layout

If your algorithm needs a new visual layout, create a layout function in the engine and register it via registerLayout().

web/src/engine/layouts/
5

Write Tests & Verify Parity

Add Vitest and pytest tests. Run the parity checker to confirm cross-language output matches to ±1e-9 tolerance.

tests/ + scripts/verify-step-parity.py

Key constraint: TypeScript and Python generators must produce byte-identical JSON output for the same inputs. The CI parity checker enforces this to ±1e-9 tolerance for floating-point values.

For the complete step-by-step walkthrough, see Adding an Algorithm in the docs.

Code Standards

Consistent code keeps the project healthy. Here's what we enforce.

Conventional Commits

Every commit follows the Conventional Commits specification. Use the workspace name as the scope: web, python, docs, algorithms, or shared.

TypePurpose
featA new feature (algorithm, layout, UI component)
fixA bug fix
docsDocumentation-only changes
styleFormatting, whitespace, no logic change
refactorCode restructuring without behavior change
testAdding or updating tests
choreBuild system, CI, dependencies, tooling
terminal
# Examples
$ git commit -m "feat(algorithms): add linear search generator"
$ git commit -m "fix(python): correct off-by-one in merge sort"
$ git commit -m "docs: update contributing guide"

Linting & Formatting

Web

ESLint for linting, Prettier for formatting. TypeScript strict mode with no implicit any.

$ npm run lint
$ npm run format
Python

Ruff for both linting and formatting. mypy for static type checking in strict mode.

$ ruff check .
$ ruff format .

CI Checks

All checks must pass before a PR can be merged. Run them locally before pushing.

CheckCommandScope
ESLintnpm run lintWeb
TypeScriptnpm run typecheckWeb
Vitestnpm run testWeb
Next.js Buildnpm run buildWeb
Ruffruff check .Python
mypymypy src/Python
pytestpytestPython
Step Paritypython scripts/verify-step-parity.pyCross-Language
terminal
# Run all CI checks locally before pushing
$ cd web && npm run lint && npm run typecheck && npm run test && cd ..
$ cd python && ruff check . && mypy src/ && pytest && cd ..
$ python scripts/verify-step-parity.py
✓ All 8 checks passed

Ready to Contribute?

Every algorithm visualization you add helps someone build genuine understanding. Pick an issue, fork the repo, and submit your first PR.