├── .husky └── pre-commit ├── .gitignore ├── contents └── cip-0000 │ └── structure.png ├── prettier.config.cjs ├── package.json ├── CONTRIBUTING.md ├── pnpm-lock.yaml ├── .github └── workflows │ └── style.yml ├── README.md ├── core ├── cip │ └── cip-0000-structure-for-calimero-improvement-proposals.md └── README.md └── cip-template.md /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | pnpm format:md 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | # IntelliJ IDEA 4 | .idea 5 | -------------------------------------------------------------------------------- /contents/cip-0000/structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/calimero-network/proposals/HEAD/contents/cip-0000/structure.png -------------------------------------------------------------------------------- /prettier.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | semi: true, 3 | singleQuote: true, 4 | useTabs: false, 5 | tabWidth: 2, 6 | trailingComma: 'all', 7 | 8 | overrides: [ 9 | { 10 | files: ['*.md', '*.mdx'], 11 | options: { 12 | printWidth: 80, 13 | proseWrap: 'always', 14 | }, 15 | }, 16 | ], 17 | }; 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "proposals", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "format:md": "prettier --write \"**/*.{md,mdx}\"", 7 | "check:md": "prettier --check \"**/*.{md,mdx}\"", 8 | "prepare": "husky" 9 | }, 10 | "devDependencies": { 11 | "husky": "^9.1.7", 12 | "prettier": "3.3.2", 13 | "typescript": "^5.7.3" 14 | } 15 | } -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Guide 2 | 3 | [GitPR]: https://github.com/susam/gitpr 4 | [Issues]: https://github.com/calimero-network/core/issues 5 | [README]: README.mdx 6 | 7 | Thank you for dedicating your time to contribute to our project. 8 | 9 | # CIP Contribution Process 10 | 11 | CIPs deal with changes of the Calimero Network usage and functionalities. 12 | 13 | Please see the contribution process outlined in 14 | [the core folder](core/README.md). 15 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | husky: 12 | specifier: ^9.1.7 13 | version: 9.1.7 14 | prettier: 15 | specifier: 3.3.2 16 | version: 3.3.2 17 | typescript: 18 | specifier: ^5.7.3 19 | version: 5.7.3 20 | 21 | packages: 22 | 23 | husky@9.1.7: 24 | resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} 25 | engines: {node: '>=18'} 26 | hasBin: true 27 | 28 | prettier@3.3.2: 29 | resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} 30 | engines: {node: '>=14'} 31 | hasBin: true 32 | 33 | typescript@5.7.3: 34 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 35 | engines: {node: '>=14.17'} 36 | hasBin: true 37 | 38 | snapshots: 39 | 40 | husky@9.1.7: {} 41 | 42 | prettier@3.3.2: {} 43 | 44 | typescript@5.7.3: {} 45 | -------------------------------------------------------------------------------- /.github/workflows/style.yml: -------------------------------------------------------------------------------- 1 | name: Code Style Checks 2 | 3 | on: 4 | push: 5 | branches: ['master'] 6 | pull_request: 7 | 8 | jobs: 9 | check-code-style: 10 | name: Check Code Style 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout code 14 | uses: actions/checkout@v4 15 | 16 | - name: Get changed files 17 | id: changed-files 18 | uses: tj-actions/changed-files@v45 19 | 20 | - name: Install pnpm 21 | run: npm install -g pnpm 22 | 23 | - name: Install dependencies 24 | run: pnpm install 25 | 26 | # Check for Markdown/MDX changes 27 | - name: Check for Markdown/MDX changes 28 | env: 29 | ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} 30 | shell: bash 31 | run: | 32 | echo "Checking for Markdown/MDX changes..." 33 | if echo "$ALL_CHANGED_FILES" | grep -qE '\.mdx?$'; then 34 | if ! pnpm check:md; then 35 | echo "Markdown or MDX files are not properly formatted." 36 | exit 1 # Exit with a non-zero status code to indicate failure 37 | fi 38 | fi 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Calimero Improvement Proposals (CIPs) 2 | 3 | CIPs deal with changes to the core protocol of the Calimero Network. Please see 4 | [the process for CIPs](core/README.md). 5 | 6 | ## Repository structure 7 | 8 | The root directory of this repository contains: 9 | 10 | - Templates for creating your own CIP 11 | - `contents` directory with `cip-xxxx` subdirectories that contain all 12 | media/script files for a given CIP . 13 | - core directory which contains accepted CIPs (`cip-xxxx-y.md` where `xxxx` is a 14 | CIP number with leading zeros, and `y` is the title of the proposal in 15 | lowercase, with words separated by hyphens. ex. 16 | `cip-0000-structure-for-calimero-improvement-proposals.md`) 17 | 18 | Example repository structure: 19 | 20 | ``` 21 | ├── CONTRIBUTING.md 22 | ├── README.md 23 | ├── cip-template.md 24 | ├── contents 25 | │ └── cip-0003 26 | │ └── image.png 27 | ├── core 28 | │ ├── cip-0001-abcd.md 29 | │ ├── cip-0002-xyz.md 30 | │ ├── cip-0003-axdgh.md 31 | │ └── README.md 32 | ``` 33 | 34 | ## Contributing 35 | 36 | See [CONTRIBUTING](CONTRIBUTING.md) to learn how to contribute. 37 | 38 | [Calimero Network](https://calimero.network/) 39 | -------------------------------------------------------------------------------- /core/cip/cip-0000-structure-for-calimero-improvement-proposals.md: -------------------------------------------------------------------------------- 1 | ``` 2 | CIP: cip-0000 3 | Title: Structure for Calimero Improvement Proposals 4 | Working Group: 5 | Owner: MatejVukosav 6 | Authors: MatejVukosav 7 | Consulted: Calimero Engineering Team 8 | Status: Draft 9 | Created: 2024-01-28 10 | Discussion: [Initial PR](https://github.com/calimero-network/proposals/pull/1) 11 | Protocol version: Not releasable 12 | ``` 13 | 14 | ## Simple Summary 15 | 16 | This CIP outlines the process for improving and enhancing the Calimero Network 17 | project. It proposes a standard structure for submitting improvement proposals 18 | to allow contributors to suggest, discuss, and implement changes to the project. 19 | 20 | ## Motivation 21 | 22 | Calimero Network has reached a stage where we need an organized approach to 23 | track and review improvements to its core components. This structure will help 24 | create a consistent and transparent process for proposing, discussing, and 25 | adopting changes, improving collaboration among contributors. 26 | 27 | ## New Terminology 28 | 29 | CIP - Calimero Improvement Proposal: A formal document proposing an enhancement 30 | or change to the Calimero Network ecosystem 31 | 32 | ## Detailed Design 33 | 34 | Organize proposals into folders. 35 | 36 | ![Folders structure](/contents/cip-0000/structure.png) 37 | 38 | ## Alternatives Considered 39 | 40 | Direct Contributions: Instead of discussing idea upfront, contributors could 41 | push directly to the repository. However, this approach could result in wasted 42 | time and resources on initiatives that do not align with the Calimero Network’s 43 | roadmap or are already being worked on. The proposal and review process ensures 44 | that contributions are purposeful and consistent with the project’s vision. 45 | 46 | ## Impact 47 | 48 | - For Contributors: This process provides a clear and structured method for 49 | submitting contributions, making it easier to participate in Calimero Network 50 | development. 51 | - For Reviewers: Having a standardized process allows reviewers to assess 52 | changes more efficiently and contribute with idea. 53 | - For the Project: A formalized process improves the quality of contributions 54 | and ensures that changes align with the project's goals, leading to smoother 55 | collaboration and faster innovation. 56 | 57 | ## Security Considerations 58 | 59 | None 60 | -------------------------------------------------------------------------------- /cip-template.md: -------------------------------------------------------------------------------- 1 | ## Preamble 2 | 3 | ``` 4 | CIP: To Be Assigned 5 | Title: 6 | Working Group: 7 | Owner: <("Accountable" in RACI) Person accountable for the CIP - name/email address/github alias> 8 | Authors: <("Recommender" in RACI)Group of people that author the CIP with the owner. List of comma separated name/email address/github alias> 9 | Consulted: 10 | Status: Draft 11 | Created: 12 | Discussion: 13 | Protocol version: TBD 14 | ``` 15 | 16 | The recommended structure of the working group is based on the 17 | [RACI](https://en.wikipedia.org/wiki/Responsibility_assignment_matrix#Role_distinction) 18 | model. 19 | 20 | ## Simple Summary 21 | 22 | A brief summary of what the feature is. 23 | 24 | ## Motivation 25 | 26 | Why are we doing this? What use cases does it support? What is the expected 27 | outcome? 28 | 29 | ## New Terminology 30 | 31 | Is there any new terminology introduced with this proposal? 32 | 33 | ## Detailed Design 34 | 35 | Explain the feature as if it was already implemented and you're explaining it to 36 | another Calimero Network core contributor. The generally means: 37 | 38 | - Explain the proposed change and how it works 39 | - Where the feature fits in to the system 40 | - How this feature was/could be implemented 41 | - Interaction with other features 42 | - Edge cases 43 | 44 | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", 45 | "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this 46 | document are to be interpreted as described in 47 | [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt) and 48 | [RFC 8174](https://www.ietf.org/rfc/rfc8174.txt). 49 | 50 | ## Alternatives Considered 51 | 52 | What alternative designs were considered and what pros/cons does this feature 53 | have relative to them? 54 | 55 | ## Impact 56 | 57 | How will the implemented proposal impacts apps developers, users, and core 58 | contributors? 59 | 60 | ## Security Considerations 61 | 62 | What security implications/considerations come with implementing this feature? 63 | Are there any implementation-specific guidance or pitfalls? 64 | 65 | ## Drawbacks _(Optional)_ 66 | 67 | Why should we not do this? 68 | 69 | ## Backwards Compatibility _(Optional)_ 70 | 71 | Does the feature introduce any breaking changes? All incompatibilities and 72 | consequences should be listed. 73 | 74 | ### Resource Utilization _(Optional)_ 75 | 76 | Reasonable effort should be made to understand the impact of the CIP on resource 77 | utilization like CPU, memory, network bandwidth and disk/database. 78 | 79 | [calimero-core repository](https://github.com/calimero-network/core) 80 | -------------------------------------------------------------------------------- /core/README.md: -------------------------------------------------------------------------------- 1 | # Calimero Improvement Proposals (CIPs) 2 | 3 | ## CIP Status Terms 4 | 5 | ### Primary Workflow 6 | 7 | - **Draft** — A CIP that is currently open for consideration and actively being 8 | discussed. 9 | - **Awaiting Decision** — A mature and ready CIP that is ready for final 10 | deliberation by the CIP Core Team. After a review, a vote will take place that 11 | will set the CIP's intended Final Comment Period(FCP) disposition (**FCP: 12 | Acceptance/Rejection**) or go back into a **Draft** state. 13 | - **FCP: [Acceptance/Rejection]** — A CIP that has entered a Final Comment 14 | Period (FCP) with an intended disposition. After review, during which any new 15 | concerns should be addressed, the CIP will head towards its intended 16 | disposition [**Acceptance/Rejection**] or go back into a Draft state. 17 | - **Accepted** — A CIP that has been accepted on the merits of its idea 18 | pre-implementation, and is ready for implementation. It is still possible that 19 | the CIP may be rejected post-implementation due to the issues that may arise 20 | during an initial implementation. 21 | - **Implemented** - A CIP that has been implemented with the protocol version 22 | specified in the CIP. It will graduate to **Final** when it has passed all 23 | tests and released in a new version. 24 | - **Final** — A CIP that has been released in the new protocol version. A final 25 | CIP should only be updated to correct errata. 26 | 27 | ### Additional Statuses 28 | 29 | - **Rejected** - A CIP that has been formally rejected by the CIP Core Team, and 30 | will not be implemented. 31 | - **Superseded: [New Final CIP]** - A CIP that which was previously final but 32 | has been superseded by a new, final CIP. Both CIPs should reference each 33 | other. 34 | 35 | ## Contribution Process 36 | 37 | The Calimero Network, like most open source softwares in the world, continues to 38 | evolve over time to meet the needs of our network's participants and to drive 39 | technology forward into new territory. Given the importance of the reliability 40 | and safety of the network, we ask that all of those who have ideas towards 41 | pushing Calimero Network's protocol development forward adhere to the following: 42 | 43 | - Consider your idea and how it serves the fundamental goals of the Calimero 44 | Network and aligns with values of the Calimero Network Protocol (which are 45 | listed below). If you cannot show how your proposal aligns with those goals 46 | and values, it's unlikely to ever be implemented. 47 | - Gather feedback from discussions, and utilize it to begin a draft proposal, 48 | otherwise known as a CIP (Calimero Improvement Proposal). 49 | - Follow the proposal process listed below. 50 | 51 | ## Calimero Network Goals 52 | 53 | - **The Calimero Network should be secure and reliable, and should bias towards 54 | safety, simplicity, reliability, and performance over new functionality.** 55 | - **The Calimero Network should run at scale and at low cost to all participants 56 | of the network.** 57 | 58 | - The networks deployed on Calimero are fully decentralized and managed by the 59 | network participants. 60 | - All actions inside the Self-Sovereign Apps are verified using identity 61 | off-chain signatures on the client device to ensure validity. 62 | - The peer interactions inside the Self-Sovereign Apps are encrypted and 63 | protected from any unauthorized third parties. 64 | - The data is stored on the user's device and all state transitions are 65 | applied locally ensuring data ownership. 66 | 67 | ## CIP Process 68 | 69 | ### Pre-CIP (Initial Discussion) 70 | 71 | Introduce your idea on the 72 | [GitHub Discussions](https://github.com/orgs/calimero-network/discussions) 73 | 74 | - Make sure to gather feedback and alternative ideas — it's useful before 75 | putting together a formal draft! 76 | - Consider contacting experts in a particular area for feedback while you're 77 | hashing out the details. 78 | 79 | ### Creating a CIP Draft 80 | 81 | Draft a formal proposal using the [CIP Template](../cip-template.md), and submit 82 | a PR to this repository. You should make sure to adhere to the following: 83 | 84 | - Make sure to place the draft in the `core/` folder. 85 | - Your CIP should be named `cip-TBD-title.md` 86 | - If your CIP requires images or other supporting files, they should be included 87 | in a sub-directory of the `contents` folder for that CIP, such as 88 | `contents/cip-TBD/`. Links should be relative, for example a link to an image 89 | from your CIP would be `../contents/cip-TBD/image.png`. 90 | 91 | Finally, submit a PR of your draft via your fork of this repository. 92 | 93 | #### Additional Tips 94 | 95 | - Use `TBD` for the protocol version. Don't assign a protocol version to the CIP 96 | — this will be established once the CIP has reached the state of _Final_ and 97 | has been formally implemented. 98 | 99 | ### Draft: Merging & Further Iteration 100 | 101 | From there, the following process will happen. 102 | 103 | #### CIP PR -> merged 104 | 105 | If you properly followed the steps above, your PR will get merged. 106 | 107 | The CIP and associated files will get renamed based on the latest CIP draft 108 | number before merging. 109 | 110 | #### Assembling a working group 111 | 112 | As your idea gets traction, you'll need to assemble a working group as to 113 | increase the chances of success that this CIP proceeds through the stages. 114 | 115 | For more information on this, review the 116 | [working group section](../cip-template.md#working-group) of the CIP template. 117 | 118 | #### Iterating on the CIP 119 | 120 | You should continue the discussion of the draft CIP with an attempt at reaching 121 | consensus. 122 | 123 | When opening PRs to modify the draft: 124 | 125 | - changes have to either be submitted by one of the authors (Recommender or 126 | Owner) or signed off by the authors 127 | - avoid discussions in the PR itself as it makes it more difficult for future 128 | contributors to understand the rational for changes. 129 | - best is to always discuss in 130 | [GitHub Discussions](https://github.com/orgs/calimero-network/discussions). 131 | - alternatively, a recap of the discussion that happened in the PR could be 132 | posted in the 133 | [GitHub Discussions](https://github.com/orgs/calimero-network/discussions) 134 | (but it's easy to forget to do this). 135 | 136 | ### Draft -> Awaiting Decision 137 | 138 | When your CIP receives sufficient feedback from the community, you'll need to 139 | present it to a subset of the CIP Core Team for review. 140 | 141 | For that, when you're ready, you should submit a PR changing the status in the 142 | draft to `Awaiting Decision`. 143 | 144 | The CIP will be scheduled to be discussed at a protocol meeting. As the owner of 145 | the CIP, you will be invited to share your CIP and participate in discussion 146 | during the meeting. 147 | 148 | You may invite any other members of your working group. 149 | 150 | The protocol meetings will be used to decide on next step: 151 | 152 | - If the CIP has received support and general consensus, it is moved to 153 | `Awaiting Decision` ; 154 | - If the CIP requires some adjustments or needs to receive more feedback from 155 | the community, the meeting is adjourned ; 156 | - If for any reason the CIP gets abandoned, it gets a status of `Rejected`. 157 | 158 | ### Awaiting Decision -> Final Comment Period (FCP) 159 | 160 | - A vote will take place among the CIP Core Team. 161 | - A unanimous approval from the CIP Core Team will put the CIP in a 162 | `FCP: Accepted` status. 163 | - Otherwise, the CIP will be given feedback and head towards a `FCP: Rejected` 164 | status (if the majority of the CIP raises concerns) or a `Draft` status (if 165 | only a minority of the CIP raises concerns). 166 | 167 | ### FCP -> Accepted/Rejected 168 | 169 | - After a discussions during Final Comment Period (FCP) where any major concerns 170 | that have not been previously addressed can be brought up, the CIP will head 171 | to its final disposition. 172 | - Concerns will be addressed on a case by case basis, and only major concerns 173 | that were not addressed earlier will move the CIP back to a `Draft` state. 174 | 175 | ### CIP Implementation 176 | 177 | Calimero Network will prioritize accepted CIPs among its priorities for a given 178 | year. However, if you want to ensure your CIP is implemented in a timely manner, 179 | it is likely best for you to attempt to implement it yourself. 180 | 181 | Once a CIP is implemented, a PR should be submitted to update its status to 182 | **Implementation Review**, along with the protocol version when will it be 183 | released if applicable. 184 | 185 | From here the proposal is brought up again before the protocol group for 186 | additional comment, where it is possible that the proposal is rejected based on 187 | the issues that arise from its implementation. If no issues arise, it will move 188 | to **Implemented** by a CIP team member. 189 | 190 | ### CIP Finalization 191 | 192 | Once an implemented CIP has been released in a specified version, the CIP should 193 | be updated with the protocol version that the implementation targets. From 194 | there, it will move to **Final**. 195 | --------------------------------------------------------------------------------