Skip to content
Solisoft

Writes like Rails. Serves 8.9 times the pages.

Soli is a complete web framework, run by a runtime written in Rust. We designed it, we measure it, and we help engineering teams put it to work: performance audits, migrations from Rails, custom development.

Requests per second

Read 50 rows from the database, then render an HTML page, query cache off. 16 threads per stack.

  1. Soli Rust 222,054
  2. Kemal Crystal 192,564
  3. Phoenix Elixir 72,263
  4. Express Node.js 70,143
  5. AdonisJS Node.js 42,707
  6. Rails Ruby 25,024
  7. FastAPI Python 19,497
  8. Django Python 10,896
  9. Laravel PHP 6,174
AMD Ryzen 9 9950X, oha at concurrency 200, measured on 28 and 29 September 2026. Soli 2.6.6 with SoliDB 2.0.5; Rails 8.1.4, Puma 8.0.2, Ruby 4.0.7, PostgreSQL 18.6.

What we do for your team

You work directly with the people who write Soli, SoliDB and Soli Proxy. Every engagement starts with a measurement and ends with one.

Performance audit

Your application slows down under load, or its infrastructure bill keeps climbing.

What you get

  • A reproducible measurement of your critical routes: throughput, p99 latency, CPU per request, memory
  • The bottlenecks, ranked by expected gain
  • A costed estimate: fix in place, or move to Soli
Request an audit

Migration from Rails

Your team likes Rails, not what it costs to run.

What you get

  • The same conventions: controllers, models, views, migrations and routes read from day one
  • A gradual plan, one functional area at a time
  • A before-and-after measurement, on your own routes
Plan a migration

Custom development

You need to ship an application or a service where performance matters.

What you get

  • Designed and delivered on our platform: Soli, SoliDB, Soli Proxy, and Rust where it pays
  • Throughput, latency and memory tracked at every release
  • Tested, documented code, handed over to your team
Describe a project

Soli against Rails, parameter by parameter

Same machine, same 16-thread budget, byte-identical responses. Every measurement session is bracketed by a control run that voids it past 8% drift.

Soli 2.6.6 and Rails 8.1.4 + Puma, measured on 28 and 29 September 2026
Parameter Soli Rails Soli advantage
JSON response 50 objects, 2,268 bytes 561,290 req/s 43,369 req/s ×12.9
Read and HTML render 50 rows, cache off 222,054 req/s 25,024 req/s ×8.9
Database read 50 rows, cache off 222,993 req/s 30,841 req/s ×7.2
Create one insert per request 258,295 req/s 31,778 req/s ×8.1
Update one row by primary key 223,931 req/s 37,502 req/s ×6.0
p99 latency read and HTML render 1.30 ms 15.92 ms ×12.2
CPU per request read and render, database included for Soli 69 µs 616 µs ×8.9
Memory under load PSS, every process 142 MB 1,157 MB ×8.1

How much would your application gain?

We measure it with the protocol behind these benchmarks, on your routes and your load.

Request an audit

Everything an application needs, in one binary

Soli is not faster because it does less. Sessions, CSRF protection and security headers sit on the path of every measured request. What takes a gem in Rails ships with the framework, documented and tested with it.

# app/controllers/posts_controller.sl
class PostsController < Controller
  # GET /posts
  def index
    @posts = Post.where({"published": true}).all
  end

  # POST /posts
  def create
    @post = Post.create(permit(params, {"title": true}))
    if @post._errors
      render("posts/new", {}, {"status": 422})
    else
      redirect("/posts/" + @post._key)
    end
  end
end
A Soli controller. Instance variables reach the view; rendering is implicit.

Install on Linux and macOS

curl -sSL https://raw.githubusercontent.com/solisoft/soli_lang/main/install.sh | sh
Data
  • ORM with validations, relations, callbacks and migrations
  • SoliDB, PostgreSQL, MySQL and SQLite
  • Vector, full-text and geo indexes declared on the model
Web and realtime
  • Live View and WebSockets served by the same workers
  • OpenAPI spec generated from the controllers
  • Internationalisation with CLDR plurals
Security
  • Authentication, TOTP and authorisation
  • OAuth client and OpenID Connect provider
  • CSRF protection, WebSocket abuse limits
Production
  • Background jobs and scheduled tasks
  • Email and PDF generation
  • Immutable releases, rollback by symlink
Quality
  • Unit, end-to-end and browser tests
  • Built-in linter and formatter
  • Projects ready for AI coding agents

Applications in production, not demos

A few projects delivered on Soli and SoliDB. Clients are not named; the figures are counted in the code.

Co-ownership management

A platform for property managers, owners’ councils, co-owners and contractors

General meetings with agenda, proxies and votes; calls for funds and payment schedules; works files with a quote comparator; dedicated portals for co-owners and contractors.

  • 293 routes, 62 models
  • 205 spec files
  • 4 environments, blue/green deploys

Property development

