Anki is a smart spaced repetition flashcard program
Find a file
2025-11-20 17:34:53 +02:00
.buildkite Fix/Ensure fuzz doesn't go backward during rescheduling (#4364) 2025-09-27 16:43:34 +10:00
.cargo Statically link MSVC runtime, removing the need to install the redistributable (#4166) 2025-07-05 15:03:14 +03:00
.config Drop workspace-hack in favor of workspace deps 2023-06-23 17:41:31 +10:00
.cursor/rules Make URL schemes dialog more ergonomic (#4002) 2025-05-15 16:17:33 +10:00
.github/ISSUE_TEMPLATE Move away from Bazel (#2202) 2022-11-27 15:24:20 +10:00
.idea.dist Update PyCharm docs (#4389) 2025-10-27 19:27:50 +07:00
.vscode.dist Update VS Code config (#4397) 2025-10-27 19:31:59 +07:00
build Disable NPM package scripts, and assert lockfile unchanged 2025-09-17 09:31:23 +10:00
cargo fix(ci): pin cargo-license to 0.7.0 (#4367) 2025-09-30 00:12:24 +10:00
docs Update PyCharm docs (#4389) 2025-10-27 19:27:50 +07:00
ftl Localize FSRS error message and update contributors (#4342) 2025-10-02 21:52:49 +07:00
proto Export last_interval to Python (#4365) 2025-09-27 15:58:41 +10:00
pylib feat: add support for tag:nc:... searches (#4344) 2025-09-25 07:11:07 +03:00
python Switch to Ruff (#4119) 2025-06-29 14:38:35 +07:00
qt feat(tts): fallback to Apple Samantha voice for TTS on macOS (#4420) 2025-11-12 22:55:47 +03:00
rslib fix(import): support variable field count with notetype column (#4421) 2025-11-19 22:48:14 +03:00
tools Update VS Code config (#4397) 2025-10-27 19:31:59 +07:00
ts Replace custom UUID function with crypto.randomUUID (#4384) 2025-10-13 09:37:30 +03:00
.deny.toml Migrate build system to uv (#4074) 2025-06-19 14:03:16 +07:00
.dockerignore Add distroless Dockerfile and implement internal health check (#3366) 2024-08-29 17:05:33 +07:00
.dprint.json Migrate build system to uv (#4074) 2025-06-19 14:03:16 +07:00
.eslintrc.cjs Include error message text on page 2024-06-24 15:35:47 +07:00
.gitattributes try again to improve GitHub's language stats 2021-01-20 13:20:45 +10:00
.gitignore Support hidden local Claude config 2025-06-29 22:16:59 +07:00
.gitmodules Migrate build system to uv (#4074) 2025-06-19 14:03:16 +07:00
.mypy.ini Migrate build system to uv (#4074) 2025-06-19 14:03:16 +07:00
.prettierrc Switch back to Prettier for Svelte formatting 2025-01-13 15:53:55 +11:00
.python-version Migrate build system to uv (#4074) 2025-06-19 14:03:16 +07:00
.ruff.toml Switch to Ruff (#4119) 2025-06-29 14:38:35 +07:00
.rustfmt-empty.toml Move away from Bazel (#2202) 2022-11-27 15:24:20 +10:00
.rustfmt.toml Move ascii_percent_encoding into a separate repo 2023-04-12 08:45:23 +10:00
.version Bump version 2025-09-17 16:50:13 +10:00
.yarnrc.yml Disable NPM package scripts, and assert lockfile unchanged 2025-09-17 09:31:23 +10:00
Cargo.lock feat: add i18n to launcher (#4361) 2025-09-27 16:58:46 +10:00
Cargo.toml feat: add i18n to launcher (#4361) 2025-09-27 16:58:46 +10:00
check Add a shortcut to auto-format before running checks 2023-07-02 09:59:05 +10:00
CLAUDE.md Support hidden local Claude config 2025-06-29 22:16:59 +07:00
CONTRIBUTORS Fix FindDuplicates dialog size exceeding screen bounds (#4426) 2025-11-10 16:18:57 +03:00
LICENSE Drop Pauker and SuperMemo importers from legacy importer 2025-06-27 16:10:12 +07:00
ninja Migrate build system to uv (#4074) 2025-06-19 14:03:16 +07:00
package.json Bump devalue for latest CVE 2025-09-01 13:41:00 +10:00
pkgkey.asc add public key for release signing 2018-09-18 10:40:45 +10:00
pyproject.toml Switch to Ruff (#4119) 2025-06-29 14:38:35 +07:00
README.md docs: improve README.md with better structure and organization 2025-11-20 17:30:45 +02:00
run Migrate build system to uv (#4074) 2025-06-19 14:03:16 +07:00
run.bat One step closer to tools/run-qt* on Windows 2025-09-01 13:39:46 +10:00
rust-toolchain.toml Update to Rust 1.89 + latest deps 2025-09-01 14:55:49 +10:00
SECURITY.md add SECURITY.md 2021-09-22 22:55:19 +10:00
uv.lock Expose control over AppNap for AnkiConnect 2025-08-19 19:46:11 +10:00
yarn Switch to SvelteKit (#3077) 2024-03-31 09:16:31 +01:00
yarn.bat Switch to SvelteKit (#3077) 2024-03-31 09:16:31 +01:00
yarn.lock Bump vite from 6.3.6 to 6.4.1 (#4405) 2025-10-27 18:30:23 +07:00

Anki®

Build status

This repo contains the source code for the computer version of Anki.

Anki is a powerful, intelligent flashcard program that makes remembering things easy.

📖 About Anki

Anki is a spaced repetition flashcard program. It helps you memorize information efficiently by presenting cards at optimal intervals based on your performance. Anki uses an algorithm to schedule reviews, ensuring you see cards right before you're about to forget them.

Key Features

  • Spaced Repetition: Scientifically-proven algorithm for efficient learning
  • Rich Media Support: Add images, audio, video, and LaTeX to your cards
  • Cross-Platform: Available on Windows, macOS, Linux, iOS, and Android
  • Synchronization: Keep your cards in sync across all your devices
  • Extensible: Powerful add-on system for customization
  • Open Source: Free and open-source software

🚀 Getting Started

For Users

If you're looking to use Anki, the easiest way is to download the latest release from the official website.

Want to try the latest features? Check out Anki betas for pre-release versions.

For Developers

This is a complex project with multiple components:

  • Backend: Rust (rslib/) - Core scheduling, database, and sync logic
  • Python Library: (pylib/) - Python bindings and add-on API
  • Frontend: TypeScript/Svelte (ts/) - Modern web-based UI
  • Qt Interface: Python/Qt (qt/) - Desktop application wrapper

Quick Start

  1. Prerequisites:

    • Rust (version specified in rust-toolchain.toml)
    • N2 or Ninja build system
    • Python 3.9+ (3.9 recommended)
    • Platform-specific tools (see platform docs below)
  2. Clone the repository:

    git clone https://github.com/ankitects/anki.git
    cd anki
    
  3. Install build tools:

    # Install N2 (recommended) or Ninja
    bash tools/install-n2
    
  4. Platform-specific setup:

  5. Build and run:

    # Build the project
    tools/build
    
    # Run Anki
    ./run
    

    (On Windows, use .\run instead)

For detailed development instructions, see the Development Guide.

Pre-built Python Wheels

If you're developing add-ons or need Python bindings without building from source, you can install pre-built wheels from PyPI:

pip install --pre aqt

See betas.ankiweb.net for more details.

🤝 Contributing

We welcome contributions! Whether you're fixing bugs, adding features, or improving documentation, your help makes Anki better for everyone.

How to Contribute

  1. Read the guidelines: Check out our Contribution Guidelines
  2. Find an issue: Look for issues labeled good first issue or browse open issues
  3. Fork and branch: Create a feature branch from main
  4. Make changes: Write clean, tested code following our style guidelines
  5. Submit a PR: Open a pull request with a clear description of your changes

Development Resources

📚 Project Structure

anki/
├── rslib/          # Rust backend library (core logic)
├── pylib/          # Python library and bindings
├── qt/             # Qt desktop application
├── ts/             # TypeScript/Svelte frontend
├── ftl/            # Fluent translation files
├── proto/          # Protocol buffer definitions
├── docs/           # Documentation
└── tools/          # Build and development scripts

🛠️ Technology Stack

  • Rust: Core backend, scheduling algorithm, database operations
  • Python: Add-on API, Qt bindings, build scripts
  • TypeScript/Svelte: Modern web-based user interface
  • Qt: Desktop application framework
  • Protocol Buffers: Inter-process communication
  • SQLite: Database storage

📄 License

Anki is licensed under the AGPL-3.0-or-later license.

🙏 Acknowledgments

Anki is made possible by the contributions of many developers and the support of the community. See CONTRIBUTORS for a list of contributors.

📞 Support


Note: This is the computer version of Anki. For mobile apps, see: