New Loading latest version ...

Build Beautiful Web Applications

A modern, expressive web framework that combines the elegance of Ruby with the performance of Rust. Build faster, ship sooner, sleep better.

1.2M+
Plaintext req/s
834k+
JSON req/s
0
Dependencies
app/models/post.sl
class Post < Model
    # Validations
    validates("title", {
        "presence": true,
        "min_length": 3
    })
    validates("author_id", { "presence": true })

    # Relationships via methods
    def author
        User.find(this.author_id)
    end

    def comments
        Comment.where(
            "doc.post_id == @id",
            { "id": this.id }
        )
    end
end

Why Soli?

Everything you need to build modern web apps

Stop wrestling with configuration. Soli includes batteries, so you can focus on building.

Blazing Fast Performance

Built on Rust for raw speed, with the expressiveness of Ruby. Soli handles over 1.2 million plaintext requests per second.

Secure by Default

Security isn't an afterthought. We include CSRF protection, secure headers, and SQL injection prevention.

  • CSRF Token Validation
  • XSS Sanitization
  • Secure Session Cookies

Instant Hot Reload

See your changes instantly. Soli watches your files and recompiles in milliseconds, keeping your development flow uninterrupted.

Battery-Included ORM

Powerful Active Record ORM with migrations, relationships, and validations. Database work made simple.

Developer Experience

Beautiful error pages, convention over configuration, and intuitive APIs designed for developer happiness.

World-Class Performance

Ranked among the fastest web frameworks in the world

Plaintext
1,206,408
req/s

TechEmpower Plaintext

JSON
834,109
req/s

TechEmpower JSON

Benchmarks run on 21 AWS c7i.2xlarge instances via TechEmpower

Scaffold Generator

Generate complete MVC resources in seconds

Terminal
$ 
Success! Created scaffold for blog_posts

# Generated files:
app/models/blog_posts_model.sl
app/controllers/blog_posts_controller.sl
app/views/blog_posts/index.html.slv
app/views/blog_posts/show.html.slv
app/views/blog_posts/new.html.slv
app/views/blog_posts/edit.html.slv
app/views/blog_posts/_form.html.slv
tests/models/blog_posts_test.sl
tests/controllers/blog_posts_controller_test.sl
db/migrations/*create_blog_posts_*.sl
 Routes added to config/routes.sl

Powered by SoliDB

A distributed, ACID-compliant multi-model database built in Rust. Documents, time-series, graph, key-value, vector search, and blob storage — all in a single runtime.

Documents
JSON Store
Graph
Edges & Traversal
Vector
HNSW Search
Time Series
Metrics & Logs
Full-Text
Search Engine
Blobs
File Storage
app/models/user.sl
class User < Model
    validates("email", {
        "presence": true,
        "uniqueness": true
    })
    validates("name", {
        "presence": true,
        "min_length": 2
    })

    before_save("normalize_email")
    after_create("send_welcome_email")

    def normalize_email
        this.email = this.email.downcase
    end

    def posts
        Post.where("doc.user_id == @id", { "id": this.id })
    end
end
app/controllers/users_controller.sl
# Chainable query builder
let admins = User
    .where("doc.role == @role", { "role": "admin" })
    .where("doc.active == @a", { "a": true })
    .order("created_at", "desc")
    .limit(10)
    .all

# CRUD with validations
let result = User.create({
    "name": "Alice",
    "email": "[email protected]"
})

if result["valid"]
    redirect("/users/" + result["record"]["id"])
else
    render("users/new", { "errors": result["errors"] })
end
db/migrations/20260122_create_users.sl
def up(db)
    db.create_collection("users")
    db.create_index("users", "idx_email", ["email"], { "unique": true })
    db.create_index("users", "idx_role", ["role"], {})
end

def down(db)
    db.drop_collection("users")
end

Live Queries

WebSocket-powered real-time updates. Query once, get live changes pushed to clients.

ACID Transactions

Multi-document atomic commits, rollbacks, and configurable isolation levels.

Distributed

Master-master replication, auto-sharding, and automatic failover built in.

Lua Runtime

Embedded scripting for triggers, stored procedures, and server-side logic.

Live View

Server-rendered reactive components without writing JavaScript

Counter Demo
...

Connecting...

0 JS
Required
Diff
Updates
~2KB
Client
Live Server Time -- fps
...

Connecting...

--
Updates/s
<100B
Per Update
Push
Server-Sent
app/views/live/counter.sliv
<!-- That's it. No JavaScript needed! -->
<div class="counter">
    <h2>@count</h2>
    <button soli-click="decrement">-</button>
    <button soli-click="increment">+</button>
</div>
app/controllers/live_controller.sl
# Server pushes updates via tick events
def metrics(event)
    if event["type"] == "tick"
        return {
            "state": {
                "time": now(),
                "cpu": system_cpu(),
                "memory": system_memory()
            }
        };
    end
    {}
end

Ready to build something amazing?

Join the developer* who is already building faster with Soli.

* It's just me. But I'm having a great time!