Particle is a native, local AI workspace for Apple Silicon Macs, created by Lakshya Prajapati. Churo Chat handles conversations; Particle Code, powered by Churo Code, reads and edits projects, runs approved commands, and searches public documentation.
The SwiftUI app uses a green, grain-textured ParticleDesign interface with PT Serif, Poppins, and Space Mono. It stores conversations and memories locally, supports multiple workspaces, and shares one warm inference worker between chat and coding.
- Desktop setup and usage
- Coding agent capabilities and permissions
- Building from source
- Model library, lossless conversion and adapter status
The model-library implementation adds native public Hugging Face discovery, local imports and per-model profiles. Sarvam remains the default. The new Chronos/Qwen3.5 MoE adapter is experimental and stays hidden from normal installation until its reference and conversation-state checks qualify it. The existing public tester release does not yet include this development work.
The underlying engine is a TurboFieldfare fork adapted to the Sarvam 30B base model, with Swift/Metal inference and bounded MoE expert streaming from GGUF or native .particle packs. Churo names describe the assistant experience, not newly trained weights. Original licenses and technical attribution are retained. This source repository contains no model weights, credentials, chats, or build archives.
On an Apple Silicon Mac running macOS 26 or newer, paste into Terminal:
curl -fsSL https://github.com/MathObsession/Particle/releases/latest/download/install.sh | /bin/bashThe installer downloads and verifies the prebuilt app, installs it in
~/Applications/Particle.app, and opens it. The app downloads the approximately
19.6 GB Churo model on first launch; allow 22 GB free for the model plus app space.
This tester build is not Apple-notarized: if macOS blocks opening, use
System Settings → Privacy & Security → Open Anyway. The installer keeps macOS
security checks enabled. Installation details and limits.
Scripts/particle doctor
Scripts/particle build -c release --product ParticleCLI
Scripts/particle run --interactive --max-new 64 --max-context 512The model can emit reasoning before its answer; a small output limit may end during reasoning. Generated text goes to stdout. Progress, timing, cache activity, and sampled memory use go to stderr. Add --verbose for per-layer progress on slow storage; Control-C cancels at the next layer boundary after current work completes.
Scripts/particle run --inspect
Scripts/particle run --tokenize --prompt "नमस्ते"
Scripts/particle run --validate-kernels
Scripts/particle test -c release --filter 'ParticleTests|OptimizationTests'See the CLI guide for input files, sampling, tokenizer setup, and limits, and the implementation plan for completed modules and remaining optimization work.
The current optimization pass adds actual batched native K-quant GPU work, 128-token prompt chunks, fused gate/up activation, the approved bounded internal SSD expert cache, and warm multi-turn sessions with exact KV-prefix reuse. Use /new to clear history while retaining warm weights, and /quit to exit. --no-ssd-cache keeps expert reads on the original model volume.
The final short eight-token checks measured 0.42 tokens/s with a partially warm cache and 0.72 tokens/s on the warm repeat. New routes and cold prompt processing can still be slow on SD.
See the current performance record for tests, measured throughput and limits, and the complete method audit for all 104 upstream experiment entries, including rejected methods and unfinished Sarvam ports. Faster isolated kernels do not establish a model-wide token rate.
The new Particle desktop guide covers the native SwiftUI chat interface, local conversations, model setup, green ParticleDesign artwork, bundled PT Serif/Poppins/Space Mono fonts and Homebrew cask packaging. Build with Scripts/build_particleone.sh. The separate ParticleOne target connects to the Sarvam ParticleCLI worker; the inherited Gemma app remains separate. Public model-release status is in docs/particleone/model-release/status.json.
The native pack guide covers lossless .particle conversion, resumable installation, read-through SSD caching, and a complete common/expert SSD mirror within the approved 18 GiB tier. Defaults preserve legacy behavior. The native SD pack is verified and the complete SSD mirror is prepared. A short, alternating reference/candidate benchmark measured 1.92 → 2.61 tokens/s with matching full logits and continuations; results and limits. Validation logs distinguish completed checks from pending sustained workload qualification.
Experimental --deferred-decode, --gpu-routing, and --grouped-experts reduce decode scheduling/dispatch work. They remain opt-in pending whole-model latency gates. Native-six has not qualified the sustained 4 tokens/s internal-SSD goal.
The new speed/quality experiment guide documents explicit --active-experts 2...6 routing budgets and a single-runner screening tool. Reduced counts change the model and remain experimental. The final three-expert candidate completed two repeated code responses at 4.20 and 4.30 tokens/s; an English chat response was slower at 3.71 tokens/s and hit its reasoning cap. The small quality screen scored 14/20 versus native 15/20. These results do not certify 4 tokens/s across workloads or a global 25% quality-loss ceiling. Complete results and limits.
Set --expert-cache-slots to any integer from 6 to 16 when starting Particle. The default remains 12 slots per MoE layer. More slots may reduce disk reads; the speed benefit depends on the routes used and available RAM.
# Smaller RAM cache
Scripts/particle run --interactive --expert-cache-slots 6
# Default balance
Scripts/particle run --interactive --expert-cache-slots 12
# Larger RAM cache; compare speed and memory pressure
Scripts/particle run --interactive --expert-cache-slots 16Expert buffers across the 18 MoE layers use approximately 0.76 GiB at 6 slots, 1.01 GiB at 8, 1.52 GiB at 12, or 2.03 GiB at 16. These are buffer capacities for the installed model, excluding common weights, KV, scratch, file caches and the rest of the system. Choose the setting before launch; changing it requires restarting Particle. Conversation context and the separate SSD payload budget (4096 MiB default, up to 18432 MiB explicitly selected) are independent of this setting.
Main folder: /Users/lakshyaprajapati/Repositories/Particle. Open Package.swift in Xcode or Particle.code-workspace in VS Code. Sources/, Tests/, Scripts/, and docs/ are at the root.
/Volumes/Particle/
Xcode.app
Models/sarvam-30b/sarvam-30b-q4_k_m.gguf
Models/sarvam-30b/tokenizer/
Build/Particle/SwiftPM/
Build/Particle/DerivedData/
Caches/Particle/
Scripts/particle selects the SD-card Xcode, build directory, and compiler caches. source Scripts/particle-env.sh applies those settings to a shell. The helper limits builds to two jobs. The ignored .build link directs ordinary SwiftPM builds to the card. Keep it mounted as Particle. The model is used in place; no full copy or conversion is needed. An internal SSD cache of recent RAM expert evictions is enabled by default, capped at 4096 MiB of payload. This increases effective coverage without increasing the RAM slot count. It is separate from the SD compiler caches.
The Sarvam path consists of ParticleFormat, ParticleGGUF, ParticlePackCore, ParticlePack, ParticleCore, and ParticleCLI. It supports the installed 19-layer, 128-expert/top-6 Sarvam artifact, its official tokenizer/chat template, and direct Q4_K/Q5_K/Q6_K operations. Prompt processing groups expert consumers over 128-token chunks by default with batched GPU projections; activations and KV cache use FP32. Embeddings use bounded row reads, and the expert cache defaults to 12 slots per layer. The scalar path remains available for validation.
Target hardware is M2 with 8 GB RAM. The temporary SD card can make cold reads very slow. The 6–8 token/s internal-SSD goal requires measurements and optimization; it is not a current performance claim. Use small contexts on this Mac. The revised 12-slot default was tested with context 64; six slots remain available when memory is tight.
The inherited TurboFieldfare* app, server, CLI, and repacker remain Gemma-specific. Use ParticleCLI for Sarvam. Preserve the upstream licenses and third-party notices.
See workspace setup, codebase analysis, and upstream documentation. Consult AGENTS.md before model-using tests or inference.
Context capacity, 16K output allowances, and independent Instant/Thinking modes are documented in Context and response modes. File-path handling, approvals and failed-write recovery are covered in File-tool reliability.