"Nodyx belongs to its community. Not its creators." If you're reading this file, you are potentially a builder of the free internet. Welcome.
Read these files in this order:
ARCHITECTURE.md, How Nodyx is builtMANIFESTO.md, The soul of the projectROADMAP.md, Where we're going
If you disagree with the Manifesto, Nodyx may not be the right project for you. And that's okay.
nodyx-frontend/src/lib/locales/ , Translate the interface
docs/ , Documentation, and its translations
nodyx-frontend/src/ , Frontend features and fixes
nodyx-docs/ , The nodyx.dev documentation site
nodyx-core/src/ , Main server code
docs/en/ARCHITECTURE.md
docs/en/MANIFESTO.md
If you think something in the core should change, open an Issue and explain why. Discussion is open. Unilateral modification is not.
nodyx-plugins/my-plugin/
├── plugin.json , Required manifest
├── index.ts , Entry point
├── README.md , Documentation
└── LICENSE , License (MIT recommended)
{
"name": "my-plugin",
"version": "1.0.0",
"description": "What my plugin does",
"author": "Your name or username",
"license": "MIT",
"nodyxVersion": ">=1.0.0"
}- A plugin never modifies core tables (users, communities, categories, threads, posts)
- A plugin may add its own tables with the prefix
plugin_{name}_ - A plugin only uses hooks documented in ARCHITECTURE.md
- A plugin cannot disable another plugin
- A plugin must work even if its optional dependencies are absent
- Fork the repo
- Create a branch:
feat/my-featureorfix/my-fix - Code in TypeScript, comments in English
- Tests are required for any new API route
- Open a Pull Request with a clear description
Follow Conventional Commits:
feat: add voice channel mute shortcut
fix: correct JWT expiry check
docs: update installation guide
refactor: extract voice signaling to separate module
test: add auth middleware unit tests
chore: update dependencies
All commit messages and code comments must be in English.
- Code without tests
- Code that breaks existing tests
- Code with proprietary dependencies
- Code with backdoors (obviously)
- Code that centralizes user data
- Code that contradicts ARCHITECTURE.md without prior discussion
Translation is the most accessible contribution. No coding required, and no account to create anywhere except GitHub.
Live status: nodyx.org/translate lists every language, how far along it is, and links straight to the file you would edit.
The entire app interface lives in one flat JSON file per language:
nodyx-frontend/src/lib/locales/
fr.json , source language
en.json , reference, kept at 100%
de.json es.json pt-PT.json ru.json vi.json
- Open nodyx.org/translate and find your language
- Click "Translate on GitHub", it forks the repository for you
- Fill in the missing keys, leaving every
{{variable}}exactly as it is - Open a Pull Request
Continuous integration checks that no variable was altered, so you cannot break the app by translating. We review, we merge, your work ships in the next release.
Your language is not in the list? Open a New Language issue and we wire it into the language picker for you. Adding a language is a code change on our side, so a dropped file alone would not show up.
- Go to
docs/ - Copy the
en/folder and rename it with your language code (de/,es/,ja/, etc.) - Translate the files
- Open a Pull Request
Files to translate:
MANIFESTO.md , The founding text
THANKS.md , Acknowledgements
README.md , Project overview
CONTRIBUTING.md, This guide
ARCHITECTURE.md, Technical reference
ROADMAP.md , Development roadmap
- Translate meaning, not word-for-word
- Keep the original tone (direct, human, not corporate)
- Never touch what sits inside
{{ }}, those are values the app fills in at runtime - If a concept has no equivalent in your language, keep the English term
- Proper nouns (Nodyx, NodyxPoints, Guard Protocol, etc.) are never translated
Translators get a star and a place in CONTRIBUTORS.md, like every other contributor.
Open an Issue with:
- The Nodyx version
- The server operating system
- Steps to reproduce
- What you saw vs. what you expected
- Logs if available
Open an Issue with the tag [FEATURE] and explain:
- What problem it solves
- For whom (what type of user)
- How you imagine it working
- Should it be in the core or a plugin?
The rule: if it can be a plugin, it must be a plugin.
- Build something good
- Learn together
- Respect others' work
- Critique ideas, not people
- Impose our technical opinions
- Dismiss others' contributions
- Promote proprietary tools or services
- Circumvent core rules
- GitHub Issues for bugs and features
- GitHub Discussions for general questions
- The Nodyx forum itself for everything else
Every contribution, no matter how small, is part of something larger. A typo fix in the docs. A translation. A plugin. A reported bug.
Everything counts. Everything is recorded in the history of the project.
git log --oneline
Your name will be there.
"The network is the people." AGPL-3.0, The code belongs to its community.