An open-source, offline-first Anki-compatible iOS flashcard client with sync server support, powered by the official Anki Rust backend via C FFI.
Swift
258
358 commits
updated Sep 20, 2026
암기 (amgi) — Korean for "memorization"
An open-source, offline-first Anki-compatible iOS flashcard client with sync server support.
Amgi wraps the official ankitects/anki Rust backend via C FFI, giving you a native SwiftUI experience backed by the same battle-tested engine that powers Anki Desktop and AnkiDroid. Sync your decks with any compatible sync server (including self-hosted), study with FSRS scheduling, and keep your review history in perfect sync across all your devices.
The full list is in Documentation/FEATURES.md.
Install the toolchain first — Xcode 26, Rust (stable and nightly, for the watchOS slice), protoc and xcodegen. Documentation/BUILDING.md has the exact commands, plus how to run the tests.
git clone --recursive https://github.com/antigluten/amgi.git
cd amgi
./scripts/build-xcframework.sh # Rust engine → xcframework
./scripts/generate-protos.sh # protobuf → Swift types
cd AmgiApp && xcodegen generate && cd .. # project is generated, not checked in
open AmgiApp/AmgiApp.xcodeproj
| Document | What it covers |
|---|---|
| Features | Everything the app does today |
| Building | Requirements, setup, build, tests, the watch target |
| Architecture | Layers, package layout, design decisions |
| Rust bridge | The C FFI seam, protobuf dispatch, the build pipeline |
| Data flows | Sync, study, browse, stats and widgets, RPC by RPC |
| Code style | Swift conventions and the module boundaries that matter |
| Contributing | Issues, branches, commits, pull requests |
| Changelog | What changed in each release |
AGENTS.md at the repo root routes a coding agent to a per-package guide
(AmgiFeatures/AGENTS.md, Sources/AGENTS.md, …) plus the reference notes in
agents/.
SwiftUI feature modules (AmgiFeatures)
|
@DependencyClient structs (AnkiClients)
|
Service facades (AnkiServices)
|
Typed protobuf requests (AnkiProtoBridge)
|
AnkiBackend (Swift wrapper)
|
C FFI (4 functions)
|
Rust dynamic framework (ankitects/anki rslib)
Swift owns the UI. Rust owns everything else — database, sync, FSRS scheduling, card templates, search, import/export, statistics.
@DependencyClient struct-closure pattern)hoshidicts for Yomitan dictionariesThis project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) because it incorporates ankitects/anki (copyright Ankitects Pty Ltd), which is also AGPL-3.0. See LICENSE for the full license text.
The AGPL requires that if you distribute this software or run it as a network service, you must make the complete source code available under the same license.
Contributions are welcome. See CONTRIBUTING.md for guidelines, code style, and the development setup. A list of contributors is maintained in CONTRIBUTORS.md.
30 followers · starred Apr 2026
282 followers · starred Jul 2026
115 followers · starred Sep 2026
Swift
96.6%
JavaScript
2.0%
An open-source, offline-first Anki-compatible iOS flashcard client with sync server support, powered by the official Anki Rust backend via C FFI.
Swift
258
358 commits
updated Sep 20, 2026
암기 (amgi) — Korean for "memorization"
An open-source, offline-first Anki-compatible iOS flashcard client with sync server support.
Amgi wraps the official ankitects/anki Rust backend via C FFI, giving you a native SwiftUI experience backed by the same battle-tested engine that powers Anki Desktop and AnkiDroid. Sync your decks with any compatible sync server (including self-hosted), study with FSRS scheduling, and keep your review history in perfect sync across all your devices.
The full list is in Documentation/FEATURES.md.
Install the toolchain first — Xcode 26, Rust (stable and nightly, for the watchOS slice), protoc and xcodegen. Documentation/BUILDING.md has the exact commands, plus how to run the tests.
git clone --recursive https://github.com/antigluten/amgi.git
cd amgi
./scripts/build-xcframework.sh # Rust engine → xcframework
./scripts/generate-protos.sh # protobuf → Swift types
cd AmgiApp && xcodegen generate && cd .. # project is generated, not checked in
open AmgiApp/AmgiApp.xcodeproj
| Document | What it covers |
|---|---|
| Features | Everything the app does today |
| Building | Requirements, setup, build, tests, the watch target |
| Architecture | Layers, package layout, design decisions |
| Rust bridge | The C FFI seam, protobuf dispatch, the build pipeline |
| Data flows | Sync, study, browse, stats and widgets, RPC by RPC |
| Code style | Swift conventions and the module boundaries that matter |
| Contributing | Issues, branches, commits, pull requests |
| Changelog | What changed in each release |
AGENTS.md at the repo root routes a coding agent to a per-package guide
(AmgiFeatures/AGENTS.md, Sources/AGENTS.md, …) plus the reference notes in
agents/.
SwiftUI feature modules (AmgiFeatures)
|
@DependencyClient structs (AnkiClients)
|
Service facades (AnkiServices)
|
Typed protobuf requests (AnkiProtoBridge)
|
AnkiBackend (Swift wrapper)
|
C FFI (4 functions)
|
Rust dynamic framework (ankitects/anki rslib)
Swift owns the UI. Rust owns everything else — database, sync, FSRS scheduling, card templates, search, import/export, statistics.
@DependencyClient struct-closure pattern)hoshidicts for Yomitan dictionariesThis project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) because it incorporates ankitects/anki (copyright Ankitects Pty Ltd), which is also AGPL-3.0. See LICENSE for the full license text.
The AGPL requires that if you distribute this software or run it as a network service, you must make the complete source code available under the same license.
Contributions are welcome. See CONTRIBUTING.md for guidelines, code style, and the development setup. A list of contributors is maintained in CONTRIBUTORS.md.
30 followers · starred Apr 2026
282 followers · starred Jul 2026
115 followers · starred Sep 2026
Swift
96.6%
JavaScript
2.0%