Add asset licensing notices (#11397)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
This commit is contained in:
Samuel Newman
2026-08-12 15:49:31 +03:00
committed by GitHub
parent 98fa8eafdf
commit 1f3c619dd2
16 changed files with 834 additions and 2 deletions
+41
View File
@@ -0,0 +1,41 @@
name: Asset notices
# Verifies that every path named in ASSETS.md and NOTICE.md still exists.
#
# Those files tell forkers which assets our MIT license does not cover, and carry the third-party
# attribution notices we are required to pass along. If an asset moves and the notice is not
# updated, the notice silently stops meaning anything. This job makes that visible in review
# rather than a year later.
#
# No paths filter: the notices also reference files under src/ (e.g. the inline logo components),
# so any rename anywhere in the tree can rot a notice. The check runs in under a second.
on:
push:
branches: [main]
pull_request:
concurrency:
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
cancel-in-progress: true
permissions:
contents: read
jobs:
check:
name: Check asset licensing notices
runs-on: ubuntu-latest
steps:
- name: ⬇️ Check out Git repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: ⚙️ Set up Node
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: package.json
- name: 📜 Verify asset notices
run: node scripts/check-asset-notices.mjs
+206
View File
@@ -0,0 +1,206 @@
# Asset licensing
The [MIT license](./LICENSE) in this repository covers our source code. It does not cover
every file in the tree.
Some of the images, icons, fonts, and brand assets here are licensed to Bluesky Social PBC
by third parties, or are our trademarks, or are third-party trademarks. We cannot pass those
rights on to you. This document identifies them.
We should have written this down sooner. If you have already forked this repository and
shipped one of the assets listed below, we are not treating that as bad faith on your part —
the repository did not tell you, and that is our fault. Please work through the
[If you are forking](#if-you-are-forking) checklist when you can.
Assets are scoped by directory wherever possible, so that adding a file to a carved-out
directory does not require an edit here. Individual paths are listed only where an asset does
not sit in a dedicated directory.
**The rule:** if a file is listed in this document, the MIT license does not grant you rights
to it. Everything in [Section 6](#6-third-party-assets-you-may-redistribute) is redistributable
on its own terms, which travel with the files.
---
## 1. Commissioned artwork — licensed to Bluesky only
**`assets/splash/`**
The load-screen illustration, in light and dark variants. Used by
`src/view/com/auth/SplashScreen.tsx` (`illustration-mobile.png`, `illustration-mobile-dark.png`)
and by `expo-splash-screen` via `app.config.js` (`splash.png`, `splash-dark.png`,
`android-splash-logo-white.png`).
This artwork was commissioned by Bluesky Social PBC from illustrator Owen D. Pomery, through
his agent Brilliant Artists Ltd. Copyright remains with the artist. Our license is limited to
Bluesky's own products and channels, it is exclusive to us, and it does not permit us to
sublicense the artwork or to distribute modified versions of it.
**If you are forking this repository, replace these files.** They are not available for
third-party licensing while our license runs, so please do not contact the artist or his agent
to request permission — the answer is constrained by our agreement, not by their willingness.
See [`assets/splash/README.md`](./assets/splash/README.md).
## 2. Licensed icon system — not ours to pass on
**`assets/icons/` (top level), and the icon glyphs in `bskyembed/assets/`**
The user-interface glyphs at the top level of `assets/icons/`, plus copies of several in
`bskyembed/assets/`, come from the Central icon system by Iconists (David & Storm GbR). Bluesky
Social PBC licenses these icons for use in our own products. **That license is for our own use.
It does not include the right to pass any rights to the icons on to you.**
This is not us telling you that you cannot use these icons. It is us telling you that any right
you have to use them has to come from Iconists rather than from us, and that you should not
assume our MIT license gave you one. Licenses are available directly from
[iconists.co](https://iconists.co), and there are good openly licensed alternatives if you would
rather not buy one.
This section covers every file at the top level of `assets/icons/` **except** those named
elsewhere in this document — specifically `logomark.svg`, `newskie.svg`, `verifiedCheck.svg`,
`verifierCheck.svg`, `starterPack.svg`, `starter_pack_icon.svg`, `custom_logo_japan.svg`,
`apple_logo.svg`, and `android_logo.svg`. The `assets/icons/flags/` and `assets/icons/community/`
subdirectories are covered by [Section 6](#6-third-party-assets-you-may-redistribute) and
[Section 5](#5-third-party-trademarks) respectively.
See [`assets/icons/README.md`](./assets/icons/README.md).
## 3. Bluesky trademarks and brand assets
Our name, logo, butterfly mark, logotype, and app icons are trademarks of Bluesky Social PBC.
They are not licensed to you under the MIT license or by this document. Use of them is governed
by our [Trademark Policy](https://bsky.social/about/support/trademarks) and [Brand Guidelines](https://bsky.social/about/support/branding).
You may refer to Bluesky by name to describe interoperability or origin — for example, "a client
for Bluesky," or "based on the Bluesky app." You may not use our marks as the identity of your
own product or service, or in any way likely to suggest that Bluesky publishes, endorses, or
supports it.
- `assets/app-icons/` — all iOS and Android app icon variants, including the `.icon` bundles
- `assets/favicon.png`
- `assets/logo.png`
- `assets/default-avatar.png`
- `assets/icon-android-foreground.png`
- `assets/icon-android-monochrome.png`
- `assets/icon-android-notification.png`
- `assets/icons/logomark.svg`
- `assets/icons/newskie.svg`
- `assets/icons/verifiedCheck.svg`
- `assets/icons/verifierCheck.svg`
- `assets/icons/starterPack.svg`, `assets/icons/starter_pack_icon.svg`
- `bskyembed/assets/logo.svg`
- `bskyembed/assets/logo_full_name.svg`
- `bskyweb/static/favicon.png`, `favicon-16x16.png`, `favicon-32x32.png`
- `bskyweb/static/apple-touch-icon.png`
- `bskyweb/static/safari-pinned-tab.svg`
- `bskyweb/static/social-card-default.png`, `bskyweb/static/social-card-default-gradient.png`
- `bskyweb/embedr-static/favicon.png`, `favicon-16x16.png`, `favicon-32x32.png`
- `modules/BlueskyClip/Images.xcassets/AppIcon.appiconset/`
- Inline vector path data in `src/view/icons/Logo.tsx` and `src/view/icons/Logotype.tsx`
We are not asking anyone to remove these files from the repository. They are here because the
app needs them to build. Replacing them is a forker's responsibility, not ours.
## 4. Community and contest artwork — credited, but not ours to license
These are third-party artworks that appear in the app with attribution. We hold no license that
lets us pass rights to them on to you.
- `assets/kawaii.png`, `assets/kawaii_smol.png` — logo by
[@sawaratsuki.bsky.social](https://bsky.app/profile/sawaratsuki.bsky.social), shown as an
opt-in variant and credited in `src/view/shell/Drawer.tsx` and
`src/view/shell/desktop/RightNav.tsx`
- `assets/icons/custom_logo_japan.svg` — the winning entry from the Bluesky Japan logo contest,
created by a contest entrant
Replace these if you fork. If you want to use them, that is a conversation with the artist,
not with us.
## 5. Third-party trademarks
These marks belong to other companies. We include them to identify their services in our UI —
sign-in buttons, store badges, and links to third-party applications. We are neither granting
nor withholding permission, because it is not ours to give. Your use of them rests on your own
nominative-use basis or on permission from the mark owner.
- `assets/icons/apple_logo.svg` — Apple Inc.
- `assets/icons/android_logo.svg` — Google LLC
- `assets/icons/community/` — Leaflet, Offprint, pckt (`pckt.svg`, `pckt-full.svg`),
Standard.site, and Germ Network (`germ_logo.webp`)
Apple's and Google's marks in particular carry their own brand guidelines governing size,
spacing, and permitted contexts. If you ship a sign-in button or a store badge, follow theirs,
not ours.
## 6. Third-party assets you may redistribute
These are licensed on terms that permit redistribution. Nothing in this document restricts them.
Their license text travels with the files, and you must keep it there.
| Asset | Path | License | Notice |
|---|---|---|---|
| Inter typeface | `assets/fonts/inter/` | SIL Open Font License 1.1 | [`OFL.txt`](./assets/fonts/inter/OFL.txt) |
| Inter typeface (OG card service) | `bskyogcard/src/assets/fonts/` | SIL Open Font License 1.1 | [`README.md`](./bskyogcard/src/assets/fonts/README.md) |
| country-flag-icons | `assets/icons/flags/` | MIT, © @catamphetamine | [`README.md`](./assets/icons/flags/README.md) |
| Material Icons | `bskyweb/static/media/MaterialIcons.*.ttf` | Apache License 2.0 | [`NOTICE.md`](./NOTICE.md) |
Build output under `bskyweb/static/media/` also contains compiled Inter files. They are the same
OFL-licensed typeface, emitted by the web build.
**One thing to watch on Inter:** OFL 1.1 includes a Reserved Font Name provision. If you modify
or subset the font, the result cannot be distributed under the name "Inter."
See [`NOTICE.md`](./NOTICE.md) for the consolidated third-party notices.
## 7. Product imagery — treat as not licensed to you
**`assets/images/`**
Product illustration and announcement imagery — onboarding value-prop art, chat backgrounds,
feature announcement graphics, and similar.
**Treat everything in this directory as outside the MIT license and not licensed for your use.**
Some of it is commissioned work. Rather than have you guess file by file which is which, we are
drawing the line at the directory.
If you are forking, replace these or ship without them.
See [`assets/images/README.md`](./assets/images/README.md).
---
## If you are forking
You have our blessing to fork this application. To do it cleanly:
1. **Replace `assets/splash/`.** Commissioned artwork, licensed to Bluesky only. See
[Section 1](#1-commissioned-artwork--licensed-to-bluesky-only).
2. **Source your own UI icons.** The glyph set in `assets/icons/` is licensed to us for our own
use. See [Section 2](#2-licensed-icon-system--not-ours-to-pass-on).
3. **Replace `assets/images/`.** Treat as not licensed to you. See
[Section 7](#7-product-imagery--treat-as-not-licensed-to-you).
4. **Replace the Bluesky marks** listed in [Section 3](#3-bluesky-trademarks-and-brand-assets) —
app icons, favicons, logo files, and the inline logo paths in `src/view/icons/`.
5. **Replace or remove the community artwork** in
[Section 4](#4-community-and-contest-artwork--credited-but-not-ours-to-license).
6. **Check your own position on the third-party marks** in
[Section 5](#5-third-party-trademarks).
7. **Keep the license notices** for the assets in
[Section 6](#6-third-party-assets-you-may-redistribute).
8. **Change your branding, support links, and analytics** as described in the
[Forking guidelines](./README.md#forking-guidelines).
This list is about licensing. The [Forking guidelines](./README.md#forking-guidelines) in the
README cover the rest of what makes a fork clearly distinguishable from Bluesky, which matters
both for your users and for app store review.
## Questions
If something in this repository looks like it should be on this list and is not, or if you are
unsure whether an asset is covered, open an issue or email us and we will sort it out. We would
much rather answer the question than have someone guess.
---
*Last reviewed: August 2026. This document describes the licensing position of assets in this
repository. It is not a grant of rights, and it does not modify the [MIT license](./LICENSE) as
it applies to source code.*
+62
View File
@@ -0,0 +1,62 @@
# Third-party notices
This file collects the attribution and license notices that third-party components in this
repository require us to carry. It is separate from [`ASSETS.md`](./ASSETS.md), which describes
which assets our [MIT license](./LICENSE) does and does not cover.
If you distribute this software or a fork of it, these notices need to travel with it.
---
## Material Icons
**Path:** `bskyweb/static/media/MaterialIcons.*.ttf`
**License:** Apache License, Version 2.0 — full text at [`licenses/APACHE-2.0.txt`](./licenses/APACHE-2.0.txt)
```
Copyright 2018 Google, Inc. All Rights Reserved.
```
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License
is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the License for the specific language governing permissions and limitations under
the License.
*This font is emitted into the web build by `@expo/vector-icons`, which the Expo toolchain pulls
in transitively. It is a distributed artifact rather than a source asset, which is why the notice
lives here rather than beside the file.*
## Inter
**Paths:** `assets/fonts/inter/`, `bskyogcard/src/assets/fonts/`, and compiled copies under
`bskyweb/static/media/`
**License:** SIL Open Font License, Version 1.1 — full text at
[`assets/fonts/inter/OFL.txt`](./assets/fonts/inter/OFL.txt)
```
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
```
Inter is licensed under the SIL Open Font License, Version 1.1. The license includes a Reserved
Font Name provision: a modified or subsetted version of the font may not be distributed under the
name "Inter."
## country-flag-icons
**Path:** `assets/icons/flags/`
**License:** MIT — see [`assets/icons/flags/README.md`](./assets/icons/flags/README.md)
```
Copyright (c) 2020 @catamphetamine <purecatamphetamine@gmail.com>
```
---
For the licensing position of assets that are **not** covered by our MIT license — commissioned
artwork, the licensed icon system, Bluesky trademarks, and third-party marks — see
[`ASSETS.md`](./ASSETS.md).
+14 -1
View File
@@ -57,6 +57,15 @@ Please be sure to:
- Change all branding in the repository and UI to clearly differentiate from Bluesky.
- Change any support links (feedback, email, terms of service, etc) to your own systems.
- Replace any analytics or error-collection systems with your own so we don't get super confused.
- Replace the load-screen illustration in `assets/splash/`. It is commissioned artwork licensed to Bluesky alone, and our MIT license does not cover it.
- Source your own UI icons. The glyph set in `assets/icons/` is licensed to us by a third party for our own use, and that license does not extend to you.
- Replace the Bluesky logo, app icons, and other brand assets. Our trademarks are not licensed with the code.
Please read [./ASSETS.md](./ASSETS.md) before you ship. Not every file in this repository is
covered by our MIT license — some of the artwork, icons, fonts, and brand assets are licensed to
us by third parties or are trademarks, and `ASSETS.md` says which ones and what to do about them.
That file is new. Its absence is why some forks have shipped assets they did not have rights to,
and that was our omission rather than theirs.
## Security disclosures
@@ -68,7 +77,11 @@ Bluesky is an open social network built on the AT Protocol, a flexible technolog
## License (MIT)
See [./LICENSE](./LICENSE) for the full license.
See [./LICENSE](./LICENSE) for the full license, which covers the source code in this repository.
It does not cover every file. Certain images, icons, fonts, and brand assets are licensed to us
by third parties, or are trademarks, and are carved out — see [./ASSETS.md](./ASSETS.md). Required
third-party attribution notices are collected in [./NOTICE.md](./NOTICE.md).
Bluesky Social PBC has committed to a software patent non-aggression pledge. For details see [the original announcement](https://bsky.social/about/blog/10-01-2025-patent-pledge).
+16
View File
@@ -0,0 +1,16 @@
The app icons in this directory are trademarks of Bluesky Social
PBC — the butterfly mark and its variants, as shipped to the iOS App Store and Google Play.
**These are not covered by the [MIT license](../../LICENSE) that applies to the rest of this
repository.** Use of Bluesky's marks is governed by our Trademark Policy and Brand Guidelines,
not by the license on our source code.
You may say that your app is a client for Bluesky, or that it is based on the Bluesky app. You
may not use our marks as the identity of your own product, or in any way likely to suggest that
Bluesky publishes, endorses, or supports it.
If you are forking this repository, replace these files with your own icons. Shipping an app that
looks like Bluesky is also a problem under the app stores' own rules on copycat apps, quite apart
from trademark.
See [`ASSETS.md`](../../ASSETS.md) for the full asset licensing picture.
+92
View File
@@ -0,0 +1,92 @@
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
https://openfontlicense.org/
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION AND CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+15
View File
@@ -0,0 +1,15 @@
[Inter](https://rsms.me/inter/) is a typeface by Rasmus
Andersson, licensed under the SIL Open Font License, Version 1.1.
The full license text is in [`OFL.txt`](./OFL.txt) and must travel with these files.
```
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
```
**You may redistribute these files.** Nothing in [`ASSETS.md`](../../../ASSETS.md) restricts them
— they are here because the OFL requires the license text to accompany the font, not because they
are carved out of our [MIT license](../../../LICENSE).
**One thing to watch:** OFL 1.1 includes a Reserved Font Name provision. If you modify or subset
the font, you may not distribute the result under the name "Inter."
+23
View File
@@ -0,0 +1,23 @@
The user-interface glyphs in this directory are from the
[Central icon system](https://iconists.co/central) by Iconists (David & Storm GbR). Bluesky
Social PBC licenses them for use in our own products. **That license is for our own use, and it
does not extend to you.**
**These icons are not covered by the [MIT license](../../LICENSE) that applies to the rest of
this repository.** If you want to use them, buy a license from
[iconists.co](https://iconists.co). There are also good openly licensed icon sets if you would
rather not.
This notice covers the SVG files at the top level of this directory. It does not cover:
- `flags/` — country-flag-icons, MIT licensed, see [`flags/README.md`](./flags/README.md)
- `community/` — third-party service marks, see [`community/README.md`](./community/README.md)
- `logomark.svg`, `newskie.svg`, `verifiedCheck.svg`, `verifierCheck.svg`, `starterPack.svg`,
`starter_pack_icon.svg` — Bluesky trademarks and brand assets
- `custom_logo_japan.svg` — artwork by a Bluesky Japan logo contest entrant
- `apple_logo.svg`, `android_logo.svg` — Apple and Google trademarks
Each of those is described in [`ASSETS.md`](../../ASSETS.md).
Adding an icon here? If it came from Central, this notice already covers it. If it came from
anywhere else, add it to `ASSETS.md` so the notice does not go stale.
+14
View File
@@ -0,0 +1,14 @@
The icons in this directory are the marks of third-party
services that appear in the Bluesky app — [Leaflet](https://leaflet.pub),
[Offprint](https://offprint.net), [pckt](https://pckt.blog), [Standard.site](https://standard.site), and
[Germ Network](https://germnetwork.com).
**These marks belong to their respective owners.** They are not Bluesky trademarks, they are not
covered by the [MIT license](../../../LICENSE) that applies to the rest of this repository, and we
are not in a position to grant or withhold permission to use them. We include them to identify
those services in our UI.
If you fork this repository and keep these icons, your use of them rests on your own
nominative-use basis or on permission from the mark owner.
See [`ASSETS.md`](../../../ASSETS.md) for the full asset licensing picture.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

+14
View File
@@ -0,0 +1,14 @@
The product imagery in this directory — onboarding illustrations,
chat backgrounds, feature announcement graphics, and similar — is **not covered by the
[MIT license](../../LICENSE)** that applies to the rest of this repository.
Some of it is commissioned artwork that we are not able to sublicense. Rather than have you work
out file by file which is which, treat the whole directory as not licensed for your use.
If you are forking this repository, replace these files or ship without them.
**Internal note:** this directory is carved out of the MIT license as a whole. If you are adding
an asset that we do want forks to be able to reuse, put it somewhere else rather than adding an
exception here — the carve-out only stays maintainable if the directory boundary means something.
See [`ASSETS.md`](../../ASSETS.md) for the full asset licensing picture.
+19
View File
@@ -0,0 +1,19 @@
The load-screen illustration in this directory was commissioned by Bluesky Social PBC from
illustrator [Owen D. Pomery](https://owenpomery.com/work), through his agent
[Brilliant Artists Ltd](https://brilliantartists.co.uk/). Copyright in the artwork remains with
the artist.
**This artwork is not covered by the [MIT license](../../LICENSE) that applies to the rest of
this repository.** Our license is limited to Bluesky's own products and channels, it is exclusive
to us, and it does not permit us to sublicense the artwork or to distribute modified versions
of it.
If you are forking this repository, replace these files. Because our license is exclusive, the
artwork is not available for separate third-party licensing while that license runs — please do
not approach the artist or his agent for permission.
Adding a file here? It is carved out of the MIT license by directory, so a new file inherits
that treatment automatically. If the file is not commissioned artwork covered by this notice,
put it somewhere else.
See [`ASSETS.md`](../../ASSETS.md) for the full asset licensing picture.
+16
View File
@@ -0,0 +1,16 @@
These are subsets of
[Inter](https://rsms.me/inter/) by Rasmus Andersson, used by the OG card rendering service.
Inter is licensed under the SIL Open Font License, Version 1.1. The full license text is at
[`assets/fonts/inter/OFL.txt`](../../../../assets/fonts/inter/OFL.txt) and must travel with these
files.
```
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
```
**You may redistribute these files.** They are not carved out of our
[MIT license](../../../../LICENSE) — this notice exists because the OFL requires it.
**One thing to watch:** OFL 1.1 includes a Reserved Font Name provision. If you modify or subset
the font further, you may not distribute the result under the name "Inter."
+202
View File
@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+99
View File
@@ -0,0 +1,99 @@
#!/usr/bin/env node
/**
* Verifies that every path named in ASSETS.md and NOTICE.md still exists.
*
* These two files tell forkers which assets our MIT license does not cover. If a file moves or
* is renamed and the notice is not updated, the notice quietly stops meaning anything — which is
* the failure mode that produced the problem in the first place. This check makes that loud.
*
* Usage: node scripts/check-asset-notices.mjs
* Exits 1 if any referenced path is missing.
*/
import {readFileSync, existsSync, readdirSync} from 'node:fs'
import {dirname, join, resolve} from 'node:path'
import {fileURLToPath} from 'node:url'
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..')
const SOURCES = ['ASSETS.md', 'NOTICE.md']
/** Tokens that look like paths but are not: package names, URLs, prose. */
const NOT_A_PATH = /^(https?:|@|[A-Z_]+$)/
/** Extract `backticked` tokens that are plausibly repo paths. */
function extractPaths(markdown) {
const out = new Set()
for (const [, token] of markdown.matchAll(/`([^`\n]+)`/g)) {
const t = token.trim()
// Only validate tokens that are unambiguously repo-relative paths. Bare filenames that
// appear in comma-separated lists ("`bskyweb/static/favicon.png`, `favicon-16x16.png`")
// are reported separately rather than guessed at.
if (!t.includes('/') || NOT_A_PATH.test(t) || t.includes(' ')) continue
out.add(t.replace(/^\.\//, ''))
}
return [...out]
}
/** Resolve a path that may end in `/` (directory) or contain a single `*` glob segment. */
function pathExists(p) {
const full = join(ROOT, p)
if (existsSync(full)) return true
if (!p.includes('*')) return false
// Handle one glob in the final segment, e.g. bskyweb/static/media/MaterialIcons.*.ttf
const dir = dirname(full)
const pattern = p.split('/').pop()
if (!existsSync(dir)) return false
const re = new RegExp(
'^' +
pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*') +
'$',
)
return readdirSync(dir).some(f => re.test(f))
}
let missing = 0
let checked = 0
const skipped = new Set()
for (const source of SOURCES) {
const file = join(ROOT, source)
if (!existsSync(file)) {
console.error(`${source} is missing`)
missing++
continue
}
const markdown = readFileSync(file, 'utf8')
for (const [, token] of markdown.matchAll(/`([^`\n]+)`/g)) {
const t = token.trim()
if (!t.includes('/') && /\.[a-z0-9]{2,5}$/i.test(t)) skipped.add(t)
}
for (const p of extractPaths(markdown)) {
checked++
if (!pathExists(p)) {
console.error(`${source} references a path that does not exist: ${p}`)
missing++
}
}
}
console.log(`Checked ${checked} referenced paths across ${SOURCES.join(', ')}.`)
if (skipped.size) {
console.log(
`Note: ${skipped.size} bare filename(s) not verified (they are relative to a nearby path): ` +
[...skipped].sort().join(', '),
)
}
if (missing) {
console.error(
`\n${missing} problem(s) found. An asset named in a licensing notice has moved or been ` +
`removed. Update the notice — do not just silence this check.`,
)
process.exit(1)
}
console.log('All referenced paths exist.')
@@ -102,7 +102,7 @@ export function GermButton({
function GermLogo({size}: {size: 'small' | 'large'}) {
return (
<Image
source={require('../../../../assets/images/germ_logo.webp')}
source={require('../../../../assets/icons/community/germ_logo.webp')}
accessibilityIgnoresInvertColors={false}
contentFit="cover"
useAppleWebpCodec