A native macOS lab for teaching tiny language models to think — build the architecture, train the weights, and watch a small LLM emerge from scratch, locally on Apple Silicon with custom data, tokenizers, checkpoints, and MLX acceleration.
76
stars
45
commits
Swift
primary language
Aug 20, 2026
updated
Train language models you can actually talk to.
Website · Download the latest beta · Roadmap · Contribute · Discussions
[!WARNING] LabLLM is beta software. This build can train and fine-tune real models, but it is not representative of the final product. Expect bugs, missing features, and fast-moving updates. Keep backups of important projects and report anything that breaks.
I built LabLLM — a free, native macOS app that puts the entire LLM training workflow in one place.
With LabLLM, you can:
• build a Transformer from scratch
• train it on your own datasets
• use Apple Silicon + MLX for local training
• watch training metrics and loss curves live
• save and resume checkpoints
• fine-tune with LoRA / DPO
• inspect tokens and embeddings
• experiment with sampling and generation
• chat with the model you trained
• manage your models, datasets, and experiments
No cloud. No subscription. No sending your data anywhere.
Everything stays on your Mac.
Open source ↓
Because training a small language model should be something you can explore directly. LabLLM puts the model builder, dataset browser, tokenizer, training dashboard, fine-tuning flow, sampler, chat, checkpoints, and model management in one place, so you can move from idea to experiment without rebuilding your workflow each time.
![]() | ![]() |
| Bring data Search Hugging Face, inspect what you found, then import actual trainable files with clear metadata and previews. | Watch learning Blue train loss, orange validation loss, progress, throughput, and live samples in one place. |
![]() | |
| Keep the useful runs Load, continue, rename, quantize, and compare checkpoints without losing track of the experiment. | |
Yes. It builds with Swift Package Manager and runs as a native macOS app.
It can design a GPT-style model, import text and instruction data, train, fine-tune, sample, chat, save checkpoints, export model cards, and serve a local OpenAI-shaped endpoint.
It can train models from scratch, fine-tune them on instruction or conversation data, and let you chat with the result naturally inside the same app.
The package pins mlx-swift to 0.31.6.
swift build
swift run LabLLM
If MLX gets confused after a dependency update, try:
swift package reset
swift build
The app bundles the MLX Metal library needed for the SwiftPM build. Full Xcode is still recommended if you want to rebuild MLX itself.
Quite a bit, actually.
| Area | Current vibe |
|---|---|
| Model building | GPT-style decoder presets, validation, estimates, and enough knobs to make Expert mode feel legally responsible. |
| Data | Hugging Face browsing, local import, iMessage import, an installed dataset library saved to disk, and progress for big jobs. |
| Training | Per-run dataset selection and mixing, pretraining, SFT, LoRA, DPO, live metrics, validation curve, samples, checkpoints, pause/resume/stop. |
| Playing | Sampling, chat, X-Ray token inspection, embeddings, local server, quantized exports. |
| Customization | Themes, accent, density, sidebar width, feature visibility, tutorial preferences, and deep controls for serious experiments. |
These are partially present or actively being shaped into something less chaotic.
This is where the ambition lives. Some of it is sensible. Some of it is probably wearing a lab coat it found in a closet.
Learn
-> Explore
-> Create model
-> Design model
-> Install data
-> Clean/analyze data
-> Choose the training mix
-> Configure training
-> Estimate resources
-> Train
-> Watch samples evolve
-> Inspect checkpoints
-> Sample/chat
-> Fine-tune
-> DPO
-> Compare
-> Quantize
-> Serve locally
-> Reproduce
-> Keep experimenting
You can also ignore the flow and click around. The app is built for exploration.
LabLLM/
├── Package.swift
├── Package.resolved
├── README.md
└── Sources/LabLLM/
├── LabLLMApp.swift
├── AppDelegate.swift
├── AppState.swift
├── Preferences.swift
├── LoadingState.swift
├── DataImportState.swift
├── Core/
│ ├── GPT.swift
│ ├── Trainer.swift
│ ├── Sampler.swift
│ ├── Tokenizer.swift
│ ├── BPETokenizer.swift
│ ├── TextDataset.swift
│ ├── SFTDataset.swift
│ ├── DPODataset.swift
│ ├── ConversationImport.swift
│ ├── HuggingFaceHub.swift
│ ├── DatasetLibrary.swift
│ ├── ModelWorkspace.swift
│ ├── Checkpoint.swift
│ ├── ModelServer.swift
│ └── ...
└── Views/
└── One SwiftUI view per major sidebar section
For learning, experiments, local model development, fine-tuning, and natural chat workflows: yes.
For replacing a production LLM stack with monitoring, evals, deployment, governance, and an on-call process: not yet. LabLLM is a powerful local builder, not a full production platform.
Built on Apple's MLX and mlx-swift.
Also powered by the usual stack of coffee, compiler errors, and the ancient developer ritual of muttering "why is focus broken" at a screen.
Pull requests, issues, recipes, docs fixes, images, and ideas are welcome. Start with CONTRIBUTING.md, use Discussions for questions and early ideas, and keep pull requests focused.
Thanks goes to these wonderful people:
This project follows the All Contributors specification. Contributions of any kind are welcome.
LabLLM project code is released under the MIT License. See LICENSE.
MLX is MIT licensed by Apple. Dataset and model licenses depend on what you import, so read the dataset cards before training anything you plan to share. The app will not read the license for you, because that would be too convenient.
43 commits
2 commits
Swift
100.0%
A native macOS lab for teaching tiny language models to think — build the architecture, train the weights, and watch a small LLM emerge from scratch, locally on Apple Silicon with custom data, tokenizers, checkpoints, and MLX acceleration.
76
stars
45
commits
Swift
primary language
Aug 20, 2026
updated
Train language models you can actually talk to.
Website · Download the latest beta · Roadmap · Contribute · Discussions
[!WARNING] LabLLM is beta software. This build can train and fine-tune real models, but it is not representative of the final product. Expect bugs, missing features, and fast-moving updates. Keep backups of important projects and report anything that breaks.
I built LabLLM — a free, native macOS app that puts the entire LLM training workflow in one place.
With LabLLM, you can:
• build a Transformer from scratch
• train it on your own datasets
• use Apple Silicon + MLX for local training
• watch training metrics and loss curves live
• save and resume checkpoints
• fine-tune with LoRA / DPO
• inspect tokens and embeddings
• experiment with sampling and generation
• chat with the model you trained
• manage your models, datasets, and experiments
No cloud. No subscription. No sending your data anywhere.
Everything stays on your Mac.
Open source ↓
Because training a small language model should be something you can explore directly. LabLLM puts the model builder, dataset browser, tokenizer, training dashboard, fine-tuning flow, sampler, chat, checkpoints, and model management in one place, so you can move from idea to experiment without rebuilding your workflow each time.
![]() | ![]() |
| Bring data Search Hugging Face, inspect what you found, then import actual trainable files with clear metadata and previews. | Watch learning Blue train loss, orange validation loss, progress, throughput, and live samples in one place. |
![]() | |
| Keep the useful runs Load, continue, rename, quantize, and compare checkpoints without losing track of the experiment. | |
Yes. It builds with Swift Package Manager and runs as a native macOS app.
It can design a GPT-style model, import text and instruction data, train, fine-tune, sample, chat, save checkpoints, export model cards, and serve a local OpenAI-shaped endpoint.
It can train models from scratch, fine-tune them on instruction or conversation data, and let you chat with the result naturally inside the same app.
The package pins mlx-swift to 0.31.6.
swift build
swift run LabLLM
If MLX gets confused after a dependency update, try:
swift package reset
swift build
The app bundles the MLX Metal library needed for the SwiftPM build. Full Xcode is still recommended if you want to rebuild MLX itself.
Quite a bit, actually.
| Area | Current vibe |
|---|---|
| Model building | GPT-style decoder presets, validation, estimates, and enough knobs to make Expert mode feel legally responsible. |
| Data | Hugging Face browsing, local import, iMessage import, an installed dataset library saved to disk, and progress for big jobs. |
| Training | Per-run dataset selection and mixing, pretraining, SFT, LoRA, DPO, live metrics, validation curve, samples, checkpoints, pause/resume/stop. |
| Playing | Sampling, chat, X-Ray token inspection, embeddings, local server, quantized exports. |
| Customization | Themes, accent, density, sidebar width, feature visibility, tutorial preferences, and deep controls for serious experiments. |
These are partially present or actively being shaped into something less chaotic.
This is where the ambition lives. Some of it is sensible. Some of it is probably wearing a lab coat it found in a closet.
Learn
-> Explore
-> Create model
-> Design model
-> Install data
-> Clean/analyze data
-> Choose the training mix
-> Configure training
-> Estimate resources
-> Train
-> Watch samples evolve
-> Inspect checkpoints
-> Sample/chat
-> Fine-tune
-> DPO
-> Compare
-> Quantize
-> Serve locally
-> Reproduce
-> Keep experimenting
You can also ignore the flow and click around. The app is built for exploration.
LabLLM/
├── Package.swift
├── Package.resolved
├── README.md
└── Sources/LabLLM/
├── LabLLMApp.swift
├── AppDelegate.swift
├── AppState.swift
├── Preferences.swift
├── LoadingState.swift
├── DataImportState.swift
├── Core/
│ ├── GPT.swift
│ ├── Trainer.swift
│ ├── Sampler.swift
│ ├── Tokenizer.swift
│ ├── BPETokenizer.swift
│ ├── TextDataset.swift
│ ├── SFTDataset.swift
│ ├── DPODataset.swift
│ ├── ConversationImport.swift
│ ├── HuggingFaceHub.swift
│ ├── DatasetLibrary.swift
│ ├── ModelWorkspace.swift
│ ├── Checkpoint.swift
│ ├── ModelServer.swift
│ └── ...
└── Views/
└── One SwiftUI view per major sidebar section
For learning, experiments, local model development, fine-tuning, and natural chat workflows: yes.
For replacing a production LLM stack with monitoring, evals, deployment, governance, and an on-call process: not yet. LabLLM is a powerful local builder, not a full production platform.
Built on Apple's MLX and mlx-swift.
Also powered by the usual stack of coffee, compiler errors, and the ancient developer ritual of muttering "why is focus broken" at a screen.
Pull requests, issues, recipes, docs fixes, images, and ideas are welcome. Start with CONTRIBUTING.md, use Discussions for questions and early ideas, and keep pull requests focused.
Thanks goes to these wonderful people:
This project follows the All Contributors specification. Contributions of any kind are welcome.
LabLLM project code is released under the MIT License. See LICENSE.
MLX is MIT licensed by Apple. Dataset and model licenses depend on what you import, so read the dataset cards before training anything you plan to share. The app will not read the license for you, because that would be too convenient.
43 commits
2 commits
Swift
100.0%