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
services:
db:
− image: mcr.microsoft.com/mssql/server:2025-latest
+ image: mirek/bitsql:0.1
+ command: ["--auto-create-databases"]
ports: ["1433:1433"]13.7 MiB vs 604.5 MiB
144 ms vs 2.69 seconds · one run
5.1 MiB vs 1.17 GiB
23,693 client checks + 1,772 MoonBit tests
Release 0.1.24 · three additional skips
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.
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.
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-databasesOr 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.
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.
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.