miKrograd

A Kotlin multiplatform automatic differentiation library inspired by micrograd by Andrej Karpathy, featuring compile-time optimization through KSP (Kotlin Symbol Processing).
Core Features
- KSP Code Generation: Compile-time optimization for mathematical expressions
- Multi-Module Architecture: Separate modules for core library, annotations, processor, and samples
- Visualization Support: Graphviz integration for computational graph visualization
Modules
- miKrograd: Core automatic differentiation engine
- miKrograd-annotations: KSP annotations for compile-time code generation
- miKrograd-processor: KSP processor for optimized code generation
- samples: Example implementations and demonstrations
Quick Start
KSP Code Generation
Compile-Time Optimized Inference and Training
@Mikrograd(mode = ComputationMode.INFERENCE)
@Mikrograd
fun optimizedInference() {
3.0 * 4.0 + (7.0 + 3.0)
}
{
* + ( + )
}
Visualization Support
The library includes Graphviz integration for visualizing computational graphs:
fun main() {
val nn = Neuron(2)
val x = listOf(Value(1.0), Value(-2.0))
val y = nn(x)
drawDot(y).toFile("neuron.dot")
}

Installation
Add the following to your build.gradle.kts:
dependencies {
implementation("org.mikrograd:mikrograd:latest.version")
ksp("org.mikrograd:mikrograd-processor:latest.version")
}
Building
./gradlew build
Documentation
- Architecture Documentation: See docs/README.md for comprehensive arc42 architecture documentation
- Core Module: See miKrograd/README.md for detailed API documentation
Project Structure
miKrograd/
├── miKrograd/
├── miKrograd-annotations/
├── miKrograd-processor/
├── samples/
└── docs/
Key Advantages
- Compile-Time Optimization: KSP generates optimized code at compile time
- Type Safe: Full Kotlin type safety with multiplatform support
- Extensible: Well-documented architecture for easy extension
License
MIT