Overview
Building VillageSQL from source gives you the latest features and allows you to customize the build for your specific environment.Prerequisites
Before you begin, ensure you have the following installed:- Git - For cloning the repository
- CMake 3.14.6 or higher - Build system generator (macOS requires 3.19 or higher)
- C++ Compiler - GCC 10 or newer, or Clang 14 or newer
- Build tools - make, ninja, or equivalent
- Development libraries - OpenSSL, ncurses, pkg-config, bison, and other MySQL dependencies
Install Dependencies
Ubuntu/Debian:Step 1: Clone the Repository
Clone the VillageSQL Server repository from GitHub. Clone into your home directory so the CMake steps below work without modification:The repository is several GB due to the MySQL codebase.
Step 2: Configure with CMake
Create a build directory outside the repository and configure the project: Linux:Linux users: Use
$HOME for absolute paths. macOS users: Use ~ (tilde) — except in the mysqld commands in Steps 4 and 5, which use quoted "$HOME/..." paths on both platforms. The shell does not expand a tilde that follows =, so --datadir=~/mysql-data/data reaches mysqld as a literal ~ directory name and it aborts; the quotes keep the path in one piece if your home directory name contains a space. cmake expands the tilde itself, so -DCMAKE_INSTALL_PREFIX=~/mysql above is fine. Replace the repository path with your actual clone location if different.CMake Options Explained
<path-to-repo>- Path to the cloned VillageSQL repository (use$HOMEon Linux,~on macOS)-DWITH_DEBUG=1- Enables debug symbols (recommended for development)-DCMAKE_INSTALL_PREFIX=~/mysql- Sets installation directory-DWITH_SSL=system- Uses system OpenSSL library (required on macOS)
Additional CMake Options
Production build without debug symbols: Linux:If you need to reconfigure, clear the CMake cache first (run from within the build directory):
Step 3: Compile the Code
Build VillageSQL using make with parallel compilation. From within the build directory: Build the server and client (recommended for development):mysql target builds the client used to connect in
Step 6; make -j10 mysqld alone builds
only the server, and Step 6 would then have no client to run.
Build everything:
Step 4: Initialize the Database
Before starting the server for the first time, initialize the data directory: Linux: Production (with generated password - recommended):--user=root flag:
Use
--initialize (with password) for production-like setups. Use --initialize-insecure (no password) only for local development and testing. When using --initialize, a temporary password will be generated and printed to the console: A temporary password is generated for root@localhost: <password>Step 5: Start the Server
Start the VillageSQL server: Linux:Step 6: Connect with MySQL Client
Open a new terminal and connect to the server using the MySQL client: Linux: If using —initialize-insecure (no password):Verify Installation
Check that you’re running VillageSQL:Step 7: Set Up Users and Database
Change Root Password
If you used--initialize, change the temporary password:
Create a Development User
For daily development, create a non-root user:Create a Database
Troubleshooting
Build Fails with Missing Dependencies
Install the required development packages for your platform. Check the error message for specific missing libraries.Server Won’t Start
- Verify the data directory was initialized:
ls ~/mysql-data/data/ - Check if another MySQL/VillageSQL instance is using port 3306
- Review error logs in
~/mysql-data/data/*.err
Extension Installation Fails
- Ensure the extension library (
.soon Linux,.dylibon macOS) exists in the build output - Check that VillageSQL has the necessary permissions to load extensions
- Verify the extension name and .veb filename are correct
Next Steps
Using Extensions
Learn how to install, update, and manage VillageSQL extensions.
Creating Extensions
Build your own custom extensions for VillageSQL.
Getting Started
Quick start guide for VillageSQL.

