├── .github └── workflows │ └── publish.yml ├── .gitignore ├── README.md ├── config.toml ├── content ├── authors.json ├── blog │ ├── _index.md │ ├── announcing-floss-fund.md │ ├── open-source-pledge-2024.md │ ├── progress-update.md │ └── update-2025-may.md ├── faq.md ├── funding-manifest.md └── projects.md ├── static ├── schema │ └── v1.0.0 │ │ └── funding.schema.json └── static │ ├── base.css │ ├── favicon.png │ ├── fossunited.svg │ ├── funding.example.json │ ├── funding.schema.json │ ├── ico-github.svg │ ├── ico-www.svg │ ├── logo.svg │ ├── project-tags.txt │ ├── style.css │ └── thumb.png └── templates ├── authors.html ├── base.html ├── blog-page.html ├── blog.html ├── index.html ├── page.html └── shortcodes └── read_file.html /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | on: 2 | workflow_dispatch: 3 | push: 4 | branches: 5 | - master 6 | name: Build and deploy GH Pages 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: checkout 12 | uses: actions/checkout@v4 13 | - name: build_and_deploy 14 | uses: shalzz/zola-deploy-action@v0.19.2 15 | env: 16 | # Target branch 17 | PAGES_BRANCH: gh-pages 18 | # Or if publishing to the same repo, use the automatic token 19 | TOKEN: ${{ secrets.GITHUB_TOKEN }} 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | public -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FLOSS/fund Website 2 | 3 | This repository contains the source code for the FLOSS Fund website. 4 | 5 | https://floss.fund 6 | 7 | ## Development Docs 8 | ### Build the Website with Zola using Docker 9 | 10 | Follow these steps to build the website using Zola with Docker: 11 | 12 | 1. **Clone the Repository** 13 | ```sh 14 | git clone https://github.com/floss-fund/website.git 15 | cd website 16 | ``` 17 | 18 | 2. **Run the Docker Container** 19 | ```sh 20 | docker run -u "$(id -u):$(id -g)" -v $PWD:/app --workdir /app ghcr.io/getzola/zola:v0.19.2 build 21 | ``` 22 | 23 | ### Local Development 24 | 25 | Make sure you have Docker installed and running on your machine before executing these commands. 26 | 27 | 4. **Serve the Website** 28 | ```sh 29 | docker run -u "$(id -u):$(id -g)" -v $PWD:/app --workdir /app -p 1024:1024 -p 8080:8080 ghcr.io/getzola/zola:v0.19.2 serve --interface 0.0.0.0 --port 8080 --base-url localhost 30 | ``` 31 | 32 | 5. **Access the Served Website** 33 | Open your browser and navigate to `http://localhost:8000` to view the live-reloaded website. 34 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | base_url = "https://floss.fund" 2 | 3 | 4 | generate_feeds = true 5 | generate_sitemap = true 6 | feed_filenames = ["rss.xml"] 7 | 8 | [markdown] 9 | highlight_code = true 10 | highlight_theme = "two-dark" 11 | 12 | [extra] 13 | default_title = "Funding for Free and Open Source projects - FLOSS/fund" 14 | -------------------------------------------------------------------------------- /content/authors.json: -------------------------------------------------------------------------------- 1 | { 2 | "knadh": { 3 | "name": "Kailash Nadh", 4 | "avatar": "https://avatars1.githubusercontent.com/u/547147?s=64&v=4", 5 | "title": "CTO @ Zerodha", 6 | "link": "https://nadh.in", 7 | "github_link": "https://github.com/knadh" 8 | }, 9 | "rhnvrm": { 10 | "name": "Rohan Verma", 11 | "avatar": "https://avatars.githubusercontent.com/u/952036?v=4", 12 | "title": "Software Engineer @ Zerodha", 13 | "link": "https://rohanverma.net", 14 | "github_link": "https://github.com/rhnvrm" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /content/blog/_index.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Blog" 3 | sort_by = "date" 4 | template = "blog.html" 5 | page_template = "blog-page.html" 6 | +++ 7 | -------------------------------------------------------------------------------- /content/blog/announcing-floss-fund.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Announcing FLOSS/fund: $1M per year for free and open source projects" 3 | date = 2024-10-15 4 | authors = ["knadh"] 5 | description = "Announcing $1 million per year in funding for Free and Open Source projects globally" 6 | +++ 7 | 8 | TLDR; [Apply now](https://dir.floss.fund/submit) 9 | 10 | ---------------------- 11 | 12 | We are excited to announce the launch of a dedicated fund aimed at providing financial assistance to Free/Libre and Open Source Software (FOSS/FLOSS) projects globally, with an annual commitment of $1 million. I will use the FOSS acronym in this post hereafter. 13 | 14 | This has been in the works for some time at Zerodha[[↗]](https://zerodha.com), where we have been developing financial technology products and services built on an ever-growing FOSS stack. Without the high-quality FOSS projects that we have freely downloaded and used to build our organisation, products, and services, we would not exist as we do today—free as in both cost and freedom. A significant portion of our success and growth is owed to FOSS, encompassing everything from programming languages to operating systems, to databases, web servers, frontend frameworks, productivity tools, code editors, and absolutely everything. It goes without saying that this holds true for nearly every technology company founded in the last decade, whether it is publicly acknowledged or not. 15 | 16 | And yet, funding and financial sustainability, the lack thereof really, has been an increasingly hot topic over the last many years. Well, at least since *cloud* companies began making massive profits directly repackaging FOSS projects built by hobbyists and communities. The rise of the "open core" model and the unfortunate license changes in many good open projects recently, are clear signs of this growing turmoil. Many potential solutions seem to be emerging and evoling—commercial services, Venture Capital (VC) funding, and programs like GitHub Sponsors[[↗]](https://github.com/sponsors), Open Collective[[↗]](https://opencollective.com), FUTO[[↗]](https://futo.org), Polar[[↗]](https://polar.sh), and *Buy me a coffee*[[↗]](https://buymeacoffee.com), amongst others. That said, Python libraries raising massive amounts of VC funding in quick time does not look like a healthy trend. 17 | 18 | Why are we here, though? The fundamental tenets of FOSS, the spirit of hacking, liberty, and reciprocity, while they have worked beautifully with code, have translated poorly into the highly commercial *BigTech* era. So far, it has been nearly impossible to quantify and structure ideas of goodwill and reciprocity into financial sustenance for FOSS projects. I recall the log4j incident from a couple of years ago which unleashed a spate of philosophical debates around FOSS, in which I also participated[[↗]](https://nadh.in/blog/open-source-is-not-broken/), rather ideologically. 19 | 20 | For us, FLOSS/fund is about hacker goodwill, reciprocity, and common sense business strategy. We invite you to [apply for funding](https://dir.floss.fund/submit). If you would like to understand the motivations behind this, a bit of storytelling lies ahead. 21 | 22 | ## Prelude 23 | 24 | The very first thing I did when we started Zerodha Tech more than a decade ago was to install Python and start scripting and automating time-consuming, mundane organisational tasks. Then came Postgres for building a small data warehouse, followed by PHP and WordPress for managing our website. From there, as we slowly grew the organisation, our technology stack expanded one piece of FOSS at a time, eventually leading to us becoming the largest stock broker in India several years later. Personally, my mental markup as a software developer and hacker is rooted in the simple act of copy-pasting open source code from the internet to hack, tinker, learn, and solve problems. An alternate vision is very difficult for me to comprehend, and a non-FOSS path to building technology, let alone an organisation, has never seemed logical. 25 | 26 | At Zerodha, over the years, we have contributed upstream to many projects that we use, as well as spun off and released several small and large FOSS projects[[↗]](https://zerodha.tech) from our work. In 2019, we made a sizeable investment in ERPNext[[↗]](https://erpnext.com), a FOSS ERP that we had begun using extensively. In 2020, we co-founded the FOSS United Foundation[[↗]](https://fossunited.org), which works on developing the FOSS ecosystem in India, and backed the creation of TinkerSpace[[↗]](https://www.tinkerhub.org/tinkerspace), a physical hackerspace and community center that hosts FOSS tinkering for young people. In 2023, we were a founding member of OASIS (Open-Source Alliance for Social Innovation and Sustainability)[[↗]](https://oasishq.org), which focuses on FOSS capacity building and adoption in social sector non-profit organisations. Many of us from our team also volunteer at non-profits, helping drive meaningful FOSS adoption in the development sector, where even basic technological requirements are woefully unmet. We fund many of these initiatives with long-term commitments. 27 | 28 | In addition, we have given out many sizeable grants to FOSS projects and organisations in India. While funding projects outside India involves significant paperwork and operational overhead, we have reached out to several small and large projects that we use at work and have managed to pay them. This highly ad hoc approach is something that has increasingly bugged me though. 29 | 30 | While it is good to provide financial support to FOSS-aligned activities, most importantly, money ought to go directly to the source—invaluable FOSS projects. We have managed to build a commercially successful business on top of FOSS that we have freely, in both cost and freedom, adopted from all over the world. Therefore, "ad hoc" and "reaching out" simply do not suffice—we have to shut up or put up. 31 | 32 | ## Thus, structure. 33 | 34 | And that is how the idea of a structured, dedicated fund for FOSS projects globally, was born. We spent several months speaking to various banks, payment processors, and lawyers to finally arrive at a reasonably streamlined process. The fund will: 35 | 36 | - Have a small, dedicated team to operate it properly in a non-adhoc manner, functioning like an OSPO (Open Source Program Office) but focused on funding projects—an OSFO (Open Source Funding Office), perhaps? 37 | - Put money where the mouth is—a minimum of $10,000 and up to $100,000 for a single recipient, totaling $1 million per year, which we will increase once we understand the dynamics of running the fund. 38 | - Source applications globally, relying on incoming applications through for discovering projects in need of support rather than the limited visibility we have as a small team. 39 | - Form an interim internal selection committee to make discretionary selections. Once potential edge cases and any gotchas in running the program are handled, we will attempt to establish a public selection committee from the FOSS ecosystem with a community voting process for applications. 40 | 41 | ## More structure: funding.json 42 | Expanding a bit on "ad hoc" and "reaching out" I mentioned earlier, the majority of our experience paying projects has transpired like this: 43 | 44 | On a random day, we realise that a certain FOSS project has become very useful to us. After a bit of online searching, we find the developer's email address. We write to the developer, thanking them for their work, explaining how useful we find it, and expressing our interest in financially supporting it. They respond, thanking us but stating that they have not thought of any specific numbers. After a bit of friendly back and forth, we suggest an arbitrary amount, followed by more discussion about logistics and paperwork. This process of arriving at numbers over personal e-mails is awkward for both parties. In addition, it typically takes weeks, requiring time, commitment, and bandwidth from both the developer and the donor to complete a single transaction. Models like Open Collective and GitHub Sponsors address this to some extent, but there is no open, decentralized mechanism for discovering projects in need of financial assistance nor gaining insights into their specific needs. 45 | 46 | Any attempt on funding FOSS projects generally warrants clarity on several questions. 47 | 48 | - Does the project under consideration need financial assistance? 49 | - Or perhaps it is not just one particular project, but a developer or a group of developers who maintain several projects that need assistance. 50 | - What kind and quantum of financial assistance are needed, and for what activities? Is there a structured support plan that the developers offer? 51 | - Has the project received any funding in the past? Is it in dire need of support, or is it doing reasonably well? 52 | - What payment methods are accepted? Is there a payment link or address that can be used without manual contact, or is something like a bank wire that is required? 53 | - Once there is enough context, and a conversation is warranted, how does one reach out to the right person who address financial or logistical queries? 54 | - That's about one project. But what about a particular category of projects? Maybe it is an emerging or critical area, and it would make sense to support multiple projects there. How does one discover them? 55 | 56 | What if the answers to such questions could be structured in a machine readable format, which could be crawled, indexed, catalogued, and made discoverable—similar to a `robots.txt` or `package.json` or `sitemap.xml`, but for funding. In the process, eliminating a lot of awkwardness and apprehension that would be otherwise transpire over back-and-forth personal e-mails discussing financial matters. 57 | 58 | How about a standardised funding.json manifest file that can be added to project repositories and websites signalling their financial needs? Something like this: 59 | 60 | ```python 61 | {{ read_file(path="static/static/funding.example.json") }} 62 | ``` 63 | 64 | To initiate and give this experiment a serious shot, FLOSS/fund will accept funding requests from projects through a publicly accessible funding.json file hosted on their respositories or websites. This file is not meant to convey everything there is to know—an impossible task—but to solicit interest and communicate enough to ensure discoverability which would not be possible otherwise. Visit [fundingjson.org](https://fundingjson.org) to know more. 65 | 66 | Applications that come through to the FLOSS/fund will be indexed and published on the [dir.floss.fund](https://dir.floss.fund) directory / portal, making them publicly discoverable by anyone interested in supporting projects. This is going to be an interesting experiment. Fingers crossed! 67 | 68 | ## Motivations 69 | What are the motivations behind the fund? On a personal level, it is common sense, goodwill, and reciprocity—the spirit of FOSS. From a for-profit enterprise perspective, however, terms like "goodwill" and "reciprocity" are notoriously problematic, and most likely fundamentally incompatible with their very nature. But, that is a separate philosophical debate altogether. 70 | 71 | Setting philosophies aside, it makes perfect logical sense for a business that relies on FOSS to support it, directly or indirectly, when they freely tap into a global ecosystem of unlimited FOSS innovation—free in both cost and freedom. How many technology companies today could even exist without the massive amounts of FOSS they use? Ensuring that this ecosystem thrives, without inadvertently turning parts of it into a classic tragedy of the commons, everything aside, is good, logical business strategy. At the very least, a profitable business should allocate a tiny fraction of its profits to support the projects it is directly reliant on. When many startups have advertising and marketing budgets that often put public spending to shame, one would be hard-pressed to find a reason not to give a bit of money to the projects they depend on for their very existence. 72 | 73 | 74 | Thus, FLOSS/fund's motivations are to: 75 | 76 | - Exercise our goodwill and reciprocity on a personal level as FOSS hackers. 77 | - Exercise our organisational business sense and strategy to help the FOSS ecosystem thrive, without which our business cannot exist. 78 | - Encourage and apply a bit of peer-pressure on other businesses to setup structured financial support programmes for FOSS. 79 | - Contribute to existing FOSS funding models and to the sustainability conversations and debates. 80 | - As a bonus: Explore whether the `funding.json` manifest experiment can bring discoverability to the financial needs of FOSS projects on a large scale. 81 | 82 | Let us see how this goes. 83 | 84 |
Apply now
85 | -------------------------------------------------------------------------------- /content/blog/open-source-pledge-2024.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Joining the Open Source Pledge" 3 | date = 2024-11-15 4 | authors = ["rhnvrm"] 5 | description = "Announcing our commitment to the Open Source Pledge" 6 | +++ 7 | 8 | At [Zerodha](https://zerodha.com/), we have always been passionate about contributing to a sustainable ecosystem for Free (libre) and Open Source Software (FOSS). As one of India's largest stock brokers, our journey has been deeply intertwined with FOSS, which has been instrumental in our growth. We've relied on FOSS technologies to build and scale our products, business, and services. For a team of hobbyist developers, like [ours](http://zerodha.tech), this alignment with FOSS is a reflection of our core values. 9 | 10 | The [Open Source Pledge](https://opensourcepledge.com) is an initiative that encourages companies to financially support the open source projects they depend on. By committing to this pledge, organizations can ensure the sustainability and growth of the open source ecosystem. The pledge aims to encourage contributions of at least \$2,000 per full-time employee annually. 11 | 12 | We are excited to announce that we are officially joining the pledge. This marks the beginning of an annual tradition where we will share a detailed report of our financial contributions. For now, we are sharing our pre-FLOSS/fund launch contributions as part of our pledge commitment. The first [FLOSS/fund](https://floss.fund) report will be published at the end of the next year. 13 | 14 | ### Past 12 months 15 | 16 | This year, we have contributed a total of \$239,600, averaging around \$7,260 per developer. We have made direct contributions totaling \$59,600 to projects such as [Typst](https://typst.app/), [DuckDB](https://duckdb.org/), [Kaf](https://github.com/birdayz/kaf), and [franz-go](https://github.com/twmb/franz-go). Additionally, we have contributed approximately \$180,000 to foundations that support the Free and Open Source movement, including the [FOSS United Foundation](https://fossunited.org/) and [OASIS](https://oasishq.org/). 17 | 18 | | Contribution | Amount | 19 | | ------------------------------- | --------- | 20 | | Direct Contribution to Typst | \$27,100 | 21 | | Direct Contribution to DuckDB | \$26,500 | 22 | | Direct Contribution to franz-go | \$5,000 | 23 | | Direct Contribution to Kaf | \$1,000 | 24 | | Contributions to Foundations | \$180,000 | 25 | 26 | #### Contributions over the past years 27 | 28 | At Zerodha, our commitment to the open source community extends beyond financial contributions. We have actively engaged in initiatives that foster the growth and sustainability of FOSS. We co-founded the [FOSS United Foundation](https://fossunited.org/) to bolster the open source ecosystem in India. We also support [TinkerSpace](https://tinkerspace.in/home/), a hub for FOSS tinkering and innovation. Additionally, we've supported projects like [ERPNext](https://erpnext.com/) and continue to maintain a [few open source projects](https://zerodha.tech/projects/) that originated from our work at Zerodha. 29 | 30 | Over the years, we have also provided direct support to various projects through service agreements and support plans, agreed upon collaboratively with project maintainers. 31 | 32 | --- 33 | 34 | By joining the Open Source Pledge and sharing our journey, we hope to inspire other companies to take similar steps. Supporting the open source projects we rely on is not just a responsibility; it's an opportunity to contribute to a sustainable and innovative future for the tech industry. 35 | 36 | We are excited to be part of this initiative and look forward to continuing our support for the open source community. Together, we can build a more sustainable and innovative future for open source software. -------------------------------------------------------------------------------- /content/blog/progress-update.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Progress update" 3 | date = 2025-01-27 4 | authors = ["rhnvrm"] 5 | description = "Progress update on FLOSS/fund applications, disbursal process, and timeline" 6 | +++ 7 | 8 | It's been a few months since we [announced FLOSS/fund](/blog/announcing-floss-fund), our $1M annual funding initiative for Free and Open Source Software projects. Today, we'd like to share a brief update on our progress. 9 | 10 | ### Review process 11 | 12 | Our team has begun reviewing applications, and we're encouraged by the quality and diversity of submissions. We've received applications from various interesting projects, including developer tools, infrastructure libraries, and community-driven initiatives, each with well-documented funding.json manifests outlining their requirements. Check out the projects on the [open directory](https://dir.floss.fund). 13 | 14 | ### Disbursal process 15 | In addition to direct disbursals, we are in discussions with GitHub and Open Collective. Many FLOSS projects already use these platforms for receiving contributions, and integrating with their existing payment infrastructure could significantly reduce the operational overhead for both maintainers and our team. 16 | 17 | ### Timeline 18 | 19 | We aim to complete the review of our first batch of applications and begin disbursing funds by April 2025. This timeline allows us to thoroughly evaluate each submission while setting up the necessary infrastructure for sustainable, long-term support. 20 | 21 | For those interested in applying, submissions remain open at [dir.floss.fund/submit](https://dir.floss.fund/submit). 22 | 23 | --- 24 | 25 | We will share more detailed insights about the funding process and selected projects in our next update. -------------------------------------------------------------------------------- /content/blog/update-2025-may.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "FLOSS/fund first tranche: $325k to 9 projects" 3 | date = 2025-05-30 4 | authors = ["rhnvrm"] 5 | description = "Update on the first tranch of projects of 2025" 6 | +++ 7 | 8 | We are happy to announce our first tranche—9 open source projects and organisations receiving a total of **$325,000** for the continued and sustainable development and maintenance of critical software. 9 | 10 | Since launching FLOSS/fund in October 2024, we've received applications from diverse projects. Our experimental approach of soliciting applications through the open, publicly indexable [`funding.json`](https://fundingjson.org) manifest, has not only helped our overall processes significantly, but has encouraged many projects to start structuring and publicising their FOSS funding needs. 11 | 12 | ## **Recipients** 13 | 14 | | Project | Amount | Status | 15 | | :----------------------------------------------------------------------------------------------- | :------- | :--------- | 16 | | [x64dbg](https://dir.floss.fund/view/project/@ogilvie.pl/x64dbg) | $10,000 | Disbursed | 17 | | [OpenSSL Library](https://dir.floss.fund/view/project/@github.com/openssl/openssllibrary) | $100,000 | Pending | 18 | | [Network Time Protocol](https://dir.floss.fund/view/project/@www.nwtime.org/ntp) | $60,000 | Pending | 19 | | [ImageMagick](https://dir.floss.fund/view/project/@imagemagick.org/imagemagick) | $50,000 | Pending | 20 | | [Krita](https://dir.floss.fund/view/project/@krita.org/.well-known/org-kde-krita) | $50,000 | Pending | 21 | | [libjpeg-turbo](https://dir.floss.fund/view/project/@libjpeg-turbo.org/floss.fund/libjpeg-turbo) | $25,000 | Pending | 22 | | [XZ tools](https://dir.floss.fund/view/project/@tukaani.org/xz-utils) | $10,000 | Pending | 23 | | [Weblate](https://dir.floss.fund/view/project/@weblate.org/weblate) | $10,000 | Pending | 24 | | [LibreTranslate](https://dir.floss.fund/view/project/@libretranslate.com/libretranslate) | $10,000 | Pending | 25 | | | $325,000 | | 26 | 27 | The necessary logistical and legal paperwork for disbursal are at different stages across projects. In the coming months, we hope to streamline our processes to bring down the disbursal time significantly. We will update this post as the status changes, in addition to publishing a consolidated annual report. 28 | 29 | We are in talks with GitHub to build a close integration for quick fund disbursals via GitHub Sponsors as a majority of applications prefer GitHub as the avenue for receiving payments. 30 | 31 | ## **Apply now** 32 | 33 | Are you a FOSS project? You can [apply for funding](https://dir.floss.fund/submit) any time. If you are unfamiliar with FLOSS/fund, please see the [announcement](https://floss.fund/blog/announcing-floss-fund/) post. 34 | 35 | We hope our structured approach encourages other organisations to establish similar funding programs for the FOSS ecosystem. 36 | 37 | --- 38 | 39 | _Want to learn more about FLOSS/fund or apply for funding? Visit [floss.fund](https://floss.fund) or check out our [open directory](https://dir.floss.fund) to explore all submitted projects._ 40 | -------------------------------------------------------------------------------- /content/faq.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Frequently Asked Questions on FLOSS/fund" 3 | slug = "faq" 4 | +++ 5 | 6 | # FAQs 7 | 8 | - ### Who are we? 9 | We are [Zerodha](https://zerodha.tech), a financial technology company and India's largest stock broker. We are built heavily on a FOSS stack and have been contributing code and money back to FOSS projects on and off over the last several years. In 2024, we decided to structure and institutionalise our ad hoc efforts into a fund. 10 | 11 | - ### Who can apply? 12 | Individuals, projects, groups, communities, or organisations can apply. The application can be for a specific project or an entity representing many projects or FOSS efforts. The applicant or the legal entity must have a bank account and the necessary tax documents (which vary between jurisdictions) to receive funds. 13 | 14 | Currently, our focus is on supporting existing, widely used, and impactful projects to specifically contribute to their sustainability. Very new projects or projects with minimal usage are not considered for the time being. 15 | 16 | - ### How to apply? 17 | Write a `funding.json` (see [fundingjson.org](https://fundingjson.org)) manifest file and publish it on your website or project's repository. 18 | Submit the URL to the [directory](https://dir.floss.fund/submit). 19 | 20 | - ### What happens after an application? 21 | Your application will be publicly visible on the [public portal](https://dir.floss.fund). Our internal investment committee evaluates applications at the end of every quarter and communicates the decision via email. If your application is accepted, our team will reach out to you for the necessary paperwork (such as tax residency documents required by Indian laws) before processing the funds. This generally involves back-and-forth communication over email and can take up to 4 weeks. 22 | 23 | - ### How much can a project apply for? 24 | A project can apply for funding of up to $100,000 in one year. To keep the logistics and operational overhead of the fund reasonable, we accept requests in denominations of a minimum of $10,000 and multiples of $25,000 thereafter. 25 | 26 | - ### How are projects evaluated? 27 | It is difficult to define and quantify parameters such as value and impact across projects. For instance, Python, cURL, Krita, and Log4J are all highly valuable and impactful projects in their respective areas, with varying degrees of technical sophistication, effort, and value in their respective areas. 28 | 29 | Currently, our focus is on supporting existing, widely used, and impactful projects to specifically contribute to their sustainability. Very new projects or projects with minimal usage are not considered for the time being. 30 | 31 | Our internal investment committee evaluates projects based on broad criteria such as value, impact, criticality, and innovation. Once we have a reasonable grasp of the process end-to-end, from evaluation to disbursement of funds, we plan to set up a community voting system and an external investment committee from the FOSS world to help us evaluate and select recipients. 32 | 33 | - ### Why $1 million? 34 | FLOSS/fund is an experiment to financially support projects and inspire others to do the same. We are starting out with $1 million, and if the program works as well as we hope it will, we plan to increase the size of the fund. 35 | 36 | - ### What is expected from a project that receives funding? 37 | Only a public acknowledgement with a link to this website for others to discover the fund. 38 | 39 | --------- 40 | 41 | If you have any queries, you can write to us at [info@floss.fund](mailto:info@floss.fund) 42 | -------------------------------------------------------------------------------- /content/funding-manifest.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "funding.json manifest" 3 | slug = "funding-manifest" 4 | +++ 5 | 6 | Visit [https://fundingjson.org](https://fundingjson.org) 7 | 8 | ----------- 9 | 10 | ## Tools 11 | 12 | - [Live manifest validator](https://dir.floss.fund/validate) 13 | - [Manifest builder UI](https://vishnukvmd.github.io/funding.json/) 14 | -------------------------------------------------------------------------------- /content/projects.md: -------------------------------------------------------------------------------- 1 | +++ 2 | title = "Recipients of FLOSS/fund grants" 3 | slug = "recipients" 4 | +++ 5 | 6 | # Recipients 7 | 8 |
9 | 10 | | Recipient | Date | Amount | 11 | |:-------------------------------------------------------------------------------------------------------------------------|:---------|:--------| 12 | | [Typst](https://typst.app)
A new markup-based typesetting system that is powerful and easy to learn. | May 2024 | $27,100 | 13 | 14 |
15 | -------------------------------------------------------------------------------- /static/schema/v1.0.0/funding.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["version", "entity", "funding"], 5 | "properties": { 6 | "version": { 7 | "type": "string", 8 | "description": "Schema version" 9 | }, 10 | "entity": { 11 | "type": "object", 12 | "description": "The entity associated with the project, soliciting funds.", 13 | "required": ["type", "role", "name", "email", "description", "webpageUrl"], 14 | "properties": { 15 | "type": { 16 | "type": "string", 17 | "description": "Type of the entity. [individual, group, organisation, other], Use the closest approximation.", 18 | "enum": ["individual", "group", "organisation", "other"] 19 | }, 20 | "role": { 21 | "type": "string", 22 | "description": "Role in relation to the entity. [owner, steward, maintainer, contributor, other]. Use the closest approximation.", 23 | "enum": ["owner", "steward", "maintainer", "contributor", "other"] 24 | }, 25 | "name": { 26 | "type": "string", 27 | "description": "Name of the entity.", 28 | "maxLength": 250 29 | }, 30 | "email": { 31 | "type": "string", 32 | "description": "Contact email.", 33 | "maxLength": 250 34 | }, 35 | "phone": { 36 | "type": "string", 37 | "description": "Contact phone number. Generally suitable for organisations.", 38 | "maxLength": 32 39 | }, 40 | "description": { 41 | "type": "string", 42 | "description": "Information about the entity.", 43 | "maxLength": 2000 44 | }, 45 | "webpageUrl": { 46 | "type": "object", 47 | "required": ["url"], 48 | "properties": { 49 | "url": { 50 | "type": "string", 51 | "description": "Webpage with information about the entity.", 52 | "anyOf": [ 53 | { "pattern": "^(https?://)" }, 54 | { "pattern": "^$" } 55 | ], 56 | "maxLength": 250 57 | }, 58 | "wellKnown": { 59 | "type": "string", 60 | "description": "Required if the above url and the URL of the funding.json manifest do not have the same hostname. This url should have the same hostname as the url to verify that the publisher of the manifest is authorised to solicit funding on behalf of the url. The url should end with /.well-known/funding-manifest-urls.", 61 | "anyOf": [ 62 | { "pattern": "^(https?://).*/\\.well-known/funding-manifest-urls$" }, 63 | { "pattern": "^$" } 64 | ], 65 | "maxLength": 250 66 | } 67 | } 68 | } 69 | } 70 | }, 71 | "projects": { 72 | "type": "array", 73 | "items": { 74 | "type": "object", 75 | "description": "One or more projects for which the funding is solicited.", 76 | "required": ["guid", "name", "description", "webpageUrl", "repositoryUrl", "licenses", "tags"], 77 | "properties": { 78 | "guid": { 79 | "type": "string", 80 | "description": "A short unique ID for the project. Lowercase-alphanumeric-dashes only. eg: my-cool-project.", 81 | "anyOf": [ 82 | { "pattern": "^[a-z0-9-]+$" }, 83 | { "pattern": "^$" } 84 | ], 85 | "maxLength": 32 86 | }, 87 | "name": { 88 | "type": "string", 89 | "description": "Name of the project.", 90 | "maxLength": 250 91 | }, 92 | "description": { 93 | "type": "string", 94 | "description": "Description of the project.", 95 | "maxLength": 2000 96 | }, 97 | "webpageUrl": { 98 | "type": "object", 99 | "required": ["url"], 100 | "properties": { 101 | "url": { 102 | "type": "string", 103 | "description": "Webpage with information about the project.", 104 | "pattern": "^(https?://)", 105 | "maxLength": 250 106 | }, 107 | "wellKnown": { 108 | "type": "string", 109 | "description": "Required if the above url and the URL of the funding.json manifest do not have the same hostname. This url should have the same hostname as the url to verify that the publisher of the manifest is authorised to solicit funding on behalf of the url. The url should end with /.well-known/funding-manifest-urls.", 110 | "anyOf": [ 111 | { "pattern": "^(https?://).*/\\.well-known/funding-manifest-urls$" }, 112 | { "pattern": "^$" } 113 | ], 114 | "maxLength": 250 115 | } 116 | } 117 | }, 118 | "repositoryUrl": { 119 | "type": "object", 120 | "required": ["url"], 121 | "properties": { 122 | "url": { 123 | "type": "string", 124 | "description": "URL of the repository where the project's source code and other assets are available.", 125 | "pattern": "^(https?://)", 126 | "maxLength": 250 127 | }, 128 | "wellKnown": { 129 | "type": "string", 130 | "description": "Required if the above url and the URL of the funding.json manifest do not have the same hostname. This url should be a file in the repository to verify that the publisher of the manifest is authorised to solicit funding on behalf of the url. The url should end with /.well-known/funding-manifest-urls.", 131 | "anyOf": [ 132 | { "pattern": "^(https?://).*/\\.well-known/funding-manifest-urls$" }, 133 | { "pattern": "^$" } 134 | ], 135 | "maxLength": 250 136 | } 137 | } 138 | }, 139 | "licenses": { 140 | "type": "array", 141 | "description": "The project's licenses (up to 5). For standard licenses, use the license ID from the SDPX index prefixed by \"spdx:\". eg: \"spdx:GPL-3.0\", \"spdx:CC-BY-SA-4.0\".", 142 | "maxItems": 5, 143 | "items": { 144 | "type": "string" 145 | } 146 | }, 147 | "tags": { 148 | "type": "array", 149 | "description": "Up to 10 general tags describing the project. For reference, see https://floss.fund/static/project-tags.txt.", 150 | "maxItems": 10, 151 | "items": { 152 | "type": "string", 153 | "pattern": "^[a-z0-9-]+$", 154 | "maxLength": 32 155 | } 156 | } 157 | } 158 | } 159 | }, 160 | "funding": { 161 | "type": "object", 162 | "description": "This describes one or more channels via which the entity can receive funds.", 163 | "required": ["channels", "plans"], 164 | "properties": { 165 | "channels": { 166 | "type": "array", 167 | "items": { 168 | "type": "object", 169 | "required": ["guid", "type"], 170 | "properties": { 171 | "guid": { 172 | "type": "string", 173 | "description": "A short unique ID for the channel. Lowercase-alphanumeric-dashes only. eg: mybank, my-paypal.", 174 | "pattern": "^[a-z0-9-]+$", 175 | "maxLength": 32 176 | }, 177 | "type": { 178 | "type": "string", 179 | "description": "Type of the channel. [bank, payment-provider, cheque, cash, other].", 180 | "enum": ["bank", "payment-provider", "cheque", "cash", "other"] 181 | }, 182 | "address": { 183 | "type": "string", 184 | "description": "A short unstructured textual representation of the payment address for the channel. eg: \"Account: 12345 (branch: ABCX)\", \"mypaypal@domain.com\", \"https://payment-url.com\", or a physical address for cheques.", 185 | "maxLength": 250 186 | }, 187 | "description": { 188 | "type": "string", 189 | "description": "Any additional description or instructions for the payment channel.", 190 | "maxLength": 500 191 | } 192 | } 193 | } 194 | }, 195 | "plans": { 196 | "type": "array", 197 | "items": { 198 | "type": "object", 199 | "required": ["guid", "status", "name", "amount", "currency", "frequency", "channels"], 200 | "properties": { 201 | "guid": { 202 | "type": "string", 203 | "description": "A short unique ID for the plan. Lowercase-alphanumeric-dashes only. eg: mybank, paypal.", 204 | "pattern": "^[a-z0-9-]+$", 205 | "maxLength": 32 206 | }, 207 | "status": { 208 | "type": "string", 209 | "description": "Indicates whether this plan is currently active or inactive. [active, inactive].", 210 | "enum": ["active", "inactive"] 211 | }, 212 | "name": { 213 | "type": "string", 214 | "description": "Name of the funding plan. eg: \"Starter support plan\", \"Infra hosting\", \"Monthly funding plan\".", 215 | "maxLength": 250 216 | }, 217 | "description": { 218 | "type": "string", 219 | "description": "Any additional description or instructions for the funding plan." 220 | }, 221 | "amount": { 222 | "type": "number", 223 | "description": "The solicited amount for this plan. 0 is a wildcard that indicates \"any amount\"." 224 | }, 225 | "currency": { 226 | "type": "string", 227 | "description": "Three letter ISO 4217 currency code. eg: USD, EUR.", 228 | "pattern": "^[A-Z]{3}$" 229 | }, 230 | "frequency": { 231 | "type": "string", 232 | "description": "Frequency of the funding. [one-time, weekly, fortnightly, monthly, yearly, other]", 233 | "enum": ["one-time", "weekly", "fortnightly", "monthly", "yearly", "other"] 234 | }, 235 | "channels": { 236 | "type": "array", 237 | "description": "One or more channel IDs defined in channels[] via which this plan can accept payments", 238 | "items": { 239 | "type": "string", 240 | "pattern": "^[a-z0-9-]+$", 241 | "maxLength": 32 242 | } 243 | } 244 | } 245 | } 246 | }, 247 | "history": { 248 | "type": "array", 249 | "description": "A simple summary of funding history. Only include if at least one, either income or expenses, have to be communicated.", 250 | "items": { 251 | "type": "object", 252 | "required": ["year", "currency"], 253 | "properties": { 254 | "year": { 255 | "type": "integer", 256 | "description": "Year (fiscal, preferably)." 257 | }, 258 | "income": { 259 | "type": "number", 260 | "description": "Income for the year." 261 | }, 262 | "expenses": { 263 | "type": "number", 264 | "description": "Expenses for the year." 265 | }, 266 | "taxes": { 267 | "type": "number", 268 | "description": "Taxes for the year." 269 | }, 270 | "currency": { 271 | "type": "string", 272 | "description": "Three letter ISO 4217 currency code. eg: USD, EUR.", 273 | "pattern": "^[A-Z]{3}$" 274 | }, 275 | "description": { 276 | "type": "string", 277 | "description": "Any additional description.", 278 | "maxLength": 500 279 | } 280 | } 281 | } 282 | } 283 | } 284 | } 285 | } 286 | } 287 | -------------------------------------------------------------------------------- /static/static/base.css: -------------------------------------------------------------------------------- 1 | /* Container */ 2 | .container { 3 | width: 100%; 4 | max-width: 1200px; 5 | margin-right: auto; 6 | margin-left: auto; 7 | padding-right: 15px; 8 | padding-left: 15px; 9 | } 10 | 11 | /* Row */ 12 | .row { 13 | display: flex; 14 | flex-wrap: wrap; 15 | margin-right: -15px; 16 | margin-left: -15px; 17 | } 18 | 19 | /* Column */ 20 | [class*="col-"] { 21 | padding-right: 15px; 22 | padding-left: 15px; 23 | } 24 | 25 | /* Column Sizes */ 26 | .col-1 { 27 | flex: 0 0 8.333333%; 28 | max-width: 8.333333%; 29 | } 30 | 31 | .col-2 { 32 | flex: 0 0 16.666667%; 33 | max-width: 16.666667%; 34 | } 35 | 36 | .col-3 { 37 | flex: 0 0 25%; 38 | max-width: 25%; 39 | } 40 | 41 | .col-4 { 42 | flex: 0 0 33.333333%; 43 | max-width: 33.333333%; 44 | } 45 | 46 | .col-5 { 47 | flex: 0 0 41.666667%; 48 | max-width: 41.666667%; 49 | } 50 | 51 | .col-6 { 52 | flex: 0 0 50%; 53 | max-width: 50%; 54 | } 55 | 56 | .col-7 { 57 | flex: 0 0 58.333333%; 58 | max-width: 58.333333%; 59 | } 60 | 61 | .col-8 { 62 | flex: 0 0 66.666667%; 63 | max-width: 66.666667%; 64 | } 65 | 66 | .col-9 { 67 | flex: 0 0 75%; 68 | max-width: 75%; 69 | } 70 | 71 | .col-10 { 72 | flex: 0 0 83.333333%; 73 | max-width: 83.333333%; 74 | } 75 | 76 | .col-11 { 77 | flex: 0 0 91.666667%; 78 | max-width: 91.666667%; 79 | } 80 | 81 | .col-12 { 82 | flex: 0 0 100%; 83 | max-width: 100%; 84 | } 85 | 86 | /* Column Offsets */ 87 | .col-offset-1 { 88 | margin-left: 8.333333%; 89 | } 90 | 91 | .col-offset-2 { 92 | margin-left: 16.666667%; 93 | } 94 | 95 | .col-offset-3 { 96 | margin-left: 25%; 97 | } 98 | 99 | .col-offset-4 { 100 | margin-left: 33.333333%; 101 | } 102 | 103 | .col-offset-5 { 104 | margin-left: 41.666667%; 105 | } 106 | 107 | .col-offset-6 { 108 | margin-left: 50%; 109 | } 110 | 111 | .col-offset-7 { 112 | margin-left: 58.333333%; 113 | } 114 | 115 | .col-offset-8 { 116 | margin-left: 66.666667%; 117 | } 118 | 119 | .col-offset-9 { 120 | margin-left: 75%; 121 | } 122 | 123 | .col-offset-10 { 124 | margin-left: 83.333333%; 125 | } 126 | 127 | .col-offset-11 { 128 | margin-left: 91.666667%; 129 | } 130 | 131 | .col-offset-12 { 132 | margin-left: 100%; 133 | } 134 | 135 | .col-end { 136 | flex: 0 0 auto; 137 | margin-left: auto; 138 | } 139 | 140 | /* Responsive Collapse */ 141 | @media (max-width: 700px) { 142 | .row { 143 | margin-left: auto; 144 | margin-right: auto; 145 | } 146 | [class*="col-"] { 147 | padding-left: 0; 148 | padding-right: 0; 149 | } 150 | [class*="col-"]:not(.col-fix) { 151 | flex: 0 0 100%; 152 | max-width: 100%; 153 | } 154 | 155 | [class*="col-offset-"]:not(.col-fix) { 156 | margin-left: 0; 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /static/static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/floss-fund/website/377fc8bec61c6487d33a7e22efdf8673921af93c/static/static/favicon.png -------------------------------------------------------------------------------- /static/static/fossunited.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/static/funding.example.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://floss.fund/schema/v1.0.0/funding.schema.json#", 3 | "version": "v1.0.0", 4 | "entity": { 5 | "type": "individual", 6 | "role": "maintainer", 7 | "name": "The One (demo)", 8 | "email": "neo@example.com", 9 | "phone": "", 10 | "description": "I'm a developer interested in preserving digital freedoms and the decentralised and open nature of the internet. I like breaking down barriers in the cyberspace with FOSS technologies.\n\nSometimes I can't shake the feeling that the system we're living in isn't quite what it seems. That there is no spoon.\n\nPS: This is a dummy listing.", 11 | "webpageUrl": { 12 | "url": "https://example.com", 13 | "wellKnown": "" 14 | } 15 | }, 16 | "projects": [{ 17 | "guid": "zombo-app", 18 | "name": "Zombo App (demo)", 19 | "description": "The Zombo App is a database application that solves many problems and makes anything possible. Anything at all. Its possibilities are only limited by the user's own imagination.\n\nIt has been in active development for a decade and is used by millions of people worldwide. It is the next frontier.\n\nPS: This is a dummy demo listing.", 20 | "webpageUrl": { 21 | "url": "https://example.com/projects/zombo" 22 | }, 23 | "repositoryUrl": { 24 | "url": "https://github.com/example/zombo-app", 25 | "wellKnown": "https://github.com/example/zombo-app/blob/main/.well-known/funding-manifest-urls" 26 | }, 27 | "licenses": ["spdx:AGPL-3.0"], 28 | "tags": ["database", "columnar-database", "high-performance", "key-value-store"] 29 | }, 30 | { 31 | "guid": "vb-gooey", 32 | "name": "VB Gooey IP tracer (demo)", 33 | "description": "Using quantum-entangled packet sniffers, this cutting-edge Visual Basic GUI IP Tracer employs hyper-threaded blockchain algorithms to decrypt the target's digital DNA signature. The system's neural network of overclocked RAM crystals generates a real-time holographic map of cyberspace, pinpointing the perp's location with nanosecond precision.\n\nIn addition, its turbo-encabulated flux capacitor and multi-dimensional firewall penetrator, allows any hyper-dimensional air-gapped network to be broken into with ease.\n\n\n\nPS: This is a dummy demo listing.", 34 | "webpageUrl": { 35 | "url": "https://vb-gooey-ip-tracer.net", 36 | "wellKnown": "https://vb-gooey-ip-tracer.net/.well-known/funding-manifest-urls" 37 | }, 38 | "repositoryUrl": { 39 | "url": "https://github.com/example/vb-gooey-ip-tracer", 40 | "wellKnown": "https://github.com/example/vb-gooey-ip-tracer/blob/main/.well-known/funding-manifest-urls" 41 | }, 42 | "licenses": ["spdx:MIT"], 43 | "tags": ["high-performance", "security", "gui", "networking"] 44 | }], 45 | "funding": { 46 | "channels": [ 47 | { 48 | "guid": "mybank", 49 | "type": "bank", 50 | "address": "", 51 | "description": "Will accept direct bank transfers. Please e-mail me for details." 52 | }, 53 | { 54 | "guid": "mypay", 55 | "type": "payment-provider", 56 | "address": "https://example.com/payme/@myid", 57 | "description": "Pay with your debit/credit card through this gateway and setup recurring subscriptions." 58 | } 59 | ], 60 | "plans": [ 61 | { 62 | "guid": "hosting-monthly", 63 | "status": "active", 64 | "name": "Hosting support", 65 | "description": "This will cover the monthly server hosting costs for the projects.", 66 | "amount": 250, 67 | "currency": "USD", 68 | "frequency": "monthly", 69 | "channels": ["mypay"] 70 | }, 71 | { 72 | "guid": "developer-time", 73 | "status": "active", 74 | "name": "Developer compensation", 75 | "description": "This will cover the cost of one developer working part-time on the projects.", 76 | "amount": 1000, 77 | "currency": "USD", 78 | "frequency": "monthly", 79 | "channels": ["mybank"] 80 | }, 81 | { 82 | "guid": "angel-plan", 83 | "status": "active", 84 | "name": "Goodwill plan", 85 | "description": "Pay anything you wish to show your goodwill for the project.", 86 | "amount": 0, 87 | "currency": "USD", 88 | "frequency": "one-time", 89 | "channels": ["mybank", "mypay"] 90 | } 91 | ], 92 | "history": [ 93 | {"year": 2020, "income": 10000, "expenses": 2000, "taxes": 200, "currency": "USD", "description": "Started accepting donations for the first time."}, 94 | {"year": 2021, "income": 15000, "expenses": 5000, "taxes": 500, "currency": "USD", "description": ""}, 95 | {"year": 2022, "income": 30000, "expenses": 10000, "taxes": 2000, "currency": "USD", "description": ""}, 96 | {"year": 2023, "income": 25000, "expenses": 15000, "taxes": 1500, "currency": "USD", "description": "There was a dip, but we see this improving."} 97 | ] 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /static/static/funding.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "v1.0.0", 3 | 4 | // Required. The entity associated with the project, soliciting funds. 5 | // This can be an individual, organisation, community etc. 6 | "entity": { 7 | "type": "", // Required. [individual, group, organisation, other]. Use the closest approximation. 8 | "role": "", // Required. [owner, steward, maintainer, contributor, other]. Use the closest approximation. 9 | "name": "", // Required. Name of the entity. Max len 250. 10 | "email": "", // Required. Max len 250. 11 | "phone": "", // Optional. Generally suitable for organisations. Max len 32. 12 | "description": "", // Required. Information about the entity. Max len 2000. 13 | "webpageUrl": { 14 | "url": "", // Required. Webpage with information about the entity. Starts with https:// or http://. Max len 250. 15 | "wellKnown": "" // Optional. Required if the above url and the URL of the funding.json manifest do not have the same hostname. This url should have the same hostname as the url to verify that the publisher of the manifest is authorised to solicit funding on behalf of the url. Starts with https:// or http:// and ends with /.well-known/funding-manifest-urls. Max len 250. 16 | } 17 | }, 18 | 19 | // Optional. One or more projects for which the funding is solicited. 20 | "projects": [{ 21 | "guid": "", // Required. A short unique ID for the project. Lowercase-alphanumeric-dashes only. eg: my-cool-project. Max len 32. 22 | "name": "", // Required. Name of the project. Max len 250. 23 | "description": "", // Required. Description of the project. Max len 2000. 24 | "webpageUrl": { 25 | "url": "", // Required. Webpage with information about the project. Starts with https:// or http://. Max len 250. 26 | "wellKnown": "" // Optional. Required if the above url and the URL of the funding.json manifest do not have the same hostname. This url should have the same hostname as the url to verify that the publisher of the manifest is authorised to solicit funding on behalf of the url. Starts with https:// or http:// and ends with /.well-known/funding-manifest-urls. Max len 250. 27 | }, 28 | "repositoryUrl": { 29 | "url": "", // Required. URL of the repository where the project's source code and other assets are available. Starts with https:// or http://. Max len 250. 30 | "wellKnown": "" // Optional. Required if the above url and the URL of the funding.json manifest do not have the same hostname. This url should have the same hostname as the url to verify that the publisher of the manifest is authorised to solicit funding on behalf of the url. Starts with https:// or http:// and ends with /.well-known/funding-manifest-urls. Max len 250. 31 | }, 32 | "licenses": [], // Required. The project's licenses (up to 5). For standard licenses, use the license ID from the SDPX index prefixed by "spdx:". eg: "spdx:GPL-3.0", "spdx:CC-BY-SA-4.0" 33 | "tags": [] // Required. Up to 10 general tags describing the project. Lowercase-alphanumeric-dashes (max 32 chars). eg: ["programming", "developer-tools"]. For reference, see tags.txt 34 | }], 35 | 36 | // Required. 37 | "funding": { 38 | // Required. This describes one or more channels via which the entity can receive funds. 39 | "channels": [{ 40 | "guid": "", // Required. A short unique ID for the channel. Lowercase-alphanumeric-dashes only. eg: mybank, my-paypal. Max len 32. 41 | "type": "", // Required. [bank, payment-provider, cheque, cash, other]. 42 | "address": "", // Optional. A short unstructured textual representation of the payment address for the channel. eg: "Account: 12345 (branch: ABCX)", "mypaypal@domain.com", "https://payment-url.com", or a physical address for cheques. Max len 250. 43 | "description": "" // Optional. Any additional description or instructions for the payment channel. Max len 500. 44 | }], 45 | 46 | // Required. One or more funding and payment plans. 47 | "plans": [{ 48 | "guid": "", // Required. A short unique ID for the plan. Lowercase-alphanumeric-dashes only. eg: mybank, paypal. Max len 32. 49 | "status": "", // Required. [active, inactive]. Indicates whether this plan is currently active or inactive. 50 | "name": "", // Required. Name of the funding plan. eg: "Starter support plan", "Infra hosting", "Monthly funding plan". 51 | "description": "", // Optional. Any additional description or instructions for the funding plan. 52 | "amount": 0, // Required. The solicited amount for this plan. 0 is a wildcard that indicates "any amount". 53 | "currency": "", // Required. Three letter ISO 4217 currency code. eg: USD, EUR 54 | "frequency": "", // Required. [one-time, weekly, fortnightly, monthly, yearly, other] 55 | "channels": [] // Required. One or more channel IDs defined in channels[] via which this plan can accept payments. 56 | }], 57 | 58 | // Optional. A simple summary of funding history. Only include if at least one, either income or expenses, have to be communicated. 59 | "history": [{ 60 | "year": 2024, // Required. Year (fiscal, preferably). 61 | "income": 0, // Optional. 62 | "expenses": 0, // Optional. 63 | "taxes": 0, // Optional. 64 | "currency": "", // Required. Three letter ISO 4217 currency code. eg: USD, EUR 65 | "description": "" // Optional. Any additional description. Max length 500. 66 | }] 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /static/static/ico-github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/static/ico-www.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/static/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 15 | 17 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /static/static/project-tags.txt: -------------------------------------------------------------------------------- 1 | 3d-modeling 2 | analytics 3 | android 4 | animation 5 | api 6 | artificial-intelligence 7 | astronomy 8 | audio 9 | augmented-reality 10 | bots 11 | browser-extensions 12 | business-intelligence 13 | cloud 14 | communication 15 | computers 16 | cryptography 17 | data 18 | data-science 19 | data-visualization 20 | database 21 | design 22 | developer-tools 23 | development 24 | devops 25 | documentation 26 | e-commerce 27 | education 28 | finance 29 | gaming 30 | graphics 31 | hardware 32 | health 33 | information-management 34 | internet-of-things 35 | ios 36 | kernel 37 | knowledge 38 | linux 39 | machine-learning 40 | maps 41 | medical 42 | mobile 43 | mobility 44 | networking 45 | operating-systems 46 | payments 47 | photography 48 | privacy 49 | productivity 50 | programming 51 | publishing 52 | science 53 | scientific-computing 54 | security 55 | server 56 | software-engineering 57 | storage 58 | user-experience 59 | virtual-reality 60 | web-design 61 | web-development 62 | -------------------------------------------------------------------------------- /static/static/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --primary: #0EA74B; 3 | --secondary: #a4926a; 4 | --black: #222; 5 | } 6 | 7 | * { 8 | box-sizing: border-box; 9 | } 10 | html, body { 11 | margin: 0; 12 | padding: 0; 13 | font-size: 20px; 14 | } 15 | body { 16 | background: #fff; 17 | font-family: "Rubik", sans-serif; 18 | font-weight: 400; 19 | line-height: 1.6; 20 | color: var(--black); 21 | } 22 | 23 | a { 24 | color: var(--primary); 25 | text-decoration: underline; 26 | text-decoration-thickness: 2.5px; 27 | text-underline-offset: 5px; 28 | } 29 | a:hover { 30 | color: #000; 31 | } 32 | 33 | h1, h2, h3, h4, h5, h6 { 34 | font-weight: 500; 35 | line-height: 1.3; 36 | margin: 45px 0 30px 0; 37 | } 38 | 39 | h1 { 40 | font-size: 2rem; 41 | } 42 | h2 { 43 | font-size: 1.5rem; 44 | } 45 | 46 | h3 { 47 | font-size: 1.3rem; 48 | } 49 | 50 | h4 { 51 | font-size: 1.1rem; 52 | } 53 | 54 | p { 55 | margin: 0.5rem 0 1.1rem 0; 56 | } 57 | 58 | hr { 59 | background: #e3d2af; 60 | border: 0; 61 | height: 1px; 62 | margin: 45px 0; 63 | } 64 | 65 | table { 66 | border-collapse: collapse; 67 | width: 100%; 68 | border-radius: 5px; 69 | } 70 | th, td { 71 | padding: 10px 20px; 72 | text-align: left; 73 | vertical-align: top; 74 | } 75 | th { 76 | } 77 | td { 78 | background: #fff; 79 | border: 1px solid #ddd; 80 | } 81 | 82 | code { 83 | padding: 0 10px; 84 | border-radius: 10px; 85 | } 86 | pre { 87 | border-radius: 10px; 88 | max-width: 92vw; 89 | padding: 15px; 90 | overflow: scroll; 91 | } 92 | pre code { 93 | display: block; 94 | max-height: 50vh; 95 | } 96 | code:not(pre code) { 97 | background: #edfbf3; 98 | display: inline-block; 99 | } 100 | sup a { 101 | text-decoration: none; 102 | padding: 0; 103 | text-decoration-thickness: 0; 104 | text-underline-offset: 0; 105 | } 106 | 107 | input { 108 | padding: 10px; 109 | font-size: 1rem; 110 | border-radius: 3px; 111 | border: 1px solid #aaa; 112 | width: 100%; 113 | } 114 | button { 115 | font-size: 1rem; 116 | border: 0; 117 | cursor: pointer; 118 | } 119 | 120 | ul.flat { 121 | list-style-type: none; 122 | padding: 0; 123 | } 124 | 125 | button, .button { 126 | background: var(--black); 127 | text-decoration: none; 128 | color: #fff; 129 | font-weight: bold; 130 | display: inline-block; 131 | padding: 15px 50px; 132 | border-radius: 30px; 133 | border: 0; 134 | } 135 | button:hover, 136 | .button:hover { 137 | background: var(--primary); 138 | color: #fff; 139 | } 140 | 141 | .main { 142 | margin-top: 45px; 143 | margin-bottom: 30px; 144 | } 145 | 146 | .dim-small { 147 | font-size: 0.875rem; 148 | color: #888; 149 | } 150 | 151 | .header { 152 | margin-bottom: 10vh; 153 | } 154 | .header .nav { 155 | text-align: right; 156 | } 157 | .header .nav a { 158 | margin-left: 30px; 159 | text-decoration: none; 160 | } 161 | 162 | #nav-toggle { 163 | display: none; 164 | } 165 | .nav-toggle-label { 166 | display: none; 167 | cursor: pointer; 168 | } 169 | 170 | .logo img { 171 | max-height: 72px; 172 | transition: transform 0.7s ease-in-out; 173 | } 174 | .logo img:hover { 175 | transform: rotate(30deg); /* Full rotation on hover */ 176 | } 177 | 178 | .intro { 179 | margin: 15vh 0 60px 0; 180 | } 181 | .intro .title { 182 | font-size: 2.5rem; 183 | line-height: 1.3; 184 | margin: 0 0 30px 0; 185 | } 186 | .intro h2 { 187 | margin: 0 0 30px 0; 188 | } 189 | .intro p { 190 | color: #777; 191 | } 192 | .partner img { 193 | display: block; 194 | width: 75px; 195 | margin-top: 15px; 196 | } 197 | .definition ul { 198 | padding: 0 0 0 15px; 199 | } 200 | .intro .name span { 201 | color: var(--primary); 202 | } 203 | .intro code { 204 | padding: 0; 205 | background: none; 206 | } 207 | 208 | 209 | .recipients table tbody tr td:first-child { 210 | width: 70%; 211 | } 212 | .recipients table thead tr th:nth-child(3), 213 | .recipients table tbody tr td:nth-child(3) { 214 | text-align: right; 215 | } 216 | 217 | .footer { 218 | border-top: 1px solid #e3d2af; 219 | padding-top: 30px; 220 | margin: 10vh 0 15px 0; 221 | color: var(--secondary); 222 | font-size: 0.875rem; 223 | } 224 | .footer a { 225 | text-decoration: none; 226 | } 227 | 228 | .posts-list { 229 | list-style-type: none; 230 | padding: 0; 231 | } 232 | .posts-list .meta { 233 | border-top: 1px solid #e3d2af; 234 | margin-top: 40px; 235 | padding-top: 30px; 236 | font-size: 0.875rem; 237 | } 238 | .posts-list .date { 239 | text-align: right; 240 | color: #888; 241 | } 242 | .posts-list li { 243 | margin-bottom: 90px; 244 | } 245 | 246 | .posts-list .title { 247 | margin: 0 0 20px 0; 248 | } 249 | 250 | .post .title { 251 | margin: 0 0 15px 0; 252 | } 253 | .post .date { 254 | margin-bottom: 30px; 255 | } 256 | .post .title a { 257 | text-decoration: none; 258 | } 259 | .post .date { 260 | color: #888; 261 | } 262 | 263 | .avatar { 264 | font-size: 0.875rem; 265 | display: flex; 266 | } 267 | .avatar img { 268 | border-radius: 100%; 269 | max-width: 52px; 270 | } 271 | .avatar div:first-child { 272 | flex-basis: 75px; 273 | flex-grow: 0; 274 | } 275 | .avatar div:last-child { 276 | flex-grow: 1; 277 | } 278 | .avatar .title { 279 | color: #888; 280 | display: block; 281 | } 282 | .avatar .links { 283 | margin-top: 10px; 284 | } 285 | .avatar .links img { 286 | opacity: 0.4; 287 | max-height: 20px; 288 | margin-right: 5px; 289 | } 290 | 291 | .main-post .avatar { 292 | margin-top: 85px; 293 | position: sticky; 294 | top: 30px; 295 | } 296 | 297 | 298 | @media (max-width: 800px) { 299 | .main { 300 | margin: 15px 0; 301 | } 302 | .header .nav a { 303 | margin: 0 0 10px 0; 304 | display: block; 305 | } 306 | .nav-toggle-label { 307 | display: block; 308 | padding: 0 0 0 15px; 309 | position: relative; 310 | font-size: 1.3rem; 311 | } 312 | .header .nav .items { 313 | display: none; 314 | position: absolute; 315 | background: rgba(255,255,255,0.95); 316 | left: 0; 317 | right: 35px; 318 | padding: 0px; 319 | z-index: 100; 320 | top: 70px; 321 | } 322 | #nav-toggle:checked ~ .items { 323 | display: block !important; 324 | } 325 | 326 | .header { 327 | margin-bottom: 45px; 328 | } 329 | .row { 330 | margin-right: 0; 331 | margin-left: 0; 332 | } 333 | .main-post .avatar { 334 | margin: 0; 335 | } 336 | } -------------------------------------------------------------------------------- /static/static/thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/floss-fund/website/377fc8bec61c6487d33a7e22efdf8673921af93c/static/static/thumb.png -------------------------------------------------------------------------------- /templates/authors.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/floss-fund/website/377fc8bec61c6487d33a7e22efdf8673921af93c/templates/authors.html -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {% if section.title %} 7 | {{ section.title }} 8 | {% elif page.title %} 9 | {{ page.title }} 10 | {% elif config.extra.default_title %} 11 | {{ config.extra.default_title }} 12 | {% endif %} 13 | 14 | {% block rss %} 15 | 16 | {% endblock %} 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
32 |
33 | 34 |
35 | 46 |
47 |
48 | {% block content %} {% endblock %} 49 |
50 | 51 | 52 |
53 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /templates/blog-page.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block content %} 4 | {% set authors = load_data(path="content/authors.json") %} 5 | 6 |
7 | {% set author = authors | get(key=page.authors[0]) %} 8 |
9 |
10 |
11 |
12 |
13 | {{ author.name }} photo 14 |
15 |
16 | {{ author.name }} 17 | {{ author.title }} 18 | 19 | 27 |
28 |
29 |
30 | 31 |
32 |

{{ page.title }}

33 |
{{ page.date | date(format="%d %b %Y") }}
34 | 35 | {{ page.content | safe }} 36 |
37 |
38 |
39 |
40 | 41 | {% endblock content %} 42 | -------------------------------------------------------------------------------- /templates/blog.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | 4 | {% set authors = load_data(path="content/authors.json") %} 5 |

{{ section.title }}

6 | 7 |
8 | 38 |
39 | 40 | {% endblock content %} 41 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block content %} 4 |
5 |

