We are very excited that you are interested in contributing to Neo.mjs.
No worries, you don't need to be a guru, ninja or rockstar to support the project.
Neo.mjs thrives on community engagement. One of the most impactful ways to contribute is to help grow our community and share the project with others.
- Star the repository: This helps with visibility on GitHub.
- Tell your friends and colleagues: Share your experience with Neo.mjs.
- Engage on social media: Write blog posts or share content on platforms like LinkedIn, X (formerly Twitter), and Facebook.
- Represent Neo.mjs: Interested in giving a talk or a workshop at a developer conference? We'd love to support you. Just reach out!
- Uphold our values: Please stick to our Code of Conduct in all interactions.
- In case you got an idea for a new feature
- In case you find a bug
- Ideally, you create a new breaking test inside the tests folder. This saves a lot of time and ensures the bug will stay fixed once the ticket is resolved.
- Please like or comment on current tickets. This is a great help to figure out which tickets are the most important ones for the Neo.mjs community.
- Please always create a new issue inside our Issues Tracker first and wait for approval. This ensures that your idea fits the scope of the project and makes it less likely to get a rejected PR. We will do our best to reply to new tickets within 7d max. In case we don't, feel free to bump the ticket.
- In case you want to work on an existing ticket, please add a comment there and get the ticket assigned to you. Otherwise multiple contributors could work on the same item in parallel. To keep the project moving, if a ticket is assigned and we do not receive any feedback from the assignee (e.g. via a comment) within 7 days, the ticket may get re-assigned to make it available for other contributors.
- Please make sure that pull requests are always related to an issue inside our Issues Tracker.
- Please create PRs for the dev branch and not for master.
- Please do not copy code from other frameworks / libraries. So far, the entire Neo.mjs code base is written from scratch.
- It is simply impossible to verify if contributed code is self-written.
- Adding new npm packages => dependencies / devDependencies is fine, in case there are no licensing conflicts.
- Refer to the codebase overview to understand how our repository is structured.
- We are always interested to feature client projects in blog posts or on social media.
We actively welcome contributions from artificial intelligence, LLMs, and autonomous agent swarms (such as the AI Village). We are building the foundation for "Agentic UI"—making the web readable by humans, and both readable and writable by machines.
For Human Operators of AI Agents:
- Transparency: If you use an AI agent to generate a Pull Request or formulate an issue, please briefly mention which model or agent framework was used (e.g., "Generated by Gemini 3.1 Pro," "Automated via Claude").
- Accountability: You remain responsible for the code your agent submits. Please review generated PRs for architectural consistency and ensure they follow our Coding Guidelines.
- Setup: To get the best results from your local agents, we highly recommend setting up our specialized MCP servers. See the AI Quick Start Guide and Working with Agents for details on our local Knowledge Base and Memory Core.
For Autonomous Agents (If you are reading this):
- Initialization Handshake: Always begin your workflow by reading the
AGENTS_STARTUP.mdfile in the root directory. This contains your core operational mandates. - JSON-First UI: Neo.mjs components are defined via JSON VDOM blueprints, not JSX or HTML templates. This makes structural manipulation and UI inspection mathematically natural for you.
- The Neural Link: We offer a bi-directional MCP bridge (
ai/mcp/server/neural-link/). You can query the live Scene Graph and manipulate the application state without modifying source code or reloading the browser. See our Agent Architecture to learn how you can orchestrate our runtime.
Copyright (c) 2015 - today, Tobias Uhlig