About MGateway Ltd
We're a UK-based software development company. Since 1993, we've been developing tools, interfaces and frameworks for both the front-end and back-end of the Web Technology stack.
We also specialise in software tools, interfaces and frameworks to allow the ultra high-performance Global Storage databases (eg InterSystems IRIS and the Open Source YottaDB database) to operate at the back-end Web Applications.
Who We Are
All of MGateway's products are the work of Rob Tweed and Chris Munt.
Rob specialises in:
- front-end JavaScript tools and frameworks
- QEWD: a back-end framework for Node.js
- back-end application development tools for Global Storage databases
Chris specialises in:
- high-performance interfacing products for Node.js
- database technologies, particularly Relational
- language interfaces for Global Storage databases
Contact And Follow Us
Rob:
: rtweed@mgateway.com
: @rtweed
: Github: @robtweed
Chris:
: cmunt@mgateway.com
: @chrisemunt
: Github: @chrisemunt
Use of Cookies and Privacy Policy
Our Web Site does not use cookies.
View/Download our Privacy Policy Document
About QEWD
QEWD is an Open Source Node-js-based framework for rapid and easy development of database-linked back-ends for both interactive and REST-based web applications.
QEWD is designed to operate with Global Storage databases (eg InterSystems IRIS and the Open Source YottaDB database). This is achieved using a very high performance in-process interface (mg-dbx) and QEWD's unique queue and child process architecture that allows for very high scalability.
QEWD can operate as either a single monolithic application or as a set of inter-operating MicroServices.
Furthermore you can deploy and run QEWD either natively with Node.js, or using our pre-packaged, ready-to-run Docker version (which comes bundled with a pre-configured copy of the YottaDB database and whose only dependence is Docker).
Finding Out More About QEWD
The best place to start is the QEWD Repository on Github.
QEWD Licensing and Costs
QEWD is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that QEWD does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Rob if you want to discuss paying for technical support and maintenance for QEWD:
About mgweb-server
mgweb-server is a framework that allows you to quickly and simply build out JSON-based REST APIs for the following Global Storage database technologies:
mgweb-server makes use of the mg_web interface.
The Target Audience For mgweb-server
mgweb-server is designed for anyone who has previously used older web interfaces (eg WebLink, mgwsi etc) for Caché or YottaDB.
mgweb-server should be of particular interest to anyone who wants to migrate their legacy WebLink Developer or EWD-based web applications from Caché to IRIS, since WebLink is no longer supported in IRIS.
What Does mgweb-server Actually Do?
mgweb-server looks after all the low-level parts of the mg_web interface, and provides you with a simple pattern for your REST API development. If you follow the mgweb-server API pattern, then your REST APIs should just work for you.
mgweb-server can be run either natively or using our pre-built, ready-to-run Docker Container. Even if you choose to build and run it natively, then you'll find that mgweb-server provides you with pre-built versions of all the necessary resources needed to operate with the mg-web interface. Either way, mgweb-server is the quickest way to get started with the mg-web interface!
Finding Out More About mgweb-server
The best place to start is the mgweb-server Repository on Github.
mgweb-server Licensing and Costs
mgweb-server is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mgweb-server does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Rob if you want to discuss paying for technical support and maintenance for mgweb-server:
About EWD
EWD is one of our legacy products, although we can still provide support for it.
EWD is a server-side framework written in the M language that allows you build web applications REST for the following Global Storage database technologies:
EWD was originally designed to make use of the WebLink, CSP and mgwsi interface gateway products, but can also now be used with our more modern mg_web interface.
Note: For anyone who previously used, or has been researching our EWD.js product, please note that this has now been superceded by QEWD. We no longer provide support for the EWD.js product and encourage you to migrate to QEWD.
The Target Audience For EWD
EWD is designed for developers who wish to build server-side web applications using the M language, or for users of InterSystems database products wanting to use its native ObjectScript language.
EWD runs on the database server and dynamically generates the pages and markup fragments that are delivered to a user's browser. Session management and persistence are handled on the database server by EWD.
EWD's Pedigree
EWD has been in daily business-critical use at a number of major sites around the world since around 2005, including the what is believed to be the world's largest internet-facing application run by an InterSystems customer.
EWD is a tried and tested professional-grade technology that has proven to be highly reliable, performant, scalable and secure.
Finding Out More About EWD
We no longer make the EWD documentation, nor the version for InterSystems' products available for free. Please contact us if you are interested in using EWD with their IRIS or Caché databases.
Alternatively, you can obtain the Open Source version (which is specifically designed for use with YottaDB) from the EWD Repository on Github.
EWD Licensing and Costs
The YottaDB-specific version of EWD is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that EWD does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Access to EWD documentation is also no longer free of charge.
Contact Rob if you want to discuss paying for access to documentation, technical support and/or maintenance for EWD:
MetaStatic: A Framework for Modern Static Web Sites
MetaStatic is our latest technology, designed to provide a solution for anyone needing a web site that can make use of the latest modern UI designs, but doesn't require a technical specialist when you need to update the site and/or maintain its content.
The Problem
You're an organisation, a small business, a club or society, and you need a Web Site. Where do you turn?
JavaScript Frameworks
Many people end up using complex JavaScript frameworks such as React, Vue or Angular, to create what are actually just static Web Sites where the content is largely fixed and only occasionally updated.
This isn't perhaps so much of an issue if the maintainer of such a Web Site is technically well-versed in such a framework, but, more often than not, the maintainer is someone else in the organisation who has little or no detailed technical or programming expertise, but is more focused on ensuring that the content required for the site is accurate and kept up to date. Such a Web Site maintainer will find it difficult to learn and understand the complexities involved when changes need to be made, and, nine times out of ten will need to go back to the original developer (if they are still available!) in order to make the change.
In any case, the use of such frameworks to create such Web Sites is often an unnecessary "sledgehammer to crack a nut".
Furthermore, such a site will typically be slow to load and start for users, because it will require potentially huge files of JavaScript to be loaded into the browser before anything can begin to be rendered.
And just to add insult to injury, Web Sites developed using JavaScript frameworks that dynamically build the markup by manipulating the page DOM can be difficult for web crawlers to properly and fully process and index the content for search engines to use, resulting in sub-optimal Search Engine Optimisation (SEO).
Content Management Systems
For Web Sites that require maintenance of a lot of content that can change over time, the usual solution is to use a Content Management System (CMS). This requires specific technical skills and a potentially steep learning curve, and often the cost of a license for the CMS and/or associated database. The latter database may also need technical maintenance (eg backup, restore etc), again requiring specific technical expertise.
As a result, many Web Site maintainers turn to commercial packaged solutions such as Wordpress, Wix, Squarespace etc, most of which incur licensing or subscription costs and/or remote/cloud hosting, and potentially constraining the look and feel of the Web Site. Migrating between such services can also be problematic, so vendor lock-in is a real risk of such a solution.
CSS/JavaScript Templates
Meanwhile, there are a great many pre-built templates that can be used to create complex, modern, responsive user interfaces for static web sites, with the entire content and functionality delivered as a single HTML page. See for example:
Templates such as these don't require anything other than their own pre-defined CSS stylesheets and some behaviour-specific JavaScript files. They don't require React, Vue, Angular or any other build and runtime framework. As a result they are incredibly fast to load and run, and, being static HTML files, can be crawled and indexed completely for use by all search engines.
Whilst impressive in terms of their look and feel and functionality, tailoring such templates for a specific use case is, however, time-consuming, error-prone and fiddly, and requires a good understanding of HTML and JavaScript. For a full web site, the page would be huge, and making content changes would require scanning or searching the HTML page and editing in situ. More complex modifications, such as adding or changing new menu options, tabbed panels or content sections would probably be beyond the skills of a basic Web Site maintainer and would be a cumbersome task.
The Solution
MetaStatic!
Advance to the next carousel panel to find out more!
The MetaStatic Solution
Breaking Down Modern UI Templates into Re-Usable Building Blocks
The thinking behind MetaStatic is: what if it was possible for a technically skilled developer to break down such templates into a hierarchy of high-level building blocks - Meta Tags - that represent the individual elements or components (eg the backdrop, the menus, tab controls, carousels etc) from which that template is constructed? Armed with a library of such Meta Tags, a relatively unskilled Web Site maintainer could then define their own spefically-customised version that conforms to the template, but containing their own content and using a much simpler and intuitive shorthand description summarising the bulding blocks and content needed for their specific site.
The idea would be to process such a high-level Meta Tag description and generate a user-specific version of the template HTML that could be loaded into the browser. If any changes were made to the Meta Tag description, simply re-running the build process would create an updated version of the HTML file needed for the Web Server.
The technical expertise required to build a Meta Tag library for a particular template would be a one-off expert task. However, the resulting Tag Library could then be used repeatedly and easily by any number of Web Site maintainers who would not require particularly detailed technical skills.
Content Management
Furthermore, if the text content of the Web Site could be held separately, maintained in simple text files in a directory, using the now widely used and easily understood Markdown syntax (using any convenient editor from nano upwards!), then this content could be pulled in at build time for inclusion in the final template file. All this would require is a simple file naming convention and the ability to reference the corresponding file name in a Meta Tag that made use of that content.
No database would be needed, and no license or subscription fees needed. All that would be needed would be a basic understanding of a server's directory structure and the ability to use a text editor and devise a simple file nomeclature convention.
Combine These Two Ideas
And you get MetaStatic! It's a new and deceptively simple, but extremely powerful way to create and maintain static Web Sites of any size and complexity, without the need for any complex JavaScript frameworks, CMS, database or build chain.
-
A technically skilled developer can create and maintain MetaStatic Tag Library: essentially a one-off process;
-
Anyone else with just basic IT skills (editing text files, understanding HTML Tag Syntax, understanding MarkDown syntax) can use the Tag Library like Lego Bricks, to construct their particular Web Site, and maintain their content in simple text files using Markdown syntax.
Want an Example?
You're looking at one!
We've used MetaStatic ourselves to create and maintain this Web Site. We've made use of a MetaStatic Tag Library that we've created (and which is freely available for use by anyone else) that is based on the SBAdmin UI template.
You'll see that this site:
-
is fully navigable: you can retrace your steps with the back button (mobile browsers: use the back button in the banner)
-
has text search built in
These features have been automatically built into our sbadmin Meta Tag Library, so they are automatically available to anyone else who wants to build their Web Site using it!
You'll also have seen how quickly our web site loads: nearly instantaneous! Compare that to most Web Sites you've visited recently!
Want to Find Out More About MetaStatic?
You'll find all the information you need, including a full tutorial in the MetaStatic Repository on Github.
It's a free, Apache-2-licensed Open Source solution, so there's nothing to stop you using it for your Web Site!
Golgi: WebComponent Assembly Framework
Golgi (pronounced Gol-jee) is a new approach to browser-based User Interface (UI) development that makes use of the latest Web Technologies, in particular WebComponents, ES6 Modules, and Proxies.
Golgi allows you to build UIs using WebComponents as composable units, abstracted as XML/XHTML tags and delivered progressively on-demand, without the need for a time-consuming bundling/compilation step, and without the need for Node.js, WebPack or large, complex build chains during development or deployment.
Golgi is a buildless framework. Just develop and go, edit and go!
The Target Audience For Golgi
Golgi is designed for anyone who is interested in using the latest Web Platform technologies, in particular WebComponents.
Golgi is simple to use, fast to develop with, yet incredibly powerful. It's the easiest way to use and discover the power of WebComponents.
Golgi is a fast, lightweight and modern alternative to the heavyweight frameworks such as React, Angular and Vue that rely on third-party components. If you're tired of complex build chains and tedious, time-consumimg compilation/build steps in your workflow, you definitely need to check out Golgi.
Finding Out More About Golgi
The best place to start is the Golgi Repository on Github, where you'll find detailed documentation, examples and a live demonstration.
Golgi Licensing and Costs
Golgi is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that Golgi does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Rob if you want to discuss paying for technical support and/or maintenance for Golgi:
DPP: Persistent JSON in your Browser
Deep Persistent Proxy (DPP) is a JavaScript module that runs entirely locally within the browser, and which allows you to create and maintain JavaScript objects/JSON that will persist automatically between browser sessions.
Next time you start a browser session, any persistent objects you define will be restored to their previous state automatically, as if by magic!
Example
Here's a simple example of DPP in action, using this JavaScript in the browser:
// import and start DPP:
const {createDPP} = await import('https://cdn.jsdelivr.net/gh/robtweed/DPP/src/dpp_browser.min.js');
let dpp = await createDPP({storeName: 'demo'});
let myObj = await dpp.start();
// initialise a persistent DPP Object:
if (!myObj.counter) myObj.counter = 0;
if (!myObj.arr) myObj.arr = [];
// increment the counter and update the array within the persistent Object
myObj.counter++;
myObj.arr.push({
time: Date.now()
});
//
console.log('myObj: ' + JSON.stringify(myObj));
See how the counter increments and the array grows in the myObj Object automatically each time you reload the page in the browser!
How does DPP Manage To Do That?
DPP uses the browser's built-in indexedDB database to maintain a persistent image of your JavaScript object(s).
DPP also makes use of JavaScript Proxy Objects, allowing changes to your object(s) to be trapped and recorded to indexedDB automatically, asynchronously and silently behind the scenes.
Furthermore, you don't need to know anything about indexedDB to use DPP!
Finding Out More About DPP
The best place to start is the DPP Repository on Github.
DPP Licensing and Costs
DPP is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that DPP does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Rob if you want to discuss paying for technical support and/or maintenance for DPP:
QOper8: WebWorkers Made Easy
QOper8 is a JavaScript Module that provides a simple yet powerful way to use and manage WebWorkers in your browser applications.
QOper8 allows you to define a pool of WebWorkers, to which messages that you create are automatically dispatched and handled.
QOper8 manages the WebWorker pool for you automatically, bringing them into play and closing them down based on demand, and allows you to determine how long a WebWorker process will persist.
Why WebWorkers, and Why QOper8?
WebWorkers are a great way to offload processing from your main browser thread of execution. If your front-end involves any heavy and/or long-running computation, or anything else that will potentially slow down the performance of your user interface, you can divert such work to one or more WebWorkers within the browser.
Setting up WebWorkers manually to do your computation is somewhat convoluted, particularly if you need more than one of them and/or need to perform more than one task in WebWorkers.
That's where QOper8 comes in. It simplifies the whole process, and gives you a quick, easy and flexible way to use WebWorkers to their full potential, regardless of how and why you want to use them.
Finding Out More About QOper8
The best place to start is the Qoper8 Repository on Github.
QOper8 Licensing and Costs
QOper8 is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that QOper8 does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Rob if you want to discuss paying for technical support and/or maintenance for QOper8:
glsdb: Persistent Objects for Node.js and Bun.js
Imagine having JavaScript Objects in Node.js or Bun.js that actually reside in a database. Imagine not having to know anything about the database, and not having to know or use any database APIs for reading and writing those Objects. Imagine any changes you made to those Objects were automatically persisted behind the scenes.
It may sounds like a pretty wild idea, but that's exactly what glsdb does!
Not only that, but because glsdb makes use of the extremely high-performance Global Storage Databases behind the scenes together with the ultra high-performance mg-dbx-napi interface, the read/write performance of glsdb's persistent Objects is not disimilar to in-memory Objects.
glsdb In Action
If you use glsdb's Proxy Object APIs, then there's barely any difference between using in-memory and glsdb persistent Objects.
For example, let's create a persistent Person record:
// instantiate two glsdb persistent objects
let personId = new glsdb.node('PersonIdentifier').proxy;
let person = new glsdb.node('Person').proxy;
// increment the persistent person identifier
personId.id++;
let id = personId.id.valueOf();
// create an in-memory JSON data object
const record = {
firstName: 'Rob',
lastName: 'Tweed',
title: 'Dr',
address: {
houseNumber: 5,
streetName: 'High Street',
city: 'Redhill',
county: 'Surrey',
postCode: 'RH1 2AB',
country: 'UK'
},
telephone: {
mobile: '07654 987654',
landline: '01737 123456'
},
favouriteColours: ['blue', 'green']
};
// save it as a persistent objct
person[id] = record;
Later on we might want to retrieve it into an in-memory object:
let person = new glsdb.node('Person').proxy;
let record = person[1].valueOf();
But because every key/value within a glsdb on-disk Object is actually directly accessible (to both read or write), if we just wanted the firstname and lastname property on-disk values, we could do this:
let person = new glsdb.node('Person.1').proxy;
let name = person.firstName.valueOf() + ' ' + person.lastName.valueOf();
// Rob Tweed
glsdb blurs the boundary between database and JavaScript Objects: a truly game-changing concept!
Finding Out More About glsdb
The best place to start is the glsdb Repository on Github where you'll find detailed documentation and tutorials.
glsdb Licensing and Costs
glsdb is available free of charge as an Apache 2-licensed Open Source package for Node.js and Bun.js.
Note, however, that glsdb does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Rob if you want to discuss paying for technical support and/or maintenance for glsdb:
QOper8-wt: Node.js Worker Threads Made Easy
QOper8-wt is a JavaScript Module that provides a simple yet powerful way to use and manage Node.js or Bun.js Worker Threads.
QOper8-wt allows you to define a pool of Worker Threads, to which messages that you create are automatically dispatched and handled.
QOper8-wt manages the Worker Thread pool for you automatically, bringing them into play and closing them down based on demand, and allows you to determine how long a Worker Thread will persist.
Why Worker Threads, and Why QOper8-wt?
Worker Threads are a great way to offload processing from your main Node.js thread of execution. If your processing involves any heavy and/or long-running computation, or anything else that will potentially slow down the performance of your main Node.js process, you can divert such work to one or more Worker Threads.
Setting up Worker Threads to do your computation is somewhat convoluted, particularly if you need more than one of them and/or need to perform more than one task in a Worker Thread.
That's where QOper8-wt comes in. It simplifies the whole process, and gives you a quick, easy and flexible way to use Worker Threads to their full potential, regardless of how and why you want to use them.
Finding Out More About QOper8-wt
The best place to start is the Qoper8-wt Repository on Github.
QOper8-wt Licensing and Costs
QOper8-wt is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that QOper8-wt does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Rob if you want to discuss paying for technical support and/or maintenance for QOper8-wt:
QOper8-cp: Node.js Child Processes Made Easy
QOper8-cp is a JavaScript Module that provides a simple yet powerful way to use and manage Node.js Child Processes.
QOper8-cp allows you to define a pool of Child Processes, to which messages that you create are automatically dispatched and handled.
QOper8-cp manages the Worker Thread pool for you automatically, bringing them into play and closing them down based on demand, and allows you to determine how long a Worker Thread will persist.
Why Child Processes, and Why QOper8-cp?
Node.js Worker Threads and Child Processes are great ways to offload processing from your main Node.js thread of execution. If your processing involves any heavy and/or long-running computation, or anything else that will potentially slow down the performance of your main Node.js process, you can divert such work to one or more Worker Threads or Child Processes.
Worker Threads are the more lightweight and performant option, and should be used where possible (in which case our QOper8-wt module is recommended). However, sometimes you need a full-blown Child Process, for example, if you are connecting it to a resource that is not thread-safe.
Setting up Child Processes to do your computation is somewhat convoluted, particularly if you need more than one of them and/or need to perform more than one task in a Worker Thread.
That's where QOper8-cp comes in. It simplifies the whole process, and gives you a quick, easy and flexible way to use Child Processes to their full potential, regardless of how and why you want to use them.
Finding Out More About QOper8-cp
The best place to start is the QOper8-cp Repository on Github.
QOper8-cp Licensing and Costs
QOper8-cp is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that QOper8-cp does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Rob if you want to discuss paying for technical support and/or maintenance for QOper8-cp:
Using JSON to transform JSON
qewd-transform-json is a JavaScript package that provides a simple yet powerful declarative approach to transforming JSON documents from one format into another.
The use case for which it's designed is where you're doing repetitive processing that involves instances of a particular JSON document format being converted into some other JSON format.
qewd-transform-json takes an instance of an input JavaScript object, and transforms it to a new output JavaScript object, using rules defined in a template object which is, itself, a JSON document.
qewd-transform-json does this by providing a simple JSON-compatible syntax for describing the transformation rules.
It's a completely declarative, JSON-based approach to JSON transformation that can be used in the browser or server-side in Node.js or Bun.js.
node-runner: A Node.js Docker Scratchpad
Have you ever wanted to be able to run Node.js code without actually having to install Node.js on your hardware?
If so, then all you need is Docker and our node-runner Container! It creates a temporary run-time scratchpad run-time Node.js environment for you to use.
node-runner is a pre-built Docker Container built around the latest production version of Node.js (version 20 right now), that allows you to write script files in JavaScript on your Docker host machine, and run them within the Docker Container.
node-runner can also be started as an interactive shell, allowing you to directly use the Container's Node.js REPL.
node-runner can therefore be used as a "no-install" Node.js scratchpad for testing and experimentation.
Try it Out
If yyou're running on an Intel platform and you've already installed Docker, then you can try out node-runner.
- Pull a copy from docker.io:
docker pull rtweed/node-runner
- Create a work directory, eg:
mkdir nodetest
cd nodetest
- Create a file named node-script.js in this work directory, and create JavaScript module containing the code you want to run, eg:
module.exports = function() {
const { version } = require('node:process');
console.log('*** This is my script! ***');
console.log('Running in Node.js ' + version);
};
- Now you can run your script in the node-runner scratchpad:
docker run -it --name node-runner --rm -v ~/nodetest:/node rtweed/node-runner
Finding Out More About node-runner
The best place to start is the node-runner Repository on Github.
node-runner Licensing and Costs
node-runner is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that node-runner does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Rob if you want to discuss paying for technical support and/or maintenance for node-runner:
About mg-dbx-napi
mg-dbx-napi is a Node.js module providing extremely high-performance access to Global Storage Databases:
mg-dbx-napi can provide extremely high-performance access from Node.js or Bun.js:
-
to a local or remote installation of the database over a network connection
-
for the ultimate in performance, to a local database installation via the database API.
By way of example, on a standard M1 Mac Mini, over 1.5 million key/value pairs per second can be written, and over 2 million per second can be read. This is a level of JavaScript database performance that is orders of magnitude faster than the commonly used mainstream databases, even Redis!
Accessing Database Resources from Node.js
mg-dbx-napi allows Node.js code to seamlessly:
- access data held in a Global Storage database
- invoke functions written in the M or ObjectScript language.
mg-dbx-napi also supports direct access to SQL within the database server.
If you're using an InterSystems database, mg-dbx-napi also provides full access to ObjectScript classes.
Building Back-end Applications With mg-dbx-napi
You can build your own bespoke Node.js-based systems with mg-dbx-napi.
However, you can save a lot of time and effort by building Node.js- or Bun.js-based applications using our glsdb abstraction which is built on top of the mg-dbx-napi APIs.
Also take a look at our mg-showcase repository which shows other examples of the use of mg-dbx-napi.
Finding Out More About mg-dbx-napi
The best place to start is the mg-dbx-napi Repository on Github.
mg-dbx-napi Licensing and Costs
mg-dbx-napi is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg-dbx-napi does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg-dbx-napi:
mg-dbx-bdb: Interface for the Berkeley DB and LMDB Databases
mg-dbx-bdb is a Node.js module providing high-performance synchronous and asynchronous access to the following embedded database technologies:
- Berkeley DB (BDB).
- Lightning Memory-Mapped Database Manager (LMDB)
mg-dbx-bdb provides access from JavaScript code running in Node.js to the BTree datastore functionality provided by these two databases. In doing so, mg-dbx-bdb implements an emulation of the uniquely powerful Global Storage database model layered on top of BDB and/or LMDB.
Finding Out More About mg-dbx-bdb
The best place to start is the mg-dbx-bdb Repository on Github.
mg-dbx-bdb Licensing and Costs
mg-dbx-bdb is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg-dbx-bdb does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg-dbx-bdb:
mongo-dbx: Synchronous and Asynchronous interface for MongoDB
mongo-dbx is a Node.js module providing both synchronous and asynchronous high-performance access to the MongoDB database
Finding Out More About mongo-dbx
The best place to start is the mongo-dbx Repository on Github.
mongo-dbx Licensing and Costs
mongo-dbx is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mongo-dbx does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mongo-dbx:
tcp-netx: Synch & Asynch TCP Interface
tcp-netx is a Node.js module providing both synchronous and asynchronous access to client-side TCP sockets.
tcp-netx allows Node.js code to interact directly with TCP servers using basic read and write methods.
tcp-netx also provides higher level methods for interacting with HTTP servers.
Finding Out More About tcp-netx
The best place to start is the tcp-netx Repository on Github.
tcp-netx Licensing and Costs
tcp-netx is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that tcp-netx does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for tcp-netx:
mg_web: Web Server Extension for Global Storage Databases
mg_web is a high-performance extension for the major industry-strength Web Servers:
- NGINX
- Apache
- Microsoft IIS
mg_web allows you to design and implement REST APIs that make use of data stored in Global Storage Databases, eg:
- [InterSystems IRIS](https://www.intersystems.com/products/intersystems-iris/
- YottaDB
mg_web also supports InterSystems' older Caché database technology and can be used as a modern substitute for its legacy Web Gateway technologies such as WebLink.
mg_web is highly configurable. REST API handlers can be written in:
- the M or ObjectScript languages that are natively supported on Global Storage databases
- JavaScript, using a custom server interface that is included with mg_web
mg_web can connect to Global Storage databases in two ways:
-
to a local or remote installation of the database via a network connection
-
for the ultimate in performance, to a local database installation via an in-process connection via the database API.
mg_web will automatically use and maintain a pool of Web Server child processes to handle any oncoming load.
Building Back-end Applications With mg_web
You can build your own bespoke systems with mg_web, or migrate existing ones to work with it:
-
you can "roll your own" M-based or ObjectScript-based applications, building out REST APIs that execute in the native language that comes with Global Storage databases. However, if you're taking this approach, you'll find that you can save a considerable amount of time by using our mgweb-server package.
-
you can build your own JavaScript-based REST APIs, connecting to IRIS or YottaDB using our mg-dbx-napi interface and glsdb "persistent Object" abstraction.
-
migrating legacy WebLink applications to IRIS
If you have any legacy applications running on InterSystems' Caché that use the WebLink interface, you're probably looking for a migration solution for IRIS: WebLink is not supported by InterSystems on IRIS.
mg_web provides the solution you need: it can exactly emulate the behaviour of WebLink, allowing you to run your legacy WebLink applications unchanged on IRIS. We have helped several large InterSystems customers to migrate such applications.
Furthermore, you can then use mg_web to simultaneously support new REST APIs, allowing a gradual migration from WebLink to a more modern web architecture.
Finding Out More About mg_web
The best place to start is the mg_web Repository on Github.
mg_web Licensing and Costs
mg_web is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg_web does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg_web:
mg_php: Access IRIS and YottaDB from PHP
mg_php is an extension to the PHP language providing high-performance access to the M language and database environment.
mg_php is designed to operate with both YottaDB and all InterSystems database products (ie Caché and IRIS).
mg_php provides extremely high-performance access from PHP:
-
to a local or remote installation of the database over the network
-
to a local database installation via its API.
Accessing Global Storage Databases from PHP
mg_php allows PHP code to seamlessly:
-
access data held in an M or Global Storage database:
-
invoke functions written in their native M or ObjectScript language.
If you're using an InterSystems database, mg_php also provides full access from PHP to ObjectScript classes.
Additionally, mg_php can project PHP associative arrays into equivalent M Global structures and vice versa.
Finding Out More About mg_php
The best place to start is the mg_php Repository on Github.
mg_php Licensing and Costs
mg_php is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg_php does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg_php:
mg_python: Access IRIS and YottaDB from Python
mg_python is a language binding that provides high-performance access from within Python to the M language and database environment.
mg_python is designed to operate with both YottaDB and all InterSystems database products (ie Caché and IRIS).
mg_python provides extremely high-performance access from Python:
-
to a local or remote installation of the database over the network; and/or
-
to a local database installation via its API.
Accessing Global Storage Databases from Python
mg_python allows Python code to seamlessly:
-
access data held in an M or Global Storage database:
-
invoke functions written in their native M or ObjectScript language.
If you're using an InterSystems database, mg_python also provides full access from Python to ObjectScript classes.
Finding Out More About mg_python
The best place to start is the mg_python Repository on Github.
mg_python Licensing and Costs
mg_python is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg_python does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg_python:
mg_go: Access IRIS and YottaDB from Go
mg_go is a language binding that provides high-performance access from within Go to the M language and database environment.
mg_go is designed to operate with both YottaDB and all InterSystems database products (ie Caché and IRIS).
mg_go provides extremely high-performance access from Go:
-
to a local or remote installation of the database over the network; and/or
-
to a local database installation via its API.
Accessing Global Storage Databases from Go
mg_go allows Go code to seamlessly:
-
access data held in an M or Global Storage database:
-
invoke functions written in their native M or ObjectScript language.
If you're using an InterSystems database, mg_go also provides full access from Go to ObjectScript classes.
Finding Out More About mg_go
The best place to start is the mg_go Repository on Github.
mg_go Licensing and Costs
mg_go is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg_go does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg_go:
mg_ruby: Access IRIS and YottaDB from Ruby
mg_ruby is a language binding that provides high-performance access from within Ruby to the M language and database environment.
mg_ruby is designed to operate with both YottaDB and all InterSystems database products (ie Caché and IRIS).
mg_ruby provides extremely high-performance access from Ruby:
-
to a local or remote installation of the database over the network; and/or
-
to a local database installation via its API.
Accessing Global Storage Databases from Ruby
mg_Ruby allows Ruby code to seamlessly:
-
access data held in an M or Global Storage database:
-
invoke functions written in their native M or ObjectScript language.
If you're using an InterSystems database, mg_ruby also provides full access from Ruby to ObjectScript classes.
Finding Out More About mg_ruby
The best place to start is the mg_ruby Repository on Github.
mg_ruby Licensing and Costs
mg_ruby is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg_ruby does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg_ruby:
About mg-dbx-napi
mg-dbx-napi is a Node.js module providing extremely high-performance access to Global Storage Databases:
mg-dbx-napi can provide extremely high-performance access from Node.js or Bun.js:
-
to a local or remote installation of the database over a network connection
-
for the ultimate in performance, to a local database installation via the database API.
By way of example, on a standard M1 Mac Mini, over 1.5 million key/value pairs per second can be written, and over 2 million per second can be read. This is a level of JavaScript database performance that is orders of magnitude faster than the commonly used mainstream databases, even Redis!
Accessing Database Resources from Node.js
mg-dbx-napi allows Node.js code to seamlessly:
- access data held in a Global Storage database
- invoke functions written in the M or ObjectScript language.
mg-dbx-napi also supports direct access to SQL within the database server.
If you're using an InterSystems database, mg-dbx-napi also provides full access to ObjectScript classes.
Building Back-end Applications With mg-dbx-napi
You can build your own bespoke Node.js-based systems with mg-dbx-napi.
However, you can save a lot of time and effort by building Node.js- or Bun.js-based applications using our glsdb abstraction which is built on top of the mg-dbx-napi APIs.
Also take a look at our mg-showcase repository which shows other examples of the use of mg-dbx-napi.
Finding Out More About mg-dbx-napi
The best place to start is the mg-dbx-napi Repository on Github.
mg-dbx-napi Licensing and Costs
mg-dbx-napi is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg-dbx-napi does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg-dbx-napi:
About mg-dbx-napi
mg-dbx-napi is a Node.js module providing extremely high-performance access to Global Storage Databases:
mg-dbx-napi can provide extremely high-performance access from Node.js or Bun.js:
-
to a local or remote installation of the database over a network connection
-
for the ultimate in performance, to a local database installation via the database API.
By way of example, on a standard M1 Mac Mini, over 1.5 million key/value pairs per second can be written, and over 2 million per second can be read. This is a level of JavaScript database performance that is orders of magnitude faster than the commonly used mainstream databases, even Redis!
Accessing Database Resources from Node.js
mg-dbx-napi allows Node.js code to seamlessly:
- access data held in a Global Storage database
- invoke functions written in the M or ObjectScript language.
mg-dbx-napi also supports direct access to SQL within the database server.
If you're using an InterSystems database, mg-dbx-napi also provides full access to ObjectScript classes.
Building Back-end Applications With mg-dbx-napi
You can build your own bespoke Node.js-based systems with mg-dbx-napi.
However, you can save a lot of time and effort by building Node.js- or Bun.js-based applications using our glsdb abstraction which is built on top of the mg-dbx-napi APIs.
Also take a look at our mg-showcase repository which shows other examples of the use of mg-dbx-napi.
Finding Out More About mg-dbx-napi
The best place to start is the mg-dbx-napi Repository on Github.
mg-dbx-napi Licensing and Costs
mg-dbx-napi is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg-dbx-napi does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg-dbx-napi:
mg_deno: Access IRIS and YottaDB from Deno
mg_deno is a language binding that provides high-performance access from within the Deno JavaScript runtime to the M language and database environment.
mg_deno is designed to operate with both YottaDB and all InterSystems database products (ie Caché and IRIS).
mg_deno provides extremely high-performance access from JavaScript running in Deno:
-
to a local or remote installation of the database over the network; and/or
-
to a local database installation via its API.
Accessing Global Storage Databases from Deno
mg_deno allows JavaScript code running within Deno to seamlessly:
-
access data held in an M or Global Storage database:
-
invoke functions written in their native M or ObjectScript language.
If you're using an InterSystems database, mg_deno also provides full access from Deno to ObjectScript classes.
Finding Out More About mg_deno
The best place to start is the mg_deno Repository on Github.
mg_deno Licensing and Costs
mg_deno is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg_deno does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg_deno:
mg_web: Web Server Extension for Global Storage Databases
mg_web is a high-performance extension for the major industry-strength Web Servers:
- NGINX
- Apache
- Microsoft IIS
mg_web allows you to design and implement REST APIs that make use of data stored in Global Storage Databases, eg:
- [InterSystems IRIS](https://www.intersystems.com/products/intersystems-iris/
- YottaDB
mg_web also supports InterSystems' older Caché database technology and can be used as a modern substitute for its legacy Web Gateway technologies such as WebLink.
mg_web is highly configurable. REST API handlers can be written in:
- the M or ObjectScript languages that are natively supported on Global Storage databases
- JavaScript, using a custom server interface that is included with mg_web
mg_web can connect to Global Storage databases in two ways:
-
to a local or remote installation of the database via a network connection
-
for the ultimate in performance, to a local database installation via an in-process connection via the database API.
mg_web will automatically use and maintain a pool of Web Server child processes to handle any oncoming load.
Building Back-end Applications With mg_web
You can build your own bespoke systems with mg_web, or migrate existing ones to work with it:
-
you can "roll your own" M-based or ObjectScript-based applications, building out REST APIs that execute in the native language that comes with Global Storage databases. However, if you're taking this approach, you'll find that you can save a considerable amount of time by using our mgweb-server package.
-
you can build your own JavaScript-based REST APIs, connecting to IRIS or YottaDB using our mg-dbx-napi interface and glsdb "persistent Object" abstraction.
-
migrating legacy WebLink applications to IRIS
If you have any legacy applications running on InterSystems' Caché that use the WebLink interface, you're probably looking for a migration solution for IRIS: WebLink is not supported by InterSystems on IRIS.
mg_web provides the solution you need: it can exactly emulate the behaviour of WebLink, allowing you to run your legacy WebLink applications unchanged on IRIS. We have helped several large InterSystems customers to migrate such applications.
Furthermore, you can then use mg_web to simultaneously support new REST APIs, allowing a gradual migration from WebLink to a more modern web architecture.
Finding Out More About mg_web
The best place to start is the mg_web Repository on Github.
mg_web Licensing and Costs
mg_web is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg_web does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg_web:
About mg-dbx-napi
mg-dbx-napi is a Node.js module providing extremely high-performance access to Global Storage Databases:
mg-dbx-napi can provide extremely high-performance access from Node.js or Bun.js:
-
to a local or remote installation of the database over a network connection
-
for the ultimate in performance, to a local database installation via the database API.
By way of example, on a standard M1 Mac Mini, over 1.5 million key/value pairs per second can be written, and over 2 million per second can be read. This is a level of JavaScript database performance that is orders of magnitude faster than the commonly used mainstream databases, even Redis!
Accessing Database Resources from Node.js
mg-dbx-napi allows Node.js code to seamlessly:
- access data held in a Global Storage database
- invoke functions written in the M or ObjectScript language.
mg-dbx-napi also supports direct access to SQL within the database server.
If you're using an InterSystems database, mg-dbx-napi also provides full access to ObjectScript classes.
Building Back-end Applications With mg-dbx-napi
You can build your own bespoke Node.js-based systems with mg-dbx-napi.
However, you can save a lot of time and effort by building Node.js- or Bun.js-based applications using our glsdb abstraction which is built on top of the mg-dbx-napi APIs.
Also take a look at our mg-showcase repository which shows other examples of the use of mg-dbx-napi.
Finding Out More About mg-dbx-napi
The best place to start is the mg-dbx-napi Repository on Github.
mg-dbx-napi Licensing and Costs
mg-dbx-napi is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg-dbx-napi does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg-dbx-napi:
mg_deno: Access IRIS and YottaDB from Deno
mg_deno is a language binding that provides high-performance access from within the Deno JavaScript runtime to the M language and database environment.
mg_deno is designed to operate with both YottaDB and all InterSystems database products (ie Caché and IRIS).
mg_deno provides extremely high-performance access from JavaScript running in Deno:
-
to a local or remote installation of the database over the network; and/or
-
to a local database installation via its API.
Accessing Global Storage Databases from Deno
mg_deno allows JavaScript code running within Deno to seamlessly:
-
access data held in an M or Global Storage database:
-
invoke functions written in their native M or ObjectScript language.
If you're using an InterSystems database, mg_deno also provides full access from Deno to ObjectScript classes.
Finding Out More About mg_deno
The best place to start is the mg_deno Repository on Github.
mg_deno Licensing and Costs
mg_deno is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg_deno does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg_deno:
mg_pwind: Integrating YottaDB with InterSystems Databases and Other External Resources
mg_pwind is an extension to the YottaDB M language designed to provide access to functionality external to the YottaDB environment.
mg_pwind can provide seamless access to data and functionality that is available within physically separate InterSystems' database technologies (i.e. Caché and IRIS).
mg_pwind can connect from YottaDB to InterSystems' databases in two ways:
-
to a local or remote installation of the InterSystems database over the network
-
a local InterSystems database installation via its API.
Once connected, mg_pwind allows YottaDB to:
- access (ie read and write) data and classes held in a Caché or IRIS database
- invoke ObjectScript functions that reside in a Caché or IRIS database
- invoke SQL queries residing in a Caché or IRIS database
Such seamless integration of YottaDB and InterSystems databases has previously been impossible to achieve!
Additionally, mg_pwind can be used to integrate YottaDB with other external resources. For example, it can be used to integrate YottaDB with the OpenSSL/TLS cryptographic functions that are commonly required in web application development, for example in user authentication.
Finding Out More About mg_pwind
The best place to start is the mg_pwind Repository on Github
mg_pwind Licensing and Costs
mg_pwind is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mg_pwind does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mg_pwind:
mgsql: SQL Implementation for YottaDB and InterSystems Databases
mgsql is an SQL engine written for the M database, designed to operate with both YottaDB and all InterSystems database products (ie Caché and IRIS). It is implemented in the native language of these database technologies (M aka ObjectScript on InterSystems databases);
mgsql SQL statements can be embedded in M or ObjectScript code. Additionally, mgsql data can be accessed via ODBC or over HTTP using RESTful calls.
mgsql can be used to create and manage new datasets. Additionally, schemas can be created to overlay and access existing/legacy M or Global Storage data structures.
If you're a YottaDB user, note that no other Open Source SQL engine currently supports ODBC.
ODBC support is a hugely important feature of mgsql: it opens up the supported databases to people who aren't technical experts and/or familiar with the specific peculiarities of the M or ObjectScript languages or Global Storage. Anyone proficient in one of the huge range of industry-standard Business Intelligence and Analytical tools can access and query the data held on YottaDB and InterSystems' databases.
If you want an SQL implementation that can be freely ported between YottaDB amd InterSystems technologies, then mgsql is the solution you need.
Finding Out More About mgsql
The best place to start is the mgsql Repository on Github.
mgsql Licensing and Costs
mgsql is available free of charge as an Apache 2-licensed Open Source product.
Note, however, that mgsql does not include free technical support from us, though you can ask questions and search for possible solutions in our forum.
Contact Chris if you want to discuss paying for technical support and/or maintenance for mgsql:
mg-showcase: Demonstrating our Key JavaScript Products
Our mg-showcase Docker Container is designed to allow anyone interested in our JavaScript-based technologies to quickly, easily and safely try them out, explore them and begin to make use of them. mg-showcase allows JavaScript developers to discover and try out for themselves our uniquely powerful technologies for Global Storage Databases (YottaDB, Caché and IRIS)
For anyone unfamiliar with Global Storage Databases, our mg-showcase includes:
-
benchmarks that you can run yourself, on your own hardware, to demonstrate unequivocally that they are the fastest databases in the industry: orders of magnitude faster than even technologies such as Redis that is heralded for its high performance! This performance is made available to JavaScript developers via our ultra-high-performance mg-dbx-napi interface.
-
demonstrations of their unique power and flexibility. For example, our glsdb abstraction creates persistent JavaScript Objects within Node.js and Bun.js runtimes, blurring the boundaries of databases and language.
You'll also be able to try out our ground-breaking mg-web extension for NGINX, Apache and Microsoft IIS. This, together with its built-in JavaScript back-end interface, creates the highest-peforming and most scalable production Web architecture for Node.js, even beating Web Frameworks such as Fastify. Don't believe us? Try out the benchmarks that we've included in mg-showcase!
Read all about it and try it out for yourself in our mg-showcase Repository.
Support for Our Products
Although nearly all our products are Free and Open Source-Licensed, we do not provide any technical support for them for free.
All our products come with comprehensive documentation, tutorials and/or examples, and if that's enough for you to get up and running and into production, then that's great. You may be able to get some advice from our user community via our Google Group.
However, if you are using our products in a business-critical production environment, we recommend you take out a support contract.
We offer two options for technical support:
-
a low-cost, email-based service which is designed for most small to medium-sized businesses. For £1200 per year (excluding VAT where appropriate), we'll support all our products that you use, Under this contract we'll work on a "best-endeavours" basis to resolve any problems or issues that you're having, in a timescale determined by our availability;
-
a customised bespoke service that gives you priority access to our time. If you are a large enterprise, running our products in a business- and time-critical environment, and/or have a large team of developers, then this level of support may be a better match for your needs. Cost and terms subject to negotiation.