An opinionated, ORM agnostic framework for building robust JSON APIs in Node
TypeScript JavaScript Shell
Permalink
Failed to load latest commit information.
.circleci chore: add semantic release Mar 8, 2018
.vscode feat: bundled builds (#423) Jan 31, 2018
app fix: drop html extension from error view Feb 5, 2018
blueprints convert to namespaced packages Feb 21, 2018
commands chore: migrate to cli-table3 (#441) Jun 11, 2018
config feat: bundled builds (#423) Jan 31, 2018
docs fix: strign → string (#440) Mar 13, 2018
lib chore: migrate to cli-table3 (#441) Jun 11, 2018
scripts chore: remove custom docs build steps Feb 10, 2018
test fix: fix resolver ordering, add test Feb 28, 2018
.codeclimate.yml chore: disable eslint engine so we can use denali eslint config Jan 11, 2017
.editorconfig initial scaffold Sep 11, 2015
.gitattributes initial scaffold Sep 11, 2015
.gitignore fix(cli): remove references to dist-test Jan 11, 2017
.nvmrc feat: set min Node version to 7.6 for async/await support Oct 24, 2017
.nycrc chore: fix nycrc exclude pattern Aug 30, 2017
.travis.yml chore: remove custom docs build steps Feb 10, 2018
CHANGELOG.md chore(release): 0.1.2 Feb 28, 2018
CODE_OF_CONDUCT.md chore: add a code of conduct Jun 17, 2017
CONTRIBUTING.md fix(commands): modify `--debug` to be without brk and add `--debug-br… Mar 3, 2018
LICENSE chore: update copyright years Feb 22, 2018
README.md convert to namespaced packages Feb 21, 2018
denali-build.js convert to namespaced packages Feb 21, 2018
package.json chore: migrate to cli-table3 (#441) Jun 11, 2018
tsconfig.json chore: fix a few missed namespaced package rename spots Feb 22, 2018
tslint.json feat: container injections, parser, docs update, add view May 16, 2017
yarn.lock chore: add semantic release Mar 8, 2018

README.md

Denali

CircleCI Coverage Dependencies npm downloads latest version

An opinionated Node framework for building robust JSON APIs

Denali is a tool to help you build and deliver amibitous JSON APIs. It features:

  • First class JSON serializers, including out of the box JSON-API support
  • A single controller class (called Actions) per endpoint
  • Flexible, declarative filter system
  • An emphasis on developer happiness - a robust CLI, powerful testing primitives, and support for the full lifecycle of app development
  • ORM-agnostic design - choose your favorite Node ORM, or none at all

Why Denali?

Denali should feel familiar to anyone who has worked with popular MVC frameworks like Rails. But Denali has a slightly unique take on each aspect of the MVC pattern:

(M)VC - ORM Adapters instead of ORM lock-in

Unlike many server frameworks, Denali lets you choose which ORM you'd like to use. ORMs are hard, and the Node ecosystem has multiple competing options, each with it's own strengths and weaknesses. Rather than limiting you to a single "official" ORM, or worse, attempting to roll our own, Denali uses an adapter system to ensure that whatever ORM you bring, it can work with the Denali ecosystem.

M(V)C - Serializers instead of Views & Templates

Denali's view layer is unique as well. Rather than traditional HTML rendering, Denali's view layer renders JSON. Instead of the usual templates and view classes, we have Serializers instead, which tell Denali how to render the data you supply as a response. The separation of responsibilties ensures you can tweak how your data is structured in your API without having to change any of the logic of your app. Several common formats, including JSON-API, are supported out of the box, and customization is easy.

MV(C) - Actions instead of Controllers

In Denali, the Action class takes the role of the controller in the application. But rather than a single controller class that responds to many different endpoints, an Action class is responsible for responding to requests against a single endpoint (URL + method) only. The result is powerful - since the Action class directly and completely represents the app's response handler, we can use expressive declarative syntax to succinctly define behaviors.

Getting Started

You can install Denali globally via npm:

$ npm install -g denali denali-cli

Create a new application (run with Node 6.0+):

$ denali new my-api
$ cd my-api

You can use the server command to run your API locally in development mode. The API server will automatically restart when you make a change:

$ denali server

To learn more, check out the docs or join us on Slack

License

MIT © Dave Wasmer