npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

sql-mvc

v0.0.162

Published

Paradigm inversion-write web applications in SQL instead of JavaScript

Downloads

227

Readme

SQL-MVC

Paradigm inversion - write web applications in SQL instead of JavaScript.

If like me, you find the way web app development is done today as tedious, and wasteful, then join me in creating a true "application programming language" (or DSL of you prefer), as opposed to using a general purpose language (JavaScript) for writing applications.

In 1991 Oracle added a few extensions to SQL to create Procedural SQL, so now I have added a few more extensions to SQL, to create QUery Application Language Extensions (QUALE) - it is that simple.

Recent change log: Added My-SQL and MS-SQL drivers. Updated Node version- caused a lot of breakage.

Feedback

NPM shows thousands of weekly downloads, but I have not yet had feedback from the community, so please if you have any questions, comments or even just want to say hi, please drop me a email for a personal response via [email protected]

*Alpha version 0.0 Notice: When evaluating SQL-MVC keep in mind this project is still version 0.0.x- alpha/preview release. A lot of stuff is not 100% polished or even to spec, try and pick up the key points we are trying to demonstrate not shortcomings or bugs (although all feedback is welcome). *

Example

Live Demo at todomvc.sql-mvc.com This is a complete implementation of todomvc.com functionality in 40 lines of code.

<#model
CREATE TABLE TODO_MVC				--:{as:"Table"} 
(
  REF VARCHAR(40),					--:{as:"pk"}
  NAME VARCHAR(100),				--:{as:"Text",size:40,title:"todo",onupdate:"owner=session.id"}  
  OWNER VARCHAR(40),				--:{Type:"Hide"}
  STATUS VARCHAR(10) default ''    	--:{Type:"Pick",List:"Ticked",onupdate:"owner=session.id"}  
);#>

<#controller(todo.clear.button)
button(title:"Clear Completed",if:"(select count(ref) from todo_mvc where owner=session.id and status='1')!=0" )
sql update todo_mvc set status='3' where owner=session.id and (status='1');#>

<#controller(todo.itemcount)
ifquery ((select count(ref) from todo_mvc where owner=session.id and (status='' or status is null))!=1)
print () ($select count(*) from todo_mvc where owner=session.id and (status='' or status is null) $) items left
elsequery
print () ($select count(*) from todo_mvc where owner=session.id and (status='' or status is null) $) item left
endquery#>

<#view
table()
	Select  --:{Title:"Make new records",from:TODO_MVC,autoinsert:top,tablestyle:Todo}
	STATUS, --:{Action:Edit,debug:0,autosave:yes}
	NAME,   --:{Action:Edit,placeholder:"What needs to be done (tab to save)",autosave:yes}
	REF	    --:{Action:View,Type:Hide}
	From TODO_MVC 
	where (owner=session.id and ( (here.todo_type='' and (status!='3' or status is null)) 
	or( (status='' or status is null) and here.todo_type='1')or(status='1' and here.todo_type='2')))

use(todo.itemcount)

button(title:"View all") set here.todo_type='';

button(title:"Active")   set here.todo_type='1';

button(title:"Completed") set here.todo_type='2';

use(todo.clear.button)
#>

SQL-MVC Getting_Started,

  • Install instructions for Linux VPS from scratch - Install.md

The following may be broken as of June 2018 due to node changes.

Tutorials at :

Tutorials.md

Programmers Manual at :

Github - wiki

Developer Resources

Supported SQL engines

  • Firebird Version 2.5
  • MYSQL Version 5.7
  • MSSQL SQL SERVER 12
  • Soon - Postgres
  • Soon - Oracle
  • Soon - NuoDB

How does SQL-MVC work?

  • The compiler takes your application code which is little more than a few SQL statements, directives and properties and produces:
    1. All the database code as a single stored procedure, to be run to produce JSON output.
    2. a Moustache Template(Hogan) containing all the client side code to be filled with the JSON. When the two are combined in the browser.
  • The server node.js does very little other than pass JSON between the server and client.
  • All the business logic remains in the database server.
  • You have full control of the client side look, feel and behaviour, the default framework and theme is just to give you a quick start.

Super fast Development:

  • Write web applications with little more than a few SQL statements
  • DRY (don't repeat yourself), Inheritance, Auto-Menus and more further reduces development time.
  • Drop-in and plug-in modules allow easy use and customisation of common application functionality.
  • Quick start with Platform + Framework + Themes + Modules + Demo's
  • Build easily reusable custom widgets from complex HTML/JS/JQ
  • Consistently customise the look and feel of your application widgets.
  • Automatic hot code push during development (no reloading of pages with F5)
  • i18n support and tools
  • Security implied by design rather than explicit configuration.

Super fast Runtime:

  • All database queries are amalgamated into a single database stored procedure call.
  • the JSON from the database is retrieved in one BLOB (Less chatter to the DB).
  • Almost no middle-ware processing.
  • Exchange only JSON data elements across the wire.
  • Build with Nodejs, SocketStream and Hogan templates to produce Single Page Applications.
  • Cache client side code automatically, and update automatically when the server side changes.
  • The page loads full visible content on first load - no partial view like waiting for multiple Ajax /ReST calls.
  • Lazy loading of application client code while the user keys in his login information( if not cached already).
  • Partial div(Divout) / records load/reload on Navigating / Saving or refreshing content.
  • Lazy loading of obscured views or obscured rows in large data sets
  • Client side caching of large datasets in reusable/relocatable chunks
  • Subscribe to events to do partial refreshes when changes are posted to database objects by other users.

Other features

  • Windows installer and development environment with JIT compiler and notepad++ with syntax highlighting.
  • Database drivers available for Firebird SQL, support planned for : MySQL, SQL Server, Oracle, NuoDB.
  • Planned support for JavaScript stored procedure engine, to enable no-sql, sqlite and off-line applications.

Licensing

QualeQuest/SQL-MVC is a Dual-licensed, either under the AGPL 3 license, or for a fee, you can license under a commercial-friendly license, which lets you embed, modify, and redistribute QualeQuest/SQL-MVC with your commercial application, without having to open source your application.