haifengl/smile

haifengl/smile is one of the AI-powered repositories TopGit tracks, currently at 6.4k stars, written primarily in Java. Statistical Machine Intelligence & Learning Engine
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
Snapshot
Top contributors
Show top contributors
Statistical Machine Intelligence & Learning Engine 
SMILE (Statistical Machine Intelligence & Learning Engine) is a comprehensive, high-performance machine learning and AI platform for the JVM. Built on Java 25 with idiomatic APIs for Kotlin and Scala (v4.x supports Java 21; earlier versions support Java 8), SMILE covers the entire lifecycle of machine intelligence: building models with agentic AutoML, embedding algorithms directly in your application, and serving classical ML, ONNX graphs, and LLMs on your own machines.
Vision: Intelligence Where the Work Is
A decision should not require a cloud round-trip or a fragile bridge to an external Python stack. The score, the explanation, and the model update belong on the machine that already holds the facts: inside a JVM microservice, a branch server, a payment terminal, a vehicle gateway, or an air-gapped node. SMILE makes real-time, autonomous machine intelligence native to the systems enterprises already run, from resource-constrained edge gateways to multi-GPU clusters.
What We Value
- Sovereign & Self-Hosted by Default: Your data, models, API keys, and telemetry stay on your machines and your network. Everything is built to run locally and keep working when the external link is down.
- Zero-Bloat Craftsmanship: The core engine is pure, self-contained JVM bytecode built on compact, cache-friendly data structures. You get deterministic low latency and a tiny memory footprint by default, with optional plug-and-play native acceleration (OpenBLAS/LAPACK, ONNX Runtime, LibTorch/CUDA) when hardware is available.
- Explainable & Auditable in Place: High-stakes decisions cannot be black boxes. SMILE provides both exact TreeSHAP for tree ensembles and model-agnostic KernelSHAP for any classifier or regressor, computing local feature attributions in-process alongside predictions, while AutoML workflows generate readable Java, Scala, Kotlin, or Python notebooks you can inspect line by line.
- Open Source with Enterprise Backing: Open-source licensing supports academic research and community collaboration, while commercial licensing from HALO.AI removes copyleft and source-disclosure obligations for proprietary, embedded, and mission-critical production deployments.
Key Strengths
- Comprehensive Breadth in One Engine: Hundreds of algorithms spanning classification, regression, clustering, manifold learning, time series, anomaly detection, NLP, statistical testing, linear algebra, deep learning, computer vision, and native LLM inference (
MiniMax M3,Qwen,Llama, tiktoken, Radix KV cache, MTP speculative decoding). - State-of-the-Art Speed & Footprint: Engineered with primitive-backed memory layouts, Panama FFM, and the Java Vector API (SIMD), SMILE routinely outperforms R, Python, Spark, and H2O while scaling down to a 0.2 GB GraalVM native micro-container that boots in 0.4 s and idles at ~80 MiB RAM.
- On-Device Training & Adaptation: Unlike static inference-only runtimes, SMILE trains and updates models (Random Forests, Gradient Boosting, K-Means, DBSCAN, anomaly detectors) directly on live edge or application data.
- Built for Agentic & Production Workloads: Continuous batching, prefix-preserving Radix KV caches, and speculative decoding that retains its speedup under full batch load, paired with atomic model hot-swapping, Kubernetes health probes, and Prometheus metrics.
Three Pillars of SMILE
1. Core Engine: Embed in Your Application
Call classification, regression, clustering, deep learning, NLP, and visualization directly in-process from Java, Scala, or Kotlin with no separate service to operate.
2. SMILE Serve: Unified Inference Runtime
A production-ready, Quarkus-based inference server (available as JVM, CUDA GPU, and GraalVM native containers) that brings together three complementary inference capabilities in a single process:
| Capability | API prefix | Description |
|---|---|---|
| Classic ML | /api/v1/smile | Serialized SMILE models (.sml) — classification, regression, clustering (ClusteringModel), vector quantization (VectorQuantizerModel), and anomaly detection (AnomalyModel), with local SHAP explanations (TreeSHAP & KernelSHAP) |
| ONNX Runtime | /api/v1/onnx | Any model in the ONNX open format (.onnx) |
| LLM Chat | /api/v1/chat | OpenAI-compatible chat completions, tool calling, and SSE streaming |
| Models | /api/v1/models | OpenAI-compatible list and retrieve for every loaded model — chat, ONNX, and SMILE |
| Metrics | /q/metrics | Prometheus scrape for classic, ONNX, and LLM models |
A React-based web UI is bundled and served from the same process. See serve/README.md for how to build and run the service.
3. SMILE Studio: Agentic IDE & AutoML Workplace
A desktop workplace for data science and software engineering using Python, Java, Kotlin, or Scala. Specialized AI agents collaborate with you in interactive notebooks to explore data, engineer features, train and tune models, and export .sml or .onnx artifacts directly to SMILE Serve.
See studio/README.md to get your first project running in a few minutes.
Table of Contents
- Features
- Module Map
- Installation
- Maven
- SBT (Scala)
- Gradle (Kotlin)
- Native Libraries (BLAS / LAPACK)
- Quick Start
- SMILE Studio & Shell
- Model Serialization
- Visualization
- License
- Issues & Discussions
- Contributing
- Maintainers
- Gallery
Features
| Area | Highlights |
|---|---|
| LLM | LLaMA-3 inference, tiktoken BPE tokenizer, OpenAI-compatible REST server, SSE chat streaming |
| Deep Learning | LibTorch/GPU backend, EfficientNet-V2 image classification, custom layer API |
| Classification | SVM, Decision Trees, Random Forest, AdaBoost, Gradient Boosting, Logistic Regression, Neural Networks, RBF Networks, MaxEnt, KNN, Naïve Bayes, LDA/QDA/RDA |
| Regression | SVR, Gaussian Process, Regression Trees, GBDT, Random Forest, RBF, OLS, LASSO, ElasticNet, Ridge |
| Clustering | BIRCH, CLARANS, DBSCAN, DENCLUE, Deterministic Annealing, K-Means, X-Means, G-Means, Neural Gas, Growing Neural Gas, Hierarchical, SIB, SOM, Spectral, Min-Entropy |
| Manifold Learning | IsoMap, LLE, Laplacian Eigenmap, t-SNE, UMAP, PCA, Kernel PCA, Probabilistic PCA, GHA, Random Projection, ICA |
| Feature Engineering | Genetic Algorithm selection, Ensemble selection, TreeSHAP, KernelSHAP, SNR, Sum-Squares ratio, data transformations, formula API |
| NLP | Sentence / word tokenization, Bigram test, Phrase & Keyword extraction, Stemmer, POS tagging, Relevance ranking |
| Association Rules | FP-growth frequent itemset mining |
| Sequence Learning | Hidden Markov Model, Conditional Random Field |
| Nearest Neighbor | BK-Tree, Cover Tree, KD-Tree, SimHash, LSH |
| Numerical Methods | Linear algebra, numerical optimization (BFGS, L-BFGS), interpolation, wavelets, RBF, distributions, hypothesis tests |
| Visualization | Swing plots (scatter, line, bar, box, histogram, surface, heatmap, contour, …) and declarative Vega-Lite charts |
Module Map
Each module has its own detailed user guide. Click the README link for the module overview, or drill into individual topic guides.
base/ — Foundation
Data structures, math, linear algebra, statistical utilities, I/O
| Document | Topics |
|---|---|
| README | Module overview and dependency setup |
| DATA_FRAME.md | DataFrame API — creation, selection, transformation |
| DATA_IO.md | CSV, JSON, Parquet, Arrow, JDBC, Avro readers/writers |
| DATA_TRANSFORMATION.md | Scalers, encoders, imputers, feature transforms |
| DATASET.md | Built-in benchmark and real-world datasets |
| FORMULA.md | R-style formula language for model matrices |
| DISTRIBUTIONS.md | Probability distributions (Normal, Poisson, Beta, …) |
| HYPOTHESIS_TESTING.md | t-test, chi-squared, ANOVA, KS-test, … |
| DISTANCES.md | Euclidean, Mahalanobis, Hamming, edit distance, … |
| NEAREST_NEIGHBOR.md | KD-Tree, Cover Tree, BK-Tree, LSH |
| KERNELS.md | Gaussian, polynomial, Laplacian, and other kernel functions |
| RBF.md | Radial basis function networks |
| INTERPOLATION.md | Linear, cubic spline, bilinear, bicubic |
| GRAPH.md | Adjacency list/matrix graph, BFS/DFS, spanning trees |
| SORT.md | Quick sort, heap sort, counting sort, index sort |
| HASH.md | Locality-sensitive hashing, SimHash |
| RNG.md | Random number generators, sampling, permutations |
| BFGS.md | L-BFGS and BFGS numerical optimizers |
| ICA.md | Independent Component Analysis |
| TENSOR.md | N-dimensional array (CPU tensor without LibTorch) |
| WAVELET.md | DWT, CWT, and wavelet families |
| GAP.md | GAP statistic for optimal cluster count estimation |
| COMPRESSED_SENSING.md | Compressed sensing and basis pursuit |
core/ — Machine Learning Algorithms
Classification, regression, clustering, manifold learning, and more
| Document | Topics |
|---|---|
| README | Module overview |
| CLASSIFICATION.md | SVM, Random Forest, AdaBoost, GBDT, KNN, Naïve Bayes, LDA, … |
| REGRESSION.md | SVR, Gaussian Process, LASSO, Ridge, ElasticNet, GBDT, … |
| CLUSTERING.md | K-Means, DBSCAN, BIRCH, SOM, Spectral Clustering, … |
| FEATURE_ENGINEERING.md | Feature selection, PCA, ICA, projection, encoding |
| MANIFOLD.md | t-SNE, UMAP, IsoMap, LLE, Laplacian Eigenmap |
| ANOMALY_DETECTION.md | IsolationForest, one-class SVM, local outlier factor |
| ASSOCIATION_RULE_MINING.md | FP-growth, association rules, frequent itemsets |
| SEQUENCE.md | HMM (Baum-Welch, Viterbi), CRF |
| TIME_SERIES.md | ARIMA, box-plots, autocorrelation |
| REGRESSION.md | Full regression API reference |
| TRAINING.md | Cross-validation, bootstrap, hyper-parameter search |
| VALIDATION.md | Hold-out, k-fold, leave-one-out evaluation |
| VALIDATION_METRICS.md | Accuracy, AUC, F1, RMSE, MAE, confusion matrix |
| HYPER_PARAMETER_OPTIMIZATION.md | Grid search, random search, Bayesian optimization |
| VECTOR_QUANTIZATION.md | LVQ, Neural Gas, SOM as vector quantizers |
deep/ — Deep Learning & LLMs
LibTorch-backed GPU/CPU tensor operations, neural network layers, LLaMA-3 inference, EfficientNet, ONNX Runtime & GenAI
| Document | Topics |
|---|---|
| README | Core deep-learning guide (tensors, layers, loss, optimizer, model, metrics, data loading) |
| LLM.md | smile.llm — tokenizer, LLaMA-3, Qwen3.5, inference engine, KV cache, quantization, tensor parallelism |
| VISION.md | smile.vision — transforms, ImageDataset, EfficientNet-V2, ImageNet labels |
| ONNX.md | ONNX Runtime inference (smile.onnx) — sessions, tensors, execution providers |
| ONNX_GENAI.md | ONNX Runtime GenAI (smile.onnx.genai) — generate loop, chat model, multimodal |
The deep/README.md covers:
smile.deep.tensor— Tensor factory, indexing, arithmetic, AutoScope memory management, dtype/devicesmile.deep.layer— Linear, Conv2d, pooling, normalization (BN/GN/RMS), dropout, embedding, sequential blockssmile.deep.activation— ReLU, GELU, SiLU, Tanh, Sigmoid, Softmax, GLU, HardShrink, …smile.deep.Loss— MSE, cross-entropy, BCE, Huber, KL, hinge, and moresmile.deep.Optimizer— SGD, Adam, AdamW, RMSpropsmile.deep.Model— Abstract base class + training loopsmile.deep.metric— Accuracy, Precision, Recall, F1Score with macro/micro/weighted averagingsmile.deep.Dataset— Dataset interface,DataSampler,SampleBatch
The deep/LLM.md covers:
smile.llm—Message,Role,FinishReason,ChatCompletion,ChatOptions,LanguageModelsmile.llm.tokenizer—Tokenizerinterface,TiktokenBPE implementation (LLaMA-3 compatible)smile.llm.model.llama— Full LLaMA-3 stack:Llama.build(),generate(),chat(), streamingsmile.llm.model.qwen— Qwen3.5 hybrid stack (Gated DeltaNet + gated attention), MTP, vision towersmile.llm.engine— Continuous-batchingInferenceEngine,GenerationRequest/GenerationHandle, speculative decodingsmile.llm.cache— PagedKvCachePool,RadixCacheprefix reusesmile.llm.quant/smile.llm.parallel— FP8/NVFP4/Marlin quantization, tensor parallelism
The deep/VISION.md covers:
smile.vision—VisionModel,ImageDataset,EfficientNet.V2S/M/L()pretrained models, ImageNet labelssmile.vision.transform—Transforminterface,ImageClassificationpipeline, resize/crop/toTensor helpers
nlp/ — Natural Language Processing
Text normalization, tokenization, POS tagging, stemming, relevance ranking
| Document | Topics |
|---|---|
| README | Module overview |
| TOKENIZER.md | Sentence splitter, word tokenizer, regex tokenizer |
| POS.md | Part-of-speech tagging (Brill tagger, HMM tagger) |
| STEM.md | Porter, Lancaster, Lovins stemmers; lemmatization |
| COLLOCATION.md | Bigram/trigram statistical tests, phrase extraction |
| RELEVANCE.md | TF-IDF, BM25, keyword extraction |
| TAXONOMY.md | WordNet integration, synsets, hypernyms |
plot/ — Data Visualization
Swing-based interactive plots and declarative Vega-Lite charts
| Document | Topics |
|---|---|
| README | Swing plotting API — scatter, line, bar, box, histogram, heatmap, surface, contour, wireframe |
| VEGA.md | Declarative smile.plot.vega (Vega-Lite) — JSON spec generation, web/Jupyter rendering |
serve/ — Inference Server
Quarkus-based REST inference service with OpenAI-compatible API and SSE streaming
| Document | Topics |
|---|---|
| README | Building and running the server, /chat/completions endpoint, SSE streaming, configuration |
studio/ — Interactive Shell & Desktop IDE
An agentic IDE for data science using Python or SMILE
| Document | Topics |
|---|---|
| README.md | Desktop Studio UX |
| CLI | CLI entry points (smile, smile shell, smile scala, smile serve) |
scala/ — Scala API
Idiomatic Scala shim — concise wrappers, symbolic operators, Scala collections integration
| Document | Topics |
|---|---|
| README | API overview, smile.classification, smile.regression, smile.clustering, smile.plot in Scala |
kotlin/ — Kotlin API
Idiomatic Kotlin shim — extension functions, named parameters, builder DSLs
| Document | Topics |
|---|---|
| README | API overview, extension functions, Kotlin-style builders |
| packages.md | Full package-by-package listing of all Kotlin extension functions |
json/ — JSON Library (Scala)
Lightweight zero-dependency JSON library for Scala with a clean DSL
| Document | Topics |
|---|---|
| README | Parsing, building, pattern matching, path navigation, serialization |
spark/ — Apache Spark Integration
Use SMILE models inside Spark ML pipelines
| Document | Topics |
|---|---|
| README | SmileTransformer, SmileClassifier, SmileRegressor; training and scoring in Spark DataFrames |
Installation
Maven
<!-- Core ML algorithms -->
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-core</artifactId>
<version>7.1.0</version>
</dependency>
<!-- Deep learning + LLMs (requires LibTorch) -->
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-deep</artifactId>
<version>7.1.0</version>
</dependency>
<!-- Natural language processing -->
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-nlp</artifactId>
<version>7.1.0</version>
</dependency>
<!-- Data visualization -->
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-plot</artifactId>
<version>7.1.0</version>
</dependency>
SBT (Scala)
libraryDependencies += "com.github.haifengl" %% "smile-scala" % "7.1.0"
Gradle (Kotlin)
dependencies {
implementation("com.github.haifengl:smile-kotlin:7.1.0")
}
Native Libraries (BLAS / LAPACK)
Several algorithms (manifold learning, Gaussian Process, MLP, some clustering) require BLAS and LAPACK.
Linux (Ubuntu / Debian)
sudo apt update
sudo apt install libopenblas-dev libarpack2-dev
macOS (Homebrew)
brew install arpack
Do not rely on DYLD_LIBRARY_PATH: macOS System Integrity Protection (SIP)
strips DYLD_* variables when the JVM is started through the /usr/bin/java
stub, so dyld never sees them. SMILE reaches libarpack through the FFM
bindings, whose SymbolLookup.libraryLookup("arpack") calls dlopen on the bare
name libarpack.dylib; this does not consult java.library.path, so
-Djava.library.path=... and LD_LIBRARY_PATH have no effect either. SMILE
therefore preloads the library by absolute path through
smile.linalg.NativeLibrary, which finds it under /opt/homebrew/lib or
/usr/local/lib with no copy or symlink. To point it somewhere else, set the
arpack.native.path system property or the ARPACK_NATIVE_PATH environment
variable.
Windows — pre-built DLLs are included in the bin/ directory of the
release package.
Add that directory to PATH.
GPU (CUDA) — make sure the LibTorch CUDA native libraries are on PATH (Windows) or LD_LIBRARY_PATH (Linux).
Quick Start
import smile.classification.RandomForest;
import smile.data.formula.Formula;
import smile.io.Read;
// Load data
var data = Read.csv("src/test/resources/iris.csv");
// Train a random forest
var forest = RandomForest.fit(Formula.lhs("species"), data);
// Predict
int label = forest.predict(data.get(0));
System.out.println("Predicted class: " + label);
For deep learning examples, see deep/README.md; for LLM and computer-vision examples, see deep/LLM.md and deep/VISION.md. For visualization examples, see plot/README.md.
SMILE Studio
SMILE Studio is an agentic IDE for data science using Python or SMILE on JVM. See studio/README.md for full documentation.
Download a pre-packaged release from the releases page, then:
path/to/smile/bin/setup # install required native dependencies
path/to/smile/bin/smile # launch SMILE Studio from your project directory
Other entry points:
| Command | Description |
|---|---|
smile | Desktop agentic IDE |
smile shell | Java REPL with all SMILE packages pre-imported |
smile scala | Scala REPL |
smile train | Train a supervised learning model |
smile predict | Predict on a file using a saved model |
smile serve | Start the LLM inference server |
To increase the JVM heap:
path/to/smile/bin/smile -J-Xmx30G
Model Serialization
Most SMILE models implement java.io.Serializable. You can serialize a
trained model to disk and load it in a production environment or inside a
Spark job:
// Save
try (var out = new ObjectOutputStream(new FileOutputStream("model.ser"))) {
out.writeObject(forest);
}
// Load
try (var in = new ObjectInputStream(new FileInputStream("model.ser"))) {
var loaded = (RandomForest) in.readObject();
}
Visualization
SMILE provides two visualization layers:
smile.plot.swing— Swing-based interactive 2D/3D plots. See plot/README.md.smile.plot.vega— Declarative Vega-Lite charts for browsers and Jupyter. See plot/VEGA.md.
<dependency>
<groupId>com.github.haifengl</groupId>
<artifactId>smile-plot</artifactId>
<version>7.1.0</version>
</dependency>
License
SMILE uses a multi-license model that keeps academic research and open-source collaboration free while providing standard, upfront commercial licenses—administered by HALO.AI LLC—for proprietary distribution and production deployments:
| Component | Open Source / Evaluation ($0) | Commercial License Tier |
|---|---|---|
Core Engine (base, core, nlp, deep, plot, kotlin, scala) | GPLv3 — Free for open-source projects | OEM & Embedded ($25,000 one-time) — Perpetual right to embed and ship in proprietary products free of GPLv3 disclosure, plus Year 1 Maintenance & 10 Agent Studio seats (optional 20% / $5,000 yr renewal) |
SMILE Serve (serve) | AGPLv3 — Free when complying with §13 network source disclosure | Production Runtime ($12,000 / year) — Covers up to 4 production server nodes ($250/node/mo) + internal Core Engine + 5 free Agent Studio seats, with zero AGPLv3/GPLv3 disclosure |
SMILE Agent Studio (studio) | BSL 1.1 — Free for personal, academic, and non-production evaluation (converts to AGPLv3 after 4 years) | Bundled Free with Runtime (5 seats), OEM (10 seats), and Enterprise (25 seats), or $95 / seat / mo ($995/seat/yr paid annually, 5-seat standalone min) |
| Enterprise & Edge Fleet | — | From $50,000 / year — Volume edge-node licensing (100–5,000+ gateways), site-wide OEM rights, 25 Studio seats, and optional $15k 30-day Turnkey Pilot |
All commercial tiers include Critical & High CVE resolution SLAs and a 12-month capped IP indemnity. See LICENSE and Commercial Licensing & Pricing, or contact [email protected].
Issues & Discussions
| Channel | Purpose |
|---|---|
| GitHub Discussions | Questions, ideas, show-and-tell |
Stack Overflow [smile] | Technical Q&A |
| Issue Tracker | Bug reports and feature requests |
| Online Docs | Tutorials and programming guides |
| Java API · Scala API · Kotlin API · Clojure API | API Javadoc |
Contributing
Please read CONTRIBUTING.md for build and test instructions.
Maintainers
- Haifeng Li (@haifengl)
- Karl Li (@kklioss)
Gallery
Scatterplot Matrix | ||
Scatter Plot |
Line Plot |
Surface Plot |
Bar Plot |
Box Plot |
Histogram Heatmap |
Rolling Average |
Geo Map |
UMAP |
Text Plot |
Heatmap with Contour |
Hexmap |
IsoMap |
LLE |
Kernel PCA |
Neural Network |
SVM |
Hierarchical Clustering |
SOM |
DBSCAN |
Neural Gas |
Wavelet |
Exponential Family Mixture |
Teapot Wireframe |
Grid Interpolation | ||
Related repositories
Hugging Face Transformers (huggingface/transformers) is a Python library that centralizes model definitions for text, computer vision, audio, video, and multimodal machine learning, covering both inference and training. The README describes it as a pivot point compatible with training frameworks such as Axolotl, DeepSpeed, and PyTorch-Lightning, and inference engines such as vLLM, SGLang, and TGI, with more than 1M+ model checkpoints listed on the Hugging Face Hub.
LLMs-from-scratch is Sebastian Raschka's GitHub companion to the Manning book Build a Large Language Model (From Scratch), ISBN 9781633437166. It walks through building, pretraining, and finetuning a GPT-style model in PyTorch across seven chapters and five appendices, plus a growing set of bonus notebooks covering newer open architectures.
What Hacker News commenters said about TensorFlow's installs, sprawl and 2.x migration, set against the repo's 201,431 stars and 2026-11-10 push.
prompts.chat is an open-source library of prompts written for AI chat assistants, first released in December 2022 under the name Awesome ChatGPT Prompts. The GitHub project has since grown and now distributes prompts through a website, a CSV file, a Markdown file, and a Hugging Face dataset, alongside a self-hosting option, a CLI, an MCP server, and a Claude Code plugin.
Quick answers
How active is development on haifengl/smile?
The most recent commit recorded on haifengl/smile was 3 months ago, based on the GitHub push timestamp. The repository has 1.1k forks — one of the better signals of community interest.
How many stars does haifengl/smile have?
haifengl/smile has 6.4k GitHub stars — refresh the page for the live number, or check github.com/haifengl/smile. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
Is haifengl/smile open source?
TopGit's metadata for haifengl/smile does not record a license. Most public repositories on GitHub ARE open source, but the exact terms vary — verify by opening the LICENSE file directly.
What else is in the AI Tools space?
haifengl/smile is tracked by TopGit under the AI Tools category, alongside 20 GitHub-tagged topics. Trending and Topics pages list peer repositories of comparable stars and language.
What is haifengl/smile?
haifengl/smile (haifengl/smile) is a Java project on GitHub. From the project's own README: Statistical Machine Intelligence & Learning Engine
What language is haifengl/smile written in?
haifengl/smile is written primarily in Java. GitHub's language field is based on the largest share of bytes in the default branch.
Where do I read more about haifengl/smile?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/haifengl/smile is the definitive source.
Read full README in the tab above.
Is smile worth your time?
ChatGPT, Claude and Perplexity can all read this page. Ask one of them what it makes of smile.