The CRM, programme site and sales back-office of a property developer

Lot search on a map, email and SMS campaigns, sales-team scheduling, a referral programme. Synchronised with the client’s ERP; leads were taken over from the previous tool.

  • 220 routes, 56 controllers
  • 195 spec files
  • Data takeover from the previous tool

Nutrition and wellness

A dashboard that answers questions asked in plain French

A language model writes the SDBQL queries, which run behind a guard; the page builds text, tables and charts from the results.

  • 6.6 million documents
  • 4 ArangoDB and 1 MongoDB databases consolidated into SoliDB
  • 5 data sources

One platform, from the edge to storage

Soli works with any PostgreSQL or MySQL database. But every layer of the stack has a Solisoft counterpart, written in Rust, designed alongside the others and measured with them.

Client

EUI

Licence MIT

Product site

Native interfaces, no browser

The server sends an interface tree that is already resolved, as binary patches; a native Rust client lays it out and draws it on the GPU. No HTML, no CSS, no JavaScript.

One-cell update 22 bytes on the wire
50-row table 4,619 bytes 14,362 as uncompressed HTML; gzipped, HTML is smaller (910 against 1,491)

Edge

Soli Proxy

Licence MIT

Product site

Reverse proxy and load balancing

Automatic app discovery, HTTPS through Let’s Encrypt, health checks with restart, circuit breaker, hot configuration reload.

Routing decision 54 ns Criterion micro-benchmark
End-to-end throughput 228,196 req/s p99 1.20 ms, 50,000 requests at concurrency 200

Application

Soli

Licence MIT

Product site

Full-stack web framework

Language, MVC framework and HTTP server in one binary. The site you are reading runs on it.

Read and HTML render 222,054 req/s 50 rows, cache off, 8.9 times Rails
Memory under load 142 MB one process, 16 threads

Data

SoliDB

Licence O'Saasy

Product site

Distributed document database

ACID transactions, across shards too through two-phase commit. Time series, vector and full-text search, server-side Lua scripts, a query-result cache.

Create, through Soli 258,295 req/s one insert per request, 8.1 times Rails on PostgreSQL
Read, through Soli 222,993 req/s 50 rows, query cache off

Cache

SoliKV

Licence MIT

Product site

Redis-compatible key-value store

The Redis protocol: existing clients connect unchanged. A REST API on top.

Pipelined SET 1.60 M ops/s 1.02 M for Redis 7.0.15, AOF persistence every second, 16 July 2026
p99 latency 0.447 ms level with Redis on standard commands

Infrastructure

Soli One

Licence MIT

Product site

A rack of servers, one computer

Soli One joins Rocky Linux machines into a single cluster. You declare what should run, not which server runs it.

Consensus Raft openraft library
System Rocky Linux 10 physical or virtual machines

PDFx: a Factur-X invoice is one HTTP call

Our document generation service, built on Soli and its PDF engine. A JSON template and your data in, a PDF out. For an invoice, PDFx works out the totals, generates the EN 16931 XML and embeds it in a compliant PDF/A-3.

Since 1 September 2026, every French business must be able to receive electronic invoices.

Four endpoints, one engine

  • POST /api/v1/pdf PDF from a JSON template: quotes, receipts, statements, letters
  • POST /api/v1/facturx Factur-X invoice, totals and VAT worked out
  • POST /api/v1/markdown Markdown laid out as a PDF
  • POST /api/v1/facturx/parse A received invoice, PDF or XML, CII or UBL, read into JSON
Characteristic PDFx
Render time A few milliseconds per invoice, XML included
Engine Native, in Rust: no headless browser
Compliance EN 16931, Factur-X profiles minimum to extended, PDF/A-3
Data No document kept after the response
Pricing 200 documents a month free, then from €29 a month

Measured, then published

A performance figure without its conditions is worth nothing. We publish ours with the machine, the versions, the protocol and the mistakes made along the way.

Every figure has its protocol

Cores pinned per process, an isolated load generator, HTTP status codes and response bytes checked, the table recounted before and after every write. The harness ships with the code.

Losses stay in print

When another stack does better, the figure is published as measured. The wrong measurements caught along the way, a memory table taken from a server that never restarted, a table emptied by its own benchmark, are told in the report rather than deleted.

Rust, one binary per product

Every product is a Rust executable, its memory safety checked by the compiler. Soli installs with no Node.js, npm, OpenSSL or database to set up first.

Automated test suites Tests passing per project, measured on 12 September 2026
Project Tests
Soli 3,453
SoliDB 2,666
SoliKV 446
Soli Proxy 295

Tell an engineer about your application

Describe what your application does and what holds it back. An engineer from the team that writes Soli answers you personally.

What happens next

  1. 1 We read your request and come back to you for a first conversation.
  2. 2 We measure what can be measured before proposing anything.
  3. 3 You receive a costed proposal, with its assumptions.

Prefer email? contact@solisoft.net

We use this only to answer you. It is never shared or sold.