FLOSS/fund

6 |

$1 million a year for free and open source projects

7 |

No []strings attached

8 |
9 | 10 |
11 |
12 |

13 | FLOSS/fund is dedicated to supporting critical, impactful, and valuable 14 | Free/Libre and Open Source projects globally. 15 | We give up to $1 million per year to support developers and communities 16 | that create and maintain projects, big and small. 17 |

18 |

Read the announcement

19 |
20 | 21 |
22 |

23 | Much of the foundation underlying the modern technology landscape and the internet itself is built on the fruits of labour of individuals and 24 | communities in the form of free and open source software. We aim to contribute our tiny bit to this 25 | enormous global effort of passion, innovation, and freedom. 26 |

27 |

28 | FLOSS — 29 | Free/Libre and Open Source Software | 30 | For the Love of Open Source Software | 31 | The Floss flower, Ceiba speciosa, in the logo. Why not! 32 |

33 |

34 | Ecosystem partner
35 | FOSS United Foundation logo 36 | 37 |

38 |
39 | 40 |

Apply now

41 | 42 | {% endblock content %} 43 | -------------------------------------------------------------------------------- /templates/page.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block content %} 4 |
5 | {{ page.content | safe }} 6 |
7 | {% endblock content %} 8 | -------------------------------------------------------------------------------- /templates/shortcodes/read_file.html: -------------------------------------------------------------------------------- 1 | {%- set contents = load_data(path=path, format="plain") -%} 2 | {{- contents | safe -}} --------------------------------------------------------------------------------