Why Denali?
Choosing a framework is tricky business. Let's run through what makes Denali unique, and when it might be a good choice for you.
Developer Experience
Features that make Denali a joy to build with.
Write in any language
Want to use Typescript, Flow, or something more exotic? Denali apps can be written in any language that compiles down to JavaScript. It's just an addon install away.
Browse language addonsExtensive documentation
Denali is thoroughly documented, and Denali addons generate automatic API documentation out of the box, making good docs for community libraries a trivial effort.
Start with the QuickstartPowerful CLI
The Denali CLI will automatically watch your source files and rebuild on changes in development (for addons too!). It also supports in debug mode, even for running production servers!
Learn more about the CLIExtensibility
Leverage the experience of the community to move faster and build better apps.
ORM Agnostic
Don't tie yourself down to a single "blessed" ORM or database. Denali understands that modern apps are often data polyglots, and lets you choose the right tool for the job.
Explore ORM addonsAddons
Like mini, self-contained apps, addons let you leverage a growing ecosystem of community solutions, freeing you to focus on building what matters: your app.
Browse addonsExpress Middleware
Drop in support for Express middleware lets you get all the benefits of Denali, while tapping into the massive Express ecosystem when you need it.
Learn about middlewareTesting
Testing is a first-class citizen in Denali, with powerful tools that make writing & maintaining tests easy.
Acceptance Testing
Built in testing primitives let you simulate requests to your app end-to-end with ease. And support for snapshot testing makes getting good coverage even easier.
Learn about acceptance testingUnit Testing
Easily inject mocks and stubs with Denali's unit test primitives, while precisely dialing in the level of isolation needed. Start off leaning on your app code, then gradually mock those dependencies over time.
Learn about unit testingParallel & Isolated Tests
Automatically parallelized tests with process level isolation help you maintain a tight testing feedback loop and clean, leak free tests.
Learn about testingParsing & Rendering
Move data in and out of your app with ease. Drop in support for standards like JSON-API, or go fully custom.
Serializers
Serializers give you fine grained control over your API responses, as well as help protect sensitive data from leaking.
Get started with SerializersJSON-API 1.0 Support
Denali ships out of the box with a standard JSONSerializer for a simple response format, as well as a JSON-API 1.0 compliant Serializer.
Customize the JSONAPISerializerParsers
The twin sibling to Serializers, Parsers give you the ability precisely control how incoming requests are translated into something your Actions can use.
Get started with ParsersCommunity
Feel welcome, get help, and contribute back. At the end of the day, it's all about the people
Get help on Slack
Come hang out on our community Slack. Get help starting with Denali, provide feedback on the roadmap, learn best practices, and contribute back!
Join the conversationCore contributor office hours
Each week, core contributors graciously spend time in office hours. Got a particularly tough problem to crack, or looking to understand the best way to handle something in Denali? Stop by and ask!
Schedule a timeBe treated with respect
Our core community tenet is: "Treat everyone with respect." Feel welcome from day one, and don't hesitate to ask for help!
Get involvedComing Soon
We're constantly working to ship new features and improvements. Here's a sneak peek of what's on our radar.
HTTPS Support
No more fighting SSL certificates: easily run your development server with HTTPS locally thanks to devcert, and in production with LetsEncrypt support baked in.
Check out the roadmapWebsockets
Leverage Node's powerful evented model to handle Websockets with ease. Built in primitives for soft-realtime socket communication make modern apps a breeze.
Check out the roadmapAdvanced Testing
Use built in primitives for discovering performance regressions, diagnosing memory leaks, and load testing.
Check out the roadmapFramework Comparison
See how Denali stacks up against other popular frameworks, and the pros/cons for each.




