plucking the key changes from other PR

This commit is contained in:
Paul Copplestone committed 2021-09-01 22:23:03 +08:00
1 parent 4bb324cbf9
commit e1a4dcd3bb
22 files changed
+551 -136

No files matched your search

-37
View File
@@ -1,37 +0,0 @@
---
id: about
title: About
description: 'What is Supabase?'
slug: /
---
## What it is
Supabase is an open source Firebase alternative. We are a service to:
- Listen to database changes.
- Query your tables, including filtering, pagination, and deeply nested relationships (like GraphQL).
- Create, update, and delete rows.
- Manage your users and their permissions.
- Interact with your database using a simple UI.
## What it isn't
Supabase is not a 1-to-1 mapping of Firebase. While we are building many of the features that Firebase offers, we are not going about it the same way.
Our technological choices are quite different to Firebase. Everything we use is open source. Wherever possible, we use and support existing tools in the ecosystem, rather than developing from scratch.
Most notably, we use Postgres rather than a NoSQL store. This was a deliberate choice. We believe that no other database on the market offers the scalability and functionality required to legitimately compete with Firebase.
## How it works
At its core, Supabase is a suite of open source tools, stitched together to build a seamless developer experience:
![Supabase Architecture](/img/supabase-architecture.png)
- [PostgreSQL](https://www.postgresql.org/) is an object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.
- [Realtime](https://github.com/supabase/realtime) is an Elixir server that allows you to listen to PostgreSQL inserts, updates, and deletes using WebSockets. Supabase listens to Postgres' built-in replication functionality, converts the replication byte stream into JSON, then broadcasts the JSON over WebSockets.
- [PostgREST](http://postgrest.org/) is a web server that turns your PostgreSQL database directly into a RESTful API.
- [postgres-meta](https://github.com/supabase/postgres-meta) is a RESTful API for managing your Postgres, allowing you to fetch tables, add roles, and run queries etc.
- [GoTrue](https://github.com/netlify/gotrue) is an SWT-based API for managing users and issuing SWT tokens.
- [Kong](https://github.com/Kong/kong) is a cloud-native API gateway.
+131
View File
@@ -0,0 +1,131 @@
---
id: about
title: Introduction
description: 'What is Supabase?'
slug: /
hide_table_of_contents: true
---
import Link from '@docusaurus/Link'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
const frameworks = [
{ name: 'Angular', logo: '/img/libraries/dart-icon.svg', href: '/docs/guides/with-angular' },
{
name: 'Cloudflare',
logo: '/img/libraries/dart-icon.svg',
href: 'https://github.com/supabase/supabase/tree/master/examples/with-cloudflare-workers',
},
{
name: 'Expo',
logo: '/img/libraries/expo-icon.svg',
href: 'https://github.com/supabase/supabase/tree/master/examples/expo-todo-list',
},
{ name: 'Flutter', logo: '/img/libraries/dart-icon.svg', href: '/docs/guides/with-flutter' },
{ name: 'Next.js', logo: '/img/libraries/nextjs-icon.svg', href: '/docs/guides/with-nextjs' },
{ name: 'React', logo: '/img/libraries/react-icon.svg', href: '/docs/guides/with-react' },
{ name: 'Svelte', logo: '/img/libraries/svelte-icon.svg', href: '/docs/guides/with-svelte' },
{ name: 'Vue', logo: '/img/libraries/vuejs-icon.svg', href: '/docs/guides/with-vue-3' },
]
Supabase is an open source Firebase alternative.
It's provides all the backend services you need to build a product. You can use it completely, or just the services you require:
<div class="container" style={{ padding: 0 }}>
<div class="row is-multiline">
{/* Database */}
<div class="col col--6">
<Link class="card" to="/docs/guides/database" style={{ height: '100%' }}>
<div class="card__body">
<h4>Database</h4>
<p>A dedicated, scalable Postgres database.</p>
</div>
</Link>
</div>
{/* Auth */}
<div class="col col--6">
<Link class="card" to="/docs/guides/auth" style={{ height: '100%' }}>
<div class="card__body">
<h4>Auth</h4>
<p>User management with Row Level Security.</p>
</div>
</Link>
</div>
{/* Auth */}
<div class="col col--6">
<Link class="card" to="/docs/guides/storage" style={{ height: '100%' }}>
<div class="card__body">
<h4>File Storage</h4>
<p>Store, organize, and serve large files.</p>
</div>
</Link>
</div>
{/* API */}
<div class="col col--6">
<Link class="card" to="/docs/guides/api" style={{ height: '100%' }}>
<div class="card__body">
<h4>Auto-generated APIs</h4>
<p>Instantly APIs for your database.</p>
</div>
</Link>
</div>
</div>
</div>
## Getting started
Visit [app.supabase.io](https://app.supabase.io) to get started with the hosted platform or visit the [self-hosting](/docs/guides/self-hosting) docs to learn how to host Supabase yourself.
Supabase is just Postgres, which makes it compatible with a large number of tools and frameworks.
<div class="container" style={{}}>
<div class="row is-multiline">
{frameworks.map((x) => (
<div key={x.name} class="col col--3">
<Link class="card" to={x.href}>
<div class="card__body" style={{ display: 'flex', gap: 20 }}>
{x.logo && <img src={x.logo} alt={x.name} width="20"/>}
<p>{x.name}</p>
</div>
</Link>
</div>
))}
</div>
</div>
## How to use these docs
The documentation is divided into 3 sections.
<div class="container" style={{ padding: 0 }}>
<div class="row is-multiline">
{/* Overview */}
<div class="col col--4">
<Link class="card" to="/docs/architecture" style={{ height: '100%' }}>
<div class="card__body">
<h4>Overview</h4>
<p>A summary of the tools and how to get started.</p>
</div>
</Link>
</div>
{/* Auth */}
<div class="col col--4">
<Link class="card" to="/docs/guides" style={{ height: '100%' }}>
<div class="card__body">
<h4>Guides</h4>
<p>In-depth explainations for each tool.</p>
</div>
</Link>
</div>
{/* Ref */}
<div class="col col--4">
<Link class="card" to="/docs/reference/javascript/supabase-client" style={{ height: '100%' }}>
<div class="card__body">
<h4>Reference Docs</h4>
<p>Technical documentation for Client Libraries and Systems.</p>
</div>
</Link>
</div>
</div>
</div>
+17
View File
@@ -0,0 +1,17 @@
---
id: architecture
title: Architecture
description: 'Supabase design and architecture'
# hide_table_of_contents: true
---
Supabase is open source. Wherever possible, we use and support existing tools rather than developing from scratch.
We choose open source tools which are scalable and we make them simple to use.
![Supabase Architecture](/img/supabase-architecture.png)
Supabase is not a 1-to-1 mapping of Firebase. While we are building many of the features that Firebase offers, we are not going about it the same way.
Our technological choices are quite different to Firebase. Everything we use is open source. Wherever possible, we use and support existing tools in the ecosystem, rather than developing from scratch.
Most notably, we use Postgres rather than a NoSQL store. This was a deliberate choice. We believe that no other database on the market offers the scalability and functionality required to legitimately compete with Firebase.
+121 -71
View File
@@ -4,57 +4,112 @@ title: Auth
description: Use Supabase to Authenticate and Authorize your users.
---
import Link from '@docusaurus/Link'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
const providers = [
{
name: 'Apple',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/auth/auth-apple',
},
{
name: 'Bitbucket',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/auth/auth-bitbucket',
},
{
name: 'Discord',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/auth/discord',
},
{
name: 'Facebook',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/auth/auth-facebook',
},
{
name: 'GitHub',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/auth/auth-github',
},
{
name: 'GitLab',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/auth/auth-gitlab',
},
{
name: 'Google',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/docs/guides/auth/auth-google',
},
{
name: 'Twitter',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/auth/auth-twitter',
},
{
name: 'Twitch',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/auth/auth-twitch',
},
{
name: 'Twilio',
// logo: '/img/libraries/dart-icon.svg',
href: '/docs/guides/auth/auth-twilio',
},
]
## User Management
Supabase makes it simple to manage your users.
<video width="99%" muted playsInline controls="true">
<source src="/videos/auth-zoom2.mp4" type="video/mp4" muted playsInline />
<source src="/videos/auth-zoom2.mp4" type="video/mp4" muted playsInline />
</video>
When users sign up, Supabase assigns them a unique ID. You can reference this ID anywhere in your database. For example, you might create a `profiles` table referencing the user using a `user_id` field.
Supabase provides the routes to [sign up](/docs/reference/javascript/auth-signup), [log in](/docs/reference/javascript/auth-signin),
Supabase provides the routes to [sign up](/docs/reference/javascript/auth-signup), [log in](/docs/reference/javascript/auth-signin),
[log out](/docs/reference/javascript/auth-signout), and manage users in your apps and websites.
## Third Party Logins
We currently support the following OAuth providers:
- Google
- GitHub
- GitLab
- Azure
- Facebook
- Bitbucket
- Twitter
- Apple (See [this guide](https://medium.com/identity-beyond-borders/how-to-configure-sign-in-with-apple-77c61e336003) to generate an Apple `client_secret`)
![OAuth Logins.](/img/supabase-oauth-logins.png)
<div class="container" style={{}}>
<div class="row is-multiline">
{providers.map((x) => (
<div key={x.name} class="col col--3">
<Link class="card" to={x.href}>
<div class="card__body" style={{ display: 'flex', gap: 20 }}>
{x.logo && <img src={x.logo} alt={x.name} width="20" />}
<p>{x.name}</p>
</div>
</Link>
</div>
))}
</div>
</div>
You can enable providers by navigating to Authentication > Settings > External OAuth Providers and inputting your `Client ID` and `Secret` for each.
To fetch these, you need to:
1. Generate `Client ID` and `Secret` ([Google](https://console.developers.google.com/apis/credentials), [GitHub](https://github.com/settings/applications/new), [GitLab](https://gitlab.com/oauth/applications), [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/use-oauth-on-bitbucket-cloud/), [Apple](https://developer.apple.com/account/ios/certificate), [Twitter](https://developer.twitter.com/en/portal/projects-and-apps) ).
2. Enter Authorized Redirect URI: `https://<your-project>.supabase.co/auth/v1/callback` on provider dashboard.
![OAuth Logins.](/img/supabase-oauth-logins.png)
## Row Level Security
Authentication only gets you so far. When you need granular authorization rules, nothing beats PostgreSQL's [Row Level Security (RLS)](https://www.postgresql.org/docs/current/ddl-rowsecurity.html). Supabase makes it simple to turn RLS on and off.
<video width="99%" muted playsInline controls="true">
<source src="/videos/rls-zoom2.mp4" type="video/mp4" muted playsInline />
<source src="/videos/rls-zoom2.mp4" type="video/mp4" muted playsInline />
</video>
## Policies
[Policies](https://www.postgresql.org/docs/current/sql-createpolicy.html) are PostgreSQL's rule engine. They are incredibly powerful and flexible, allowing you to write complex SQL rules which fit your unique business needs.
[Policies](https://www.postgresql.org/docs/current/sql-createpolicy.html) are PostgreSQL's rule engine. They are incredibly powerful and flexible, allowing you to write complex SQL rules which fit your unique business needs.
<video width="99%" muted playsInline controls="true">
<source src="/videos/policies-zoom2.mp4" type="video/mp4" muted playsInline />
<video width="99%" muted playsInline controls="true">
<source src="/videos/policies-zoom2.mp4" type="video/mp4" muted playsInline />
</video>
With policies, your database becomes the rules engine. Instead of repetitively filtering your queries, like this ...
@@ -62,9 +117,9 @@ With policies, your database becomes the rules engine. Instead of repetitively f
```js
const loggedInUserId = 'd0714948'
let { data, error } = await supabase
.from('users')
.select('user_id, name')
.eq('user_id', loggedInUserId)
.from('users')
.select('user_id, name')
.eq('user_id', loggedInUserId)
// console.log(data)
// => { id: 'd0714948', name: 'Jane' }
@@ -73,9 +128,7 @@ let { data, error } = await supabase
... you can simply define a rule on your database table, `auth.uid() = user_id`, and your request will return the rows which pass the rule, even when you remove the filter from your middleware:
```js
let user = await supabase
.from('users')
.select('user_id, name')
let user = await supabase.from('users').select('user_id, name')
// console.log(data)
// Still => { id: 'd0714948', name: 'Jane' }
@@ -104,7 +157,7 @@ where auth.uid() = todos.user_id; -- Policy is implicitly added.
2. Supabase returns a new JWT, which contains the user's `UUID`.
3. Every request to your database also sends the JWT.
4. Postgres inspects the JWT to determine the user making the request.
5. The user's UID can be used in policies to restrict access to rows.
5. The user's UID can be used in policies to restrict access to rows.
Supabase provides a special function in Postgres, `auth.uid()`, which extracts the user's UID from the JWT. This is especially useful when creating policies.
@@ -113,7 +166,7 @@ Supabase provides a special function in Postgres, `auth.uid()`, which extracts t
Here are some examples to show you the power of PostgreSQL's RLS. Each policy is attached to a table, and the policy is executed
every time a table is accessed.
### Allow read access
### Allow read access
```sql
-- 1. Create table
@@ -123,11 +176,11 @@ create table profiles (
);
-- 2. Enable RLS
alter table profiles
alter table profiles
enable row level security;
-- 3. Create Policy
create policy "Public profiles are viewable by everyone."
create policy "Public profiles are viewable by everyone."
on profiles for select using (
true
);
@@ -135,10 +188,9 @@ create policy "Public profiles are viewable by everyone."
1. Creates a table called `profiles` in the public schema (default schema).
2. Enables Row Level Security.
3. Creates a policy which allows all `select` queries to run.
3. Creates a policy which allows all `select` queries to run.
### Restrict updates
### Restrict updates
```sql
-- 1. Create table
@@ -148,11 +200,11 @@ create table profiles (
);
-- 2. Enable RLS
alter table profiles
alter table profiles
enable row level security;
-- 3. Create Policy
create policy "Users can update their own profiles."
create policy "Users can update their own profiles."
on profiles for update using (
auth.uid() = id
);
@@ -162,7 +214,6 @@ create policy "Users can update their own profiles."
2. Enables RLS.
3. Creates a policy which allows logged in users to update their own data.
### Policies with joins
Policies can even include table joins. This example shows how you can query "external" tables to build more advanced rules.
@@ -180,16 +231,16 @@ create table members (
);
-- 3. Enable RLS
alter table teams
alter table teams
enable row level security;
-- 4. Create Policy
create policy "Team members can update team details if they belong to the team."
on teams
for update using (
auth.uid() in (
select user_id from members
where team_id = id
auth.uid() in (
select user_id from members
where team_id = id
)
);
```
@@ -202,14 +253,14 @@ Policies can also make use of `security definer functions`. This is useful in a
-- 1. Follow example for 'Policies with joins' above
-- 2. Enable RLS
alter table members
alter table members
enable row level security
-- 3. Create security definer function
create or replace function get_teams_for_user(user_id uuid)
returns setof bigint as $$
select team_id
from members
select team_id
from members
where user_id = $1
$$ stable language sql security definer;
@@ -226,8 +277,8 @@ create policy "Team members can update team members if they belong to the team."
### Verifying email domains
Postgres has a function `right(string, n)` that returns the rightmost n characters of a string.
You could use this to match staff member's email domains.
Postgres has a function `right(string, n)` that returns the rightmost n characters of a string.
You could use this to match staff member's email domains.
```sql
-- 1. Create table
@@ -237,7 +288,7 @@ create table leaderboard (
);
-- 2. Enable RLS
alter table leaderboard
alter table leaderboard
enable row level security;
-- 3. Create Policy
@@ -250,8 +301,8 @@ create policy "Only Blizzard staff can update leaderboard"
### Time to live for rows
Policies can also be used to implement TTL or time to live feature that you see in Instagram stories or Snapchat.
In the following example, rows of `stories` table are available only if they have been created within the last 24 hours.
Policies can also be used to implement TTL or time to live feature that you see in Instagram stories or Snapchat.
In the following example, rows of `stories` table are available only if they have been created within the last 24 hours.
```sql
-- 1. Create table
@@ -262,7 +313,7 @@ create table if not exists stories (
);
-- 2. Enable RLS
alter table stories
alter table stories
enable row level security;
-- 3. Create Policy
@@ -270,31 +321,31 @@ create policy "Stories are live for a day"
on stories
for select using (
created_at > (current_timestamp - interval '1 day')
);
);
```
### Advanced policies
Use the full power of SQL to build extremely advanced rules.
In this example, we will create a `posts` and `comments` tables and then create a policy that depends on another policy.
In this example, we will create a `posts` and `comments` tables and then create a policy that depends on another policy.
(In this case, the comments policy depends on the posts policy.)
```sql
create table posts (
id serial primary key,
creator_id uuid not null references auth.users(id),
title text not null,
body text not null,
publish_date date not null default now(),
id serial primary key,
creator_id uuid not null references auth.users(id),
title text not null,
body text not null,
publish_date date not null default now(),
audience uuid[] null -- many to many table omitted for brevity
);
create table comments (
id serial primary key,
post_id int not null references posts(id) on delete cascade,
user_id uuid not null references auth.users(id),
body text not null,
id serial primary key,
post_id int not null references posts(id) on delete cascade,
user_id uuid not null references auth.users(id),
body text not null,
comment_date date not null default now()
);
@@ -323,17 +374,16 @@ using (
);
```
## Tips
### You don't have to use policies
### You don't have to use policies
You can also put your authorization rules in your middleware, similar to how you would create security rules with any other `backend <-> middleware <-> frontend` architecture.
Policies are a tool. In the case of "serverless/Jamstack" setups, they are especially effective because you don't have to deploy any middleware at all.
However, if you want to use another authorization method for your applications, that's also fine. Supabase is "just Postgres", so if your application
works with Postgres, then it also works with Supabase.
However, if you want to use another authorization method for your applications, that's also fine. Supabase is "just Postgres", so if your application
works with Postgres, then it also works with Supabase.
Tip: Make sure to enable RLS for all your tables, so that your tables are inaccessible. Then use the "Service" which we provide, which is designed to bypass RLS.
@@ -347,12 +397,12 @@ Navigate to Authentication > Settings on [app.supabase.io](https://app.supabase.
### Never use a service key on the client
Supabase provides special "Service" keys, which can be used to bypass all RLS.
Supabase provides special "Service" keys, which can be used to bypass all RLS.
These should never be used in the browser or exposed to customers, but they are useful for administrative tasks.
### Managing User Data
For security purposes, the `auth` schema is not exposed on the auto-generated API.
For security purposes, the `auth` schema is not exposed on the auto-generated API.
Even though Supabase provides an `auth.users` table, it can be helpful to create tables in the `public` schema for storing user data.
You can read more about this in the [Managing User Data](/docs/guides/auth/managing-user-data) guide.
@@ -367,12 +417,12 @@ Our realtime server doesn't provide per-user security. Until we build a more rob
* Only allow realtime listening on public tables.
*/
begin;
begin;
-- remove the realtime publication
drop publication if exists supabase_realtime;
drop publication if exists supabase_realtime;
-- re-create the publication but don't enable it for any tables
create publication supabase_realtime;
create publication supabase_realtime;
commit;
-- add a table to the publication
+2 -11
View File
@@ -54,10 +54,7 @@ Supabase comes with a SQL Editor. You can also save your favorite queries to run
[^backups] Database backups do _NOT_ include objects stored via the Storage API, as the database only includes metadata about these objects. Restoring an old backup will not restore objects that have been deleted since then.
## Extensions
### Enable and disable extensions
### Extensions
To expand the functionality of your Postgres database, you can use extensions.
You can enable Postgres extensions with the click of a button within the Supabase dashboard.
@@ -66,13 +63,7 @@ You can enable Postgres extensions with the click of a button within the Supabas
<source src="/videos/toggle-extensions.mp4" type="video/mp4" muted playsInline />
</video>
### Full list of extensions
Supabase is pre-configured with over 50 extensions. You can also install your own SQL extensions directly into the database through our SQL editor.
<ExtensionsComponent />
[Learn more](/docs/guides/database/extensions) about all the extensions provided on Supabase.
## Tips
+1 -2
View File
@@ -1,7 +1,6 @@
---
id: platform
title: Getting started
sidebar_label: Introduction
title: Platform
description: Getting started with the Supabase platform.
---
+3 -1
View File
@@ -7,6 +7,8 @@ description: How to use configure and deploy Supabase.
Supabase is a [Hosted Platform](https://app.supabase.io), so you don't _have_ to deploy it yourself.
However, if you want to configure and deploy it yourself, that's also possible.
![Supabase Architecture](/img/supabase-architecture.png)
## Before you begin
The self-hosted version of Supabase does not include a UI yet.
@@ -25,7 +27,7 @@ In the meantime, here are some suggestions for working with your Postgres Databa
We provide a Docker Compose directory which is includes all of the tools required for building on top of Supabase.
You can download the Docker files like so:
Download the Docker files:
```bash
# 1. Copy an empty repo
+7 -14
View File
@@ -33,37 +33,29 @@ module.exports = {
docs: [
{
type: 'category',
label: 'Introduction',
items: ['about', 'faq'],
collapsed: false,
},
{
type: 'category',
label: 'Getting Started',
collapsed: false,
label: 'Overview',
items: [
'guides/platform',
'about',
'architecture',
'guides/database',
'guides/auth',
'guides/storage',
'guides/api',
'guides/client-libraries',
'guides/local-development',
'guides/examples',
],
collapsed: false,
},
{
type: 'category',
label: 'Tutorials',
collapsed: false,
items: [
'guides/examples',
'guides/with-angular',
'guides/with-flutter',
'guides/with-nextjs',
'guides/with-react',
'guides/with-svelte',
'guides/with-vue-3',
'guides/self-hosting',
],
},
{
@@ -71,6 +63,7 @@ module.exports = {
label: 'See Also',
collapsed: false,
items: [
'faq',
'handbook/contributing',
'handbook/supasquad',
'company/terms',
@@ -83,7 +76,7 @@ module.exports = {
{
type: 'category',
label: 'Guides',
items: ['guides'],
items: ['guides', 'guides/platform', 'guides/local-development', 'guides/self-hosting'],
collapsed: false,
},
{
@@ -0,0 +1 @@
<svg fill="none" height="2500" viewBox="204.925 153.577 757.617 860.543" width="2500" xmlns="http://www.w3.org/2000/svg"><path d="m962.541 407.983c0-14.237-3.034-27.074-9.336-37.811-6.068-10.736-15.171-19.605-27.307-26.607-100.829-58.117-201.891-116.233-302.72-174.35-27.308-15.638-53.449-15.171-80.523.7-40.145 23.574-241.336 138.873-301.086 173.65-24.741 14.237-36.644 36.177-36.644 64.652v351.033c0 14.004 3.034 26.374 8.869 37.111 6.069 10.97 15.405 20.306 27.775 27.541 59.984 34.777 260.941 149.843 301.086 173.65 27.074 15.868 53.448 16.568 80.523.7 100.829-58.35 201.891-116.233 302.72-174.35 12.603-7.235 21.706-16.338 27.774-27.541 5.835-10.737 8.869-23.107 8.869-37.111z" fill="#9a4993"/><path d="m584.667 582.333-371.34 213.794c6.069 10.97 15.405 20.306 27.775 27.542 59.984 34.776 260.941 149.842 301.086 173.649 27.074 15.872 53.449 16.572 80.523.7 100.829-58.35 201.891-116.233 302.72-174.349 12.603-7.236 21.706-16.338 27.774-27.542z" fill="#6a1577"/><path d="m474.735 645.584c21.707 37.811 62.318 63.252 108.765 63.252 46.913 0 87.758-25.674 109.231-63.952l-108.064-62.551z" fill="#6a1577"/><path d="m962.542 407.983c0-14.237-3.035-27.074-9.336-37.811l-368.539 212.161 369.005 213.795c5.835-10.737 8.87-23.107 8.87-37.111z" fill="#813084"/><g fill="#fff"><path d="m692.731 644.884c-21.472 38.044-62.317 63.952-109.231 63.952-46.68 0-87.291-25.441-108.764-63.252-10.503-18.438-16.572-39.444-16.572-62.084 0-69.32 56.016-125.336 125.336-125.336 46.213 0 86.592 25.207 108.298 62.551l109.464-63.018c-43.645-75.154-124.869-125.802-217.995-125.802-139.107 0-251.605 112.732-251.605 251.605 0 45.513 12.136 88.459 33.376 125.336 43.412 75.388 125.102 126.269 218.462 126.269 93.594 0 175.284-51.114 218.696-126.969zm138.406-120.901h-24.974v120.668h24.974zm55.316 0h-24.974v120.668h24.974z"/><path d="m906.759 544.289h-120.668v24.974h120.668zm0 55.082h-120.668v24.974h120.668z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+32
View File
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 138 137.3" style="enable-background:new 0 0 138 137.3;" xml:space="preserve">
<style type="text/css">
.st0{fill:#01579B;}
.st1{fill:#40C4FF;}
.st2{fill:#29B6F6;}
.st3{opacity:0.2;fill:#FFFFFF;enable-background:new ;}
.st4{opacity:0.2;fill:#263238;enable-background:new ;}
.st5{opacity:0.2;fill:url(#SVGID_1_);enable-background:new ;}
</style>
<g>
<path class="st0" d="M29.6,108.9L6.4,85.7c-2.8-2.8-4.5-6.8-4.5-10.8c0-1.8,1-4.6,1.8-6.3l21.5-44.8L29.6,108.9z"/>
<path class="st1" d="M109.3,28.4L86.1,5.1c-2-2-6.3-4.5-9.8-4.5c-3.1,0-6.1,0.6-8.1,1.8l-43,21.5L109.3,28.4z"/>
<polygon class="st1" points="57.4,136.7 113.8,136.7 113.8,112.5 71.7,99.1 33.2,112.5 "/>
<path class="st2" d="M25.2,96.4c0,7.2,0.9,8.9,4.5,12.5l3.6,3.6h80.6L74.4,67.8L25.2,23.9V96.4z"/>
<path class="st0" d="M96.8,23.9H25.2l88.6,88.7H138V57l-28.7-28.6C105.3,24.3,101.7,23.9,96.8,23.9z"/>
<path class="st3" d="M30.5,109.8c-3.6-3.6-4.5-7.1-4.5-13.4V24.8l-0.9-0.9v72.5C25.2,102.7,25.2,104.4,30.5,109.8l2.7,2.7l0,0
L30.5,109.8z"/>
<polygon class="st4" points="137.1,56.1 137.1,111.6 112.9,111.6 113.8,112.5 138,112.5 138,57 "/>
<path class="st3" d="M109.3,28.4c-4.4-4.4-8.1-4.5-13.4-4.5H25.2l0.9,0.9h69.8C98.6,24.8,105.3,24.3,109.3,28.4L109.3,28.4z"/>
<radialGradient id="SVGID_1_" cx="69.96" cy="451.1172" r="68.065" gradientTransform="matrix(1 0 0 1 0 -382.4672)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</radialGradient>
<path class="st5" d="M137.1,56.1l-27.8-27.8L86.1,5.1c-2-2-6.3-4.5-9.8-4.5c-3.1,0-6.1,0.6-8.1,1.8l-43,21.5L3.7,68.6
c-0.8,1.6-1.8,4.5-1.8,6.3c0,3.9,1.7,7.9,4.5,10.8L27.8,107c0.5,0.6,1.1,1.3,1.8,2l0.9,0.9l2.7,2.7l23.3,23.3l0.9,0.9h55.5h0.9
v-24.2H138v-0.1V57L137.1,56.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

+1
View File
@@ -0,0 +1 @@
<svg width="24" height="26" viewBox="0 0 24 26" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M22.069 10.075a2.273 2.273 0 00-.887-.74 2.296 2.296 0 00-2.237.16 2.265 2.265 0 00-.77.859 2.016 2.016 0 00.392 2.274 3.342 3.342 0 002.23-.63 3.289 3.289 0 001.271-1.923zM15.3 1.3l-1.45-.788-6.31 3.481.503.27.957.498 1.732-.954 4.569-2.523-.001.016zm.584-.24a.225.225 0 01.16.15l2.114 6.182a.205.205 0 01-.1.269 4.063 4.063 0 00-1.798 1.974 4.017 4.017 0 00-.175 2.655 4.283 4.283 0 001.755 2.332c.842.55 1.852.79 2.854.68a.269.269 0 01.262.16l2.184 6.345a.256.256 0 01-.101.278l-6.712 3.89a.253.253 0 01-.101.02.27.27 0 01-.181-.03L13.69 24.5a.234.234 0 01-.1-.1l-4.6-10.483-7.005 3.95a.327.327 0 01-.272.01l-1.592-.898a.23.23 0 01-.1-.299l6.805-12.8a.243.243 0 01.11-.099L13.721.03a.259.259 0 01.241 0l1.923 1.03zM7.47 4.499L7.14 4.33.58 16.71l1.197.668 5.657-7.335a.275.275 0 01.231-.1.282.282 0 01.201.149l6.16 14.066 1.646 1.007L9.06 6.005l-.281-.798-1.318-.718.01.01zm10.145 7.382a2.51 2.51 0 01.12-1.663 2.54 2.54 0 011.138-1.23 2.798 2.798 0 013.261.4 2.513 2.513 0 01.073 3.568l-.073.073a2.77 2.77 0 01-3.788.01 2.719 2.719 0 01-.731-1.158z" fill="#000"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="2500" height="2500" viewBox="0 0 1052 1052"><path fill="#f0db4f" d="M0 0h1052v1052H0z"/><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

+1
View File
@@ -0,0 +1 @@
<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 125 125" width="2500" height="2500"><defs><linearGradient id="b" x1="-21.045" y1="114.925" x2="95.274" y2="-1.395" gradientUnits="userSpaceOnUse"><stop offset=".108" stop-color="#c757bc"/><stop offset=".173" stop-color="#cd5ca9"/><stop offset=".492" stop-color="#e8744f"/><stop offset=".716" stop-color="#f88316"/><stop offset=".823" stop-color="#ff8900"/></linearGradient><linearGradient id="a" x1="39.893" y1="147.552" x2="96.589" y2="90.856" gradientUnits="userSpaceOnUse"><stop offset=".296" stop-color="#00afff"/><stop offset=".694" stop-color="#5282ff"/><stop offset="1" stop-color="#945dff"/></linearGradient><linearGradient id="c" x1="-1.501" y1="34.501" x2="38.272" y2="-5.273" xlink:href="#a"/></defs><title>icon_Kotlin</title><path fill="url(#b)" d="M62.759 0L0 65.999V125l62.669-62.779L125 0H62.759z"/><path data-name="&lt;Path&gt;" fill="url(#a)" d="M0 125l62.669-62.778L125 125H0z"/><path fill="url(#c)" d="M0 0h62.759L0 65.999V0z"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#EA2845;}
</style>
<path class="st0" d="M18.8,0c-0.2,0-0.4,0-0.6,0.1c1.8,1.2-0.3,3,0.7,4.5c-0.1-1,0.3-2,1.2-2.6c0.3-0.3,0.5-0.4,0.5-0.8
C20.5,0.5,19.5,0,18.8,0z M21.5,0.5c-0.3,1.3-0.6,1.3-1.5,2.2c-0.8,0.6-1,1.6-0.6,2.5c-3.9-1.5-8.9-2.4-12.5,0.2
C5.5,6.3,4.7,7.6,3.1,8.2C2.1,8.5,1,8.4,0.4,9.4c-0.5,0.6-0.5,1.5,0.1,2.1c0.2,0.2,0.6,0.3,0.7,0.5c0.1,0.1,0.1,0.2,0.2,0.4
c0.2,0.4,0.4,0.7,0.6,0.9c0.2,0.1,0.7,0.3,0.8,0.4c0.1,0.2-0.2,0.9,0.1,1c0.2,0.1,0.7-0.9,0.8-0.9c-0.1,0.7-0.2,2,0.6,1
c0.4-0.5,0.4-0.7,1.1-0.8C5.7,14,6.2,14,6.6,13.9c5.1-0.2,9.4,3.6,9.9,8.7c-0.1-0.6-0.9-1.5-1.6-1.3c-0.3,0.1-0.4,0.6-0.6,0.9
c-0.2,0.4-0.5,0.7-0.9,1c0.1-0.6,0-1.1-0.1-1.7c-0.2,0.9-0.6,2.3-1.7,2c-0.7-0.1-1.3-0.6-1.5-1.3c-0.1-0.9,0.8-1.9-0.7-2
c-3-0.1-2.3,4.2-0.5,5.3c-0.4,0-0.8,0.2-1.2,0.3c3.8,2.2,8.6,0.9,10.8-2.9c0.5-0.9,0.8-1.8,1-2.8c0.3,1.2,0.2,2.4,0,3.5
c-0.1,0.6-0.4,1.2-0.6,1.8c-0.4,0.8-0.9,1.5-1.5,2.1c-0.4,0.4-1,0.7-1.2,1.1c1.4-0.2,2.7-0.6,4-1.1C18.8,29.6,17,31.1,15,32
c4.5-0.3,8.5-2.9,10.6-6.8c-0.3,1.9-1.1,3.7-2.2,5.3c3.1-2,5.1-5.3,5.7-8.9c0.3,1.3,0.4,2.7,0.2,4c2.5-3.5,3.3-7.9,2.2-12.1
c-0.4-1.6-1.1-3.1-1.9-4.5c-0.3-0.6-0.7-1.1-1.1-1.6c-0.2-0.2-1-0.9-1-1.1c0,0,0,0,0,0c0,3.7-4,6.1-7.3,5.1c2.6-0.2,4.8-2.2,5.2-4.8
C25.7,4,24.1,1.3,21.5,0.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="1000" height="1000" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M467.253 0.269139C465.103 0.464613 458.26 1.14878 452.102 1.63747C310.068 14.4411 177.028 91.0671 92.7664 208.841C45.8456 274.325 15.8358 348.605 4.49658 427.284C0.488759 454.748 0 462.86 0 500.098C0 537.336 0.488759 545.448 4.49658 572.912C31.6716 760.666 165.298 918.414 346.53 976.861C378.983 987.319 413.196 994.453 452.102 998.754C467.253 1000.42 532.747 1000.42 547.898 998.754C615.054 991.326 671.945 974.71 728.055 946.073C736.657 941.675 738.319 940.502 737.146 939.525C736.364 938.939 699.707 889.777 655.718 830.352L575.758 722.353L475.562 574.085C420.43 492.572 375.073 425.915 374.682 425.915C374.291 425.818 373.9 491.693 373.705 572.13C373.412 712.97 373.314 718.639 371.554 721.962C369.013 726.751 367.058 728.706 362.952 730.856C359.824 732.42 357.087 732.713 342.327 732.713H325.415L320.919 729.878C317.986 728.021 315.836 725.578 314.37 722.744L312.317 718.345L312.512 522.382L312.805 326.321L315.836 322.509C317.4 320.457 320.723 317.818 323.069 316.547C327.077 314.592 328.641 314.397 345.552 314.397C365.494 314.397 368.817 315.179 373.998 320.848C375.464 322.411 429.717 404.12 494.624 502.541C559.531 600.963 648.289 735.352 691.887 801.324L771.065 921.248L775.073 918.609C810.557 895.543 848.094 862.703 877.81 828.495C941.056 755.877 981.818 667.326 995.503 572.912C999.511 545.448 1000 537.336 1000 500.098C1000 462.86 999.511 454.748 995.503 427.284C968.328 239.53 834.702 81.7821 653.47 23.3352C621.505 12.975 587.488 5.84016 549.365 1.53972C539.98 0.562345 475.367 -0.51276 467.253 0.269139ZM671.945 302.668C676.637 305.014 680.45 309.51 681.818 314.201C682.6 316.743 682.796 371.085 682.6 493.549L682.307 669.281L651.32 621.781L620.235 574.281V446.538C620.235 363.95 620.626 317.525 621.212 315.277C622.776 309.803 626.197 305.503 630.89 302.962C634.897 300.909 636.364 300.714 651.711 300.714C666.178 300.714 668.719 300.909 671.945 302.668Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

+113
View File
@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="110.4211"
height="109.8461"
id="svg2169"
sodipodi:version="0.32"
inkscape:version="0.45.1"
version="1.0"
sodipodi:docbase="/home/bene/Desktop"
sodipodi:docname="dessin-1.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2171">
<linearGradient
id="linearGradient11301"
inkscape:collect="always">
<stop
id="stop11303"
offset="0"
style="stop-color:#ffe052;stop-opacity:1" />
<stop
id="stop11305"
offset="1"
style="stop-color:#ffc331;stop-opacity:1" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="168.1012"
x2="147.77737"
y1="111.92053"
x1="89.136749"
id="linearGradient11307"
xlink:href="#linearGradient11301"
inkscape:collect="always" />
<linearGradient
id="linearGradient9515"
inkscape:collect="always">
<stop
id="stop9517"
offset="0"
style="stop-color:#387eb8;stop-opacity:1" />
<stop
id="stop9519"
offset="1"
style="stop-color:#366994;stop-opacity:1" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="131.85291"
x2="110.14919"
y1="77.070274"
x1="55.549179"
id="linearGradient9521"
xlink:href="#linearGradient9515"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.24748737"
inkscape:cx="-260.46312"
inkscape:cy="316.02744"
inkscape:document-units="px"
inkscape:current-layer="layer1"
width="131.10236px"
height="184.25197px"
inkscape:window-width="872"
inkscape:window-height="624"
inkscape:window-x="5"
inkscape:window-y="48" />
<metadata
id="metadata2174">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-473.36088,-251.72485)">
<g
id="g1894"
transform="translate(428.42338,184.2561)">
<path
style="opacity:1;color:#000000;fill:url(#linearGradient9521);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 99.75,67.46875 C 71.718268,67.468752 73.46875,79.625 73.46875,79.625 L 73.5,92.21875 L 100.25,92.21875 L 100.25,96 L 62.875,96 C 62.875,96 44.9375,93.965724 44.9375,122.25 C 44.937498,150.53427 60.59375,149.53125 60.59375,149.53125 L 69.9375,149.53125 L 69.9375,136.40625 C 69.9375,136.40625 69.433848,120.75 85.34375,120.75 C 101.25365,120.75 111.875,120.75 111.875,120.75 C 111.875,120.75 126.78125,120.99096 126.78125,106.34375 C 126.78125,91.696544 126.78125,82.125 126.78125,82.125 C 126.78125,82.124998 129.04443,67.46875 99.75,67.46875 z M 85,75.9375 C 87.661429,75.937498 89.8125,78.088571 89.8125,80.75 C 89.812502,83.411429 87.661429,85.5625 85,85.5625 C 82.338571,85.562502 80.1875,83.411429 80.1875,80.75 C 80.187498,78.088571 82.338571,75.9375 85,75.9375 z "
id="path8615" />
<path
id="path8620"
d="M 100.5461,177.31485 C 128.57784,177.31485 126.82735,165.1586 126.82735,165.1586 L 126.7961,152.56485 L 100.0461,152.56485 L 100.0461,148.7836 L 137.4211,148.7836 C 137.4211,148.7836 155.3586,150.81787 155.3586,122.53359 C 155.35861,94.249323 139.70235,95.252343 139.70235,95.252343 L 130.3586,95.252343 L 130.3586,108.37734 C 130.3586,108.37734 130.86226,124.03359 114.95235,124.03359 C 99.042448,124.03359 88.421098,124.03359 88.421098,124.03359 C 88.421098,124.03359 73.514848,123.79263 73.514848,138.43985 C 73.514848,153.08705 73.514848,162.6586 73.514848,162.6586 C 73.514848,162.6586 71.251668,177.31485 100.5461,177.31485 z M 115.2961,168.8461 C 112.63467,168.8461 110.4836,166.69503 110.4836,164.0336 C 110.4836,161.37217 112.63467,159.2211 115.2961,159.2211 C 117.95753,159.2211 120.1086,161.37217 120.1086,164.0336 C 120.10861,166.69503 117.95753,168.8461 115.2961,168.8461 z "
style="opacity:1;color:#000000;fill:url(#linearGradient11307);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

+37
View File
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_2_1_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 490.6 436.9" style="enable-background:new 0 0 490.6 436.9;" xml:space="preserve">
<style type="text/css">
.st0{fill:#61DAFB;}
</style>
<g>
<path class="st0" d="M490.6,218.5c0-32.5-40.7-63.3-103.1-82.4c14.4-63.6,8-114.2-20.2-130.4c-6.5-3.8-14.1-5.6-22.4-5.6v22.3
c4.6,0,8.3,0.9,11.4,2.6c13.6,7.8,19.5,37.5,14.9,75.7c-1.1,9.4-2.9,19.3-5.1,29.4c-19.6-4.8-41-8.5-63.5-10.9
c-13.5-18.5-27.5-35.3-41.6-50c32.6-30.3,63.2-46.9,84-46.9V0l0,0c-27.5,0-63.5,19.6-99.9,53.6c-36.4-33.8-72.4-53.2-99.9-53.2
v22.3c20.7,0,51.4,16.5,84,46.6c-14,14.7-28,31.4-41.3,49.9c-22.6,2.4-44,6.1-63.6,11c-2.3-10-4-19.7-5.2-29
c-4.7-38.2,1.1-67.9,14.6-75.8c3-1.8,6.9-2.6,11.5-2.6V0.5l0,0c-8.4,0-16,1.8-22.6,5.6c-28.1,16.2-34.4,66.7-19.9,130.1
C40.5,155.4,0,186.1,0,218.5c0,32.5,40.7,63.3,103.1,82.4c-14.4,63.6-8,114.2,20.2,130.4c6.5,3.8,14.1,5.6,22.5,5.6
c27.5,0,63.5-19.6,99.9-53.6c36.4,33.8,72.4,53.2,99.9,53.2c8.4,0,16-1.8,22.6-5.6c28.1-16.2,34.4-66.7,19.9-130.1
C450.1,281.7,490.6,250.9,490.6,218.5z M360.4,151.8c-3.7,12.9-8.3,26.2-13.5,39.5c-4.1-8-8.4-16-13.1-24
c-4.6-8-9.5-15.8-14.4-23.4C333.6,146,347.3,148.6,360.4,151.8z M314.6,258.3c-7.8,13.5-15.8,26.3-24.1,38.2c-14.9,1.3-30,2-45.2,2
c-15.1,0-30.2-0.7-45-1.9c-8.3-11.9-16.4-24.6-24.2-38c-7.6-13.1-14.5-26.4-20.8-39.8c6.2-13.4,13.2-26.8,20.7-39.9
c7.8-13.5,15.8-26.3,24.1-38.2c14.9-1.3,30-2,45.2-2c15.1,0,30.2,0.7,45,1.9c8.3,11.9,16.4,24.6,24.2,38
c7.6,13.1,14.5,26.4,20.8,39.8C329,231.8,322.1,245.2,314.6,258.3z M346.9,245.3c5.4,13.4,10,26.8,13.8,39.8
c-13.1,3.2-26.9,5.9-41.2,8c4.9-7.7,9.8-15.6,14.4-23.7C338.5,261.4,342.8,253.3,346.9,245.3z M245.5,352
c-9.3-9.6-18.6-20.3-27.8-32c9,0.4,18.2,0.7,27.5,0.7c9.4,0,18.7-0.2,27.8-0.7C264,331.7,254.7,342.4,245.5,352z M171.1,293.1
c-14.2-2.1-27.9-4.7-41-7.9c3.7-12.9,8.3-26.2,13.5-39.5c4.1,8,8.4,16,13.1,24S166.2,285.5,171.1,293.1z M245,85
c9.3,9.6,18.6,20.3,27.8,32c-9-0.4-18.2-0.7-27.5-0.7c-9.4,0-18.7,0.2-27.8,0.7C226.5,105.3,235.8,94.6,245,85z M171,143.9
c-4.9,7.7-9.8,15.6-14.4,23.7c-4.6,8-8.9,16-13,24c-5.4-13.4-10-26.8-13.8-39.8C142.9,148.7,156.7,146,171,143.9z M80.5,269.1
c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6,58.3-50.6c8.6-3.7,18-7,27.7-10.1c5.7,19.6,13.2,40,22.5,60.9
c-9.2,20.8-16.6,41.1-22.2,60.6C98.6,276.2,89.2,272.8,80.5,269.1z M134.3,412c-13.6-7.8-19.5-37.5-14.9-75.7
c1.1-9.4,2.9-19.3,5.1-29.4c19.6,4.8,41,8.5,63.5,10.9c13.5,18.5,27.5,35.3,41.6,50c-32.6,30.3-63.2,46.9-84,46.9
C141.1,414.6,137.3,413.7,134.3,412z M371.5,335.8c4.7,38.2-1.1,67.9-14.6,75.8c-3,1.8-6.9,2.6-11.5,2.6c-20.7,0-51.4-16.5-84-46.6
c14-14.7,28-31.4,41.3-49.9c22.6-2.4,44-6.1,63.6-11C368.6,316.8,370.4,326.5,371.5,335.8z M410,269.1c-8.6,3.7-18,7-27.7,10.1
c-5.7-19.6-13.2-40-22.5-60.9c9.2-20.8,16.6-41.1,22.2-60.6c9.9,3.1,19.3,6.5,28.1,10.2c35.4,15.1,58.3,34.9,58.3,50.6
C468.3,234.2,445.4,254.1,410,269.1z"/>
<path class="st0" d="M145.1,0.4L145.1,0.4L145.1,0.4z"/>
<circle class="st0" cx="245.2" cy="218.5" r="45.7"/>
<path class="st0" d="M344.8,0.1L344.8,0.1L344.8,0.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_2_1_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 490.6 436.9" style="enable-background:new 0 0 490.6 436.9;" xml:space="preserve">
<style type="text/css">
.st0{fill:#61DAFB;}
</style>
<g>
<path class="st0" d="M490.6,218.5c0-32.5-40.7-63.3-103.1-82.4c14.4-63.6,8-114.2-20.2-130.4c-6.5-3.8-14.1-5.6-22.4-5.6v22.3
c4.6,0,8.3,0.9,11.4,2.6c13.6,7.8,19.5,37.5,14.9,75.7c-1.1,9.4-2.9,19.3-5.1,29.4c-19.6-4.8-41-8.5-63.5-10.9
c-13.5-18.5-27.5-35.3-41.6-50c32.6-30.3,63.2-46.9,84-46.9V0l0,0c-27.5,0-63.5,19.6-99.9,53.6c-36.4-33.8-72.4-53.2-99.9-53.2
v22.3c20.7,0,51.4,16.5,84,46.6c-14,14.7-28,31.4-41.3,49.9c-22.6,2.4-44,6.1-63.6,11c-2.3-10-4-19.7-5.2-29
c-4.7-38.2,1.1-67.9,14.6-75.8c3-1.8,6.9-2.6,11.5-2.6V0.5l0,0c-8.4,0-16,1.8-22.6,5.6c-28.1,16.2-34.4,66.7-19.9,130.1
C40.5,155.4,0,186.1,0,218.5c0,32.5,40.7,63.3,103.1,82.4c-14.4,63.6-8,114.2,20.2,130.4c6.5,3.8,14.1,5.6,22.5,5.6
c27.5,0,63.5-19.6,99.9-53.6c36.4,33.8,72.4,53.2,99.9,53.2c8.4,0,16-1.8,22.6-5.6c28.1-16.2,34.4-66.7,19.9-130.1
C450.1,281.7,490.6,250.9,490.6,218.5z M360.4,151.8c-3.7,12.9-8.3,26.2-13.5,39.5c-4.1-8-8.4-16-13.1-24
c-4.6-8-9.5-15.8-14.4-23.4C333.6,146,347.3,148.6,360.4,151.8z M314.6,258.3c-7.8,13.5-15.8,26.3-24.1,38.2c-14.9,1.3-30,2-45.2,2
c-15.1,0-30.2-0.7-45-1.9c-8.3-11.9-16.4-24.6-24.2-38c-7.6-13.1-14.5-26.4-20.8-39.8c6.2-13.4,13.2-26.8,20.7-39.9
c7.8-13.5,15.8-26.3,24.1-38.2c14.9-1.3,30-2,45.2-2c15.1,0,30.2,0.7,45,1.9c8.3,11.9,16.4,24.6,24.2,38
c7.6,13.1,14.5,26.4,20.8,39.8C329,231.8,322.1,245.2,314.6,258.3z M346.9,245.3c5.4,13.4,10,26.8,13.8,39.8
c-13.1,3.2-26.9,5.9-41.2,8c4.9-7.7,9.8-15.6,14.4-23.7C338.5,261.4,342.8,253.3,346.9,245.3z M245.5,352
c-9.3-9.6-18.6-20.3-27.8-32c9,0.4,18.2,0.7,27.5,0.7c9.4,0,18.7-0.2,27.8-0.7C264,331.7,254.7,342.4,245.5,352z M171.1,293.1
c-14.2-2.1-27.9-4.7-41-7.9c3.7-12.9,8.3-26.2,13.5-39.5c4.1,8,8.4,16,13.1,24S166.2,285.5,171.1,293.1z M245,85
c9.3,9.6,18.6,20.3,27.8,32c-9-0.4-18.2-0.7-27.5-0.7c-9.4,0-18.7,0.2-27.8,0.7C226.5,105.3,235.8,94.6,245,85z M171,143.9
c-4.9,7.7-9.8,15.6-14.4,23.7c-4.6,8-8.9,16-13,24c-5.4-13.4-10-26.8-13.8-39.8C142.9,148.7,156.7,146,171,143.9z M80.5,269.1
c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6,58.3-50.6c8.6-3.7,18-7,27.7-10.1c5.7,19.6,13.2,40,22.5,60.9
c-9.2,20.8-16.6,41.1-22.2,60.6C98.6,276.2,89.2,272.8,80.5,269.1z M134.3,412c-13.6-7.8-19.5-37.5-14.9-75.7
c1.1-9.4,2.9-19.3,5.1-29.4c19.6,4.8,41,8.5,63.5,10.9c13.5,18.5,27.5,35.3,41.6,50c-32.6,30.3-63.2,46.9-84,46.9
C141.1,414.6,137.3,413.7,134.3,412z M371.5,335.8c4.7,38.2-1.1,67.9-14.6,75.8c-3,1.8-6.9,2.6-11.5,2.6c-20.7,0-51.4-16.5-84-46.6
c14-14.7,28-31.4,41.3-49.9c22.6-2.4,44-6.1,63.6-11C368.6,316.8,370.4,326.5,371.5,335.8z M410,269.1c-8.6,3.7-18,7-27.7,10.1
c-5.7-19.6-13.2-40-22.5-60.9c9.2-20.8,16.6-41.1,22.2-60.6c9.9,3.1,19.3,6.5,28.1,10.2c35.4,15.1,58.3,34.9,58.3,50.6
C468.3,234.2,445.4,254.1,410,269.1z"/>
<path class="st0" d="M145.1,0.4L145.1,0.4L145.1,0.4z"/>
<circle class="st0" cx="245.2" cy="218.5" r="45.7"/>
<path class="st0" d="M344.8,0.1L344.8,0.1L344.8,0.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

+2
View File
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="144px" height="144px" style="enable-background:new 0 0 144 144" version="1.1" viewBox="19 19 106 106" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><title>Rust programming language logo</title><metadata><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata><path d="m124 70.7-4.39-2.72c-0.037-0.428-0.079-0.855-0.125-1.28l3.78-3.52c0.384-0.358 0.556-0.888 0.452-1.4-0.101-0.515-0.462-0.939-0.953-1.12l-4.83-1.8c-0.121-0.418-0.248-0.833-0.378-1.25l3.01-4.18c0.307-0.425 0.37-0.978 0.17-1.46-0.2-0.483-0.637-0.829-1.15-0.914l-5.09-0.828c-0.198-0.386-0.404-0.766-0.612-1.14l2.14-4.7c0.219-0.478 0.174-1.03-0.118-1.47-0.291-0.436-0.784-0.691-1.31-0.671l-5.17 0.18c-0.267-0.334-0.539-0.665-0.816-0.99l1.19-5.03c0.12-0.511-0.031-1.05-0.403-1.42-0.369-0.37-0.905-0.523-1.42-0.403l-5.03 1.19c-0.326-0.276-0.657-0.549-0.992-0.816l0.181-5.17c0.02-0.523-0.235-1.02-0.671-1.31-0.437-0.292-0.99-0.336-1.47-0.119l-4.69 2.14c-0.379-0.208-0.759-0.414-1.14-0.613l-0.83-5.09c-0.084-0.516-0.43-0.954-0.914-1.15-0.483-0.201-1.04-0.136-1.46 0.17l-4.18 3.01c-0.412-0.131-0.826-0.257-1.24-0.377l-1.8-4.83c-0.183-0.492-0.607-0.853-1.12-0.955-0.514-0.101-1.04 0.07-1.4 0.452l-3.52 3.78c-0.425-0.047-0.853-0.09-1.28-0.125l-2.72-4.4c-0.275-0.445-0.762-0.716-1.29-0.716s-1.01 0.271-1.28 0.716l-2.72 4.4c-0.428 0.035-0.856 0.078-1.28 0.125l-3.52-3.78c-0.357-0.382-0.887-0.553-1.4-0.452-0.515 0.103-0.939 0.463-1.12 0.955l-1.8 4.83c-0.418 0.12-0.832 0.247-1.24 0.377l-4.18-3.01c-0.425-0.307-0.979-0.372-1.46-0.17-0.483 0.2-0.83 0.638-0.914 1.15l-0.83 5.09c-0.384 0.199-0.764 0.404-1.14 0.613l-4.69-2.14c-0.477-0.218-1.03-0.173-1.47 0.119-0.436 0.29-0.691 0.787-0.671 1.31l0.18 5.17c-0.334 0.267-0.665 0.54-0.992 0.816l-5.03-1.19c-0.511-0.119-1.05 0.033-1.42 0.403-0.372 0.371-0.523 0.906-0.403 1.42l1.18 5.03c-0.275 0.326-0.547 0.656-0.814 0.99l-5.17-0.18c-0.521-0.015-1.02 0.235-1.31 0.671-0.292 0.434-0.336 0.99-0.119 1.47l2.14 4.7c-0.208 0.377-0.414 0.757-0.613 1.14l-5.09 0.828c-0.517 0.084-0.953 0.43-1.15 0.914-0.2 0.485-0.135 1.04 0.17 1.46l3.01 4.18c-0.131 0.413-0.258 0.828-0.378 1.25l-4.83 1.8c-0.49 0.183-0.851 0.607-0.953 1.12-0.102 0.514 0.069 1.04 0.452 1.4l3.78 3.52c-0.047 0.425-0.089 0.853-0.125 1.28l-4.39 2.72c-0.445 0.275-0.716 0.761-0.716 1.29s0.271 1.01 0.716 1.28l4.39 2.72c0.036 0.428 0.078 0.855 0.125 1.28l-3.78 3.52c-0.383 0.357-0.554 0.887-0.452 1.4 0.102 0.515 0.463 0.938 0.953 1.12l4.83 1.8c0.12 0.418 0.247 0.833 0.378 1.25l-3.01 4.18c-0.306 0.426-0.371 0.979-0.17 1.46 0.201 0.485 0.638 0.831 1.16 0.914l5.09 0.828c0.199 0.386 0.403 0.766 0.613 1.14l-2.14 4.69c-0.218 0.477-0.173 1.03 0.119 1.47 0.292 0.437 0.789 0.692 1.31 0.671l5.16-0.181c0.269 0.336 0.54 0.665 0.816 0.992l-1.18 5.03c-0.12 0.51 0.031 1.04 0.403 1.41 0.369 0.373 0.906 0.522 1.42 0.402l5.03-1.18c0.327 0.278 0.658 0.548 0.992 0.814l-0.18 5.17c-0.02 0.523 0.235 1.02 0.671 1.31 0.434 0.291 0.99 0.335 1.47 0.117l4.69-2.14c0.378 0.21 0.758 0.414 1.14 0.613l0.83 5.09c0.084 0.518 0.43 0.956 0.914 1.16 0.483 0.201 1.04 0.136 1.46-0.169l4.18-3.01c0.413 0.131 0.828 0.259 1.25 0.379l1.8 4.83c0.183 0.49 0.607 0.853 1.12 0.953 0.514 0.104 1.04-0.068 1.4-0.452l3.52-3.78c0.425 0.049 0.853 0.09 1.28 0.128l2.72 4.39c0.274 0.443 0.761 0.716 1.28 0.716s1.01-0.272 1.29-0.716l2.72-4.39c0.428-0.038 0.855-0.079 1.28-0.128l3.52 3.78c0.357 0.384 0.887 0.556 1.4 0.452 0.515-0.101 0.939-0.463 1.12-0.953l1.8-4.83c0.418-0.12 0.833-0.248 1.25-0.379l4.18 3.01c0.425 0.305 0.979 0.37 1.46 0.169 0.484-0.199 0.83-0.638 0.914-1.16l0.83-5.09c0.384-0.199 0.764-0.406 1.14-0.613l4.69 2.14c0.477 0.218 1.03 0.174 1.47-0.117 0.436-0.292 0.69-0.787 0.671-1.31l-0.18-5.17c0.334-0.267 0.665-0.536 0.991-0.814l5.03 1.18c0.511 0.12 1.05-0.029 1.42-0.402 0.372-0.371 0.523-0.904 0.403-1.41l-1.18-5.03c0.276-0.327 0.548-0.656 0.814-0.992l5.17 0.181c0.521 0.021 1.02-0.234 1.31-0.671 0.292-0.436 0.337-0.991 0.118-1.47l-2.14-4.69c0.209-0.379 0.414-0.759 0.612-1.14l5.09-0.828c0.518-0.083 0.954-0.429 1.15-0.914 0.2-0.483 0.137-1.04-0.17-1.46l-3.01-4.18c0.13-0.413 0.257-0.828 0.378-1.25l4.83-1.8c0.491-0.184 0.853-0.607 0.953-1.12 0.104-0.514-0.068-1.04-0.452-1.4l-3.78-3.52c0.046-0.425 0.088-0.853 0.125-1.28l4.39-2.72c0.445-0.274 0.716-0.761 0.716-1.28s-0.27-1.01-0.715-1.29zm-29.4 36.5c-1.68-0.362-2.74-2.02-2.38-3.7 0.359-1.68 2.01-2.75 3.69-2.39 1.68 0.359 2.75 2.02 2.39 3.7s-2.01 2.75-3.69 2.39zm-1.49-10.1c-1.53-0.328-3.04 0.646-3.36 2.18l-1.56 7.28c-4.81 2.18-10.2 3.4-15.8 3.4-5.76 0-11.2-1.27-16.1-3.55l-1.56-7.28c-0.328-1.53-1.83-2.51-3.36-2.18l-6.43 1.38c-1.19-1.23-2.3-2.54-3.32-3.92h31.3c0.354 0 0.59-0.064 0.59-0.386v-11.1c0-0.322-0.236-0.386-0.59-0.386h-9.15v-7.01h9.89c0.903 0 4.83 0.258 6.08 5.28 0.393 1.54 1.26 6.56 1.85 8.17 0.588 1.8 2.98 5.4 5.53 5.4h15Line truncated

After

Width:  |  Height:  |  Size: 6.2 KiB

+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 98.1 118" style="enable-background:new 0 0 98.1 118;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FF3E00;}
.st1{fill:#FFFFFF;}
</style>
<path class="st0" d="M91.8,15.6C80.9-0.1,59.2-4.7,43.6,5.2L16.1,22.8C8.6,27.5,3.4,35.2,1.9,43.9c-1.3,7.3-0.2,14.8,3.3,21.3
c-2.4,3.6-4,7.6-4.7,11.8c-1.6,8.9,0.5,18.1,5.7,25.4c11,15.7,32.6,20.3,48.2,10.4l27.5-17.5c7.5-4.7,12.7-12.4,14.2-21.1
c1.3-7.3,0.2-14.8-3.3-21.3c2.4-3.6,4-7.6,4.7-11.8C99.2,32.1,97.1,22.9,91.8,15.6"/>
<path class="st1" d="M40.9,103.9c-8.9,2.3-18.2-1.2-23.4-8.7c-3.2-4.4-4.4-9.9-3.5-15.3c0.2-0.9,0.4-1.7,0.6-2.6l0.5-1.6l1.4,1
c3.3,2.4,6.9,4.2,10.8,5.4l1,0.3l-0.1,1c-0.1,1.4,0.3,2.9,1.1,4.1c1.6,2.3,4.4,3.4,7.1,2.7c0.6-0.2,1.2-0.4,1.7-0.7L65.5,72
c1.4-0.9,2.3-2.2,2.6-3.8c0.3-1.6-0.1-3.3-1-4.6c-1.6-2.3-4.4-3.3-7.1-2.6c-0.6,0.2-1.2,0.4-1.7,0.7l-10.5,6.7
c-1.7,1.1-3.6,1.9-5.6,2.4c-8.9,2.3-18.2-1.2-23.4-8.7c-3.1-4.4-4.4-9.9-3.4-15.3c0.9-5.2,4.1-9.9,8.6-12.7l27.5-17.5
c1.7-1.1,3.6-1.9,5.6-2.5c8.9-2.3,18.2,1.2,23.4,8.7c3.2,4.4,4.4,9.9,3.5,15.3c-0.2,0.9-0.4,1.7-0.7,2.6l-0.5,1.6l-1.4-1
c-3.3-2.4-6.9-4.2-10.8-5.4l-1-0.3l0.1-1c0.1-1.4-0.3-2.9-1.1-4.1c-1.6-2.3-4.4-3.3-7.1-2.6c-0.6,0.2-1.2,0.4-1.7,0.7L32.4,46.1
c-1.4,0.9-2.3,2.2-2.6,3.8s0.1,3.3,1,4.6c1.6,2.3,4.4,3.3,7.1,2.6c0.6-0.2,1.2-0.4,1.7-0.7l10.5-6.7c1.7-1.1,3.6-1.9,5.6-2.5
c8.9-2.3,18.2,1.2,23.4,8.7c3.2,4.4,4.4,9.9,3.5,15.3c-0.9,5.2-4.1,9.9-8.6,12.7l-27.5,17.5C44.8,102.5,42.9,103.3,40.9,103.9"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+2
View File
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 261.76 226.69" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"/></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"/></g></g></svg>

After

Width:  |  Height:  |  Size: 467 B