The Soli Blog
Tutorials, deep dives, and ideas on building web applications with SoliLang — written by the people building it.
Ship a Native Mobile App Without Rewriting the Stack
Ship iOS and Android without rewriting the stack: thin WebView shells load your deployed Soli app, the native bridge covers open-app OS work, Push.deliver cascades to APNs/FCM when closed, and AppLinks deep-link into the web view — same models and templates, honest platform costs.
Read articleMore articles
Ship a Desktop App With `soli desktop build`
soli desktop build turns your Soli app into one double-clickable executable with an embedded encrypted app, a private SolidB, optional ref_* seed data, loopback launch tokens, cross-builds, and a path to signed OTA updates — plus an honest account of what local encryption does and does not protect.
How to Operate a Release Channel
How to operate a Soli auto-update release channel: signing keys, CDN layout, multi-platform builds, canary before stable, fix-forward rollbacks, key rotation, and what to monitor — the runbook the feature docs leave to ops.
Browser Tests Without Node: Soli Drives Chrome Itself
soli test --browser drives a real headless Chrome over the DevTools protocol, spoken by the soli binary itself — no Node, no npm, no Playwright. Real input events rather than element.click(), assertions that wait, and a cookie jar shared with your request specs so login() carries straight into visit().
Code Graph RAG: Give Agents a Map of Your App
soli graph build turns your project into a SolidB code graph with embeddings; soli graph query does semantic seed + edge expansion so agents get routes, callers, and views — not isolated snippets. Same database as Models, incremental sync, multi-language extractors.
RAG Product Discovery: Search Your Catalog, Then Let the LLM Answer
Build retrieval-augmented product discovery in Soli: auto-embed on save, rank with .similar() and hybrid(), then ground answers with llm_generate — no separate vector DB or orchestration framework.
Tamper-Evident Audit Logs in Soli, from Two Primitives
Turn an audit log into a hash-chained, tamper-evident ledger with two builtins — Crypto.canonical_json for stable bytes and Crypto.merkle_root for a one-hash integrity proof. Catch silent edits, pin them to the exact record, and archive a compact daily commitment.
Watching an AI Agent Think: Live Progress with Server-Sent Events
Stream an AI agent's progress to the browser as it works — plan, tool calls, synthesis — with Server-Sent Events and a single sse() block. No WebSocket, no client framework, and the run stops if the user leaves.
Full End-to-End Tests in Pure Soli (No Playwright, No Node)
Write realistic full-stack integration tests entirely in Soli using a built-in test server, clean BDD DSL, and coverage gates — no Playwright or Node required.
Scaffolds That Don’t Suck: One Command from Zero to Production-Ready Code
One command (`/soli-resource`) to go from concept to production-ready model, controller, views, migration, routes, and specs — with an intelligent pause for human judgment.
Destructuring Done Right: Rich Pattern Matching in Soli
Destructuring, guards, rest patterns, and exhaustive matching as a daily tool for controllers and data pipelines.
Real Domain Modeling with Soli: Scopes, Soft Deletes, and Transactions
Scopes, soft deletes, and transactions — the model layer features that let you express real business rules cleanly and safely.
Soli Projects Are Designed for AI Coding Agents
How Soli ships projects that are deliberately excellent environments for AI coding agents (Claude Code, Cursor, Aider) from the very first `soli new`.
LiveView: Real-Time Server-Rendered UIs Without Writing JavaScript
Build real-time server-rendered UIs with Soli LiveView. A practical team presence + activity feed widget with ticks, simulated remote activity, and zero client-side JavaScript.
Background Jobs & Cron in Soli: Queues, Secure Callbacks, Retries, and Recurring Work Without the Ops Tax
SolidB-backed queues, signed webhook callbacks, perform_later / perform_in, declarative cron, idempotency patterns, hot reload, and zero extra daemons — the complete background job system.
Event Streaming from Soli with `es` — a Kafka-Shaped Broker You Can Actually Run
Wire es — a single-binary, HTTP+JSON, Kafka-shaped broker — to a Soli app end-to-end: produce events from a controller, drain them with a consumer-group-backed background job, and resume cleanly after a restart.
Sending Email with SendGrid — and Doing It from a Background Job
Wrap the SendGrid v3 Messages API in a tiny Soli library, then hand delivery off to a SolidB-backed background job so the controller returns in milliseconds.
Building a CRUD Datatable with HTMx, Alpine, and Soli
Build a full CRUD datatable — search, sort, pagination, inline edit, role select, status toggle, modal add, toast on save — with one model, one controller, two partials, and zero hand-written JavaScript.
Semantic Search with `.similar()` in Soli
Add AI-native vector similarity search to any query chain with .similar(), ranking results by semantic relevance with cosine similarity.
No Build, No Dependency: Why It Matters for Security and Simplicity
Why Soli ships as a single binary with no package manager, no bundler, and no build step — and what that means for supply-chain security and operational simplicity.
Server-Side Password Validation in Soli
Enforce password character-class requirements on the server with .letters(), .mixed_case(), .numbers(), and .symbols(), and drive the HTML passwordrules attribute from the same validator chain.
Web Push from Soli: Goodbye `web-push`, Hello Native VAPID
Drop the web-push Node module and send Web Push notifications natively from Soli with the four VAPID builtins (RFC 8291 / 8292).
The New Soli Dev Bar
A look at Soli's new development bar: request timing, render breakdowns, SolidB queries, outgoing HTTP calls, N+1 detection, flamegraphs, and trace exports.
How Soli Competes with Big Frameworks
How Soli competes with Rails, Laravel, Django, Next.js, and other mature frameworks by focusing on simplicity, coherence, and fast product development.
From `_handle_photo` to `uploader("photo", { ... })` — Soli's New Attachment Pipeline
Declare uploader(...) on the model, get show/create/destroy routes for free, drive image transforms (resize, crop, fit, blur, brightness, format) from URL query params.
Importing CSV & Excel Files in Soli
Parse and process CSV and Excel files with built-in spreadsheet functions.
Two-Factor Authentication with TOTP in SoliLang
Add secure two-factor authentication to your SoliLang app with TOTP codes.
Adding "Sign in with GitHub" to Your Soli App
Full OAuth 2.0 flow with GitHub, sessions, JWT tokens, and security best practices.
Why Raw Benchmarks Don't Tell the Full Story
Why synthetic benchmarks are misleading and how oha provides better HTTP load testing.
Implementing Google OAuth in SoliLang
Learn how to add Google OAuth authentication to your SoliLang application.
HTMx: The Missing Link Between Traditional MVC and Modern Interactivity
How HTMx brings simplicity to Soli web apps with server-rendered partials.