Skip to content

OpenSource RESTful ORM/SOA/MVC ToolBox for Delphi and FreePascal

License

Notifications You must be signed in to change notification settings

synopse/mORMot2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Arnaud Bouchez
Feb 18, 2025
b8e6a17 · Feb 18, 2025
Jul 20, 2022
Oct 16, 2024
Jan 16, 2025
Dec 4, 2024
Mar 13, 2024
Feb 18, 2025
Oct 16, 2024
Feb 18, 2025
Feb 7, 2021
Oct 16, 2024
Sep 24, 2024
Sep 26, 2024
Jan 3, 2025
Jan 3, 2025
Oct 16, 2024
Mar 27, 2022
Aug 5, 2020
Dec 21, 2023

Repository files navigation

Synopse mORMot 2 Framework

An Open Source Client-Server ToolBox aka ORM/SOA/MVC framework in modern Object Pascal

Happy mORMot

(c) 2008-2025 Synopse Informatique - Arnaud Bouchez

https://synopse.info - http://mORMot.net

Thanks to all Contributors!

NOTICE: This version 2 replaces mORMot 1.18 which is now in maintainance-only mode. Consider using mORMot 2 for any new or maintainable project.

Resources

You can find more about mORMot 2 in:

To discuss about mORMot, in addition to our official forum, you can join:

Those discussion groups are not managed by Synopse, but by some mORMot 2 users: thanks a lot to them!

If you find it worth using, please consider sponsoring mORMot 2 dev if you can - and even better through sharing your own commits. :-)

Presentation

mORMot What?

Synopse mORMot 2 is the ultimate Open Source ToolBox for modern Object Pascal. It is a fully featured Client-Server ORM SOA MVC framework for Delphi 7 up to Delphi 12.2 Athenes and FPC 3.2/trunk, targeting Windows/Linux/BSD/MacOS for servers, and any platform for clients (including mobile or AJAX).

mORMot map

The main features of mORMot are therefore:

  • An optimized cross-compiler and cross-platform JSON/UTF-8 and RTTI kernel;
  • Complete and efficient Cryptography primitives (hashes, encryption, asymetric keys, X.509, OpenSSL);
  • A fully features Client/Server network layer (e.g. HTTP/S, WebSockets, OpenAPI/Swagger, async servers, LDAP, DNS, ACME);
  • Direct SQL and NoSQL database access (e.g. SQLite3, PostgreSQL, Oracle, MSSQL, OleDB, ODBC, MongoDB);
  • ORM/ODM: objects persistence on almost any database (SQL or NoSQL);
  • SOA: organize your business logic into REST services defined as interface;
  • Convention-over-configuration REST/JSON router, locally or over HTTP/HTTPS/WebSockets;
  • Clients: consume your data or services from any platform, via ORM/SOA APIs;
  • Web MVC: publish your ORM/SOA process as responsive Web Applications;
  • A lot of other reusable bricks (e.g. Unicode, network, threads, dictionaries, logging, binary serialization, variants, generics, cross-platform, pdf generation...).

Emphasizing speed and versatility, mORMot leverages the advantages of modern object pascal native code and easy-to-deploy solutions, reducing deployment cost and increasing ROI. It can be used:

  • to add basic ORM or Client-Server features to simple applications for hobbyists,
  • or let experienced users develop scalable service-based (DDD) projects for their customers,
  • or leverage FPC cross-platform abilities with an existing Delphi codebase, to embrace the next decades,
  • have fun and see modern object pascal challenge the latest languages or frameworks.

Sub-Folders

The mORMOt 2 repository content is organized into the following sub-folders:

  • src is the main source code folder, where you should find the actual framework;
  • packages contains IDE packages and tools to setup your dev environment;
  • static contains raw library .o/.obj files needed for FPC and Delphi static linking;
  • test defines the regression tests of all framework features;
  • res to compile some resources used within src - e.g. the static third-party binaries;
  • doc holds the documentation of the framework;
  • ex contains various samples.

Feel free to explore the source, and the inlined documentation.

MPL/GPL/LGPL Three-License

The framework is licensed under a disjunctive three-license giving you the choice of one of the three following sets of free software/open source licensing terms:

  • Mozilla Public License, version 1.1 or later;
  • GNU General Public License, version 2.0 or later;
  • GNU Lesser General Public License, version 2.1 or later.

