SQL SERVER 2025 · BUILT FOR APPLICATION CI

Your SQL Server tests.
A fraction of the weight.

Swap your SQL Server container for bitsql, a memory-only emulator that speaks TDS. Keep your SQL, your clients, and your connection settings.

Open source · Public domain · Written in MoonBit

compose.yaml− heavyweight setup
services:
  db:
−   image: mcr.microsoft.com/mssql/server:2025-latest
+   image: mirek/bitsql:0.1
+   command: ["--auto-create-databases"]
    ports: ["1433:1433"]
Same TDS connection. Ready in ~144 ms.
44×smaller download

13.7 MiB vs 604.5 MiB

19×faster cold start

144 ms vs 2.69 seconds · one run

234×less idle memory

5.1 MiB vs 1.17 GiB

25,465passing tests & client checks

23,693 client checks + 1,772 MoonBit tests
Release 0.1.24 · three additional skips

Explore the test coverage ↓

01 / LESS WAITING. MORE TESTING.

Small where it counts.

Start a fresh database for a test run without paying for a full database server. Every chart uses a linear scale. Lower is better.

bitsqlSQL Server 2025
The honest comparison. Point reads were slightly slower in this run. The biggest gains are startup, footprint, logins, schema churn, and writes. Measured on linux/amd64, Ryzen 9 7950X3D, Docker 29.1.3, October 7, 2026, using tedious over loopback with TLS. Cold start is one successful run per target; two repeated SQL Server startup attempts crashed and were excluded. Point reads are the median of five batches; inserts are one workload run. These are test-workload measurements, not a production capacity claim.

FAMILIAR ON PURPOSE

Your stack already
speaks bitsql.

Real clients connect over the SQL Server wire protocol. Behavior is checked against captures from SQL Server 2025.

tediousmssqlKnexSequelizeTypeORMPrisma

0.1.24 validation: 23,693 client checks and 1,772 MoonBit tests passed, with three existing skips. All four ORM workloads had no new differences.

Explore compatibility coverage ↗

02 / MAKE THE SWAP

One lighter container.

Use bitsql for local development and application CI. Start here, then run your existing suite.

Run it now

docker run --rm -p 1433:1433 \
  mirek/bitsql:0.1 --auto-create-databases

Or change your Compose service

services:
  db:
    image: mirek/bitsql:0.1
    command: ["--auto-create-databases"]
    ports: ["1433:1433"]
    environment:
      ACCEPT_EULA: "Y"
      MSSQL_SA_PASSWORD: "Your_password123"

Existing MSSQL_* environment variables are accepted and ignored. For reproducible runs, pin mirek/bitsql:0.1.24. Architectures are published after native-host validation; check the tag’s manifest.

Keep the connection. Check the setup.

01Credentials & TLSExisting usernames and passwords work. With encryption enabled, keep trustServerCertificate: true for the built-in self-signed certificate.

02Database creation--auto-create-databases creates databases on login. Use --database app to create a named database at startup instead.

03Health checksThe image has no shell or sqlcmd. Replace SQL Server health checks with a TCP/login probe. Testcontainers users should use GenericContainer and a listening-port wait.

04Fresh state, every timeEverything lives in memory. Remove persistence volumes. Seed once, then use EXEC emulator.snapshot 'seed' and EXEC emulator.restore 'seed' for fast test isolation.

GitHub Actions & Testcontainers examples ↗

03 / NO CONTAINER REQUIRED

Meet the engine. In your browser.

The same MoonBit SQL executor, compiled to JavaScript. Queries and data stay in this tab. No account, server, or installation.

⌘ / Ctrl + Enter to run · State persists between queries
Choose an example or write a query.

Browser demo: one session, no TDS socket, HTTP integrations, or scheduled waits. Waiting requests reset the demo with a notice. Stop or a 10-second timeout also resets the database. Results display at most 200 rows per set. For client and concurrency testing, use the container.

FAITHFULNESS FIRST

Built to catch failures.

bitsql targets the SQL Server behavior that application tests depend on: SQL, result metadata, TDS, and ORM workflows. Unsupported features raise explicit Emulator: … errors instead of plausible results.

This is an in-memory test database. It does not replace SQL Server’s durability, operational backups, replication, or production query optimizer. Add ORDER BY wherever row order matters, and validate your application against SQL Server before release.

Read the release boundary & deferred work ↗