Detailed changes
@@ -77,23 +77,6 @@ dependencies = [
"opaque-debug 0.3.0",
]
-[[package]]
-name = "ahash"
-version = "0.4.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"
-
-[[package]]
-name = "ahash"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "796540673305a66d127804eef19ad696f1f204b8c1025aaca4958c17eab32877"
-dependencies = [
- "getrandom 0.2.2",
- "once_cell",
- "version_check",
-]
-
[[package]]
name = "ahash"
version = "0.7.4"
@@ -378,17 +361,6 @@ dependencies = [
"syn",
]
-[[package]]
-name = "async-rustls"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f38092e8f467f47aadaff680903c7cbfeee7926b058d7f40af2dd4c878fbdee"
-dependencies = [
- "futures-lite",
- "rustls 0.18.1",
- "webpki",
-]
-
[[package]]
name = "async-rustls"
version = "0.2.0"
@@ -396,7 +368,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c86f33abd5a4f3e2d6d9251a9e0c6a7e52eb1113caf893dae8429bf4a53f378"
dependencies = [
"futures-lite",
- "rustls 0.19.1",
+ "rustls",
"webpki",
]
@@ -421,17 +393,6 @@ dependencies = [
"sha2 0.9.5",
]
-[[package]]
-name = "async-sqlx-session"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b66fb8c6ffbf26cdba6705c36f086b6f02f0b4778b6a348134302a2a00730bc"
-dependencies = [
- "async-session",
- "async-std",
- "sqlx 0.4.2",
-]
-
[[package]]
name = "async-sse"
version = "4.1.0"
@@ -488,7 +449,7 @@ checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400"
dependencies = [
"futures-core",
"futures-io",
- "rustls 0.19.1",
+ "rustls",
"webpki",
"webpki-roots",
]
@@ -831,28 +792,6 @@ version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"
-[[package]]
-name = "cargo-platform"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0226944a63d1bf35a3b5f948dd7c59e263db83695c9e8bffc4037de02e30f1d7"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "cargo_metadata"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7714a157da7991e23d90686b9524b9e12e0407a108647f52e9328f4b3d51ac7f"
-dependencies = [
- "cargo-platform",
- "semver 0.11.0",
- "semver-parser 0.10.2",
- "serde",
- "serde_json",
-]
-
[[package]]
name = "cc"
version = "1.0.67"
@@ -1094,7 +1033,6 @@ version = "0.1.0"
dependencies = [
"anyhow",
"async-io",
- "async-sqlx-session",
"async-std",
"async-trait",
"async-tungstenite",
@@ -1125,13 +1063,12 @@ dependencies = [
"project",
"rand 0.8.3",
"rpc",
- "rust-embed",
"scrypt",
"serde",
"serde_json",
"settings",
"sha-1 0.9.6",
- "sqlx 0.5.5",
+ "sqlx",
"surf",
"theme",
"tide",
@@ -2467,9 +2404,6 @@ name = "hashbrown"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
-dependencies = [
- "ahash 0.4.7",
-]
[[package]]
name = "hashbrown"
@@ -2477,16 +2411,7 @@ version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
dependencies = [
- "ahash 0.7.4",
-]
-
-[[package]]
-name = "hashlink"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d99cf782f0dc4372d26846bec3de7804ceb5df083c2d4462c0b8d2330e894fa8"
-dependencies = [
- "hashbrown 0.9.1",
+ "ahash",
]
[[package]]
@@ -4408,20 +4333,7 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
dependencies = [
- "semver 0.9.0",
-]
-
-[[package]]
-name = "rustls"
-version = "0.18.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81"
-dependencies = [
- "base64 0.12.3",
- "log",
- "ring",
- "sct",
- "webpki",
+ "semver",
]
[[package]]
@@ -4601,17 +4513,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
dependencies = [
- "semver-parser 0.7.0",
-]
-
-[[package]]
-name = "semver"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
-dependencies = [
- "semver-parser 0.10.2",
- "serde",
+ "semver-parser",
]
[[package]]
@@ -4620,15 +4522,6 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-[[package]]
-name = "semver-parser"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
-dependencies = [
- "pest",
-]
-
[[package]]
name = "serde"
version = "1.0.125"
@@ -5029,73 +4922,14 @@ dependencies = [
"unicode_categories",
]
-[[package]]
-name = "sqlx"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1a98f9bf17b690f026b6fec565293a995b46dfbd6293debcb654dcffd2d1b34"
-dependencies = [
- "sqlx-core 0.4.2",
- "sqlx-macros 0.4.2",
-]
-
[[package]]
name = "sqlx"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba82f79b31f30acebf19905bcd8b978f46891b9d0723f578447361a8910b6584"
dependencies = [
- "sqlx-core 0.5.5",
- "sqlx-macros 0.5.5",
-]
-
-[[package]]
-name = "sqlx-core"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36bb6a2ca3345a86493bc3b71eabc2c6c16a8bb1aa476cf5303bee27f67627d7"
-dependencies = [
- "ahash 0.6.3",
- "atoi",
- "base64 0.13.0",
- "bitflags",
- "byteorder",
- "bytes 0.5.6",
- "chrono",
- "crc",
- "crossbeam-channel 0.5.0",
- "crossbeam-queue",
- "crossbeam-utils 0.8.2",
- "either",
- "futures-channel",
- "futures-core",
- "futures-util",
- "hashlink 0.6.0",
- "hex",
- "hmac 0.10.1",
- "itoa 0.4.7",
- "libc",
- "log",
- "md-5",
- "memchr",
- "once_cell",
- "parking_lot",
- "percent-encoding",
- "rand 0.7.3",
- "rustls 0.18.1",
- "serde",
- "serde_json",
- "sha-1 0.9.6",
- "sha2 0.9.5",
- "smallvec",
- "sqlformat",
- "sqlx-rt 0.2.0",
- "stringprep",
- "thiserror",
- "url",
- "webpki",
- "webpki-roots",
- "whoami",
+ "sqlx-core",
+ "sqlx-macros",
]
[[package]]
@@ -5104,7 +4938,7 @@ version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f23af36748ec8ea8d49ef8499839907be41b0b1178a4e82b8cb45d29f531dc9"
dependencies = [
- "ahash 0.7.4",
+ "ahash",
"atoi",
"base64 0.13.0",
"bitflags",
@@ -5119,7 +4953,7 @@ dependencies = [
"futures-channel",
"futures-core",
"futures-util",
- "hashlink 0.7.0",
+ "hashlink",
"hex",
"hmac 0.10.1",
"itoa 0.4.7",
@@ -5131,14 +4965,14 @@ dependencies = [
"parking_lot",
"percent-encoding",
"rand 0.8.3",
- "rustls 0.19.1",
+ "rustls",
"serde",
"serde_json",
"sha-1 0.9.6",
"sha2 0.9.5",
"smallvec",
"sqlformat",
- "sqlx-rt 0.5.5",
+ "sqlx-rt",
"stringprep",
"thiserror",
"time 0.2.27",
@@ -5149,28 +4983,6 @@ dependencies = [
"whoami",
]
-[[package]]
-name = "sqlx-macros"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b5ada8b3b565331275ce913368565a273a74faf2a34da58c4dc010ce3286844"
-dependencies = [
- "cargo_metadata",
- "dotenv",
- "either",
- "futures",
- "heck 0.3.3",
- "lazy_static",
- "proc-macro2",
- "quote",
- "serde_json",
- "sha2 0.9.5",
- "sqlx-core 0.4.2",
- "sqlx-rt 0.2.0",
- "syn",
- "url",
-]
-
[[package]]
name = "sqlx-macros"
version = "0.5.5"
@@ -5185,29 +4997,19 @@ dependencies = [
"proc-macro2",
"quote",
"sha2 0.9.5",
- "sqlx-core 0.5.5",
- "sqlx-rt 0.5.5",
+ "sqlx-core",
+ "sqlx-rt",
"syn",
"url",
]
-[[package]]
-name = "sqlx-rt"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63fc5454c9dd7aaea3a0eeeb65ca40d06d0d8e7413a8184f7c3a3ffa5056190b"
-dependencies = [
- "async-rustls 0.1.2",
- "async-std",
-]
-
[[package]]
name = "sqlx-rt"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8199b421ecf3493ee9ef3e7bc90c904844cfb2ea7ea2f57347a93f52bfd3e057"
dependencies = [
- "async-rustls 0.2.0",
+ "async-rustls",
"async-std",
]
@@ -37,7 +37,6 @@ oauth2 = { version = "4.0.0", default_features = false }
oauth2-surf = "0.1.1"
parking_lot = "0.11.1"
rand = "0.8"
-rust-embed = { version = "6.3", features = ["include-exclude"] }
scrypt = "0.7"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
@@ -48,11 +47,6 @@ tide-compress = "0.9.0"
time = "0.2"
toml = "0.5.8"
-[dependencies.async-sqlx-session]
-version = "0.3.0"
-features = ["pg", "rustls"]
-default-features = false
-
[dependencies.sqlx]
version = "0.5.2"
features = ["runtime-async-std-rustls", "postgres", "time", "uuid"]
@@ -1,17 +1,5 @@
# Zed Server
-This crate is what we run at https://zed.dev.
+This crate is what we run at https://collab.zed.dev.
-It contains our web presence as well as the backend logic for collaboration, to which we connect from the Zed client via a websocket.
-
-## Templates
-
-We use handlebars templates that are interpreted at runtime. When running in debug mode, you can change templates and see the latest content without restarting the server. This is enabled by the `rust-embed` crate, which we use to access the contents of the `/templates` folder at runtime. In debug mode it reads contents from the file system, but in release the templates will be embedded in the server binary.
-
-## Static assets
-
-We also use `rust-embed` to access the contents of the `/static` folder via the `/static/*` route. The app will pick up changes to the contents of this folder when running in debug mode.
-
-## CSS
-
-This site uses Tailwind CSS, which means our stylesheets don't need to change very frequently. We check `static/styles.css` into the repository, but it's actually compiled from `/styles.css` via `script/build-css`. This script runs the Tailwind compilation flow to regenerate `static/styles.css` via PostCSS.
+It contains our back-end logic for collaboration, to which we connect from the Zed client via a websocket after authenticating via https://zed.dev, which is a separate repo running on Vercel.
@@ -1,29 +0,0 @@
-use anyhow::anyhow;
-use rust_embed::RustEmbed;
-use tide::{http::mime, Server};
-
-#[derive(RustEmbed)]
-#[folder = "static"]
-struct Static;
-
-pub fn add_routes(app: &mut Server<()>) {
- app.at("/*path").get(get_static_asset);
-}
-
-async fn get_static_asset(request: tide::Request<()>) -> tide::Result {
- let path = request.param("path").unwrap();
- let content = Static::get(path).ok_or_else(|| anyhow!("asset not found at {}", path))?;
-
- let content_type = if path.starts_with("svg") {
- mime::SVG
- } else if path.starts_with("styles") {
- mime::CSS
- } else {
- mime::BYTE_STREAM
- };
-
- Ok(tide::Response::builder(200)
- .content_type(content_type)
- .body(content.data.as_ref())
- .build())
-}
@@ -1,6 +1,5 @@
use anyhow::Context;
use anyhow::Result;
-pub use async_sqlx_session::PostgresSessionStore as SessionStore;
use async_std::task::{block_on, yield_now};
use async_trait::async_trait;
use serde::Serialize;
@@ -1 +0,0 @@
-
@@ -1,26 +1,5 @@
use serde::{Deserialize, Serialize};
-#[derive(Debug, Deserialize, Serialize)]
-pub struct Release {
- pub tag_name: String,
- pub name: String,
- pub body: String,
- pub draft: bool,
- pub assets: Vec<Asset>,
-}
-
-#[derive(Debug, Deserialize, Serialize)]
-pub struct Asset {
- pub name: String,
- pub url: String,
-}
-
-#[derive(Deserialize)]
-struct Installation {
- #[allow(unused)]
- id: usize,
-}
-
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct User {
pub login: String,
@@ -1,10 +1,8 @@
mod api;
-mod assets;
mod auth;
mod db;
mod env;
mod errors;
-mod expiring;
mod github;
mod rpc;
@@ -12,36 +10,21 @@ use ::rpc::Peer;
use async_std::net::TcpListener;
use async_trait::async_trait;
use db::{Db, PostgresDb};
-use handlebars::Handlebars;
-use parking_lot::RwLock;
-use rust_embed::RustEmbed;
use serde::Deserialize;
use std::sync::Arc;
-use surf::http::cookies::SameSite;
-use tide::sessions::SessionMiddleware;
use tide_compress::CompressMiddleware;
type Request = tide::Request<Arc<AppState>>;
-#[derive(RustEmbed)]
-#[folder = "templates"]
-struct Templates;
-
#[derive(Default, Deserialize)]
pub struct Config {
pub http_port: u16,
pub database_url: String,
- pub session_secret: String,
- pub github_app_id: usize,
- pub github_client_id: String,
- pub github_client_secret: String,
- pub github_private_key: String,
pub api_token: String,
}
pub struct AppState {
db: Arc<dyn Db>,
- handlebars: RwLock<Handlebars<'static>>,
config: Config,
}
@@ -51,27 +34,10 @@ impl AppState {
let this = Self {
db: Arc::new(db),
- handlebars: Default::default(),
config,
};
- this.register_partials();
Ok(Arc::new(this))
}
-
- fn register_partials(&self) {
- for path in Templates::iter() {
- if let Some(partial_name) = path
- .strip_prefix("partials/")
- .and_then(|path| path.strip_suffix(".hbs"))
- {
- let partial = Templates::get(path.as_ref()).unwrap();
- self.handlebars
- .write()
- .register_partial(partial_name, std::str::from_utf8(&partial.data).unwrap())
- .unwrap()
- }
- }
- }
}
#[async_trait]
@@ -120,26 +86,12 @@ pub async fn run_server(
) -> tide::Result<()> {
let mut web = tide::with_state(state.clone());
web.with(CompressMiddleware::new());
- web.with(
- SessionMiddleware::new(
- db::SessionStore::new_with_table_name(&state.config.database_url, "sessions")
- .await
- .unwrap(),
- state.config.session_secret.as_bytes(),
- )
- .with_same_site_policy(SameSite::Lax), // Required obtain our session in /auth_callback
- );
api::add_routes(&mut web);
- let mut assets = tide::new();
- assets.with(CompressMiddleware::new());
- assets::add_routes(&mut assets);
-
let mut app = tide::with_state(state.clone());
rpc::add_routes(&mut app, &rpc);
app.at("/").nest(web);
- app.at("/static").nest(assets);
app.listen(listener).await?;
@@ -1,54 +0,0 @@
-use crate::{
- auth::RequestExt as _, github::Release, AppState, LayoutData, Request, RequestExt as _,
-};
-use comrak::ComrakOptions;
-use serde::Serialize;
-use std::sync::Arc;
-use tide::http::mime;
-
-pub fn add_routes(releases: &mut tide::Server<Arc<AppState>>) {
- releases.at("/releases").get(get_releases);
-}
-
-async fn get_releases(mut request: Request) -> tide::Result {
- #[derive(Serialize)]
- struct ReleasesData {
- #[serde(flatten)]
- layout: Arc<LayoutData>,
- releases: Option<Vec<Release>>,
- }
-
- let mut data = ReleasesData {
- layout: request.layout_data().await?,
- releases: None,
- };
-
- if let Some(user) = request.current_user().await? {
- if user.is_insider {
- data.releases = Some(
- request
- .state()
- .repo_client
- .releases()
- .await?
- .into_iter()
- .filter_map(|mut release| {
- if release.draft {
- None
- } else {
- let mut options = ComrakOptions::default();
- options.render.unsafe_ = true; // Allow raw HTML in the markup. We control these release notes anyway.
- release.body = comrak::markdown_to_html(&release.body, &options);
- Some(release)
- }
- })
- .collect(),
- );
- }
- }
-
- Ok(tide::Response::builder(200)
- .body(request.state().render_template("releases.hbs", &data)?)
- .content_type(mime::HTML)
- .build())
-}
@@ -5728,11 +5728,9 @@ mod tests {
async fn build_app_state(test_db: &TestDb) -> Arc<AppState> {
let mut config = Config::default();
- config.session_secret = "a".repeat(32);
config.database_url = test_db.url.clone();
Arc::new(AppState {
db: test_db.db().clone(),
- handlebars: Default::default(),
config,
})
}
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<browserconfig>
- <msapplication>
- <tile>
- <square150x150logo src="/static/images/mstile-150x150.png"/>
- <TileColor>#000000</TileColor>
- </tile>
- </msapplication>
-</browserconfig>
@@ -1,14 +0,0 @@
-<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
- <style>
- path {
- fill: #000000;
- }
- @media ( prefers-color-scheme: dark ) {
- path {
- fill: #FFFFFF;
- }
- }
- </style>
- <path fill-rule="evenodd" clip-rule="evenodd" d="M256 0C114.615 0 0 114.615 0 256C0 397.385 114.615 512 256 512C397.385 512 512 397.385 512 256C512 114.615 397.385 0 256 0ZM256 64C149.961 64 64 149.961 64 256C64 362.039 149.961 448 256 448C362.039 448 448 362.039 448 256C448 149.961 362.039 64 256 64Z"/>
- <path fill-rule="evenodd" clip-rule="evenodd" d="M160 160L376 160L238 304H304L352 352H136L274 208H208L160 160Z"/>
-</svg>
@@ -1,19 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
- "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
- width="512.000000pt" height="512.000000pt" viewBox="0 0 512.000000 512.000000"
- preserveAspectRatio="xMidYMid meet">
- <style>
- path {
- fill: #000000;
- }
- @media ( prefers-color-scheme: dark ) {
- path {
- fill: #FFFFFF;
- }
- }
- </style>
- <path fill-rule="evenodd" clip-rule="evenodd" d="M256 0C114.615 0 0 114.615 0 256C0 397.385 114.615 512 256 512C397.385 512 512 397.385 512 256C512 114.615 397.385 0 256 0ZM256 64C149.961 64 64 149.961 64 256C64 362.039 149.961 448 256 448C362.039 448 448 362.039 448 256C448 149.961 362.039 64 256 64Z"/>
- <path fill-rule="evenodd" clip-rule="evenodd" d="M160 160L376 160L238 304H304L352 352H136L274 208H208L160 160Z"/>
-</svg>
@@ -1,12 +0,0 @@
-/* PrismJS 1.25.0
-https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+bash+c+cpp+rust+scss */
@@ -1,253 +0,0 @@
-article.prose {
- margin-bottom: 2.5rem;
-}
-
-article.prose,
-.type-prose {
- font-family: "Spectral", "Constantia", "Lucida Bright", "Lucidabright", "Lucida Serif", "Lucida", "DejaVu Serif", "Bitstream Vera Serif", "Liberation Serif", "Georgia", "serif", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", serif;
- letter-spacing: -0.05rem;
-}
-
-article.prose h1,
-article.prose h2,
-article.prose h3,
-article.prose h4,
-.type-prose h1,
-.type-prose h2,
-.type-prose h3,
-.type-prose h4 {
- margin: 3rem 0 1rem 0;
-}
-
-article.prose h1,
-.type-prose h1 {
- font-size: 2.25rem;
- line-height: 2.5rem;
-}
-
-article.prose h2,
-.type-prose h2 {
- font-size: 1.875rem;
- line-height: 2.25rem;
-}
-
-article.prose h3,
-.type-prose h3 {
- font-size: 1.6rem;
- line-height: 2rem;
-}
-
-article.prose h4,
-.type-prose h4 {
- font-size: 1.4rem;
- line-height: 1.75rem;
-}
-
-article.prose p,
-article.prose li,
-article.prose a,
-.type-prose p,
-.type-prose li,
-.type-prose a {
- color: #eee;
- font-size: 1.3rem;
- line-height: 2.1rem;
-}
-
-article.prose a:not(img),
-.type-prose a:not(img) {
- text-decoration: underline;
- text-underline-offset: 4px;
-}
-
-article.prose strong,
-.type-prose strong {
- font-weight: 600;
-}
-
-article.prose i,
-.type-prose i {
- font-style: italic;
-}
-
-article.prose p:not(:last-of-type),
-.type-prose p:not(:last-of-type) {
- margin-bottom: 1.5rem;
-}
-
-article.prose img,
-article.prose pre,
-.type-prose img,
-.type-prose pre {
- margin: 1.5rem 0;
-}
-
-article.prose ul,
-.type-prose ul {
- margin-left: 1.5rem;
-}
-
-article.prose ul li,
-.type-prose ul li {
- list-style-type: disc;
- list-style-position: outside;
-}
-
-article.prose ul li:not(:last-of-type),
-.type-prose ul li:not(:last-of-type) {
- margin-bottom: 0.2rem;
-}
-
-article.prose code,
-.type-prose code {
- font-family: "JetBrains Mono", "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", monospace;
- font-size: 0.96rem;
- letter-spacing: 0rem;
-}
-
-article.prose :not(pre) > code,
-.type-prose :not(pre) > code {
- padding: 0.2rem 0.4rem;
-}
-
-article.prose pre,
-.type-prose pre {
- padding: 0.8rem;
-}
-
-article.prose pre,
-article.prose :not(pre) > code,
-.type-prose pre,
-.type-prose :not(pre) > code {
- border-radius: 4px;
- background-color: rgba(255, 255, 255, 0.1);
-}
-
-/* Code Highlighting Styles
-/* Based on PrismJS 1.25.0
-https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+bash+c+cpp+rust+scss */
-code[class*="language-"],
-pre[class*="language-"] {
- color: #ddd;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- word-wrap: normal;
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
- -webkit-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
-}
-
-/* Code blocks */
-pre[class*="language-"]::-moz-selection {
- /* Firefox */
- background: #3b57bc33;
-}
-
-pre[class*="language-"]::selection {
- /* Safari */
- background: #3b57bc33;
-}
-
-/* Text Selection colour */
-pre[class*="language-"]::-moz-selection,
-pre[class*="language-"] ::-moz-selection,
-code[class*="language-"]::-moz-selection,
-code[class*="language-"] ::-moz-selection {
- text-shadow: none;
- background: #3b57bc33;
-}
-
-pre[class*="language-"]::selection,
-pre[class*="language-"] ::selection,
-code[class*="language-"]::selection,
-code[class*="language-"] ::selection {
- text-shadow: none;
- background: #3b57bc33;
-}
-
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
- color: #9cdcfe;
-}
-
-.token.punctuation {
- opacity: 0.7;
-}
-
-.token.namespace {
- opacity: 0.7;
-}
-
-.token.tag,
-.token.boolean,
-.token.number,
-.token.deleted {
- color: #b5cea8;
-}
-
-.token.keyword,
-.token.property,
-.token.selector,
-.token.constant,
-.token.symbol,
-.token.builtin {
- color: #0086c0;
- /* #F9EE98 */
-}
-
-.token.attr-name,
-.token.attr-value,
-.token.string,
-.token.char,
-.token.operator,
-.token.entity,
-.token.url,
-.language-css .token.string,
-.style .token.string,
-.token.variable,
-.token.inserted {
- color: #4e94ce;
-}
-
-.token.atrule {
- color: #4ec9b0;
-}
-
-.token.regex,
-.token.important {
- color: #dcdcaa;
-}
-
-.token.important,
-.token.bold {
- font-weight: bold;
-}
-
-.token.italic {
- font-style: italic;
-}
-
-.token.entity {
- cursor: help;
-}
-
-/* Markup */
-.language-markup .token.tag,
-.language-markup .token.attr-name,
-.language-markup .token.punctuation {
- color: #4e94ce;
-}
-
-/* Make the tokens sit above the line highlight so the colours don't look faded. */
-.token {
- position: relative;
- z-index: 1;
-}
-/*# sourceMappingURL=prose.css.map */
@@ -1,9 +0,0 @@
-{
- "version": 3,
@@ -1,260 +0,0 @@
-// Style prose by hand
-// add .prose to any <article> to activate prose styles
-// or .type-prose to any element
-
-article.prose {
- margin-bottom: 2.5rem;
-}
-
-article.prose,
-.type-prose {
- font-family: "Spectral", "Constantia", "Lucida Bright", "Lucidabright",
- "Lucida Serif", "Lucida", "DejaVu Serif", "Bitstream Vera Serif",
- "Liberation Serif", "Georgia", "serif", "Apple Color Emoji",
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", serif;
- letter-spacing: -0.05rem;
-
- h1,
- h2,
- h3,
- h4 {
- margin: 3rem 0 1rem 0;
- }
-
- h1 {
- font-size: 2.25rem;
- line-height: 2.5rem;
- }
-
- h2 {
- font-size: 1.875rem;
- line-height: 2.25rem;
- }
-
- h3 {
- font-size: 1.6rem;
- line-height: 2rem;
- }
-
- h4 {
- font-size: 1.4rem;
- line-height: 1.75rem;
- }
-
- p,
- li,
- a {
- color: #eee;
- font-size: 1.3rem;
- line-height: 2.1rem;
- }
-
- a:not(img) {
- text-decoration: underline;
- text-underline-offset: 4px;
- }
-
- strong {
- font-weight: 600;
- }
-
- i {
- font-style: italic;
- }
-
- p:not(:last-of-type) {
- margin-bottom: 1.5rem;
- }
-
- img,
- pre {
- margin: 1.5rem 0;
- }
-
- ul {
- margin-left: 1.5rem;
- }
-
- ul li {
- list-style-type: disc;
- list-style-position: outside;
- &:not(:last-of-type) {
- margin-bottom: 0.2rem;
- }
- }
-
- code {
- font-family: "JetBrains Mono", "Andale Mono WT", "Andale Mono",
- "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono",
- "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L",
- "Courier New", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
- "Noto Color Emoji", monospace;
- font-size: 0.96rem;
- letter-spacing: 0rem;
- }
-
- :not(pre) > code {
- padding: 0.2rem 0.4rem;
- }
-
- pre {
- padding: 0.8rem;
- }
-
- pre,
- :not(pre) > code {
- border-radius: 4px;
- background-color: rgba(255, 255, 255, 0.1);
- }
-}
-
-/* Code Highlighting Styles
-/* Based on PrismJS 1.25.0
-https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+bash+c+cpp+rust+scss */
-
-code[class*="language-"],
-pre[class*="language-"] {
- color: #ddd;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- word-wrap: normal;
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
-}
-
-/* Code blocks */
-pre[class*="language-"] {
- // Language specific code block styles
-}
-
-pre[class*="language-"]::-moz-selection {
- /* Firefox */
- background: #3b57bc33;
-}
-
-pre[class*="language-"]::selection {
- /* Safari */
- background: #3b57bc33;
-}
-
-/* Text Selection colour */
-pre[class*="language-"]::-moz-selection,
-pre[class*="language-"] ::-moz-selection,
-code[class*="language-"]::-moz-selection,
-code[class*="language-"] ::-moz-selection {
- text-shadow: none;
- background: #3b57bc33;
-}
-
-pre[class*="language-"]::selection,
-pre[class*="language-"] ::selection,
-code[class*="language-"]::selection,
-code[class*="language-"] ::selection {
- text-shadow: none;
- background: #3b57bc33;
-}
-
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
- color: #9cdcfe;
-}
-
-.token.punctuation {
- opacity: 0.7;
-}
-
-.token.namespace {
- opacity: 0.7;
-}
-
-.token.tag,
-.token.boolean,
-.token.number,
-.token.deleted {
- color: #b5cea8;
-}
-
-.token.keyword,
-.token.property,
-.token.selector,
-.token.constant,
-.token.symbol,
-.token.builtin {
- color: #0086c0; /* #F9EE98 */
-}
-
-.token.attr-name,
-.token.attr-value,
-.token.string,
-.token.char,
-.token.operator,
-.token.entity,
-.token.url,
-.language-css .token.string,
-.style .token.string,
-.token.variable,
-.token.inserted {
- color: #4e94ce;
-}
-
-.token.atrule {
- color: #4ec9b0;
-}
-
-.token.regex,
-.token.important {
- color: #dcdcaa;
-}
-
-.token.important,
-.token.bold {
- font-weight: bold;
-}
-.token.italic {
- font-style: italic;
-}
-
-.token.entity {
- cursor: help;
-}
-
-/* Markup */
-.language-markup .token.tag,
-.language-markup .token.attr-name,
-.language-markup .token.punctuation {
- color: #4e94ce;
-}
-
-/* Make the tokens sit above the line highlight so the colours don't look faded. */
-.token {
- position: relative;
- z-index: 1;
-}
-
-// TODO: Style line highlights
-
-// .line-highlight.line-highlight {
-// background: hsla(0, 0%, 33%, 0.25); /* #545454 */
-// background: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */
-// border-bottom: 1px dashed hsl(0, 0%, 33%); /* #545454 */
-// border-top: 1px dashed hsl(0, 0%, 33%); /* #545454 */
-// margin-top: 0.75em; /* Same as .prismβs padding-top */
-// z-index: 0;
-// }
-
-// .line-highlight.line-highlight:before,
-// .line-highlight.line-highlight[data-end]:after {
-// background-color: hsl(215, 15%, 59%); /* #8794A6 */
-// color: hsl(24, 20%, 95%); /* #F5F2F0 */
-// }
@@ -1,18 +0,0 @@
-{
- "name": "Zed β a lightning fast, collaborative code editor written natively in Rust",
- "short_name": "Zed",
- "icons": [
- {
- "src": "/static/android-chrome-192x192.png",
- "sizes": "192x192",
- "type": "image/png"
- },
- {
- "src": "/static/android-chrome-512x512.png",
- "sizes": "512x512",
- "type": "image/png"
- }
- ],
- "theme_color": "#000",
- "background_color": "#000"
-}
@@ -1,6 +0,0 @@
-<svg width="1147" height="310" viewBox="0 0 1147 310" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M4.34388 233H166.2V186.632H82.1039L169.368 28.52H7.79988V74.888H91.6079L4.34388 233ZM233.094 186.632V152.936H291.27V107.144H233.094V74.888H303.078V28.52H182.406V233H305.382V186.632H233.094ZM323.108 233H406.916C460.484 233 504.548 190.376 504.548 130.76C504.548 71.144 460.484 28.52 406.916 28.52H323.108V233ZM373.796 185.192V76.328H405.188C436.292 76.328 451.556 99.08 451.556 130.76C451.556 162.44 436.292 185.192 405.188 185.192H373.796Z" fill="black"/>
-<rect x="372" y="222" width="773" height="86" rx="2" fill="black" stroke="black" stroke-width="4"/>
-<rect x="351" y="205" width="773" height="85" rx="2" fill="#F9FAFB" stroke="black" stroke-width="4"/>
@@ -1,136 +0,0 @@
-/* This file is compiled to /assets/styles/tailwind.css via script/tailwind */
-
-@import url("https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,200;0,300;1,200;1,300&display=swap");
-@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100;0,300;0,600;1,100;1,300;1,600&display=swap");
-
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-@layer base {
- html {
- font-size: 110%;
- text-rendering: geometricPrecision;
- }
-
- @media screen and (min-width: 1024px) {
- html {
- font-size: 125%;
- }
- }
-
- h1 {
- @apply text-4xl;
- @apply tracking-tighter;
- }
- h2 {
- @apply text-3xl;
- @apply tracking-tighter;
- }
- h3 {
- @apply text-2xl;
- @apply tracking-tighter;
- }
- h4 {
- @apply text-xl;
- }
-
- .underline,
- .hover\:underline:hover {
- text-underline-offset: 6px;
- }
-
- @media screen and (min-width: 1024px) {
- .text-columns-2 {
- column-count: 2;
- column-gap: 3rem;
- }
-
-}
- .site-nav a:not(.active) .nav-active-arrow {
- display: none;
- }
-
- .site-nav a.active .nav-active-arrow {
- display: flex;
- }
-
- .site-mobile-nav a.active {
- font-weight: bold;
- }
-
- .text-columns-2 {
- -webkit-column-break-inside: avoid;
- page-break-inside: avoid;
- break-inside: avoid;
- }
-
- .text-columns-2 p {
- break-inside: avoid;
- }
-
- .alternate-bg:nth-of-type(even) {
- background-color: rgba(255,255,255,0.06);
- }
-
- /* div:not(.type-prose) code {
- background-color: rgba(255,255,255,0.15);
- padding: 0px 4px;
- border-radius: 2px;
- color: #eee;
- } */
-
- /* This fixes scrollbar jump */
- @media screen and (min-width: 960px) {
- html {
- margin-left: calc(100vw - 100%);
- margin-right: 0;
- }
- }
-
- :root {
- --color: white;
- --disabled: #959495;
- }
-
- .checkbox {
- color: var(--color);
- }
-
- .checkbox--disabled {
- color: var(--disabled);
- }
-
- .checkbox__control {
- width: 30px;
- height: 30px;
- }
-
- .checkbox__control svg {
- transform: scale(0);
- transform-origin: center center;
- }
-
- .checkbox__brackets {
- left: -1px;
- top: -1px;
- }
-
- .checkbox__input input {
- opacity: 0;
- width: 30px;
- height: 30px;
- }
-
- .checkbox__input input:focus + .checkbox__control {
- box-shadow: 0 0 0 2px #000, 0 0 0 4px #3b57bc99
- }
-
- .checkbox__input input:checked + .checkbox__control svg {
- transform: scale(1);
- }
-
- .checkbox__input input:disabled + .checkbox__control {
- color: var(--disabled);
- }
-}
@@ -1,105 +0,0 @@
-{{#> layout }}
-<script>
- window.addEventListener("DOMContentLoaded", function () {
- let users = document.getElementById("users");
- if (users) {
- users.addEventListener("change", async function (event) {
- const action = event.target.getAttribute("action");
- if (action) {
- console.log(action, event.target.checked);
- const response = await fetch(action, {
- method: 'PUT',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({ admin: event.target.checked })
- });
- }
- });
- }
- });
-</script>
-
-<div class="h-screen text-white border-r border-white text-main font-extralight">
- <div class="flex flex-row items-center justify-between p-5 border-b border-white pl-7 pr-7 admin-nav">
- <h1 class="font-display font-extralight">Admin</h1>
- <ul class="flex flex-row">
- <li><a href="#userlist"
- class="mr-4 leading-relaxed no-underline lowercase text-main hover:underline">Users</a></li>
- <li><a href="#signuplist"
- class="leading-relaxed no-underline lowercase text-main hover:underline">Signups</a></li>
- </ul>
- </div>
-
- <h2 id="userlist" class="pt-10 mb-5 text-white pl-7 pr-7 font-display font-extralight">Users</h2>
-
- <div class="flex flex-col w-full pb-5 font-mono text-xs" id="users">
- <div class="flex flex-row pl-5 pr-10 font-bold">
- <p class="w-1/3 p-2">Github Username</p>
- <p class="w-32 p-2 text-center">Admin</p>
- <p class="w-24 p-2"> </p>
- </div>
- <div class="flex flex-col pl-5 pr-10 text-gray-100">
- <form action="/admin/users" method="post" class="m-0">
- <div class="flex flex-row items-center">
- <p class="w-1/3 p-2"><input class="block w-full p-2 text-xs bg-transparent border border-white"
- type="text" name="github_login" required minlength="4" placeholder="@github_handle"></p>
- <p class="w-32 p-2 text-center"><input type="checkbox" id="admin" name="admin" value="true"></p>
- <p class="w-24 p-2"><button class="underline hover:no-underline">Add</button></p>
- </div>
- </form>
- </div>
- </div>
-
- <div class="flex flex-col w-full pb-10 font-mono text-xs border-b border-white">
- <div class="flex flex-row pl-5 pr-10 font-bold">
- <p class="w-1/3 p-2">Github Username</p>
- <p class="w-32 p-2 text-center">Admin</p>
- <p class="w-24 p-2"> </p>
- </div>
- {{#each users}}
- <div class="flex flex-col pl-5 pr-10 text-gray-100 alternate-bg">
- <form action="/admin/users/{{id}}/delete" method="post" class="m-0">
- <div class="flex flex-row items-center">
- <p class="w-1/3 p-2">{{github_login}}</p>
- <p class="w-32 p-2 text-center"><input action="/admin/users/{{id}}" type="checkbox" {{#if
- admin}}checked{{/if}}></p>
- <p class="w-24 p-2"><button class="underline hover:no-underline">Remove</button></p>
- </div>
- </form>
- </div>
- {{/each}}
- </div>
-
- <h2 class="pt-10 mb-5 text-white pl-7 pr-7 font-display font-extralight">Signups</h2>
-
- <div class="flex flex-col w-full pb-10 font-mono text-xs border-b border-white">
-
- <div class="flex flex-row justify-between pl-5 pr-10 font-bold">
- <p class="w-1/5 p-2">Email</p>
- <p class="w-1/5 p-2">Github</p>
- <p class="w-24 p-2 text-center">Releases</p>
- <p class="w-24 p-2 text-center">Updates</p>
- <p class="w-24 p-2 text-center">Community</p>
- <p class="w-24 p-2 text-right">Remove</p>
- </div>
- {{#each signups}}
- <div class="flex flex-col pb-1 pl-5 pr-10 text-gray-100 alternate-bg">
- <form action="/admin/signups/{{id}}/delete" method="post" class="m-0">
- <div class="flex flex-row items-center justify-between">
- <p class="w-1/5 p-2 pb-1">{{email_address}}</p>
- <p class="w-1/5 p-2 pb-1">{{github_login}}</p>
- <p class="w-24 p-2 pb-1 text-center">{{#if wants_releases}}[β]{{else}}[ ]{{/if}}</p>
- <p class="w-24 p-2 pb-1 text-center">{{#if wants_updates}}[β]{{else}}[ ]{{/if}}</p>
- <p class="w-24 p-2 pb-1 text-center">{{#if wants_community}}[β]{{else}}[ ]{{/if}}</p>
- <p class="w-24 p-2 pb-1 text-right"><button
- class="text-lg text-gray-500 hover:text-white">Γ</button></p>
- </div>
- </form>
- <p class="max-w-full p-2 pt-0 overflow-hidden leading-normal text-gray-400 max-h-5 whitespace-nowrap overflow-ellipsis"
- title="{{about}}">{{about}}</p>
- </div>
- {{/each}}
- </div>
-</div>
-{{/layout}}
@@ -1,20 +0,0 @@
-{{#> layout }}
-
-<div class="max-w-screen-lg p-5 mx-auto font-extralight text-main lg:p-20">
- <h1 class="mb-10 text-4xl text-white font-display font-extralight">
- We think there's a better way to write code—and we've been working for more than a decade to bring it into existence.
- </h1>
- <p class="mt-5 leading-relaxed">Zed is looking for a Rust engineer to help us advance the art of code editing. We're currently three engineers and a designer developing a new editor with a focus on performance, clean design, and collaboration.</p>
- <p class="mt-5 leading-relaxed">We're working on exciting technologies, including a custom, GPU-accelerated UI framework, heavy use of parallelism and persistent data structures, conflict-free replicated data types, and an incremental parsing framework called Tree-sitter that was created by one of our founders.</p>
- <p class="mt-5 leading-relaxed">Our codebase consists of about 60,000 lines of well-factored, thoroughly-tested Rust that compiles quickly. In addition to the Zed editor, we're also developing a server-side component to facilitate collaboration that tightly integrates with the client.</p>
- <p class="mt-10 leading-relaxed">We'd love to hear from you if you're excited to build the world's best code editor and meet this description:</p>
- <ul class="mt-10 mb-16 leading-relaxed">
- <li class="mt-5 leading-relaxed">You're experienced in Rust. You've developed a substantial piece of software or meaningfully contributed to an open source project.</li>
- <li class="mt-5 leading-relaxed">You'd be excited to to pair program with us multiple times a week to learn the codebase.</li>
- <li class="mt-5 leading-relaxed">You know how to maintain code quality while being pragmatic and prioritizing the needs of the customer.</li>
- <li class="mt-5 leading-relaxed">You know how to write performant software, including algorithmic analysis and profile-driven optimization.</li>
- <li class="mt-5 leading-relaxed">Bonus: You have experience working on code editors, compilers, distributed systems, CRDTs, or real-time graphics.</li>
- </ul>
-</div>
-
-{{/layout}}
@@ -1,107 +0,0 @@
-{{#> layout }}
-
-<div class="max-w-screen-lg p-5 mx-auto font-extralight text-main lg:p-20">
- <h1 class="mb-10 font-display font-extralight">Weβre building a community of passionate developers & advocates.</h1>
-
- <p class="mt-5 leading-relaxed">If you would like to get involved early, sign up below and we will let you know when our developer community opens!</p>
-
- <form action="/signups" method="post" class="max-w-screen-md mt-10">
- <ul>
- <li class="flex flex-row mt-5 text-lg">
- <span class="relative w-6 mt-2 mr-5 checkbox__input">
- <span class="absolute z-0 block checkbox__brackets">
- <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg" focusable="false">
- <path d="M8 0H0V32H8V31H1V1H8V0Z" fill="white"/>
- <path d="M24 31H31V1H24V0H32V32H24V31Z" fill="white"/>
- </svg>
- </span>
- <input class="absolute z-10" type="checkbox" value=true name="wants_releases">
- <span class="flex items-center justify-center checkbox__control">
- <svg width="12" height="11" viewBox="0 0 12 11" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
- <path d="M1 6.38905L4.33333 9.72239L11 0.833496" fill='none' stroke='currentColor' stroke-width="1" stroke-linecap="round"/>
- </svg>
- </span>
- </span>
-
- <div class="flex-1 mt-1">
- <label for="wants_releases">
- <span class="radio__label">Let me know when there is a beta release I can try.</span>
- </label>
- <p class="text-sm leading-6 text-gray-300">
- We'll put you on the list to play with an early beta and let you know when Zed launches.
- </p>
- </div>
- </li>
- <li class="flex flex-row mt-5 text-lg">
- <span class="relative w-6 mt-2 mr-5 checkbox__input">
- <span class="absolute z-0 block checkbox__brackets">
- <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg" focusable="false">
- <path d="M8 0H0V32H8V31H1V1H8V0Z" fill="white"/>
- <path d="M24 31H31V1H24V0H32V32H24V31Z" fill="white"/>
- </svg>
- </span>
-
- <input class="absolute z-10" type="checkbox" value=true name="wants_updates">
- <span class="flex items-center justify-center checkbox__control">
- <svg width="12" height="11" viewBox="0 0 12 11" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
- <path d="M1 6.38905L4.33333 9.72239L11 0.833496" fill='none' stroke='currentColor' stroke-width="1" stroke-linecap="round"/>
- </svg>
- </span>
- </span>
-
- <div class="flex-1 mt-1">
- <label for="wants_updates">
- <span class="radio__label">Iβm interested in following Zed's development</span>
- </label>
- <p class="text-sm leading-6 text-gray-300">
- We'll send you occasional updates about our progress and share what we're learning along the way.
- </p>
- </div>
- </li>
- <li class="flex flex-row mt-5 text-lg">
- <span class="relative w-6 mt-2 mr-5 checkbox__input">
- <span class="absolute z-0 block checkbox__brackets">
- <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg" focusable="false">
- <path d="M8 0H0V32H8V31H1V1H8V0Z" fill="white"/>
- <path d="M24 31H31V1H24V0H32V32H24V31Z" fill="white"/>
- </svg>
- </span>
-
- <input class="absolute z-10" type="checkbox" value=true name="wants_community">
-
- <span class="flex items-center justify-center checkbox__control">
- <svg width="12" height="11" viewBox="0 0 12 11" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
- <path d="M1 6.38905L4.33333 9.72239L11 0.833496" fill='none' stroke='currentColor' stroke-width="1" stroke-linecap="round"/>
- </svg>
- </span>
- </span>
-
- <div class="flex-1 mt-1">
- <label for="wants_community">
- <span class="radio__label">I want to test early releases & join the Zed community</span>
- </label>
- <p class="text-sm leading-6 text-gray-300">
- We'll add you to the waitlist to receive early builds and ask you to help us by testing them out.
- </p>
- </div>
- </li>
- </ul>
- <div class="lg:flex lg:flex-row lg:mt-10">
- <input class="block w-full p-5 mt-10 bg-transparent border border-white font-extralight lg:mt-0 lg:mr-5" type="text" id="form-email" name="email_address" required minlength="4" placeholder="Your email">
-
- <input class="block w-full p-5 mt-5 bg-transparent border border-white font-extralight lg:mt-0" type="text" id="form-gh" name="github_login" placeholder="Github Username">
- </div>
-
- <textarea class="block w-full h-40 p-5 mt-5 leading-relaxed bg-transparent border border-white font-extralight" type="text" name="about" placeholder="Tell us a bit about yourself and your interest in Zed. What does your dream code-editing experience look like? What do you love or hate about your current editor?"></textarea>
-
- <button class="block mt-10 text-lg opacity-100 font-extralight hover:opacity-80">
- Join the waitlist →
- </button>
-
- <p class="mt-10 text-sm leading-relaxed text-gray-500">
- We're not gonna spam you—You can expect an email every 1 to 3 months from us if you sign up for updates, and occasional emails about beta releases.
- </p>
- </form>
-</div>
-
-{{/layout}}
@@ -1,41 +0,0 @@
-{{#> layout }}
-
-<div class="bg-white">
- <div class="container mx-auto py-12 px-8 md:px-12">
- <h1 class="text-4xl font-black font-display mb-8">Bypassing code signing restrictions</h1>
- <div class="lg:flex lg:flex-row items-start">
- <div class="prose xl:prose-xl lg:mr-12">
- <p>
- We haven't yet applied to Apple for the required certificate to sign our application bundle, which
- means there's a small speed bump when you run our app.
- </p>
- <p>
- Instead of double-clicking the app, right click it and choose Open.
- </p>
- <p>
- You need to attempt open the app <b>twice</b>. On the second attempt, you should see the option
- to open the application anyway in the dialog.
- </p>
- </div>
- <img class="float-1 lg:w-1/3 object-contain mt-8 lg:mt-0" alt="Screen Shot 2021-06-02 at 2 38 12 PM"
- src="https://user-images.githubusercontent.com/1789/120550754-86514480-c3b2-11eb-8995-32f5eea79664.png">
- <img class="float-1 lg:w-1/3 object-contain -ml-10 lg:ml-0 lg:-mt-10"
- alt="Screen Shot 2021-06-02 at 2 38 19 PM"
- src="https://user-images.githubusercontent.com/1789/120550759-88b39e80-c3b2-11eb-88e2-ddfc1b1c7a03.png">
- </div>
-
- <h1 class="text-4xl font-black font-display my-8">Key bindings</h1>
- <div class="prose">
- <dl>
- <dt>
- <pre>cmd-shift-L</pre>
- </dt>
- <dd>
- Split selection into lines
- </dd>
- </dl>
- </div>
- </div>
-</div>
-
-{{/layout}}
@@ -1,15 +0,0 @@
-{{#> layout }}
-
-<div class="max-w-screen-lg p-10 mx-auto text-main font-extralight lg:p-20">
- <article class="max-w-xl">
- <h1 class="mb-5 text-4xl text-white font-display font-extralight">Sorry!</h1>
- <p class="mb-5 leading-relaxed">
- Looks like we encountered a {{status}} error: {{reason}}
- </p>
- <p class="leading-relaxed">
- Try refreshing or going <a class="underline hover:no-underline" href="/">home</a>.
- </p>
- </article>
-</div>
-
-{{/layout}}
@@ -1,110 +0,0 @@
-{{#> layout }}
-
-<div class="max-w-screen-lg p-5 mx-auto text-gray-200 font-extralight text-main lg:p-20">
- <article class="">
- <h1 class="mb-10 text-4xl leading-tight text-white font-display font-extralight">Introducing Zed—A lightning-fast, collaborative code editor written in Rust.</h1>
- <p class="mt-5 leading-relaxed">
- We think there's a better way to write code, and it starts with the following assumptions:
- </p>
-
- <h3 class="mt-10 leading-tight text-white font-display font-extralight">Mission-critical tools should be hyper-responsive.</h3>
-
- <p class="mt-3 leading-relaxed">
- When you move the cursor or type a character, you should see pixels on the next refresh of your display—every time. Even sub-perceptual pauses add up over the course of a day to create unnecessary stress.
- </p>
-
- <p class="mt-5 leading-relaxed">
- Joyful coding starts with an editor that stays out of your way.
- </p>
-
- <h3 class="mt-10 leading-tight text-white font-display font-extralight">Real-time collaboration produces better software.</h3>
-
- <p class="mt-3 leading-relaxed">
- Pull requests have their place, but sometimes you just want to code together. It's more fun than code review, builds trust between colleagues, and it's one of the best ways to distribute knowledge through a team. But it has to be easy.
- </p>
-
- <p class="mt-5 leading-relaxed">
- If you want someone's perspective on a piece of code, it should be as easy as sending a message to pull them into your working copy and start coding.
- </p>
-
- <h3 class="mt-10 leading-tight text-white font-display font-extralight">Conversations about software should happen close to the code.</h3>
-
- <p class="mt-3 leading-relaxed">
- If you want to talk about code on GitHub you have to commit and push it first, and pasting code into a chat application sucks.
- </p>
-
- <p class="mt-5 leading-relaxed">
- By treating keystrokes as the fundamental unit of change and integrating chat into the editor, we can make it easy to have a conversation about any line of code in any working copyβwhether it was committed last year or just typed ten seconds ago.
- </p>
-
- <h3 class="mt-10 leading-tight text-white font-display font-extralight">Our goal is to make you as efficient as possible.</h3>
-
- <p class="mt-3 leading-relaxed">
- If you're living in a tool for hours every day, you want it to disappear. Every pixel must carry its weight, and the software you're creating should always be the focus. So we constantly ask ourselves how we can maximize signal and minimize noise.
- </p>
-
- <p class="mt-5 leading-relaxed">
- Do we need an icon? Do we need a gradient? We all want to achieve mastery. Our goal is to find the most efficient way to accomplish each coding task and make it accessible. We will never dumb things down.
- </p>
-
- <p class="mt-10 mb-10 leading-relaxed">———</p>
-
- <p class="mt-5 leading-relaxed">
- We're looking to add another engineer to the team. Want to help us build the future? <a href="/careers">Join us</a>.
- </p>
-
- <p class="mt-10 mb-10 leading-relaxed">———</p>
-
- <h2 class="mt-16 mb-5 leading-tight text-white font-display font-extralight">Under the hood</h2>
-
- <article class="leading-relaxed">
- <h3 class="mt-10 leading-tight text-white font-display font-extralight">Building in Rust</h3>
- <p class="mt-3">Rust offers expressivity and developer productivity rivaling languages that depend on a VM, while simultaneously offering the control required to fully utilize the underlying hardware.</p>
-
- <p class="mt-5">Rust's unique ownership model is a challenge at the beginning, but once you internalize it, you can write extremely efficient multi-core code without fear of invoking undefined behavior.</p>
-
- <p class="mt-5">It also makes it straightforward to call directly into the C-based APIs of the operating system. Rust makes it possible for a small team to build a complex product quickly, and Zed wouldn't have been possible without it.</p>
-
- <p class="mt-5">In the past, to write software with this performant you would need to use C++. Rust, for the first time, enables us to write software at that level as a very small team.</p>
- </article>
-
- <article class="leading-relaxed">
- <h3 class="mt-10 mb-4 leading-tight text-white font-display font-extralight">A new GPU-powered UI framework</h3>
- <p class="mt-3">We originally planned to use Electron as a convenient means of delivering a cross-platform GUI for Zed, while building the core of the application in Rust. But at every turn, we found that web technology was the bottleneck in achieving amazing performance. Finally, we decided to take full control and simply build a GPU-powered UI framework that met our needs.</p>
-
- <p class="mt-5"></p>We call it GPUI.</p>
-
- <p class="mt-5">We took a lot of inspiration from Mozilla's Webrender project. The key insight was that modern graphics hardware can render complex 3D graphics at high frame rates, so why not use it to render relatively simple 2D user interfaces with an immediate mode architecture? </p>
-
- <p class="mt-5">Rust's ownership model required us to rethink much of what we learned in other UI programming paradigms, but the result is a framework that's productive to use and remarkably easy to reason about.</p>
-
- <p class="mt-5">It's liberating to control every pixel, and it's a rush to push those pixels at lightning speed.</p>
- </article>
-
- <article class="leading-relaxed">
- <h3 class="mt-10 mb-4 leading-tight text-white font-display font-extralight">Conflict-free replicated data types</h3>
-
- <p class="mt-3">Real-time collaborative editing presents the illusion that multiple people are editing the same buffer. In reality, each collaborator maintains their own personal replica of the buffer to which they can apply local edits immediately without network latency.</p>
-
- <p class="mt-5">After being applied locally, edits are transmitted to collaborators over the network, whose copies may have also changed in the meantime. This means that as participants edit together, their replicas continuously diverge and reconverge. Turns out this is a tricky problem.</p>
-
- <p class="mt-5">To solve it, we're using conflict-free replicated data types, which have emerged in the last decade as a general framework for achieving eventual consistency in a variety of circumstances.</p>
-
- <p class="mt-5">Making Zed's buffers CRDTs allows for collaborative editing, but it also helps us reason about concurrent change so that we can push work into background threads and keep the UI thread responsive.</p>
- </article>
-
- <article class="leading-relaxed">
- <h3 class="mt-10 mb-4 leading-tight text-white font-display font-extralight">Tree-sitter</h3>
-
- <p class="mt-3">We plan to integrate with the Language Server Protocol to support advanced IDE features, but we also think it's important for a code editor to have a rich, native understanding of syntax.</p>
-
- <p class="mt-5">That's why we built Tree-sitter, a fast, general, incremental parsing library that can provide Zed with syntax trees for over 50 languages. Tree-sitter already powers production functionality on GitHub, and we'll use it to deliver syntactically-precise syntax highlighting, tree-based selection and cursor navigation, robust auto-indent support, symbolic navigation, and more.</p>
- </article>
-
- <p class="mt-10 mb-10 leading-relaxed">———</p>
-
- <p class="mt-5 leading-relaxed">Excited about what we are building? <a class="underline hover:no-underline" href="/community">Sign up for updates</a> to follow along in our development process.</p>
- </article>
-</div>
-
-{{/layout}}
@@ -1,199 +0,0 @@
-<html>
-
-<head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=0.86, maximum-scale=5.0, minimum-scale=0.86">
-
- <link rel="mask-icon" href="/static/images/favicon.svg" color="#000000">
- <link rel="alternate icon" type="image/png" href="/static/images/favicon.png">
- <link rel="shortcut icon" href="/static/images/favicon.svg">
- <link rel="apple-touch-icon" sizes="180x180" href="/static/images/apple-touch-icon.png">
- <link rel="manifest" href="/static/site.webmanifest">
-
- <link rel="stylesheet" href="/static/styles.css">
- <link rel="stylesheet" href="/static/prose.css">
-
- <link rel="mask-icon" href="/static/images/safari-pinned-tab.svg" color="#000000">
- <meta name="msapplication-TileColor" content="#000000">
- <meta name="msapplication-config" content="/static/browserconfig.xml">
- <meta name="theme-color" content="#000">
-
- <!-- Open Graph stuff -->
- <meta name="twitter:card" content="summary" />
- <meta property="twitter:image" content="/static/images/zed-twitter-image.png" />
- <meta name="twitter:image:alt" content="An image of Zed's logo, sharp Z inside a circle, in white on a black background." />
- <meta property="og:url" content="https://zed.dev/" />
- <meta property="og:title" content="Introducing Zed" />
- <meta property="og:description" content="A lightning-fast, collaborative code editor written in Rust." />
- <meta property="og:image" content="/static/images/zed-og-image.png" />
- <meta property="og:type" content="website" />
-
- <title>Zed</title>
-
-</head>
-
-<body class="box-border font-light bg-black font-body text-main">
- <main class="container flex flex-col mx-auto lg:bg-white lg:flex-none lg:grid lg:min-h-full lg:grid-cols-4 max-w-screen-2xl lg:gap-x-px text-gray-50">
- <nav id="mobile-nav" class="p-5 pt-10 pb-5 bg-black font-extralight lg:hidden site-mobile-nav">
- <div class="flex flex-row justify-between">
- <a href="/" class="block hover:opacity-80">
- <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
- <path fill-rule="evenodd" clip-rule="evenodd" d="M16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0ZM16 4C9.37258 4 4 9.37258 4 16C4 22.6274 9.37258 28 16 28C22.6274 28 28 22.6274 28 16C28 9.37258 22.6274 4 16 4Z" fill="white"/>
- <path fill-rule="evenodd" clip-rule="evenodd" d="M10 10L23.5 10L14.875 19H19L22 22H8.5L17.125 13H13L10 10Z" fill="white"/>
- </svg>
- </a>
- <div class="flex flex-row">
- {{#if current_user}}
-
- <form id="sign_out" action="/sign_out" method="post" class="inline m-0 text-gray-500 font-extralight">
- <button class="text-lg leading-relaxed β no-underline font-extralight hover:underline">Log Out</button>
- </form>
-
- {{else}}
-
- <!-- Otherwise let user log in -->
- <a href=" /sign_in"
- class="text-lg leading-relaxed text-gray-500">
- Log in
- </a>
- {{/if}}
- </div>
- </div>
-
- <div class="flex flex-row flex-wrap mt-10">
- <a href="/" class="mr-2 text-lg leading-relaxed">
- Meet Zed <span class="pt-1 mr-1 text-lg text-gray-500">Β·</span>
- </a>
- <a href="/team" class="mr-2 text-lg leading-relaxed">
- The Team <span class="pt-1 mr-1 text-lg text-gray-500">Β·</span>
- </a>
-
- <a href="/community" class="mr-2 text-lg leading-relaxed">
- Waitlist
- </a>
- {{#if current_user}}
- <a href="/releases" class="mr-2 text-lg leading-relaxed">
- <span class="pt-1 mr-1 text-lg text-gray-500">Β·</span> Releases
- </a>
-
- {{#if current_user.is_admin }}
- <a href="/admin" class="inline-block mr-2 text-lg leading-relaxed">
- <span class="pt-1 mr-1 text-lg text-gray-500">Β·</span> Manage Users
- </a>
- {{/if}}
- {{/if}}
- </div>
-
- <!-- If user is logged in AND -->
- <!-- If user is at least an insider -->
- {{#if current_user}}
-
- <!-- AND If user is an admin -->
-
-
- {{/if}}
- </nav>
-
- <nav id="nav" class="hidden p-10 pt-20 bg-black lg:flex lg:flex-col font-extralight site-nav">
- <a href="/" class="block hover:opacity-80">
- <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
- <path fill-rule="evenodd" clip-rule="evenodd" d="M16 0C7.16344 0 0 7.16344 0 16C0 24.8366 7.16344 32 16 32C24.8366 32 32 24.8366 32 16C32 7.16344 24.8366 0 16 0ZM16 4C9.37258 4 4 9.37258 4 16C4 22.6274 9.37258 28 16 28C22.6274 28 28 22.6274 28 16C28 9.37258 22.6274 4 16 4Z" fill="white"/>
- <path fill-rule="evenodd" clip-rule="evenodd" d="M10 10L23.5 10L14.875 19H19L22 22H8.5L17.125 13H13L10 10Z" fill="white"/>
- </svg>
- </a>
- <div class="flex flex-col mt-10 font-mono">
- <a href="/" class="relative mt-2 text-base no-underline lowercase hover:underline">
- <span class="absolute items-center justify-center hidden h-full align-middle nav-active-arrow -left-7">
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.1594 12.1606C10.0309 12.0567 9.96803 11.8899 9.96803 11.7204C9.96803 11.5509 10.0321 11.3846 10.1603 11.2564L12.7596 8.65813H1.6562C1.29392 8.65813 1 8.36284 1 7.97732C1 7.63829 1.29392 7.34573 1.6562 7.34573H12.7596L10.1613 4.74747C9.90501 4.49114 9.90501 4.07596 10.1613 3.81949C10.4177 3.56303 10.8328 3.56317 11.0893 3.81949L14.8078 7.53794C15.0641 7.79427 15.0641 8.20945 14.8078 8.46592L11.0893 12.1844C10.832 12.4395 10.4164 12.4395 10.1594 12.1606Z" fill="white"/></svg>
- </span>
- Meet Zed
- </a>
- <a href="/team" class="relative mt-2 text-base no-underline lowercase hover:underline">
- <span class="absolute items-center justify-center hidden h-full align-middle nav-active-arrow -left-7">
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.1594 12.1606C10.0309 12.0567 9.96803 11.8899 9.96803 11.7204C9.96803 11.5509 10.0321 11.3846 10.1603 11.2564L12.7596 8.65813H1.6562C1.29392 8.65813 1 8.36284 1 7.97732C1 7.63829 1.29392 7.34573 1.6562 7.34573H12.7596L10.1613 4.74747C9.90501 4.49114 9.90501 4.07596 10.1613 3.81949C10.4177 3.56303 10.8328 3.56317 11.0893 3.81949L14.8078 7.53794C15.0641 7.79427 15.0641 8.20945 14.8078 8.46592L11.0893 12.1844C10.832 12.4395 10.4164 12.4395 10.1594 12.1606Z" fill="white"/></svg>
- </span>
- The Team
- </a>
- <a href="/careers" class="relative mt-2 text-base no-underline lowercase hover:underline">
- <span class="absolute items-center justify-center hidden h-full align-middle nav-active-arrow -left-7">
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.1594 12.1606C10.0309 12.0567 9.96803 11.8899 9.96803 11.7204C9.96803 11.5509 10.0321 11.3846 10.1603 11.2564L12.7596 8.65813H1.6562C1.29392 8.65813 1 8.36284 1 7.97732C1 7.63829 1.29392 7.34573 1.6562 7.34573H12.7596L10.1613 4.74747C9.90501 4.49114 9.90501 4.07596 10.1613 3.81949C10.4177 3.56303 10.8328 3.56317 11.0893 3.81949L14.8078 7.53794C15.0641 7.79427 15.0641 8.20945 14.8078 8.46592L11.0893 12.1844C10.832 12.4395 10.4164 12.4395 10.1594 12.1606Z" fill="white"/></svg>
- </span>
- Careers
- </a>
- <a href="/community" class="relative mt-2 text-base no-underline lowercase hover:underline">
- <span class="absolute items-center justify-center hidden h-full align-middle nav-active-arrow -left-7">
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.1594 12.1606C10.0309 12.0567 9.96803 11.8899 9.96803 11.7204C9.96803 11.5509 10.0321 11.3846 10.1603 11.2564L12.7596 8.65813H1.6562C1.29392 8.65813 1 8.36284 1 7.97732C1 7.63829 1.29392 7.34573 1.6562 7.34573H12.7596L10.1613 4.74747C9.90501 4.49114 9.90501 4.07596 10.1613 3.81949C10.4177 3.56303 10.8328 3.56317 11.0893 3.81949L14.8078 7.53794C15.0641 7.79427 15.0641 8.20945 14.8078 8.46592L11.0893 12.1844C10.832 12.4395 10.4164 12.4395 10.1594 12.1606Z" fill="white"/></svg>
- </span>
- Waitlist
- </a>
- </div>
-
- <!-- If user is logged in AND -->
- <!-- If user is at least an insider -->
- {{#if current_user}}
- <div class="flex flex-col mt-10 font-mono">
- <p class="text-xs tracking-widest uppercase opacity-50">Insiders</p>
- <a href="/releases" class="relative mt-2 text-base no-underline lowercase hover:underline">
- <span class="absolute items-center justify-center hidden h-full align-middle nav-active-arrow -left-7">
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.1594 12.1606C10.0309 12.0567 9.96803 11.8899 9.96803 11.7204C9.96803 11.5509 10.0321 11.3846 10.1603 11.2564L12.7596 8.65813H1.6562C1.29392 8.65813 1 8.36284 1 7.97732C1 7.63829 1.29392 7.34573 1.6562 7.34573H12.7596L10.1613 4.74747C9.90501 4.49114 9.90501 4.07596 10.1613 3.81949C10.4177 3.56303 10.8328 3.56317 11.0893 3.81949L14.8078 7.53794C15.0641 7.79427 15.0641 8.20945 14.8078 8.46592L11.0893 12.1844C10.832 12.4395 10.4164 12.4395 10.1594 12.1606Z" fill="white"/></svg>
- </span>
- Releases
- </a>
- </div>
-
- <!-- AND If user is an admin -->
- {{#if current_user.is_admin }}
- <div class="flex flex-col mt-10 font-mono">
- <p class="text-xs tracking-widest uppercase opacity-50">Admin</p>
- <a href="/admin" class="relative inline-block mt-2 text-base no-underline lowercase hover:underline">
- <span class="absolute items-center justify-center hidden h-full align-middle nav-active-arrow -left-7">
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10.1594 12.1606C10.0309 12.0567 9.96803 11.8899 9.96803 11.7204C9.96803 11.5509 10.0321 11.3846 10.1603 11.2564L12.7596 8.65813H1.6562C1.29392 8.65813 1 8.36284 1 7.97732C1 7.63829 1.29392 7.34573 1.6562 7.34573H12.7596L10.1613 4.74747C9.90501 4.49114 9.90501 4.07596 10.1613 3.81949C10.4177 3.56303 10.8328 3.56317 11.0893 3.81949L14.8078 7.53794C15.0641 7.79427 15.0641 8.20945 14.8078 8.46592L11.0893 12.1844C10.832 12.4395 10.4164 12.4395 10.1594 12.1606Z" fill="white"/></svg>
- </span>
- Manage
- </a>
- </div>
- {{/if}}
-
- <div class="mt-10">
- <p class="text-base no-underline">@{{current_user.github_login}}</p>
- <form id="sign_out" action="/sign_out" method="post">
- <button class="mt-2 text-xs no-underline lowercase opacity-50 font-extralight hover:opacity-100">Sign out</button>
- </form>
- </div>
-
- {{else}}
- <!-- Otherwise let user log in -->
- <a href=" /sign_in"
- class="mt-10 text-base text-gray-400 no-underline lowercase hover:underline">
- Log in
- </a>
- {{/if}}
- </nav>
-
- <div class="col-span-3 pb-20 bg-black">
- {{> @partial-block}}
- </div>
- </main>
- <script src="/static/prism.js"></script>
-</body>
-
-<script>
- const nav = document.getElementById('nav');
- const links = nav.getElementsByTagName('a');
- const currentPath = window.location.pathname;
- for (const link of links) {
- if (link.getAttribute('href') === currentPath) {
- link.classList.add('active');
- }
- }
- const mnav = document.getElementById('mobile-nav');
- const mlinks = mnav.getElementsByTagName('a');
- const mcurrentPath = window.location.pathname;
- for (const mlink of mlinks) {
- if (mlink.getAttribute('href') === mcurrentPath) {
- mlink.classList.add('active');
- }
- }
-</script>
-
-</html>
@@ -1,35 +0,0 @@
-{{#> layout }}
-
-<div class="max-w-screen-lg p-5 mx-auto font-extralight text-main lg:p-20">
- {{#if current_user}}
- <h1 class="mb-10 font-display font-extralight">Releases</h1>
- <p class="mt-5 leading-relaxed">Zed is currently only available on macOS.</p>
- <p class="mt-5 mb-10 leading-relaxed">We are frequently shipping new versions, check back regularly to get the most recent version.</p>
-
- {{#if releases}}
-
- {{#each releases}}
- <article id="{{name}}" class="mb-20">
- <h3 class="mb-2 font-display font-extralight">{{name}}</h3>
- <div>
- <a class="text-sm underline opacity-80 hover:opacity-100" href="/releases/{{tag_name}}/{{assets.0.name}}">Download</a> Β· <a class="text-sm underline opacity-50 hover:opacity-100" href="https://github.com/zed-industries/zed/releases/tag/{{tag_name}}">Release Notes</a>
- </p>
- <div class="mt-10 type-prose">
- {{{body}}}
- </div>
- <div class="mt-5">
- <p>———</p>
- </div>
- </article>
- {{/each}}
- {{/if}}
-
- {{else}}
-
- <h1 class="mb-10 font-display font-extralight">Hold it!</h1>
- <p class="mt-5 leading-relaxed">You can't access this without <a href=" /sign_in" class="mt-5 leading-relaxed underline">logging in</a>.</p>
- <p class="mt-5 leading-relaxed">Try <a href="/community" class="mt-5 leading-relaxed underline">joining our community</a> to get access to updates & releases.</p>
- {{/if}}
-</div>
-
-{{/layout}}
@@ -1,18 +0,0 @@
-{{#> layout }}
-
-<div class="max-w-screen-lg p-10 mx-auto font-extralight text-main lg:p-20">
- <h1 class="mb-10 font-display font-extralight">Thanks for signing up!</h1>
- <p class="mt-5 leading-relaxed">
- We'll add you to our list and let you know when we have something ready for you to try out.
- </p>
-
- <p class="mt-5 leading-relaxed">
- Thanks for your interest!
- </p>
-
- <a href="/" class="block mt-10 text-lg font-extralight underline opacity-100 hover:opacity-80">
- Back to Home
- </a>
-</div>
-
-{{/layout}}
@@ -1,160 +0,0 @@
-{{#> layout }}
-
-<div class="max-w-screen-lg p-5 mx-auto font-extralight text-main lg:p-20">
- <h1 class="mb-10 text-4xl text-white font-display font-extralight">
- We think thereβs a better way to write code—and we've been working for more than a decade to bring it into existence.
- </h1>
- <p class="mt-5 leading-relaxed">
- Our first attempt was Atom, which we loved like a child but which ultimately fell short of our original vision. When we created Electron in 2012 to serve as Atom's runtime, there weren't a lot of great options for building cross-platform desktop apps.
- </p>
- <p class="mt-5 leading-relaxed">
- Had we tried to write Atom in C or C++, it never would have shipped, and we loved the idea of developers extending their editor with the familiar tools of JavaScript, HTML, and CSS.
- </p>
- <p class="mt-5 leading-relaxed">
- In the end, however, we reached the conclusion that the editor we wanted to use couldn't be built in a single-threaded scripting language. It was time to start over. Now we're back from the wilderness, this time with the knowledge and tools we need to execute without compromise.
- </p>
- <p class="mt-5 leading-relaxed">
- We're leveraging Rust, conflict-free replicated data types, and every core of your CPU and GPU to deliver an editor that will make coding more productive, fun, and collaborative. We look forward to sharing our best with you!
- </p>
-
- <h1 class="mt-20 mb-5 text-4xl text-white font-display font-extralight">The Team</h1>
- <div class="">
- <article class="mb-10 bg-black">
- <div class="content">
- <h3 class="mb-2 font-display font-extralight">Nathan Sobo</h3>
- <div class="">
- <p class="mt-3 mb-3 leading-relaxed">Nathan joined GitHub in late 2011 to build the <a href="https://atom.io" class="underline hover:no-underline">Atom text editor</a>, and he led the Atom team until 2018.</p>
-
- <p class="mt-3 mb-3 leading-relaxed">He also co-led development of <a href="https://teletype.atom.io" class="underline hover:no-underline">Teletype for Atom</a>, pioneering one of the first production uses of conflict-free replicated data types for collaborative text editing.</p>
-
- <p class="mt-3 mb-3 leading-relaxed">He's been dreaming about building the worldβs best text editor since he graduated from college, and is excited to finally have the knowledge, tools, and resources to achieve this vision.</p>
-
- <div class="flex flex-row mt-6 mb-3">
- <a class="block mr-4 opacity-60 hover:opacity-100" href="https://github.com/nathansobo">
- <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">