This allows the use of our code in as wide a variety of software projects as possible, while still maintaining copy-left on code we wrote. See the full licensing terms.

Quick Start

Compiler targets

The framework source code:

  • Tries to stay compatible with FPC stable and Delphi 7 and up;
  • Is currently validated against FPC 3.2.3 (fixes-3_2) and Lazarus 2.2.5 (fixes_2_2), Delphi 7, 2007, 2009, 2010, XE4, XE7, XE8, 10.4, 11.1 and 12.2.

Note that FPC 3.2.2 has a regression with variant late binding - use FPC 3.2.2 fixes branch instead.

On Delphi, only the Windows target is available for mORMot general units, but you can use the cross-platform clients units on all Delphi targets. FPC is a much better and consistent cross-platform compiler, we gladly support.

Please submit pull requests for non-validated versions.

Installation

  1. Get the source, Luke!
  1. Setup your favorite IDE:
  • On Lazarus:
  • On Delphi:
    • Create a new environment variable mormot2 with full path to your mORMot 2 src sub-folder (Tools - Options - IDE - Environment Variables), e.g. c:\github\mORMot2\src or d:\mormot2\src depending on step 1;
    • Add the following string to your IDE library paths (for all target platforms, i.e. Win32 and Win64): $(mormot2);$(mormot2)\core;$(mormot2)\lib;$(mormot2)\crypt;$(mormot2)\net;$(mormot2)\db;$(mormot2)\rest;$(mormot2)\orm;$(mormot2)\soa;$(mormot2)\app;$(mormot2)\script;$(mormot2)\ui;$(mormot2)\tools;$(mormot2)\misc
    • There is no IDE or UI package needed (yet).
  1. Discover and enjoy:
  • Open and compile test/mormot2tests.dpr in the IDE, and run the regression tests on your machine.
  • Browse the examples folder (work in progress) - especially Thomas Tutorials which are realistic and pedagogical.
  • Start from an example, and follow the documentation.
  • Feel free to contribute by posting enhancements and patches to this quickly evolving project.

For safety, the SHA-256 checksums of the current version of the downloaded binary files, as published in our https://synopse.info/files server, are available in this repository static/dev.sha256 file.

Coming From Version 1.18

Why Rewrite a Working Solution?

The mORMot framework stayed in revision 1.18 for years, and is was time for a full refactoring.

The main refactoring points tried to better follow SOLID principles:

  • Switch to a more rigorous versioning policy, with regular releases;
  • Split main big units (SynCommons.pas, mORMot.pas) into smaller scope-refined units;
  • OS- or compiler- specific code separated to ease evolution;
  • Rename confusing types, e.g. TSQLRecord into TOrm, TSQLRest into TRest...;
  • Favor composition over inheritance, e.g. TRest class split into proper REST/ORM/SOA classes - and folders;
  • Circumvent compiler internal errors on Delphi, e.g. changed untyped const/var changed into pointers, or reduced the units size;
  • Full rewrite of the whole RTTI, JSON and REST cores, for better efficiency and maintainability;
  • Optimization of the framework asm kernel, using AVX2 if available;
  • New features like OpenSSL, libdeflate or QuickJS support;
  • New asynchronous HTTP and WebSockets servers, with optional HTTPS/TLS support via Let's Encrypt;
  • Introduce modern syntax like generics or enumerators - but optional for compatibility.

We therefore created a whole new project and repository, since switching to version 2 induced some backward uncompatible changes. New unit names were used, to avoid unexpected collision issues during migration, or if 1.18 is to remain installed for a compatibility project.

Upgrade In Practice

Quick Steps when upgrading from a previous 1.18 revision:

  1. Note all units where split and renamed, and some breaking changes introduced for enhanced features, therefore a direct update is not possible - nor wanted

  2. Switch to a new folder, e.g. #\lib2 instead of #\lib

  3. Download latest 2.# revision files as stated just above

  4. Change your references to mORMot units:

  • All unit names changed, to avoid collision between versions;
  • Look at the samples to see the main useful units.
  1. Consult the documentation about breaking changes from 1.18, mainly:
  • Units refactoring (see point 4 above);
  • Types renamed in PUREMORMOT2 mode;
  • Delphi 5-6 and Kylix compatibility removed;
  • BigTable, LVCL, RTTI-UI deprecated.