diff --git a/demos/git_compat.png b/demos/git_compat.png
index 2fa3665704..161e1e33d0 100644
Binary files a/demos/git_compat.png and b/demos/git_compat.png differ
diff --git a/demos/git_compat.svg b/demos/git_compat.svg
new file mode 100644
index 0000000000..65a9aea473
--- /dev/null
+++ b/demos/git_compat.svg
@@ -0,0 +1,88 @@
+
+
diff --git a/demos/juggle_conflicts.png b/demos/juggle_conflicts.png
index c5a661dcfa..f6cfe5aba2 100644
Binary files a/demos/juggle_conflicts.png and b/demos/juggle_conflicts.png differ
diff --git a/demos/juggle_conflicts.svg b/demos/juggle_conflicts.svg
new file mode 100644
index 0000000000..1bfe09dd19
--- /dev/null
+++ b/demos/juggle_conflicts.svg
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+# We are in a repo with three commits, all
+# editing the same line:
+
+$ jj log
+@ ovrsxxnxjjfan@example.com2023-09-09 22:52:55.561 -07:00f93733d6
+│ (empty)(no description set)
+◉ svxvskxqjjfan@example.com2023-09-09 22:52:55.560 -07:00thirdc7e83542
+│ third
+◉ vqllvzqxjjfan@example.com2023-09-09 22:52:55.488 -07:00second0fe74e58
+│ second
+◉ zulolszkjjfan@example.com2023-09-09 22:52:55.433 -07:00firstb21ec90b
+│ first
+◉ zzzzzzzzroot()00000000
+$ jj diff -r first
+Added regular file file:
+ 1: first
+$ jj diff -r second
+Modified regular file file:
+ 1 1: firstsecond
+$ jj diff -r third
+Modified regular file file:
+ 1 1: secondthird
+
+# Let's reorder the second and third commits:
+
+$ jj rebase -s third -d first
+Rebased 2 commits
+Working copy now at: ovrsxxnx59c115b9(conflict)(empty)(no description set)
+Parent commit : svxvskxq4c9ee69fthird | (conflict) third
+Added 0 files, modified 1 files, removed 0 files
+$ jj rebase -s second -d third
+Rebased 1 commits
+$ jj log
+◉ vqllvzqxjjfan@example.com2023-09-09 22:52:55.710 -07:00second61366571
+│ second
+│ @ ovrsxxnxjjfan@example.com2023-09-09 22:52:55.687 -07:0059c115b9conflict
+├─╯ (empty)(no description set)
+◉ svxvskxqjjfan@example.com2023-09-09 22:52:55.687 -07:00third4c9ee69f
+│ conflict
+│ third
+◉ zulolszkjjfan@example.com2023-09-09 22:52:55.433 -07:00firstb21ec90b
+│ first
+◉ zzzzzzzzroot()00000000
+
+# The commit labeled "third" has a conflict, as expected. What's more
+# interesting is that the top commit has no conflict! That's because it
+# has the changes from all three commits applied to it.
+#
+# Let's verify that by looking at its contents:
+
+$ jj co second
+Working copy now at: kmkxlsntd5254498(empty)(no description set)
+Parent commit : vqllvzqx61366571second | second
+Added 0 files, modified 1 files, removed 0 files
+$ cat file
+third
+
+# Let's now instead make "second" and "third"
+# sibling and merge them:
+
+$ jj rebase -s second -d first
+Rebased 2 commits
+Working copy now at: kmkxlsnte09dea7a(empty)(no description set)
+Parent commit : vqllvzqxcb7c9891second | second
+Added 0 files, modified 1 files, removed 0 files
+$ jj merge second third -m merged
+Working copy now at: zskqtvlm22f8f9af(empty) merged
+Parent commit : vqllvzqxcb7c9891second | second
+Parent commit : svxvskxq4c9ee69fthird | (conflict) third
+Added 0 files, modified 1 files, removed 0 files
+$ jj log
+@ zskqtvlmjjfan@example.com2023-09-09 22:52:55.815 -07:0022f8f9af
+├─╮ (empty) merged
+│ ◉ svxvskxqjjfan@example.com2023-09-09 22:52:55.687 -07:00third4c9ee69f
+│ │ conflict
+│ │ third
+◉ │ vqllvzqxjjfan@example.com2023-09-09 22:52:55.789 -07:00secondcb7c9891
+├─╯ second
+◉ zulolszkjjfan@example.com2023-09-09 22:52:55.433 -07:00firstb21ec90b
+│ first
+◉ zzzzzzzzroot()00000000
+
+# Again, because the merge commit has the
+# changes from all three commits, it has no
+# conflict.
+
+
+
+
diff --git a/demos/operation_log.png b/demos/operation_log.png
index 7a4e1a3c5d..e3ffe2683a 100644
Binary files a/demos/operation_log.png and b/demos/operation_log.png differ
diff --git a/demos/operation_log.svg b/demos/operation_log.svg
new file mode 100644
index 0000000000..7ee1f4a170
--- /dev/null
+++ b/demos/operation_log.svg
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+# We are in the octocat/Hello-World repo.
+# The "operation log" shows the operations
+# so far:
+
+$ jj op log
+@ 95da50a844c1jjfan@jujubenow, lasted 2 milliseconds
+│ check out git remote's default branch
+│ args: jj git clone https://github.com/octocat/Hello-World
+◉ af5219946754jjfan@jujubenow, lasted 473 milliseconds
+│ fetch from git remote into empty repo
+│ args: jj git clone https://github.com/octocat/Hello-World
+◉ d54385c1739fjjfan@jujubenow, lasted 1 millisecond
+│ add workspace 'default'
+◉ 28e8df261313jjfan@jujubenow, lasted less than a microsecond
+ initialize repo
+
+# We are going to make some changes to show
+# how the operation log works. Let's add a file, set
+# a description, and rebase onto the "test" branch:
+
+$ echo stuff > new-file
+$ jj describe -m stuff
+Working copy now at: xvksusnn7512ad25 stuff
+Parent commit : orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+$ jj rebase -d test
+Rebased 1 commits
+Working copy now at: xvksusnn0c56ab7b stuff
+Parent commit : kowxouwzb3cbd5bbtest | Create CONTRIBUTING.md
+Added 1 files, modified 0 files, removed 0 files
+
+# We are now going to make another change off of
+# master:
+
+$ jj co master
+Working copy now at: rlmutxut7dd78341(empty)(no description set)
+Parent commit : orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+Added 0 files, modified 0 files, removed 2 files
+$ jj describe -m "other stuff"
+Working copy now at: rlmutxute212d0f4(empty) other stuff
+Parent commit : orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+
+# The repo now looks like this:
+
+$ jj log
+@ rlmutxutjjfan@example.com2023-09-09 22:52:57.000 -07:00e212d0f4
+│ (empty) other stuff
+│ ◉ xvksusnnjjfan@example.com2023-09-09 22:52:57.000 -07:000c56ab7b
+│ │ stuff
+│ ◉ kowxouwzoctocat@nowhere.com2014-06-10 15:22:26.000 -07:00testb3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+# The most recent portion of the operation log
+# is:
+
+$ jj op log | head
+@ a78ef7e40460jjfan@jujubenow, lasted 1 millisecond
+│ describe commit 7dd783419ebd7d6b17651ece22d52f269d3d697a
+│ args: jj describe -m 'other stuff'
+◉ 92b84be1b504jjfan@jujubenow, lasted 2 milliseconds
+│ check out commit 7fd1a60b01f91b314f59955a4e4d4e80d8edf11d
+│ args: jj co master
+◉ 14debf1308e8jjfan@jujubenow, lasted 2 milliseconds
+│ rebase commit 7512ad251a209e3e189cdf502215b6744b4a4c93 and descendants
+│ args: jj rebase -d test
+◉ 8bf55027c33djjfan@jujubenow, lasted 1 millisecond
+
+# Let's undo that rebase operation:
+
+$ jj undo a78ef7e4
+Working copy now at: rlmutxut7dd78341(empty)(no description set)
+Parent commit : orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+
+# Note that only the rebase was undone, and the
+# subsequent "other stuff" change was not undone:
+
+$ jj log
+@ rlmutxutjjfan@example.com2023-09-09 22:52:56.000 -07:007dd78341
+│ (empty)(no description set)
+│ ◉ xvksusnnjjfan@example.com2023-09-09 22:52:57.000 -07:000c56ab7b
+│ │ stuff
+│ ◉ kowxouwzoctocat@nowhere.com2014-06-10 15:22:26.000 -07:00testb3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+# We can also see what the repo looked like
+# after the rebase operation:
+
+$ jj --at-op a78ef7e4 log
+@ rlmutxutjjfan@example.com2023-09-09 22:52:57.000 -07:00e212d0f4
+│ (empty) other stuff
+│ ◉ xvksusnnjjfan@example.com2023-09-09 22:52:57.000 -07:000c56ab7b
+│ │ stuff
+│ ◉ kowxouwzoctocat@nowhere.com2014-06-10 15:22:26.000 -07:00testb3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+# Let's say we instead want to go back to the
+# state of the repo right after the rebase:
+
+$ jj op restore a78ef7e4
+Working copy now at: rlmutxute212d0f4(empty) other stuff
+Parent commit : orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+
+# We're now back to before the "other stuff"
+# change existed:
+
+$ jj log
+@ rlmutxutjjfan@example.com2023-09-09 22:52:57.000 -07:00e212d0f4
+│ (empty) other stuff
+│ ◉ xvksusnnjjfan@example.com2023-09-09 22:52:57.000 -07:000c56ab7b
+│ │ stuff
+│ ◉ kowxouwzoctocat@nowhere.com2014-06-10 15:22:26.000 -07:00testb3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+
+
diff --git a/demos/resolve_conflicts.png b/demos/resolve_conflicts.png
index 4b96de3461..5e90c50749 100644
Binary files a/demos/resolve_conflicts.png and b/demos/resolve_conflicts.png differ
diff --git a/demos/resolve_conflicts.svg b/demos/resolve_conflicts.svg
new file mode 100644
index 0000000000..f64b7f9c00
--- /dev/null
+++ b/demos/resolve_conflicts.svg
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+# We are on the master branch of the
+# octocat/Hello-World repo:
+
+$ jj log -r 'all()'
+@ lztpktupjjfan@example.com2023-09-09 22:52:59.000 -07:0035de9057
+│ (empty)(no description set)
+│ ◉ tpstlustsupport+octocat@github.com2018-05-10 12:55:19.000 -05:00
+├─╯ octocat-patch-1b1b3f972
+│ sentence case
+│ ◉ kowxouwzoctocat@nowhere.com2014-06-10 15:22:26.000 -07:00testb3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+├─╮ (empty) Merge pull request #6 from Spaceghost/patch-1
+│ ◉ nznozkvvJohnneylee.rollins@gmail.com2011-09-13 21:42:41.000 -07:00
+├─╯ 76294131
+│ New line at end of file. --Signed off by Spaceghost
+◉ syktoqtscameron@github.com2011-01-26 11:06:08.000 -08:00553c2077
+│ first commit
+◉ zzzzzzzzroot()00000000
+
+# Let's make an edit that will conflict
+# when we rebase it:
+
+$ jj describe -m "README: say which world"
+Working copy now at: lztpktupdf76e1cc(empty) README: say which world
+Parent commit : orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+$ echo "Hello Earth!" > README
+$ jj diff
+Modified regular file README:
+ 1 1: Hello WorldEarth!
+
+# We're going to rebase it onto commit b1b.
+# That commit looks like this:
+
+$ jj diff -r b1b
+Modified regular file README:
+ 1 1: Hello Worldworld!
+
+# Now rebase:
+
+$ jj rebase -d b1b
+Rebased 1 commits
+Working copy now at: lztpktup6d56fad4(conflict) README: say which world
+Parent commit : tpstlustb1b3f972octocat-patch-1 | sentence case
+Added 0 files, modified 1 files, removed 0 files
+
+# That seemed to succeed but we are also told there is now a conflict.
+# Let's take a look at the repo:
+
+$ jj log -r 'all()'
+@ lztpktupjjfan@example.com2023-09-09 22:52:59.000 -07:006d56fad4conflict
+│ README: say which world
+◉ tpstlustsupport+octocat@github.com2018-05-10 12:55:19.000 -05:00
+│ octocat-patch-1b1b3f972
+│ sentence case
+│ ◉ kowxouwzoctocat@nowhere.com2014-06-10 15:22:26.000 -07:00testb3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+├─╮ (empty) Merge pull request #6 from Spaceghost/patch-1
+│ ◉ nznozkvvJohnneylee.rollins@gmail.com2011-09-13 21:42:41.000 -07:00
+├─╯ 76294131
+│ New line at end of file. --Signed off by Spaceghost
+◉ syktoqtscameron@github.com2011-01-26 11:06:08.000 -08:00553c2077
+│ first commit
+◉ zzzzzzzzroot()00000000
+$ jj status
+Working copy changes:
+M README
+There are unresolved conflicts at these paths:
+README 2-sided conflict
+Working copy : lztpktup6d56fad4(conflict) README: say which world
+Parent commit: tpstlustb1b3f972octocat-patch-1 | sentence case
+
+# Indeed, the rebased commit has a conflict. The conflicted file
+# in the working copy looks like this:
+
+$ cat README
+<<<<<<<
+%%%%%%%
+-Hello World!
++Hello world!
++++++++
+Hello Earth!
+>>>>>>>
+
+# Now we will resolve the conflict:
+
+$ echo "Hello earth!" > README
+
+# The status command no longer reports it:
+
+$ jj status
+Working copy changes:
+M README
+Working copy : lztpktupd4bd111d README: say which world
+Parent commit: tpstlustb1b3f972octocat-patch-1 | sentence case
+
+
+
diff --git a/demos/working_copy.png b/demos/working_copy.png
index 85f25d7af1..7800cb2c59 100644
Binary files a/demos/working_copy.png and b/demos/working_copy.png differ
diff --git a/demos/working_copy.svg b/demos/working_copy.svg
new file mode 100644
index 0000000000..b6cc2b27d2
--- /dev/null
+++ b/demos/working_copy.svg
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+# We are in the octocat/Hello-World repo.
+# We have an empty working copy on top of master:
+
+$ jj log
+@ sulumowqjjfan@example.com2023-09-09 22:53:01.000 -07:0075f8ee5d
+│ (empty)(no description set)
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+$ jj status
+The working copy is clean
+Working copy : sulumowq75f8ee5d(empty)(no description set)
+Parent commit: orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 from Spa↓
+ceghost/patch-1
+
+# Now make some changes in the working copy:
+
+$ echo "Goodbye World!" > README
+$ echo stuff > new-file
+
+# Because of these changes, our working copy is no longer marked as "(empty)".
+# Also, its commit ID (starting with a blue character) changed:
+
+$ jj status
+Working copy changes:
+M README
+A new-file
+Working copy : sulumowq694fb3f4(no description set)
+Parent commit: orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 from Spa↓
+ceghost/patch-1
+
+# Add a branch so we can easily refer to this
+# commit:
+
+$ jj branch create goodbye
+$ jj log
+@ sulumowqjjfan@example.com2023-09-09 22:53:01.000 -07:00goodbye694fb3f4
+│ (no description set)
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+# Start working on a new change off of master:
+
+$ jj co master
+Working copy now at: xmyxxqpr3ff426fa(empty)(no description set)
+Parent commit : orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+Added 0 files, modified 1 files, removed 1 files
+
+# Note that we were told the working copy is now empty (AKA clean). The
+# "goodbye" change stayed in its own commit:
+
+$ jj log
+@ xmyxxqprjjfan@example.com2023-09-09 22:53:00.000 -07:003ff426fa
+│ (empty)(no description set)
+│ ◉ sulumowqjjfan@example.com2023-09-09 22:53:01.000 -07:00goodbye694fb3f4
+├─╯ (no description set)
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+# Let's do a sanity check: 'jj status' should tell us that
+# the working copy is clean.
+
+$ jj status
+The working copy is clean
+Working copy : xmyxxqpr3ff426fa(empty)(no description set)
+Parent commit: orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 from Spa↓
+ceghost/patch-1
+
+# Modify a file in this new change:
+
+$ echo "Hello everyone!" > README
+$ jj status
+Working copy changes:
+M README
+Working copy : xmyxxqpr8257ee2a(no description set)
+Parent commit: orrkosyo7fd1a60bmaster | (empty) Merge pull request #6 from Spa↓
+ceghost/patch-1
+
+# The working copy is not special; we can, for
+# example, set the description of any commit.
+# First, set it on the working copy:
+
+$ jj describe -m everyone
+... (output redacted) ...
+
+# Now set it on the change we worked on before:
+
+$ jj describe goodbye -m goodbye
+
+# Inspect the result:
+
+$ jj log
+◉ sulumowqjjfan@example.com2023-09-09 22:53:01.000 -07:00goodbyebea4d601
+│ goodbye
+│ @ xmyxxqprjjfan@example.com2023-09-09 22:53:01.000 -07:00235eba1a
+├─╯ everyone
+◉ orrkosyooctocat@nowhere.com2012-03-06 15:06:50.000 -08:00master7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+
+