diff --git a/content/blog/automerge-2.md b/content/blog/automerge-2.md index 3c08d72..11e18aa 100755 --- a/content/blog/automerge-2.md +++ b/content/blog/automerge-2.md @@ -72,7 +72,7 @@ Of course, even the most productive authors struggle to type an entire paper qui | automerge 2.0 | 129,062 | | automerge 0.14 | 146,406,415 | -The binary format works wonders in this example, encoding a full history for the document with only 30% overhead. That's less than one additional byte per character! The naive JSON encoding often used circa automerge 0.14 could exceed 1,300 bytes _per character_. If you'd like to learn more about the file format, we have a [specification](https://automerge.org/automerge-binary-format-spec/) document. +The binary format works wonders in this example, encoding a full history for the document with only 30% overhead. That's less than one additional byte per character! The naive JSON encoding often used circa Automerge 0.14 could exceed 1,300 bytes _per character_. If you'd like to learn more about the file format, we have a [specification](https://automerge.org/automerge-binary-format-spec/) document. | Load ~260k operations | Timing (ms) | | ------------------------ | ----------- | @@ -86,7 +86,7 @@ While we are proud of these results, we will continue to invest in improved perf A few notes about methodology before we move on. The particular implementation we used to run the benchmarks can be found [here](https://github.com/alexjg/automerge-perf-comparisons). These numbers were produced on Ryzen 9 7900X. The "timing" column is how long it takes to apply every single edit in the trace, whilst the "memory" common is the peak memory usage during this process. -The improvements found in "2.0.2-unstable" mostly result from an upcoming improved API for text. Also note that the "automerge 1.0.1" here is actually the `automerge@1.0.1-preview-7` release. Automerge 1.0.1 was a significant rewrite from 0.14 and has a similar architecture to the Rust implementation. Improvements between 1.0.1 and 2.0.1 are a result of both optimization and adopting WebAssembly rather than an architectural change. +The improvements found in "2.0.2-unstable" mostly result from an upcoming improved API for text. Also note that the "Automerge 1.0.1" here is actually the `automerge@1.0.1-preview-7` release. Automerge 1.0.1 was a significant rewrite from 0.14 and has a similar architecture to the Rust implementation. Improvements between 1.0.1 and 2.0.1 are a result of both optimization and adopting WebAssembly rather than an architectural change. ## Portability & Mobile Devices @@ -114,7 +114,7 @@ It's under active development, and available in beta right now. We'll talk more ## Rust Developer Experience Improvements -We've seen tremendous enthusiasm for the native Rust experience of Automerge, and the current Rust API is powerful and fast. Unfortunately, it's also low-level and can be difficult to work with directly. To make building Rust applications against automerge easier, Alex built [Autosurgeon](https://github.com/automerge/autosurgeon), a library that helps bind Rust data structures to Automerge documents, and we'll continue to listen to our Rust users and improve on that experience. +We've seen tremendous enthusiasm for the native Rust experience of Automerge, and the current Rust API is powerful and fast. Unfortunately, it's also low-level and can be difficult to work with directly. To make building Rust applications against Automerge easier, Alex built [Autosurgeon](https://github.com/automerge/autosurgeon), a library that helps bind Rust data structures to Automerge documents, and we'll continue to listen to our Rust users and improve on that experience. ## Improved Synchronization diff --git a/content/blog/automerge-3.md b/content/blog/automerge-3.md index 504e033..3a4c4be 100755 --- a/content/blog/automerge-3.md +++ b/content/blog/automerge-3.md @@ -44,7 +44,7 @@ In Automerge 3.0, we're fully committing to the new API—we've removed the `Tex ## Try it out -Automerge 3.0 is used by default when installing the latest version (`2.1.0`) of `@automerge/automerge-repo` or `@automerge/react`. If you're new to automerge take a look at the [tutorial](/docs/tutorial/) to get started. +Automerge 3.0 is used by default when installing the latest version (`2.1.0`) of `@automerge/automerge-repo` or `@automerge/react`. If you're new to Automerge take a look at the [tutorial](/docs/tutorial/) to get started. If you already have an Automerge codebase take a look at the [migration guide](/docs/guides/migrating-from-automerge-2-to-automerge-3) to see if you need to change anything other than the version number of Automerge you depend on. If you just depend on `@automerge/automerge-repo` you'll need to run `npm update @automerge/automerge` (or your package manager's equivalent) to pull in the new version. diff --git a/content/blog/automerge-anywhere.md b/content/blog/automerge-anywhere.md index daa908f..233554a 100755 --- a/content/blog/automerge-anywhere.md +++ b/content/blog/automerge-anywhere.md @@ -20,10 +20,10 @@ This means you should be able to conveniently use Automerge in vanilla JS applic If you find a place where none of our approaches work for you then please let us know by inquring [in our Discord](https://discord.gg/TrgN9FkYSa) or by filing a (GitHub issue)[https://github.com/automerge/automerge]. ## How to use it -We've collected of examples showing how to initialize automerge in specific environments in [a new documentation page](/docs/reference/library-initialization/). If you had trouble with Automerge in your environment before, try again without changing anything first. This new release improved support for a few edge cases within the old API, so you might find everything just starts working on its own. +We've collected of examples showing how to initialize Automerge in specific environments in [a new documentation page](/docs/reference/library-initialization/). If you had trouble with Automerge in your environment before, try again without changing anything first. This new release improved support for a few edge cases within the old API, so you might find everything just starts working on its own. If you do need to use the new manual initialization code you'll need to to make a couple of small changes: -1. Import the `/slim` variant of automerge and separately, the WebAssembly blob. +1. Import the `/slim` variant of Automerge and separately, the WebAssembly blob. 2. Await the result of calling `Automerge.initializeWasm(wasm)`. For example, here's how to perform initialization in a Vite app without importing WebAssembly modules: @@ -69,5 +69,5 @@ await next.initializeBase64Wasm(automergeWasmBase64) const repo = new Repo({..}) ``` -### For libraries which depend on automerge -If you are writing a library which depends on automerge that other applications might use, please be sure to only import the `@automerge/automerge/slim` package. Doing so will ensure other users retain the option of +### For libraries which depend on Automerge +If you are writing a library which depends on Automerge that other applications might use, please be sure to only import the `@automerge/automerge/slim` package. Doing so will ensure other users retain the option of diff --git a/content/blog/automerge-repo.md b/content/blog/automerge-repo.md index ee28a70..dded310 100755 --- a/content/blog/automerge-repo.md +++ b/content/blog/automerge-repo.md @@ -159,8 +159,8 @@ Note that when `Repo` receives changes over the network or registers local chang export let documentUrl: AutomergeUrl - // Doc is an automerge store with a `change` method which accepts - // a standard automerge change function + // Doc is an Automerge store with a `change` method which accepts + // a standard Automerge change function const doc = document(documentUrl) const increment = () => { doc.change((d: HasCount) => (d.count = (d.count || 0) + 1)) @@ -174,7 +174,7 @@ Note that when `Repo` receives changes over the network or registers local chang ## What about <X>? -We'd love to help you make automerge work in your favorite development environment! Please reach out to us on GitHub or via [our Slack](https://join.slack.com/t/automerge/shared_invite/zt-e4p3760n-kKh7r3KRH1YwwNfiZM8ktw). +We'd love to help you make Automerge work in your favorite development environment! Please reach out to us on GitHub or via [our Slack](https://join.slack.com/t/automerge/shared_invite/zt-e4p3760n-kKh7r3KRH1YwwNfiZM8ktw). ## Extending `automerge-repo` @@ -194,7 +194,7 @@ The `automerge-repo` library provides network adapters for WebSocket, MessageCha ### Other languages/platforms -This release of `automerge-repo` is just for javascript. Automerge is a multi-language library though and there are efforts under way to implement `automerge-repo` on other platforms. The most mature of these is [`automerge-repo-rs`](https://github.com/automerge/automerge-repo-rs). We welcome contributions and please reach out if you're starting to develop `automerge-repo` for a new platform. +This release of `automerge-repo` is just for JavaScript. Automerge is a multi-language library though and there are efforts under way to implement `automerge-repo` on other platforms. The most mature of these is [`automerge-repo-rs`](https://github.com/automerge/automerge-repo-rs). We welcome contributions and please reach out if you're starting to develop `automerge-repo` for a new platform. ## Beta Quality diff --git a/content/blog/rich-text.md b/content/blog/rich-text.md index 433fb6d..18ae830 100755 --- a/content/blog/rich-text.md +++ b/content/blog/rich-text.md @@ -61,7 +61,7 @@ Block markers have a type - such as "ordered list item" - and parents - such as These elements map quite closely to user actions whilst editing. Typically a text editor allows you to highlight a sequence of characters and format them - regardless of whether they are in different regions of the document (try highlighting and bolding half of a list item and preceding paragraph in Google Docs for example). On the other hand, inserting a new list item is usually achieved by pressing Enter at the end of the current list item - inserting a block marker; and indenting a list item is done by pressing a button in the toolbar - inserting a new parent into the block parents. -Choosing operations on the underlying data structure which map well to typical actions performed while editing text means we can provide accurate representations of the difference between two versions of the text. Here's the same structure change example in automerge +Choosing operations on the underlying data structure which map well to typical actions performed while editing text means we can provide accurate representations of the difference between two versions of the text. Here's the same structure change example in Automerge