Ruby on Rails (Ruby)
Rails and Denali have very similar approachs and philosophy (though not exactly the same). Most of the difference here comes down to maturity vs. runtime. The biggest advantage by far for Rails is the size of it's ecosystem, while Denali's is the Node runtime.
- Write your app in JavaScript - a single language throughout your stack
- Node's evented model, and JavaScript's async nature, are much better suited to handling the concurrency of modern web applications
- Rails is a vastly larger ecosystem, with lots of mature solutions, help, and talent
The Denali Doctrine
The Rails Doctrine describes how technological advantages erode over time. Today's features are important, but Denali's vision for tomorrow is just as much so. With that in mind, here's a few philosophical points that help guide our direction, partially inspired by that same article. Expect these to evolve over time.
-
Optimize for developer productivity
Using Denali is a user experience - and we should treat it as such. We should be continually asking ourselves: what can Denali do to help developers work faster, smarter, happier?
A great user experience is one that feels effortless. It anticpates failure scenarios and handles them gracefully. It leaves the user with a clear picture of "what's next", of how to solve the problem, and how to accomplish their goals. With each aspect of Denali, try to keep this at the heart.
-
Find the right abstractions
Denali is a framework for leveraging shared solutions to shared problems. The way to leverage shared solutions is to find the right abstractions. The right abstraction exposes just the right levers in just the right places; too many levers, and you haven't fully captured the <em>shared</em> aspect of the solution. Too few, and you've over-simplified the problem.
Put differently, a good abstraction minimizes accidental complexity while maximizing control over essential complexity. It provides a simple approach to solving the common use cases, while exposing more power to those that need it.
Finding the right abstraction is hard; inventing it from whole cloth is even harder. Instead, Denali tries to leverage it's core/userland model (see #3) to allow for experimentation to <em>discover</em> the best abstractions through real world application, without subjecting users to too much API churn.
-
Stability without stagnation
Denali aims to foster a stable core, while encouraging progress, experimentation, and innovation through "userland" addons.
We often talk about “core” versus “userland”, terms inspired by language used to describe an operating system kernel. “Core” (or, "kernel" in OS-talk) is a minimal set of highly trusted, rock solid code that exposes basic primitives (the right abstractions - see #2). “Userland”, meanwhile, refers to Denali apps and addons, which are less bound by the strict stability guarantees of core. This reduce stability guarantee in turn allows for greater experimentation.
By allowing userland code to experiment and move quickly, we can uncover the right abstractions, even occasionally adopting them back into core, without excessive API churn.
-
Follow the 80/18 rule
Denali attempts to solve 80% of use cases well. We should plan features and interfaces with this group in mind, and aim make their experience delightful.
For most of the remaining 20% (the “18%”), we make sure to provide “escape hatches”. These use cases might not be the principal ones we design around, but they should be possible to accomplish without feeling like you are fighting the framework.
We purposefully leave out the remaining small fraction of use cases (the “2%”). This is an admission that we’re never going to solve every use case, nor should we. There are other choices out there besides Denali that are likely better suited.
-
Marketing matters
Most of us would like to think that technology adoption is a purely rational, well thought out process of weighing tradeoffs and picking the best technical solution. Unfortunately, that’s usually not reality.
This can be frustrating: vanity metrics and microbenchmarks often don't measure realistic metrics, and most users would never come close to those limits in any case. It's tempting to dismiss such discussion as "unimportant", and instead focus on a "purer" implementation of Denali.
We reject this approach. Perception and marketing matter, to some extent. To phrase it more concretely: Denali will probably never be the fastest web framework out there by any microbenchmark standard. But we at least want to show up on the same graph.
-
Respect
The Internet is a challenging place to foster great culture, so we have to be intentional about it. A great culture can help a project like Denali blossom and thrive - and a caustic one will kill it off before it can even germinate.
The cardinal rule for participating in Denali's community is: treat everyone with respect. Behavior to the contrary is not welcome here.
We aim to treat everyone with respect, to always remember the human on the other side of the keyboard, to start with the assumption of good faith motivation, and the always argue the best intepretation.