diff --git a/demos/git_compat.png b/demos/git_compat.png
index 2fa3665704..a4f53b8820 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..4e1ea7e764
--- /dev/null
+++ b/demos/git_compat.svg
@@ -0,0 +1,87 @@
+
+
diff --git a/demos/juggle_conflicts.png b/demos/juggle_conflicts.png
index c5a661dcfa..7692e241a3 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..d3c27a0766
--- /dev/null
+++ b/demos/juggle_conflicts.svg
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+# We are in a repo with three commits, all
+# editing the same line:
+
+$ jj log
+@ lqolpuok jjfan@example.com 2023-09-08 00:13:12.055 -07:00 516b6fde
+│ (empty) (no description set)
+◉ ulqzkotz jjfan@example.com 2023-09-08 00:13:12.054 -07:00 third 799e6435
+│ third
+◉ znqkmvtr jjfan@example.com 2023-09-08 00:13:12.014 -07:00 second 6d78fede
+│ second
+◉ nmumlrrx jjfan@example.com 2023-09-08 00:13:11.963 -07:00 first acf126ab
+│ first
+◉ zzzzzzzz root() 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: lqolpuok 76d913b0 (conflict) (empty) (no description set)
+Parent commit : ulqzkotz 99109874 third | (conflict) third
+Added 0 files, modified 1 files, removed 0 files
+$ jj rebase -s second -d third
+Rebased 1 commits
+$ jj log
+◉ znqkmvtr jjfan@example.com 2023-09-08 00:13:12.182 -07:00 second 774f448d
+│ second
+│ @ lqolpuok jjfan@example.com 2023-09-08 00:13:12.159 -07:00 76d913b0 conflict
+├─╯ (empty) (no description set)
+◉ ulqzkotz jjfan@example.com 2023-09-08 00:13:12.159 -07:00 third 99109874 conf↓
+lict
+│ third
+◉ nmumlrrx jjfan@example.com 2023-09-08 00:13:11.963 -07:00 first acf126ab
+│ first
+◉ zzzzzzzz root() 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: psnpqsts 608079bd (empty) (no description set)
+Parent commit : znqkmvtr 774f448d second | 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: psnpqsts ccfe38e6 (empty) (no description set)
+Parent commit : znqkmvtr 4657e51c second | second
+Added 0 files, modified 1 files, removed 0 files
+$ jj merge second third -m merged
+Working copy now at: wknwsvqz ad256547 (empty) merged
+Parent commit : znqkmvtr 4657e51c second | second
+Parent commit : ulqzkotz 99109874 third | (conflict) third
+Added 0 files, modified 1 files, removed 0 files
+$ jj log
+@ wknwsvqz jjfan@example.com 2023-09-08 00:13:12.291 -07:00 ad256547
+├─╮ (empty) merged
+│ ◉ ulqzkotz jjfan@example.com 2023-09-08 00:13:12.159 -07:00 third 99109874 co↓
+nflict
+│ │ third
+◉ │ znqkmvtr jjfan@example.com 2023-09-08 00:13:12.260 -07:00 second 4657e51c
+├─╯ second
+◉ nmumlrrx jjfan@example.com 2023-09-08 00:13:11.963 -07:00 first acf126ab
+│ first
+◉ zzzzzzzz root() 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..3972774cb8 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..3ae0d9fb5d
--- /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
+@ b6bc845a7722 jjfan@jujube now, lasted 2 milliseconds
+│ check out git remote's default branch
+│ args: jj git clone https://github.com/octocat/Hello-World
+◉ 6a4557b33d01 jjfan@jujube now, lasted 516 milliseconds
+│ fetch from git remote into empty repo
+│ args: jj git clone https://github.com/octocat/Hello-World
+◉ 5f4f251275eb jjfan@jujube now, lasted 1 millisecond
+│ add workspace 'default'
+◉ 4a0c44fa77d0 jjfan@jujube now, 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: puymppks 6a85f5ad stuff
+Parent commit : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+$ jj rebase -d test
+Rebased 1 commits
+Working copy now at: puymppks 2c8fc056 stuff
+Parent commit : kowxouwz b3cbd5bb test | 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: mnknqurz 0b7bdfb2 (empty) (no description set)
+Parent commit : orrkosyo 7fd1a60b master | (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: mnknqurz 20d39b84 (empty) other stuff
+Parent commit : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+
+# The repo now looks like this:
+
+$ jj log
+@ mnknqurz jjfan@example.com 2023-09-08 00:13:13.000 -07:00 20d39b84
+│ (empty) other stuff
+│ ◉ puymppks jjfan@example.com 2023-09-08 00:13:13.000 -07:00 2c8fc056
+│ │ stuff
+│ ◉ kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+# The most recent portion of the operation log
+# is:
+
+$ jj op log | head
+@ f8d4b387110d jjfan@jujube now, lasted 1 millisecond
+│ describe commit 0b7bdfb2574c9267d17e0b392e5bd093cf4ef28c
+│ args: jj describe -m 'other stuff'
+◉ 83c93b0d59a8 jjfan@jujube now, lasted 1 millisecond
+│ check out commit 7fd1a60b01f91b314f59955a4e4d4e80d8edf11d
+│ args: jj co master
+◉ 4daea32f5ce7 jjfan@jujube now, lasted 1 millisecond
+│ rebase commit 6a85f5adf7ca87cf83df7a98d9195024a58bcf18 and descendants
+│ args: jj rebase -d test
+◉ 3d90ffc60b66 jjfan@jujube now, lasted 1 millisecond
+
+# Let's undo that rebase operation:
+
+$ jj undo f8d4b387
+Working copy now at: mnknqurz 0b7bdfb2 (empty) (no description set)
+Parent commit : orrkosyo 7fd1a60b master | (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
+@ mnknqurz jjfan@example.com 2023-09-08 00:13:12.000 -07:00 0b7bdfb2
+│ (empty) (no description set)
+│ ◉ puymppks jjfan@example.com 2023-09-08 00:13:13.000 -07:00 2c8fc056
+│ │ stuff
+│ ◉ kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+│ (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 f8d4b387 log
+@ mnknqurz jjfan@example.com 2023-09-08 00:13:13.000 -07:00 20d39b84
+│ (empty) other stuff
+│ ◉ puymppks jjfan@example.com 2023-09-08 00:13:13.000 -07:00 2c8fc056
+│ │ stuff
+│ ◉ kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+│ (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 f8d4b387
+Working copy now at: mnknqurz 20d39b84 (empty) other stuff
+Parent commit : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+
+# We're now back to before the "other stuff"
+# change existed:
+
+$ jj log
+@ mnknqurz jjfan@example.com 2023-09-08 00:13:13.000 -07:00 20d39b84
+│ (empty) other stuff
+│ ◉ puymppks jjfan@example.com 2023-09-08 00:13:13.000 -07:00 2c8fc056
+│ │ stuff
+│ ◉ kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+
+
diff --git a/demos/resolve_conflicts.png b/demos/resolve_conflicts.png
index 4b96de3461..5a81e5b82a 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..c228b160fc
--- /dev/null
+++ b/demos/resolve_conflicts.svg
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+# We are on the master branch of the
+# octocat/Hello-World repo:
+
+$ jj log -r 'all()'
+@ lkuvyqsm jjfan@example.com 2023-09-08 00:13:15.000 -07:00 75c242c2
+│ (empty) (no description set)
+│ ◉ tpstlust support+octocat@github.com 2018-05-10 12:55:19.000 -05:00 octocat-↓
+patch-1 b1b3f972
+├─╯ sentence case
+│ ◉ kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+├─╮ (empty) Merge pull request #6 from Spaceghost/patch-1
+│ ◉ nznozkvv Johnneylee.rollins@gmail.com 2011-09-13 21:42:41.000 -07:00 762941↓
+31
+├─╯ New line at end of file. --Signed off by Spaceghost
+◉ syktoqts cameron@github.com 2011-01-26 11:06:08.000 -08:00 553c2077
+│ first commit
+◉ zzzzzzzz root() 00000000
+
+# Let's make an edit that will conflict
+# when we rebase it:
+
+$ jj describe -m "README: say which world"
+Working copy now at: lkuvyqsm b68462bf (empty) README: say which world
+Parent commit : orrkosyo 7fd1a60b master | (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 b1.
+# That commit looks like this:
+
+$ jj diff -r b1
+Modified regular file README:
+ 1 1: Hello Worldworld!
+
+# Now rebase:
+
+$ jj rebase -d b1
+Rebased 1 commits
+Working copy now at: lkuvyqsm 9c56cf88 (conflict) README: say which world
+Parent commit : tpstlust b1b3f972 octocat-patch-1 | sentence case
+Added 0 files, modified 1 files, removed 0 files
+
+# Huh, that seemed to succeed. Let's take a
+# look at the repo:
+
+$ jj log -r 'all()'
+@ lkuvyqsm jjfan@example.com 2023-09-08 00:13:15.000 -07:00 9c56cf88 conflict
+│ README: say which world
+◉ tpstlust support+octocat@github.com 2018-05-10 12:55:19.000 -05:00 octocat-pa↓
+tch-1 b1b3f972
+│ sentence case
+│ ◉ kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb
+├─╯ Create CONTRIBUTING.md
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+├─╮ (empty) Merge pull request #6 from Spaceghost/patch-1
+│ ◉ nznozkvv Johnneylee.rollins@gmail.com 2011-09-13 21:42:41.000 -07:00 762941↓
+31
+├─╯ New line at end of file. --Signed off by Spaceghost
+◉ syktoqts cameron@github.com 2011-01-26 11:06:08.000 -08:00 553c2077
+│ first commit
+◉ zzzzzzzz root() 00000000
+$ jj status
+Working copy changes:
+M README
+There are unresolved conflicts at these paths:
+README 2-sided conflict
+Working copy : lkuvyqsm 9c56cf88 (conflict) README: say which world
+Parent commit: tpstlust b1b3f972 octocat-patch-1 | sentence case
+
+# As you can see, the rebased commit has a
+# conflict. The 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 : lkuvyqsm 748d9c67 README: say which world
+Parent commit: tpstlust b1b3f972 octocat-patch-1 | sentence case
+
+
+
diff --git a/demos/working_copy.png b/demos/working_copy.png
index 85f25d7af1..000aa2b0ac 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..506502cbca
--- /dev/null
+++ b/demos/working_copy.svg
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+# We are in the octocat/Hello-World repo.
+# We have an empty working copy on top of master:
+
+$ jj status
+The working copy is clean
+Working copy : ptuoxlsy 82c3d215 (empty) (no description set)
+Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa↓
+ceghost/patch-1
+$ jj log
+@ ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 82c3d215
+│ (empty) (no description set)
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+# Now make some changes in the working copy:
+
+$ echo "Goodbye World!" > README
+$ echo stuff > new-file
+
+# Our working copy's commit ID changed
+# because we made changes:
+
+$ jj status
+Working copy changes:
+M README
+A new-file
+Working copy : ptuoxlsy ec0bcd49 (no description set)
+Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa↓
+ceghost/patch-1
+$ jj log
+@ ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 ec0bcd49
+│ (no description set)
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+# Add a branch so we can easily refer to this
+# commit:
+
+$ jj branch create goodbye
+$ jj log
+@ ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 goodbye ec0bcd49
+│ (no description set)
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+│ (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: sslozlpz 2cf84c81 (empty) (no description set)
+Parent commit : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+Added 0 files, modified 1 files, removed 1 files
+$ jj log
+@ sslozlpz jjfan@example.com 2023-09-08 00:13:15.000 -07:00 2cf84c81
+│ (empty) (no description set)
+│ ◉ ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 goodbye ec0bcd49
+├─╯ (no description set)
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+# Note that the working copy is now clean; the
+# "goodbye" change stayed in its own commit:
+
+$ jj status
+The working copy is clean
+Working copy : sslozlpz 2cf84c81 (empty) (no description set)
+Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa↓
+ceghost/patch-1
+
+# Modify a file in this new change:
+
+$ echo "Hello everyone!" > README
+
+# 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
+Working copy now at: sslozlpz b703d0b1 everyone
+Parent commit : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr↓
+om Spaceghost/patch-1
+
+# Now set it on the change we worked on before:
+
+$ jj describe goodbye -m goodbye
+
+# Inspect the result:
+
+$ jj log
+◉ ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 goodbye df028e0e
+│ goodbye
+│ @ sslozlpz jjfan@example.com 2023-09-08 00:13:16.000 -07:00 b703d0b1
+├─╯ everyone
+◉ orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b
+│ (empty) Merge pull request #6 from Spaceghost/patch-1
+~
+
+
+