
StudyCraft is a multi-platform desktop application that lets you create study materials from a wide range of sources, edit them as you wish, generate flashcard decks and tests either manually or automatically via LLMs, track your study sessions and customize everything. Built with Rust and Svelte via the Tauri framework.
- Features
- Screenshots
- Installation
- Transfering/Deleting your Data
- Project Structure
- License
- Contributing
- Supporting StudyCraft
-
Study Materials
- Import PDFs, Markdown or TXT files, as well as Websites or Github repos.
- Automatic conversion and markdown editing.
- All materials are automatically indexed in a vector database for semantic search.
-
Review Materials
- Create flashcard decks and tests manually or auto-generate from study materials
- Use of an Anki-styled space repetition
-
AI Integrations
- Choose from OpenAI, Google, Anthropic, Mistral, or Ollama. Use multiple LLM providers simultaneously for faster generation.
- Generate Review Materials automatically from your Study Materials
- Ask questions about any of your study materials and get in-depth explanations on any topic
-
Progress Tracking
- Visualize your study sessions with charts.
- Track your learning journey over time. Monitor your progress and improvement
-
Customization
- Deep configuration for spaced repetition and AI settings.
You can download an installer in the Releases page. StudyCraft is available on Windows, MacOS and Linux.
Requirements:
- Node.js (v18 or higher)
- Rust (latest stable version)
- npm or pnpm
- Python 3.10
-
Clone the repository
git clone https://github.com/rodmarkun/StudyCraft cd StudyCraft
-
Install dependencies
npm install
-
Set up Python environment
pip install pyinstaller pymupdf4llm pillow
-
Embed Python binaries
You need to build the Python executables that will be bundled with the app.
On Linux:
cd src-tauri
mkdir -p dist
# Build conversor
pyinstaller conversor.spec --distpath pyinstaller_dist
mv pyinstaller_dist/conversor dist/conversor-x86_64-unknown-linux-gnu
chmod +x dist/conversor-x86_64-unknown-linux-gnu
# Build cover-extractor
pyinstaller cover-extractor.spec --distpath pyinstaller_dist
mv pyinstaller_dist/cover-extractor dist/cover-extractor-x86_64-unknown-linux-gnu
chmod +x dist/cover-extractor-x86_64-unknown-linux-gnu
cd ..
On MacOS (Apple Silicon)
cd src-tauri
mkdir -p dist
# Build conversor
pyinstaller conversor.spec --distpath pyinstaller_dist
mv pyinstaller_dist/conversor dist/conversor-aarch64-apple-darwin
chmod +x dist/conversor-aarch64-apple-darwin
# Build cover-extractor
pyinstaller cover-extractor.spec --distpath pyinstaller_dist
mv pyinstaller_dist/cover-extractor dist/cover-extractor-aarch64-apple-darwin
chmod +x dist/cover-extractor-aarch64-apple-darwin
cd ..
On Windows (CMD)
cd src-tauri
mkdir dist
rem Build conversor
pyinstaller conversor.spec --distpath pyinstaller_dist
move /Y pyinstaller_dist\conversor.exe dist\conversor-x86_64-pc-windows-msvc.exe
rem Build cover-extractor
pyinstaller cover-extractor.spec --distpath pyinstaller_dist
move /Y pyinstaller_dist\cover-extractor.exe dist\cover-extractor-x86_64-pc-windows-msvc.exe
cd ..
-
Run in development mode
npm run tauri dev
-
Build for production
npm run tauri build
All of your data is stored locally. The only thing that travels through the internet are chunks of the documents you choose to generate review materials from via LLMs. You can access your data in the following directory, depending on your OS:
- Windows: \C:\Users{USER}\AppData\StudyCraft
- macOS: ~/Library/Application Support/StudyCraft
- Linux: ~/.local/share/StudyCraft
studycraft-v2/
├── src/ # Frontend (Svelte)
│ ├── lib/
│ │ ├── components/
│ │ │ ├── Layout/ # App layout components
│ │ │ ├── ReviewMaterial/ # Flashcards & tests
│ │ │ ├── Settings/ # Configuration UI
│ │ │ ├── Shared/ # Reusable components
│ │ │ ├── Stats/ # Statistics & charts
│ │ │ └── StudyMaterials/ # Material management
│ │ ├── logic/ # Business logic
│ │ ├── stores/ # Svelte stores (state)
│ │ └── styles/ # Global styles
│ └── App.svelte # Root component
│
├── src-tauri/ # Backend (Rust)
│ ├── src/
│ │ ├── commands/ # Tauri commands (frontend API)
│ │ │ ├── api.rs # API-related commands
│ │ │ ├── llm.rs # LLM integration commands
│ │ │ ├── materials/ # Material management commands
│ │ │ ├── settings.rs # Settings commands
│ │ │ ├── structure/ # Structure/organization commands
│ │ │ ├── tags.rs # Tagging system commands
│ │ │ └── vector.rs # Vector/embedding commands
│ │ │
│ │ ├── materials/ # Material domain models
│ │ │
│ │ ├── services/ # Business logic services
│ │ │ ├── db_service/ # Database operations
│ │ │ ├── file_service/ # File conversion operations
│ │ │ ├── llm_service/ # LLM provider integration
│ │ │ ├── url_service/ # URL/web content handling
│ │ │ └── vector_service/ # Vector embeddings & search
│ │ │
│ │ ├── config/ # Configuration management
│ │ │ ├── api_config.rs # API configuration
│ │ │ ├── app_settings.rs # App settings
│ │ │ ├── keystore.rs # Secure key storage
│ │ │ └── paths.rs # Path management
│ │ │
│ │ ├── constants.rs # App constants
│ │ ├── errors.rs # Error types & handling
│ │ ├── state.rs # App state management
│ │ ├── utils.rs # Utility functions
│ │ └── main.rs # Entry point
│ │
│ └── tauri.conf.json # Tauri configuration
│
└── public/ # Static assets
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Contributions are always welcome! If you're interested in contributing to StudyCraft, please fork the repository and create a new branch for your changes. When you're done with your changes, submit a pull request to merge your changes into the main branch.
If you want to support StudyCraft, you can:
- Star ⭐ the project in Github!
- Donate 🪙 to my Ko-fi page!
- Share ❤️ the project with your friends!
Made with ❤️ by @rodmarkun