Synopse mORMot ORM/SOA/MVC framework
Pascal JavaScript Assembly HTML Java PHP Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
CrossPlatform try to circumvent Delphi 2009 compilation issues Jul 26, 2018
SQLite3 BREAKING CHANGE: JsonDecode() functions returns values on the stack Aug 17, 2018
SyNode fixed FPC x86 compilation Aug 5, 2018
SynDBDataset some modifications after latest SynTable refactoring Aug 7, 2018
static updated SQLite3 engine to latest version 3.24.0 Jun 5, 2018
.gitattributes try to remove lfs PITA from this repository Mar 2, 2018
.gitignore add a IDEA IDE settings to gitignore Dec 21, 2017
Delphinus.Info.json enhanced Delphinus compatibility Sep 20, 2016
Delphinus.Install.json fixed compilation issue of regression tests introduced yesterday Jan 22, 2016
PasZip.pas try to circumvent Delphi 2009 compilation issues Jul 26, 2018
ReadMe.txt proper Boolean Handling in VCL UI May 31, 2018
SynBidirSock.pas moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynBigTable.pas happy new year with mORMot ! :) Jan 1, 2018
SynBz.pas try to circumvent Delphi 2009 compilation issues Jul 26, 2018
SynBzPas.pas some fixes to SynBzPas on non x86 CPUs Jul 26, 2018
SynCommons.pas TDynArray will recognize THash128/THash256/THash512 pattenrs Aug 17, 2018
SynCrtSock.pas introducing TSimpleHttpClient wrapper class Aug 14, 2018
SynCrypto.pas BREAKING CHANGE: JsonDecode() functions returns values on the stack Aug 17, 2018
SynDB.pas try to circumvent Delphi error insight compiler limitations Mar 27, 2018
SynDBDataset.pas ensure all samples compile as expected Aug 5, 2018
SynDBFirebird.pas explictly indicate that SynDBFirebird is not working Feb 4, 2018
SynDBMidasVCL.pas trim trailing line spaces in most source code files Feb 1, 2018
SynDBODBC.pas moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynDBOracle.pas try to circumvent Delphi error insight compiler limitations Mar 27, 2018
SynDBRemote.pas moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynDBSQLite3.pas moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynDBVCL.pas ensure all samples compile as expected Aug 5, 2018
SynDBZeos.pas add SynTable to SynDBZeos & SpiderMonkey uses Aug 5, 2018
SynDprUses.inc introducing FPC_FASTMM4 and FPC_CMEM conditionals Mar 5, 2018
SynEcc.pas small optimizations and fixes - no functional change Aug 7, 2018
SynEcc32O2.obj introducing SynEcc unit implementing ECDH and ECDSA cryptography Aug 9, 2016
SynEcc32asm.inc happy new year with mORMot ! :) Jan 1, 2018
SynEcc64O2.o added missing SynEcc64O2.o file Aug 13, 2016
SynFPCLinux.pas optimized time computation under Linux and FPC Jul 9, 2018
SynFPCMetaFile.pas trim trailing line spaces in most source code files Feb 1, 2018
SynFPCSock.pas fixed socket layer name under Linux Mar 15, 2018
SynFPCTypInfo.pas refactoring of the record RTTI process Jun 21, 2018
SynFastWideString.pas trim trailing line spaces in most source code files Feb 1, 2018
SynGSSAPI.pas add ssoftpro as a contributor to SynGSSAPI.pas Jun 25, 2018
SynGSSAPIAuth.pas try to fix IdemPropNameUSameLen/IdemPropNameU on Android Jun 25, 2018
SynGdiPlus.pas allow USEENCODERS conditional to work on Win64 Mar 9, 2018
SynKylix.pas happy new year with mORMot ! :) Jan 1, 2018
SynLZ.pas moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynLZO.pas try to circumvent Delphi 2009 compilation issues Jul 26, 2018
SynLizard.pas get rid of unnedeed .o files for Lizard static linking Aug 16, 2018
SynLog.pas optimized inlining for FPC and x86-64 Aug 14, 2018
SynMemoEx.pas trim trailing line spaces in most source code files Feb 1, 2018
SynMongoDB.pas fix MongoDB 3.6 aggregate requests ("cursor" option required) Jun 22, 2018
SynMustache.pas fixed unexpected compiler Warnings Jan 18, 2018
SynOleDB.pas moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynOpenSSL.pas fix for EVP_sha256_sign() on 64-bit OS Apr 26, 2018
SynPdf.pas trim trailing line spaces in most source code files Feb 1, 2018
SynProtoRTSPHTTP.pas circumvent Delphi 5 compiler bug Feb 3, 2018
SynSM.inc modified all links to https://synopse.info Jan 19, 2017
SynSM.pas moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynSMAPI.pas happy new year with mORMot ! :) Jan 1, 2018
SynSQLite3.pas moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynSQLite3RegEx.pas new AES encryption for SynSQlite3Static Mar 12, 2018
SynSQLite3Static.pas moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynSSPI.pas Linux GSSAPI with the same functionality as Windows SSPI (#117) Jun 25, 2018
SynSSPIAuth.pas Linux GSSAPI with the same functionality as Windows SSPI (#117) Jun 25, 2018
SynScaleMM.pas happy new year with mORMot ! :) Jan 1, 2018
SynSelfTests.pas BREAKING CHANGE: JsonDecode() functions returns values on the stack Aug 17, 2018
SynTable.pas BREAKING CHANGE: JsonDecode() functions returns values on the stack Aug 17, 2018
SynTaskDialog.RES Today's 1.18 trunk Apr 28, 2014
SynTaskDialog.pas trim trailing line spaces in most source code files Feb 1, 2018
SynTaskDialog.rc updated SMS units to compile with latest 2.1 beta Jul 11, 2014
SynTests.pas introducing FormatString() new function Aug 16, 2018
SynVirtualDataSet.pas ensure all samples compile as expected Aug 5, 2018
SynWinSock.pas fixed InitSocketInterface() thread safety Jun 8, 2018
SynZLibSSE.pas moved all FPC .o files into a new static folder Mar 12, 2018
SynZip.pas try to circumvent Delphi 2009 compilation issues Jul 26, 2018
SynZipFiles.pas deep refactoring of SynZip.pas Feb 18, 2018
Synopse.inc moved some classes to SynTable to reduce the SynCommons size Aug 1, 2018
SynopseCommit.inc TDynArray will recognize THash128/THash256/THash512 pattenrs Aug 17, 2018
build-fpc-linux64.sh Build using fpc targerting linux64 (ubuntu 16.04) fixed Oct 17, 2017
bunzipasm.inc updated SMS units to compile with latest 2.1 beta Jul 11, 2014
compil.bat added Delphi XE7 compiler to continuous integration batch Sep 6, 2014
compilFPC.bat implements minimal error handling in THttpApiWebSocketConnection Nov 20, 2017
compilpil.bat find 64-bit git.exe, if any Nov 7, 2017
crc32c64.obj strip debug information from crc32c64.obj Nov 15, 2017
deflate.obj Today's 1.18 trunk Apr 28, 2014
lizard.dpr lizard.dpr FPC project Nov 27, 2017
lizard.lpi new FastSetString() signature for UTF-8 content Aug 16, 2018
padlock.o re-enabled PADLOCK support for SynCrypto for corresponding CPUs Oct 12, 2015
padlock_aes.o re-enabled PADLOCK support for SynCrypto for corresponding CPUs Oct 12, 2015
padlock_sha.o re-enabled PADLOCK support for SynCrypto for corresponding CPUs Oct 12, 2015
sha512-x64sse4.obj 64-bit x2 speed up of SHA-512 via optimized asm Aug 22, 2017
sha512-x86.obj new optimized asm for SHA-512 on x86 32-bit Aug 3, 2017
trees.obj Today's 1.18 trunk Apr 28, 2014
vista.RES added explicit support of Windows 8.1 and Windows 10 in our .exe mani… Dec 8, 2015
vista.manifest added explicit support of Windows 8.1 and Windows 10 in our .exe mani… Dec 8, 2015
vista.rc Today's 1.18 trunk Apr 28, 2014
vistaAdm.RES added explicit support of Windows 8.1 and Windows 10 in our .exe mani… Dec 8, 2015
vistaAdm.manifest added explicit support of Windows 8.1 and Windows 10 in our .exe mani… Dec 8, 2015
vistaAdm.rc Today's 1.18 trunk Apr 28, 2014

ReadMe.txt

  Synopse mORMot framework

An Open Source Client-Server ORM/SOA framework
 (c) 2008-2018 Synopse Informatique
  https://synopse.info
  http://mormot.net

Contributors
  Alexander (sha)
  Alexander (volax)
  AlexPirate
  Alfred Glaenzer (alf)
  Arnaud Bouchez
  ASiwon
  Aweste
  Bas Schouten
  BigStar
  Cheemeng
  CoMPi
  Damien (ddemars)
  Daniel Kuettner
  David Mead (MDW)
  Delphinium (louisyeow)
  DigDiver
  Dominikcz
  EgorovAlex
  Emanuele (lele9)
  Eric Grange
  Esmond
  Esteban Martin (EMartin)
  Eva Freimann (EVaF)
  Goran Despalatovic (gigo)
  Jean-Baptiste Roussia (jbroussia)
  Joe (jokusoft)
  Johan Bontes
  Jordi Tudela
  Leon Oosthuizen
  Maciej Izak (hnb)
  Mario Moretti
  Marius Maximus (mariuszekpl)
  Martin Eckes
  Martin Suer
  Mazinsw
  MChaos
  Miab3
  Michael (EgonHugeist)
  MilesYou
  Mingda
  Nzsolt
  Ondrej (reddwarf)
  Pavel (mpv)
  Pierre le Riche
  RalfS
  Richard6688
  Sabbiolina
  Sanyin
  Sinisa (sinisav)
  Sllimr7139
  SSoftPro
  Stefan (itSDS)
  Transmogrifix
  Uian2000
  Vaclav
  Vadim Orel
  Willo vd Merwe
  Win2014
  Wloochacz
  Wolfgang Ehrhardt
  Yoanq
  Ysair
  Zed

[See below if you upgrade from 1.17 revision]

  
Synopse mORMot is an Open Source Client-Server ORM SOA MVC framework
for Delphi 6 up to Delphi 10.2 Tokyo and FPC, targeting Windows/Linux
for servers, and any platform for clients (including mobile or AJAX).

The main features of mORMot are therefore:

 - ORM/ODM: objects persistence on almost any database (SQL or NoSQL);
 - SOA: organize your business logic into REST services;
 - Clients: consume your data or services from any platform, via ORM/SOA APIs;
 - Web MVC: publish your ORM/SOA process as responsive Web Applications.

With local or remote access, via an auto-configuring Client-Server REST design.

Due to its modular design, switch from a Client-Server architecture over
HTTP, named pipes or GDI messages into a stand-alone application is just
a matter of mORMot classes initialization.
For instance, the very same executable can even be running stand-alone,
as a server, as a service, or a client, depending on some run-time parameters!

Emphasizing simplicity, speed and versatility, mORMot is a incredibly well
documented Open Source project easy enough to add basic ORM or Client-Server
features to simple applications for hobbyists, or let experienced users
develop scaling and strong service-based projects for their customers, with
the advantages of native code and easy-to-deploy solutions, reducing
deployment cost and increasing ROI.

It provides an Open Source self-sufficient set of units (even Delphi starter
edition is enough) for creating any application, from a stand-alone solution
up to the most complex Domain-Driven Design (DDD):

 - Presentation layer featuring MVC UI generation with i18n and reporting
 (with pdf export) for rich Delphi clients, MVC web clients (with logic-less
 Mustache templates) or rich AJAX clients (via native JSON/REST access);

 - Application layer implementing Service Oriented Architecture via
 interface-based services (like WCF) and Client-Server ORM (including 
 method-based services) - following a RESTful model using JSON over several
 communication protocols (e.g. HTTP/1.1);

 - Domain Model layer handling all the needed business logic in plain Delphi
 objects, including high-level managed types like dynamic arrays or records
 for Value Objects, dedicated classes for Entities or Aggregates, and variant
 storage with late-binding for dynamic documents;

 - Data persistence infrastructure layer with ORM operations on direct
 Oracle, MS SQL, OleDB, ODBC, ZEOS/ZDBC access or any TDataSet provider (e.g.
 FireDAC/AnyDAC, UniDAC, NexusDB, BDE...), with a powerful SQLite3 kernel,
 and optional SQL access if needed, with amazing performance and advanced
 features like Array DML, auto-generating SQL for SQLite3, Oracle, 
 Jet/MSAccess, MS SQL, Firebird, DB2, PostgreSQL, MySQL and NexusDB - and
 alternative high-speed MongoDB NoSQL database access for ODM persistence;

 - Cross-Cutting infrastructure layers for handling data filtering and
 validation, security (e.g. Windows authentication or any custom model),
 caching, logging and testing (framework uses test-driven approach and
 features interface stubbing and mocking).

With mORMot, ORM/ODM is not used only for data persistence of objects (like
in other implementations), but as part of a global n-Tier, Service Oriented
Architecture (SOA), ready to implement Domain-Driven solutions. This
framework is not an ORM on which a transmission layer has been added, like
almost everything existing in Delphi, C# or Java: this is a full Client-Server 
ORM/SOA from the ground up.
This really makes the difference.

The business logic of your applications will be easily exposed as Services,
and will be accessible from light clients (written in Delphi or any other
mean, including AJAX).
The SpiderMonkey JavaScript engine has been integrated on the server side
and can be used to define business rules or any process (including MVC web
rendering) - just like node.js, but with a multi-threaded core, and the
full power of our optimized Delphi libraries at hand.

The framework Core is non-visual: you will get everything you need in a
consistent set of classes to be used from code. In order to let you focus
on your business, using mORMot's KISS/DRY/SOC/YAGNI/TDD and Convention Over
Configuration patterns. But you have also some UI units available (including
screen auto-generation, reporting and ribbon GUI), and you can use it from
any RAD, web, or AJAX clients (via JavaScript or Smart Mobile Studio).

No dependency is needed on the client side (no DB driver, or third-party
runtime): it is able to connect via standard HTTP, even through a corporate
proxy or a VPN. Rich Delphi clients can be deployed just by copying and running
a stand-alone small executable, with no installation process. Stream can be
encrypted via HTTS or with proven SHA/AES-256. Endpoints are configured
automatically for each published interface on both server and client sides,
and creating a load-balancing proxy is a matter of one method call.
Speed and scalability has been implemented from the ground up: a genuine
optimized multi-threaded core let a single server handle more than 50,000
concurrent clients, faster than DataSnap, WCF or node.js, and our rich SOA
design is able to implement both vertical and horizontal scalable hosting,
using recognized enterprise-level SQL or NoSQL databases for storage.

Even if mORMot will be more easily used in a project designed from scratch,
it fits very well the purpose of evolving any existing Delphi project, or
creating the server side part of an AJAX application.

Licensed under a disjunctive tri-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.

Main project page:
http://mORMot.net

Documentation:
https://synopse.info/files/html/Synopse%20mORMot%20Framework%20SAD%201.18.html

Installation:
https://synopse.info/files/html/Synopse%20mORMot%20Framework%20SAD%201.18.html#TITL_113

FAQ:
https://synopse.info/files/html/Synopse%20mORMot%20Framework%20SAD%201.18.html#TITL_123

How to get the source:
https://synopse.info/fossil/wiki?name=Get+the+source

A forum is dedicated to support:
https://synopse.info

A blog is available:
http://blog.synopse.info

Issues and feature requests can be posted (take a look at the forums
and latest unstable version first!):
https://synopse.info/fossil/reportlist

You can also monitor/fork our projects on GitHub:
https://github.com/synopse/mORMot

You may also install it as a Delphinus package: Delphinus-Support

Don't forget to download the documentation (available online or as pdf files,
created by our SynProject tool).
In particular, you should take a look at all general introduction chapters
of the SAD document. It will cover all key-concepts and code modelling
used by the framework.
A developer guide is included in this SAD document, in its 2nd part. You'll
get good practice guidance, presentation of the ORM/SOA approach and other
underlying concepts.

