A rapid web development framework for humans and their AI tools.
Build blazingly fast in AI environments like Claude Code and Cursor without generating piles of shit code you’ll need to rewrite later. Kixx is designed to build server-rendered, hypermedia-driven applications (HTML as the engine of application state) with minimal client side scripting. It emphasizes productivity, simplicity, and efficiency.
Created by Kris Walker 2017 - 2026.
First, know that you'll need to be familiar with accessing and using the command terminal on your machine. Not too scary, but just so you're aware.
Ensure you have Node.js 16.13.2 or later installed. Check your node version in the command terminal with node --version. If you don't have it, you can download Node.js from nodejs.org/download.
Installing Node.js will also install npm which is required for the next steps.
- Create a new project directory with a
package.jsonfile in it. You can quickly do this withnpm init. - Install Kixx in your project directory by running
npm install --save kixx. - Set up your project scaffolding by running
npx kixx init-project --name 'My New Web App'. - Start your new web app by running
npx kixx dev-server - Open your browser to http://localhost:3000 to see your app.
Use AI for what it's good at and otherwise get it out of the way.
Kixx manages the LLM context from an MCP server, guiding the LLM to use convention and configuration over code to keep AI agents out of trouble. Your AI environment has the information and tools it needs to be helpful, but not so much context to waste time thrashing around.
Kixx never takes away your power to shoot yourself in the foot.
You'll always have full control over your projects with the ability to extend everything with your own code while directing your AI tools in the background. All conventions and configurations can be overridden, new code can be added, and existing code can be extended.
The Kixx Framework has a set of core principles which guide all the decisions made in its design and approach to developing web applications.
When a design decision needs to be made, Kixx will optimize for developer productivity. This is the north star of the Kixx framework, and most of the remaining principles derive from it.
Kixx has opinions about building great web applications. A framework needs to bring opinions, otherwise, what's the point of using a framework?
Humans write software for humans. Even in a post AI world, building software will always be a craft done by a craftsperson.
Kixx seeks out and eliminates incidental complexity so developers can use more brain capacity on the real problems we're trying to solve.
Nothing has ever been created that matches the accessibility, openness, power, and distribution of the Web. Kixx is fully committed to improving and contributing to the WWW.
AI tools should be small, efficient, productive, and focused on the craft of software development. There is no need to over-consume our natural resources and invade our privacy to use AI effectively in software development.
Kixx is for solo developers and small, fast moving teams. Monolithic, hypermedia driven applications give us a massive productivity boost over the complexity of microservices and bloated JavaScript client applications.
Wherever possible Kixx uses conventions over configuration and code for common web application logic. This dramatically reduces the amount of code that needs to be written, generated, understood, and debugged.
Kixx works with Node.js and supports these versions of JavaScript (ECMA) and Node.js:
| Env | Version |
|---|---|
| ECMA | >= ES2022 |
| Node.js | >= 16.13.2 |
Note: There is no TypeScript here. There are reasons for that - primarily developer happiness ;-)
Hypermedia-Driven Applications are web application where hypermedia (HTML) serves as the engine of application state. Instead of relying on JavaScript to manage state and coordinate between client and server, the application state changes by following links and submitting forms embedded in the HTML responses.
- Server-side rendering of all application state
- State transitions through hypermedia (links and forms)
- Progressive enhancement with minimal JavaScript
- RESTful architecture with HTML hypertext as the representation of state
- Monolithic design for simplicity and productivity
The Kixx framework embodies these principles, providing a productive environment for building web apps that are simple, fast, and maintainable.
For more information about hypermedia-driven applications, see:
- Hypermedia-Driven Applications by HTMX
- The Web's Grain by Frank Chimero
- REST: From Research to Practice
You can find developer documentation for building web applications with Kixx at www.kixx.dev. The remaining documentation here is for developers working on the Kixx framework itself.
Information for developers who want to better understand how Kixx works, need to modify the source code, or want to make contributions to the Kixx framework.
The Kixx framework project is organized into several top-level directories, each serving a specific purpose in the framework's architecture.
kixx/
├── bin/ # CLI entry point (included in npm package)
├── cli/ # CLI command implementations (included in npm package)
├── docs/ # Internal developer documentation (NOT in npm package)
├── lib/ # Core framework source code (included in npm package)
├── project-template/ # Scaffolding for new projects (included in npm package)
├── test/ # Test suite mirroring lib/ structure (NOT in npm package)
├── tools/ # Development tools (NOT in npm package)
├── tmp/ # Temporary files (git-ignored)
├── reference/ # Reference implementations
├── eslint.config.mjs # ESLint configuration
├── package.json # NPM package configuration
└── run-tests.js # Test runner script
For a much more detailed look at the project file organization structure, have a look at the documentation at docs/project-structure.md.
Cursor and Claude Code are often used when working on the Kixx framework. So, you'll find helpful artifacts for framework development in CLAUDE.md and .claude/skills/.
You can find the coding conventions for this project documented in javascript-coding-conventions skill at .claude/skills/javascript-coding-conventions/SKILL.md.
Run the full lint check:
npx eslint ./*Run the linter on a specific directory of source files. The directory will be read recursively.
npx eslint lib/application/Run the linter on a specific file:
npx eslint lib/application/request-context.jsRun the linter to fix issues that it finds in a specific file:
npx eslint --fix lib/application/request-context.jsNote that the eslint linter cannot fix all issues, but may be able to fix many of them faster and easier than you can.
All test modules are located in the test/ directory.
Run all tests:
node ./run-tests.jsRun a specific directory of tests (read recursively):
node ./run-tests.js test/application/Running a directory of tests can be helpful when working on a specific component or capability of the system.
Run a specific file of tests:
node ./run-tests.js test/application/application-context.test.jsRunning only a single file of tests can help isolate testing a specific module you're working on.
Run the linter and full test suite
npm testIt's good to run the linter and full test suite when your tests are complete to be sure there are no regressions.
Copyright: (c) 2017 - 2026 by Kris Walker (www.kriswalker.me)
Unless otherwise indicated, all source code is licensed under the MIT license. See LICENSE for details.