- https://github.com/nostr-protocol/nips/blob/master/01.md
- https://github.com/nostr-protocol/nips/blob/master/02.md
- https://github.com/nostr-protocol/nips/blob/master/03.md
- https://github.com/nostr-protocol/nips/blob/master/04.md
- https://github.com/nostr-protocol/nips/blob/master/05.md
- https://github.com/nostr-protocol/nips/blob/master/06.md
- https://github.com/nostr-protocol/nips/blob/master/07.md
- https://github.com/nostr-protocol/nips/blob/master/08.md
- https://github.com/nostr-protocol/nips/blob/master/09.md
- https://github.com/nostr-protocol/nips/blob/master/10.md
- https://github.com/nostr-protocol/nips/blob/master/11.md
- https://github.com/nostr-protocol/nips/blob/master/12.md
- https://github.com/nostr-protocol/nips/blob/master/13.md
- https://github.com/nostr-protocol/nips/blob/master/14.md
- https://github.com/nostr-protocol/nips/blob/master/15.md
- https://github.com/nostr-protocol/nips/blob/master/16.md
- https://github.com/nostr-protocol/nips/blob/master/17.md
- https://github.com/nostr-protocol/nips/blob/master/18.md
- https://github.com/nostr-protocol/nips/blob/master/19.md
- https://github.com/nostr-protocol/nips/blob/master/20.md
- https://github.com/nostr-protocol/nips/blob/master/21.md
- https://github.com/nostr-protocol/nips/blob/master/22.md
- https://github.com/nostr-protocol/nips/blob/master/23.md
- https://github.com/nostr-protocol/nips/blob/master/24.md
- https://github.com/nostr-protocol/nips/blob/master/25.md
- https://github.com/nostr-protocol/nips/blob/master/26.md
- https://github.com/nostr-protocol/nips/blob/master/27.md
- https://github.com/nostr-protocol/nips/blob/master/28.md
- https://github.com/nostr-protocol/nips/blob/master/29.md
- https://github.com/nostr-protocol/nips/blob/master/30.md
- https://github.com/nostr-protocol/nips/blob/master/31.md
- https://github.com/nostr-protocol/nips/blob/master/32.md
- https://github.com/nostr-protocol/nips/blob/master/33.md
- https://github.com/nostr-protocol/nips/blob/master/34.md
- https://github.com/nostr-protocol/nips/blob/master/35.md
- https://github.com/nostr-protocol/nips/blob/master/36.md
- https://github.com/nostr-protocol/nips/blob/master/37.md
- https://github.com/nostr-protocol/nips/blob/master/38.md
- https://github.com/nostr-protocol/nips/blob/master/39.md
- https://github.com/nostr-protocol/nips/blob/master/40.md
- https://github.com/nostr-protocol/nips/blob/master/42.md
- https://github.com/nostr-protocol/nips/blob/master/44.md
- https://github.com/nostr-protocol/nips/blob/master/45.md
- https://github.com/nostr-protocol/nips/blob/master/46.md
- https://github.com/nostr-protocol/nips/blob/master/47.md
- https://github.com/nostr-protocol/nips/blob/master/48.md
- https://github.com/nostr-protocol/nips/blob/master/49.md
- https://github.com/nostr-protocol/nips/blob/master/50.md
- https://github.com/nostr-protocol/nips/blob/master/51.md
- https://github.com/nostr-protocol/nips/blob/master/52.md
- https://github.com/nostr-protocol/nips/blob/master/53.md
- https://github.com/nostr-protocol/nips/blob/master/54.md
- https://github.com/nostr-protocol/nips/blob/master/55.md
- https://github.com/nostr-protocol/nips/blob/master/56.md
- https://github.com/nostr-protocol/nips/blob/master/57.md
- https://github.com/nostr-protocol/nips/blob/master/58.md
- https://github.com/nostr-protocol/nips/blob/master/59.md
- https://github.com/nostr-protocol/nips/blob/master/60.md
- https://github.com/nostr-protocol/nips/blob/master/61.md
- https://github.com/nostr-protocol/nips/blob/master/62.md
- https://github.com/nostr-protocol/nips/blob/master/64.md
- https://github.com/nostr-protocol/nips/blob/master/65.md
- https://github.com/nostr-protocol/nips/blob/master/66.md
- https://github.com/nostr-protocol/nips/blob/master/68.md
- https://github.com/nostr-protocol/nips/blob/master/69.md
- https://github.com/nostr-protocol/nips/blob/master/70.md
- https://github.com/nostr-protocol/nips/blob/master/71.md
- https://github.com/nostr-protocol/nips/blob/master/72.md
- https://github.com/nostr-protocol/nips/blob/master/73.md
- https://github.com/nostr-protocol/nips/blob/master/75.md
- https://github.com/nostr-protocol/nips/blob/master/77.md
- https://github.com/nostr-protocol/nips/blob/master/78.md
- https://github.com/nostr-protocol/nips/blob/master/7D.md
- https://github.com/nostr-protocol/nips/blob/master/84.md
- https://github.com/nostr-protocol/nips/blob/master/86.md
- https://github.com/nostr-protocol/nips/blob/master/87.md
- https://github.com/nostr-protocol/nips/blob/master/88.md
- https://github.com/nostr-protocol/nips/blob/master/89.md
- https://github.com/nostr-protocol/nips/blob/master/90.md
- https://github.com/nostr-protocol/nips/blob/master/92.md
- https://github.com/nostr-protocol/nips/blob/master/94.md
- https://github.com/nostr-protocol/nips/blob/master/96.md
- https://github.com/nostr-protocol/nips/blob/master/98.md
- https://github.com/nostr-protocol/nips/blob/master/99.md
- https://github.com/nostr-protocol/nips/blob/master/A0.md
- https://github.com/nostr-protocol/nips/blob/master/B0.md
- https://github.com/nostr-protocol/nips/blob/master/B7.md
- https://github.com/nostr-protocol/nips/blob/master/C0.md
- https://github.com/nostr-protocol/nips/blob/master/C7.md
nostr-java is a java implementation of the nostr protocol. The specification is available on github, here: https://github.com/nostr-protocol/nips The URL format for the NIPs is https://github.com/nostr-protocol/nips/blob/master/XX.md where XX is the NIP number. For example, the specification for NIP-01 is available at the URL https://github.com/nostr-protocol/nips/blob/master/01.md etc.
- When writing code, follow the "Clean Code" principles:
- Clean Code
- Relevant chapters: 2, 3, 4, 7, 10, 17
- Clean Architecture
- Relevant chapters: All chapters in part III and IV, 7-14.
- Design Patterns
- Follow design patterns as described in the book, whenever possible.
- Clean Code
- When commiting code, follow the Conventional Commits specification.
- When adding new features, ensure they are compliant with the Cashu specification (NUTs) provided above.
- Make use of the lombok library to reduce boilerplate code.
- When generating documentation:
- Follow the Diátaxis framework and classify each document as a tutorial, how-to guide, reference, or explanation.
- Place new Markdown files under
docs/<section>matching the chosen category. - Start each document with a top-level
#heading and a short introduction that states the purpose. - Link the document from
docs/README.mdin the corresponding section. - Use relative links to reference other documents and keep code snippets minimal and tested.
- Consult the following resources on Diátaxis for guidance:
- https://github.blog/developer-skills/documentation-done-right-a-developers-guide/
- https://diataxis.fr/
- https://diataxis.fr/start-here/
- https://diataxis.fr/how-to-use-diataxis/
- https://diataxis.fr/tutorials/
- https://diataxis.fr/how-to-guides/
- https://diataxis.fr/tutorials-how-to/
- https://diataxis.fr/quality/
- https://diataxis.fr/complex-hierarchies/
- https://diataxis.fr/compass/
- Always run
mvn -q verifyfrom the repository root before committing your changes. - Include the command's output in the PR description.
- If tests fail due to dependency or network issues, mention this in the PR.
- Update the documentation files if you add or modify features.
- Update the
pom.xmlfile for new modules or dependencies, ensuring compatibility with Java 21. - Verify new Dockerfiles or
docker-compose.ymlfiles by runningdocker-compose build. - Document new REST endpoints in the API documentation and ensure they are tested.
- Add unit tests for new functionality, covering edge cases. Follow "Clean Code" principles on unit tests, as described in the "Clean Code" book (Chapter 9).
- Ensure modifications to existing code do not break functionality and pass all tests.
- Add integration tests for new features to verify end-to-end functionality.
- Ensure new dependencies or configurations do not introduce security vulnerabilities.
- Add a comment on top of every test method to describe the test in plain English.
- Always follow the repository's PR submission guidelines and use the PR template located at
.github/pull_request_template.md. - Summarize the changes made and describe how they were tested.
- Include any limitations or known issues in the description.
- Ensure all new features are compliant with the Cashu specification (NUTs) provided above.