Feel free to contribute by posting enhancements and patches to this
quickly evolving project.
  
Enjoy!


Some units (e.g. SynPdf, SynGdiPlus, SynBigTable, SynCommons, SynCrypto, 
SynDB*, SynSQLite3, SynMongoDB, SynMustache, SynSM, mORMotReport) are used 
by mORMot, but do not require the whole framework to be linked.
That is, you can use e.g. only  PDF generation, SynDB fast database
access, a static-linked SQLite3 engine, direct MongoDB access, Mustache
templates, SpiderMonkey JavaSCript engine, code-generated reports, or 
the TDocVariant, TDynArray, TSynLog classes of SynCommons, without using
the main mORMot units and features (ORM, Client-Server, services, UI).

Some of those units can even be compiled with Delphi 5 (e.g. SynPdf, SynDB).


Quick Steps when upgrading from a previous 1.17 revision:

1) Note that some units where renamed, and some breaking changes introduced
   by some enhanced features, therefore a direct update is not possible

2) Erase or rename your whole previous #\Lib directory

3) Download latest 1.18 revision files as stated just above
  
4) Change your references to mORMot units:
 - Add in your uses clause SynLog.pas and/or SynTests.pas if needed;
 - Rename in your uses clause any SQLite3Commons reference into mORmot;
 - Rename in your uses clause any SQLite3 reference into mORMotSQLite3;
 - Rename in your uses clause any other SQlite3* reference into mORMot*;
 - Add in one uses clause a link to SynSQLite3Static (for Win32).
 
5) Consult the units headers about 1.18 for breaking changes, mainly:
 - TSQLRecord.ID: TID primary key, TIDDynArray, and TRecordReference are now Int64;
 - Renamed Iso8601 low-level structure as TTimeLogBits;
 - TJSONSerializerCustomReader/Writer callbacks changed;
 - TSQLRestServerCallBackParams replaced by TSQLRestServerURIContext class;
 - TSQLRestServerStatic* classes renamed as TSQLRestStorage*;
 - rmJSON* enums replaced by TSQLRestRoutingREST/JSON_RPC classes;
 - Changed '¤' into '~' character for mORMoti18n language files.