Compare commits

...

7 Commits

Author SHA1 Message Date
Alicia Sykes 22c3373be9
Update CONTRIBUTING.md 2024-04-05 21:42:02 +01:00
Liss-Bot 912bff8a34 Updated Awesome Privacy content (last modified on 05-Apr-2024) 2024-04-05 19:55:35 +00:00
Alicia Sykes 318a315ec1 Shrink link to links 2024-04-03 23:54:49 +01:00
Alicia Sykes 90bb158a96 Adds submit link for empty sections 2024-04-02 23:46:01 +01:00
Alicia Sykes a2f36e1ce7 Adds syntax highlighting to YAML snippet, and hides incomplete entries 2024-04-01 23:39:57 +01:00
Alicia Sykes 434d30f5bd Updates clarity on where additional data is pulled from 2024-03-31 23:39:21 +01:00
Alicia Sykes 09c0116be9 Adds spacing for consistency 2024-03-30 23:38:53 +00:00
7 changed files with 224 additions and 75 deletions

View File

@ -1,23 +1,40 @@
# Contributing
- [How to make an Addition](#how-to-make-an-addition)
- [Requirements](#requirements)
- [Guidelines](#guidelines)
- [Editing the YAML](#editing-the-yaml)
- [Top-Level Structure](#top-level-structure)
- [Service Fields](#service-fields)
- [Example](#example)
- [Validating your Entry](#validating-your-entry)
- [Need Help?](#need-help)
- [Thank You](#thank-you)
---
### How to make an Addition
## How to make an Addition
You can add, edit or remove entries by opening a pull request.
All data is stored in [`awesome-privacy.yml`](https://github.com/Lissy93/awesome-privacy/blob/main/awesome-privacy.yml).
If you're adding, editing or removing a listing - **this is the only file you need to edit**.
### Process
Get started by forking the repo, [editing](https://github.com/Lissy93/awesome-privacy/edit/main/awesome-privacy.yml) the data, committing changes to your fork, and opening a pull request upstream to this repo's main branch. If you're new to open source, you can find some resources to get you started at [git-in.to](https://git-in.to), but feel free to reach out if you need any help 😊
Your request will be reviewed, then either merged, or have changes requested, or if the [Guidelines](#guidelines) are not met, it may be closed with a comment explaining why.
To make layout or stylistic amendments to the website ([awesome-privacy.xyz](https://awesome-privacy.xyz)), see [Website docs](https://github.com/Lissy93/awesome-privacy#the-website) in the readme for build and running instructions.
### Other Changes
- To make layout or stylistic edits to the site ([awesome-privacy.xyz](https://awesome-privacy.xyz)), see the [Website docs](https://github.com/Lissy93/awesome-privacy#the-website) in the readme for build and running instructions.
- To make edits to the API ([api.awesome-privacy.xyz](http://api.awesome-privacy.xyz/)), see the [API docs](https://github.com/Lissy93/awesome-privacy#the-api) in the readme for build and running instructions.
---
### Requirements
## Requirements
For software to be included in this list, it must meet the following requirements:
@ -52,15 +69,91 @@ Usually these entries go within the "Notable Mentions" section instead._
---
### Editing the YAML
## Guidelines
Your pull request must follow these requirements. Failure to do so, might result in it being closed.
- Do not edit the README directly when adding / editing a listing
- Ensure your PR is not a duplicate, search for existing / previous submissions first
- You must respond to any comments or requests for changes in a timely manner, 48-hours maximum
- Write short but descriptive git commit messages, under 50 characters. This must be in the format of `Adds [software-name] to [section-name]`. Your PR will be rejected if you name it `Updates README.md`
- Only include a single addition / amendment / removal, per pull request
- If your pull request contains multiple commits, you must squash them first
- You must complete each of the sections in the pull request template. Do not delete it!
- Where applicable, include links to supporting material for your addition: git repo, docs, recent security audits, etc. This will make researching it much easier for reviewers
- While adding new software to the list, don't make your entry read like an advert. Be objective, and include drawbacks as well as strengths
- Your entry should be added at the bottom of the appropriate category, unless otherwise requested
- If there are other pull requests open, please help review them before submitting yours
- A pull request must receive multiple approval reviews before it can be merged
- You must be transparent about your affiliation with a product or service that you are adding. It's totally okay to submit your own projects as additions (providing they meet the requirements), but if you don't declare your association with that project then there becomes a clear conflict of interest
- You must adhere to the Contributor Covenant Code of Conduct
- Don't open a Draft / WIP pull request while you work on the guidelines. A pull request should be 100% ready and should adhere to all the above guidelines when you open it
- Your changes must be correctly spelled, and with good grammar
- Your changes must be correctly formatted, in valid markdown
- The addition title must be a link the project, and in bold
- The addition description must be no less than 50, and no more than 250 characters, keep it clear and to the point
---
## Editing the YAML
All content in both the README and website is generated using the data in [`awesome-privacy.yml`](https://github.com/Lissy93/awesome-privacy/blob/main/awesome-privacy.yml).
This file may look a bit daunting to start with, but don't worry - it's pretty simple.
#### Top-Level Structure
### Top-Level Structure
```mermaid
---
title: Class Diagram
---
classDiagram
direction LR
class Root {
+categories: array
}
class Category {
+name: string
+sections: array
}
class Section {
+name: string
+services: array
+intro: string?
+notableMentions: array|string?
+furtherInfo: string?
+wordOfWarning: string?
+alternativeTo: array?
}
class Service {
+name: string
+description: string
+url: string
+github: string?
+icon: string?
+followWith: string?
+securityAudited: boolean?
+openSource: boolean?
+acceptsCrypto: boolean?
+tosdrId: number?
+iosApp: string?
+androidApp: string?
+discordInvite: string?
+subreddit: string?
}
Root "many" --> "*" Category
Category "many" --> "*" Section
Section "many" --> "*" Service
```
At a high-level, the file exports an array of categories, each containing a `name` and array of `sections`.
```yaml
categories:
- name: Essentials
@ -111,55 +204,46 @@ services:
email alias with 1 click, and have all messages forwarded onto your personal email.
```
#### Service Fields
### Service Fields
Each service (aka an app/website/software) has the following fields:
| Attribute | Description | Type | Required |
|-------------------|--------------------------------------------------------------------------------------------------------------|---------|----------|
| `name` | The name of the listing | `string`| Required |
| `description` | A short and subjective description of the listing. Markdown is supported. Split longer descriptions onto multiple lines | `string`| Required |
| `url` | The fully qualified domain name of the listing's homepage | `string`| Required |
| `icon` | A path to an icon file for the listing's logo. Must be square, no less than 64x64 and no larger than 512x512 pixels | `string`| Required |
| `github` | The GitHub repository hosting the listing's source code. In the format of `[owner]/[repo]` | `string`| Optional |
| `securityAudited` | Has the listing been audited by an accredited security researcher, with the report publicly published? | `bool` | Optional |
| `acceptsCrypto` | If payment is required/accepted, do they accept anonymous payments using cryptocurrency, such as Monero? | `bool` | Optional |
| `openSource` | Is the source code in its entirety published somewhere accessible so it can be built-from-source or self-hosted? | `bool` | Optional |
| `tosdrId` | If the privacy policy has been analysed by ToS;DR, include the ID to their report | `number`| Optional |
| Attribute | Description | Type | Required |
|-------------------|--------------------------------------------------------------------------------------------------------------|----------|----------|
| `name` | The name of the listing | `string` | Required |
| `description` | A short and subjective description of the listing. Markdown is supported. Split longer descriptions onto multiple lines | `string` | Required |
| `url` | The fully qualified domain name of the listing's homepage | `string` | Required |
| `icon` | A path to an icon file for the listing's logo. Must be square, no less than 64x64 and no larger than 512x512 pixels | `string` | Required |
| `github` | The GitHub repository hosting the listing's source code. In the format of `[owner]/[repo]` | `string` | Optional |
| `securityAudited` | Has the listing been audited by an accredited security researcher, with the report publicly published? | `bool` | Optional |
| `acceptsCrypto` | If payment is required/accepted, do they accept anonymous payments using cryptocurrency, such as Monero? | `bool` | Optional |
| `openSource` | Is the source code in its entirety published somewhere accessible so it can be built-from-source or self-hosted? | `bool` | Optional |
| `tosdrId` | If the privacy policy has been analysed by ToS;DR, include the ID to their report | `number` | Optional |
| `iosApp` | URL to the listing's mobile app on the Apple App Store | `string` | Optional |
| `androidApp` | URL to the listing's mobile app on the Google Play Store | `string` | Optional |
| `discordInvite` | The invite code to the Discord server for this service | `string` | Optional |
| `subreddit` | Name of the subreddit for this service, without `r/` or the full URL | `string` | Optional |
Anything which is marked as `optional`, and which doesn't apply to your service can just be left out.
Keep max line length around 80-100 chars. If the description is long, split it onto multiple lines, using YAML multi-line string (like `: |`).
> [!NOTE]
> Anything which is marked as `optional`, and which doesn't apply to your service can just be left out.<br>
> Keep max line length around 80-100 chars. If the description is long, split it onto multiple lines, using YAML multi-line string (like `: |`).
#### Validating your Entry
### Example
https://github.com/Lissy93/awesome-privacy/blob/912bff8a34e6195ad7b03bc1be978ccd559ed42a/awesome-privacy.yml#L39-L52
### Validating your Entry
Once you've finished editing the YAML file, you may run `make validate` to run [`validate-awesome-privacy.py`](https://github.com/Lissy93/awesome-privacy/blob/main/lib/validate-awesome-privacy.py), which will ensure your [`awesome-privacy.yml`](https://github.com/Lissy93/awesome-privacy/blob/main/awesome-privacy.yml) is both valid and fits within our defined schema (in [`lib/schema.json`](https://github.com/Lissy93/awesome-privacy/blob/main/lib/schema.json))
#### Need Help?
### Need Help?
Just look at some of the existing entries in the file for inspiration, and if you're still stuck, feel free to reach out for help. We're here to help you get your contribution merged!
---
### Guidelines
## Thank You
Your pull request must follow these requirements. Failure to do so, might result in it being closed.
Thank you for helping keep Awesome Privacy up-to-date! It's thanks to contributors like you that this project is possible.
- Do not edit the README directly when adding / editing a listing
- Ensure your PR is not a duplicate, search for existing / previous submissions first
- You must respond to any comments or requests for changes in a timely manner, 48-hours maximum
- Write short but descriptive git commit messages, under 50 characters. This must be in the format of `Adds [software-name] to [section-name]`. Your PR will be rejected if you name it `Updates README.md`
- Only include a single addition / amendment / removal, per pull request
- If your pull request contains multiple commits, you must squash them first
- You must complete each of the sections in the pull request template. Do not delete it!
- Where applicable, include links to supporting material for your addition: git repo, docs, recent security audits, etc. This will make researching it much easier for reviewers
- While adding new software to the list, don't make your entry read like an advert. Be objective, and include drawbacks as well as strengths
- Your entry should be added at the bottom of the appropriate category, unless otherwise requested
- If there are other pull requests open, please help review them before submitting yours
- A pull request must receive multiple approval reviews before it can be merged
- You must be transparent about your affiliation with a product or service that you are adding. It's totally okay to submit your own projects as additions (providing they meet the requirements), but if you don't declare your association with that project then there becomes a clear conflict of interest
- You must adhere to the Contributor Covenant Code of Conduct
- Don't open a Draft / WIP pull request while you work on the guidelines. A pull request should be 100% ready and should adhere to all the above guidelines when you open it
- Your changes must be correctly spelled, and with good grammar
- Your changes must be correctly formatted, in valid markdown
- The addition title must be a link the project, and in bold
- The addition description must be no less than 50, and no more than 250 characters, keep it clear and to the point

12
.github/README.md vendored
View File

@ -115,7 +115,7 @@ corporations, governments, and hackers from logging, storing or selling your per
- [Casting & Streaming](#casting--streaming) (1)
- [Screenshot Tools](#screenshot-tools) (0)
- [3D Graphics](#3d-graphics) (2)
- [Animation](#animation) (0)
- [Animation](#animation) (1)
</details></blockquote>
## Essentials
@ -5345,7 +5345,15 @@ is more limited, but it's a good choice for beginners.
### Animation
<p align="center"><b>⚠️ This section is still a work in progress ⚠️</b><br /><i>Check back soon, or help us complete it by submitting a pull request</i></p>
- **[<img src='https://upload.wikimedia.org/wikipedia/commons/2/24/Logo_Aseprite.png' width='16' height='16' alt='icon' /> Aseprite](https://www.aseprite.org/)** - An animated sprite editor & pixel art tool for Windows, macOS and Linux.[…](https://awesome-privacy.xyz/creativity/animation/aseprite "View full Aseprite report")
- <details>
<summary>Stats</summary>
[![GitHub: https://github.com/aseprite/aseprite](https://img.shields.io/github/stars/https://github.com/aseprite/aseprite?style=flat&logo=github&label=&color=%235f53f4&cacheSeconds=3600)](https://github.com/https://github.com/aseprite/aseprite) [![Aseprite on Awesome Privacy](https://img.shields.io/badge/View%20Report-FC60A8?style=flat&logo=awesomelists&label=Aseprite)](https://awesome-privacy.xyz/creativity/animation/aseprite)
📦 Open Source
</details>
<p align="right"><sup><a href="#top">⬆️ [Back to Top]</a></sub></p>
---

View File

@ -5083,6 +5083,7 @@ categories:
github: NatronGitHub/Natron
icon: https://natrongithub.github.io/img/Natron_icon.svg
openSource: true
- name: Audio Editors & Recorders
alternativeTo: ['adobe audition', 'garageband', 'fl studio', 'ableton live']
services:
@ -5102,6 +5103,7 @@ categories:
icon: https://www.audacityteam.org/_astro/Audacity_Logo.63b57726.svg
openSource: true
tosdrId: 4516
- name: Casting & Streaming
alternativeTo: ['xsplit', 'streamlabs obs', 'twitch studio', 'wirecast']
services:
@ -5118,9 +5120,11 @@ categories:
icon: https://obsproject.com/assets/images/new_icon_small-r.png
openSource: true
tosdrId: 4227
- name: Screenshot Tools
alternativeTo: ['snagit', 'greenshot', 'lightshot', 'gyazo', 'sharex']
services: []
- name: 3D Graphics
alternativeTo: ['blender', 'autodesk maya', 'cinema 4d', '3ds max', 'sketchup']
services:
@ -5146,6 +5150,15 @@ categories:
url: https://wings3d.com
github: dgud/wings
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Wings3d.png/120px-Wings3d.png
- name: Animation
alternativeTo: ['adobe after effects', 'animate cc', 'toon boom harmony', 'moho (anime studio)', 'pencil2d']
services: []
services:
- name: Aseprite
url: https://www.aseprite.org/
icon: https://upload.wikimedia.org/wikipedia/commons/2/24/Logo_Aseprite.png
description: An animated sprite editor & pixel art tool for Windows, macOS and Linux.
github: https://github.com/aseprite/aseprite
openSource: true

View File

@ -19,6 +19,32 @@
const serviceSecurityAudited = writable(false);
const serviceCrypto = writable(false);
const additionalInfo = writable('');
let codeBlock: any;
let interactiveActivated = false;
$: yamlText, updateHighlighting();
function updateHighlighting() {
if (codeBlock) {
codeBlock.textContent = yamlText
codeBlock.dataset.highlighted && delete codeBlock.dataset.highlighted;
if (window && (window as any).hljs) {
(window as any).hljs.highlightElement(codeBlock);
interactiveActivated = true;
}
}
}
const filterEmptyValues = (obj: Record<string, any>) => {
const filteredObj: Record<string, any> = {};
Object.keys(obj).forEach(key => {
if (obj[key] || ['name', 'url', 'icon', 'description'].includes(key)) {
filteredObj[key] = obj[key];
}
});
return filteredObj;
}
$: yamlText = yaml.dump([{
name: $serviceName,
@ -34,7 +60,7 @@
openSource: $serviceOpenSource,
securityAudited: $serviceSecurityAudited,
acceptsCrypto: $serviceCrypto,
}]);
}].map(obj => filterEmptyValues(obj)));
$: issueUrl = makeAdditionRequest({
listingCategory: $listingCategory,
@ -56,28 +82,16 @@
// Form submission handler
function handleSubmit() {
const formData = {
listingCategory: $listingCategory,
serviceName: $serviceName,
serviceUrl: $serviceUrl,
serviceIcon: $serviceIcon,
serviceDescription: $serviceDescription,
serviceGithub: $serviceGithub,
serviceTosdrId: $serviceTosdrId,
serviceOpenSource: $serviceOpenSource,
serviceSecurityAudited: $serviceSecurityAudited,
serviceCrypto: $serviceCrypto,
additionalInfo: $additionalInfo,
serviceIosApp: $serviceIosApp,
serviceAndroidApp: $serviceAndroidApp,
serviceDiscordInvite: $serviceDiscordInvite,
serviceSubreddit: $serviceSubreddit,
};
const issueCreationUrl = makeAdditionRequest(formData, yamlText);
window.open(issueCreationUrl, '_blank');
window.open(issueUrl, '_blank');
}
</script>
<svelte:head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/an-old-hope.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/yaml.min.js"></script>
</svelte:head>
<p>
Before completing this form, you must ensure that the service you are adding aligns
with the <a href="/about#creteria">Requirements</a> for Awesome Privacy.
@ -278,7 +292,10 @@
within <a href="github.com/lissy93/awesome-privacy/blob/main/awesome-privacy.yml">awesome-privacy.yml</a>
upon approval.
</p>
<pre>{@html yamlText}</pre>
{#if !interactiveActivated || !codeBlock}
<pre><code class="language-yaml">{@html yamlText}</code></pre>
{/if}
<pre><code bind:this={codeBlock} class="language-yaml"></code></pre>
<p>Your submission will need to be reviewed by a maintainer and the community before it can be merged.</p>
</div>

View File

@ -131,6 +131,8 @@ const {
<p class="nothing-yet">
<strong>⚠️ This section is still a work in progress ⚠️</strong><br />
Check back soon, or help us complete it by submiting a pull request on GitHub.
<br />
<span class="quick-submit">Or submit an entry <a href="/submit">here</a></span>
</p>
)}
@ -156,6 +158,11 @@ const {
font-style: italic;
text-align: center;
margin-bottom: 3rem;
.quick-submit {
margin-top: 1rem;
font-size: 0.8rem;
opacity: 0.8;
}
}
ul {

View File

@ -84,7 +84,7 @@ const { previous, next } = makePaginationLinks();
</span>
</div>
<SectionList title={title} sections={sections} bigTitle={true} />
<a href={`/all#${slugify(title)}`}>Browse All</a>
Or, <a href={`/all#${slugify(title)}`}>Browse All {title}</a>
<div class="pagination-navigation">
{ previous ? (
<Button url={`/${slugify(previous)}`}>

View File

@ -47,16 +47,29 @@ The data is augmented with some extra info, to add additional context to each se
The aim of this is to give you a broader picture of each listing, to help you make a more informed decision.
Currently, this extra data is pulled from:
- **GitHub API** - To fetch info about each project's repository
- Including author & contributors, creation & last updated date, languages, license and star count
- **Web Check** - To fetch info about each project's website
- Including SSL chain, WHOIS, server location, blacklist check and a screenshot
- **ToS;DR** - To fetch a summerized version of each services Privacy Policy
- **Privacy Policy** - To fetch a summerized version of each services Privacy Policy
- Including policy and terms of service links, postives + negatives and privacy score
- **User Reviews** - User-submitted comments + feedback on a given service
- Implemented using self-hosted instance of Remark42
- **Portainer Templates** - To fetch info about each project's Docker image (if it's self-hosted)
- <small>Via [ToS;DR](https://tosdr.org/)</small>
- **GitHub** - To fetch info about each project's source code
- Including author & contributors, creation & last updated date, languages, license and star count
- <small>Via the [GitHub API](https://developer.github.com/v3/)</small>
- **Android App** - To fetch privacy info about each project's Android app
- Including permissions, trackers, privacy score and metdata
- <small>Via [Exodus Privacy](https://exodus-privacy.eu.org/)</small>
- **iOS App** - To fetch info about each project's iOS app
- Including app size, rating, publish/update date, author and screenshots
- <small>Via [Apple App Store](https://developer.apple.com/documentation/appstoreconnectapi/app_store)</small>
- **Docker** - To fetch info about each project's Docker image (if it's self-hosted)
- Including supported architectures, run command, pull count, last updated and config options
- <small>Via [Portainer-Templates](https://portainer-templates.as93.net/) and the [Docker Hub](https://hub.docker.com/) API</small>
- **Website** - To fetch privacy info about each project's website
- Including SSL chain, WHOIS, server location, blacklist check and a screenshot
- <small>Via [Web-Check](https://web-check.xyz/)</small>
- **Socials** - To fetch info about each project's social media presence
- Including follower count, post frequency, engagement and a screenshot
- <small>Via the Reddit, Discord and Twitter APIs</small>
- **User Reviews** - User-submitted comments + feedback on a given service
- <small>Implemented using self-hosted instance of Remark42</small>
### API
We also have a free, no-auth, CORS-enabled RESR API,
@ -409,6 +422,13 @@ h3 {
:global(strong) {
font-weight: 500;
}
:global(small) {
font-size: 0.8rem;
opacity: 0.7;
:global(a) {
color: var(--accent-3);
}
}
:global(code) {
font-family: 'Courier New', Courier, monospace;
background: #acabb782;