1"use strict";(globalThis.webpackChunkdocs=globalThis.webpackChunkdocs||[]).push([[5119],{96729(e,n,t){t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var i=t(5450),o=t(31085),s=t(71184);const r={title:"Proposal for spending community funds",description:"We're proposing a system to pay core maintainers for essential admin work funded by community donations. This 3-month trial won't move forward without your input. If the community is against it, we won't do it.",date:"2025-06-08T16:00",slug:"spending-community-funds",tags:["announcement"],in_app_notification:!0,hide_table_of_contents:!1,authors:"MatissJanis"},a=void 0,l={authorsImageUrls:[void 0]},d=[{value:"What We're Proposing",id:"what-were-proposing",level:2},{value:"Why Start With Admin Work?",id:"why-start-with-admin-work",level:2},{value:"What We Need From You",id:"what-we-need-from-you",level:2},{value:"What's Next?",id:"whats-next",level:2}];function h(e){const n={a:"a",blockquote:"blockquote",h2:"h2",hr:"hr",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"Our open source community has reached an exciting point: thanks to the incredible generosity of our donors, we now have a steady flow of funds coming in. First of all \u2014 thank you."}),"\n",(0,o.jsx)(n.p,{children:"This support allows us to make the project more sustainable for everyone involved. We want to start by addressing something that is often overlooked in open source: the invisible labor that keeps everything running."}),"\n",(0,o.jsx)(n.p,{children:"We're proposing a 3-month trial program to pay our core maintainers for the essential (but often unglamorous) work of:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Reviewing pull requests"}),"\n",(0,o.jsx)(n.li,{children:"Triage and categorize GitHub issues"}),"\n",(0,o.jsx)(n.li,{children:"Preparing releases"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["We believe it's time to recognize the financial value of labor \u2014 but before we move forward, we want to hear your feedback. Join the conversation on ",(0,o.jsx)(n.a,{href:"https://discord.com/channels/937901803608096828/940290142579605514/1381286169601511515",children:"Discord"})," or leave anonymous feedback in ",(0,o.jsx)(n.a,{href:"https://docs.google.com/forms/d/e/1FAIpQLScGRK__pOmMja3y_GMmF7RbMjtnmebWrbXvY0JXstoiJLb7Uw/viewform?usp=dialog",children:"this form"}),"."]}),"\n",(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Update:"})," This proposal has been approved. More details about the payment system can be found in the ",(0,o.jsx)(n.a,{href:"/docs/contributing/leadership/paying-contributors",children:"paying contributors"})," page."]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"what-were-proposing",children:"What We're Proposing"}),"\n",(0,o.jsxs)(n.p,{children:["Starting July 1st, we'd like to set aside $1,000 per month from the project's funds for a review stipend pool. This pool would be divided between ",(0,o.jsx)(n.strong,{children:"core maintainers"})," based on the work they do each month, measured via a transparent points system."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Points are assigned based on the size of PRs reviewed (using lines of code as a proxy for effort)."}),"\n",(0,o.jsx)(n.li,{children:"Additional points are awarded for labelling and grooming issues, closing duplicates, and managing releases."}),"\n",(0,o.jsx)(n.li,{children:"The system has a cap, and in months with less activity, the payout is reduced to $500."}),"\n",(0,o.jsx)(n.li,{children:"Payments are handled via OpenCollective and are only available to core maintainers."}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"This system is designed to be lightweight, fair, and easy to administer \u2014 and it keeps our monthly costs well within our donation income."}),"\n",(0,o.jsx)(n.h2,{id:"why-start-with-admin-work",children:"Why Start With Admin Work?"}),"\n",(0,o.jsx)(n.p,{children:"Before we consider feature bounties or bug bounties, we need to acknowledge the day-to-day labor that enables these contributions to be merged and released. Paying for features while leaving critical administrative work unpaid would be unsustainable \u2014 and unfair."}),"\n",(0,o.jsx)(n.p,{children:"This trial serves as the foundation for broader funding efforts in the future. However, it begins with respecting the work that is already being done."}),"\n",(0,o.jsx)(n.h2,{id:"what-we-need-from-you",children:"What We Need From You"}),"\n",(0,o.jsx)(n.p,{children:"We believe this is the right direction \u2014 but we won't go ahead without the community's support."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"If you're for it, against it, or have suggestions \u2014 let us know."}),"\n",(0,o.jsx)(n.li,{children:"If there's strong opposition, we won't implement it."}),"\n",(0,o.jsx)(n.li,{children:"If the community supports it, we'll begin the trial in July."}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Join the conversation on ",(0,o.jsx)(n.a,{href:"https://discord.com/channels/937901803608096828/940290142579605514/1381286169601511515",children:"Discord"})," or leave anonymous feedback in ",(0,o.jsx)(n.a,{href:"https://docs.google.com/forms/d/e/1FAIpQLScGRK__pOmMja3y_GMmF7RbMjtnmebWrbXvY0JXstoiJLb7Uw/viewform?usp=dialog",children:"this form"}),".\nWe're listening \u2014 and we'll publish a summary of the feedback before moving forward."]}),"\n",(0,o.jsx)(n.h2,{id:"whats-next",children:"What's Next?"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"We'll collect community feedback until late June."}),"\n",(0,o.jsx)(n.li,{children:"If there's consensus, the 3-month trial begins July 1st."}),"\n",(0,o.jsx)(n.li,{children:"After the trial, we'll evaluate how it went and where to go next."}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}
1),"\n",(0,o.jsx)(n.p,{children:"Thank you again for being part of this journey. This community runs on trust, time, and care. With your feedback, we can keep building something that works \u2014 for all of us."})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},71184(e,n,t){t.d(n,{R:()=>r,x:()=>a});var i=t(14041);const o={},s=i.createContext(o);function r(e){const n=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:n},e.children)}},5450(e){e.exports=JSON.parse('{"permalink":"/blog/spending-community-funds","editUrl":"https://github.com/actualbudget/actual/tree/master/packages/docs/blog/2025-06-08-spending-community-funds.md","source":"@site/blog/2025-06-08-spending-community-funds.md","title":"Proposal for spending community funds","description":"We\'re proposing a system to pay core maintainers for essential admin work funded by community donations. This 3-month trial won\'t move forward without your input. If the community is against it, we won\'t do it.","date":"2025-06-08T16:00:00.000Z","tags":[{"inline":true,"label":"announcement","permalink":"/blog/tags/announcement"}],"readingTime":2.57,"hasTruncateMarker":true,"authors":[{"name":"Matiss Janis Aboltins","title":"Actual Budget Maintainer","url":"https://github.com/MatissJanis","imageURL":"/img/authors/Matiss-Janis.webp","key":"MatissJanis","page":null}],"frontMatter":{"title":"Proposal for spending community funds","description":"We\'re proposing a system to pay core maintainers for essential admin work funded by community donations. This 3-month trial won\'t move forward without your input. If the community is against it, we won\'t do it.","date":"2025-06-08T16:00","slug":"spending-community-funds","tags":["announcement"],"in_app_notification":true,"hide_table_of_contents":false,"authors":"MatissJanis"},"unlisted":false,"prevItem":{"title":"Release 25.7.0","permalink":"/blog/release-25.7.0"},"nextItem":{"title":"Release 25.6.1","permalink":"/blog/release-25.6.1"}}')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.