just playing with tangled
1# Roadmap
2
3This documents some of the goals we have. Many of them are quite independent.
4
5> **Note:** Most people contributing to Jujutsu do so in their spare time, which
6> means that we cannot attach any target dates to any of the goals below.
7
8## Support for copies and renames
9
10We want to support copy tracing in a way that leaves it up to the commit backend
11to either record or detect copies. That should let us work with existing Git
12repos (Git does not record copies, it detects them on the fly) as well as with
13very large repos where detection would be too slow. See
14[design doc][copy-design-doc].
15
16## Forge integrations
17
18We would like to make it easier to work with various popular forges by providing
19something like `jj github submit`, `jj gitlab submit`, and `jj gerrit send`. For
20popular forges, we might include that support by default in the standard `jj`
21binary.
22
23## Submodule support
24
25Git submodules are used frequently enough in large Git repos that we will
26probably need to [support them][submodules]. There are still big open
27questions around UX.
28
29## Better Rust API for UIs
30
31UIs like [gg] currently have to duplicate quite a bit of logic from `jj-cli`. We
32need to make this code not specific to the CLI (e.g. return status objects
33instead of printing messages) and move it into `jj-lib`.
34
35## RPC API
36
37One problem with writing tools using the Rust API is that they will only work
38with the backends they were compiled with. For example, a regular [gg] build
39will not work on Google repos because it doesn't have the backends necessary to
40load them. We want to provide an RPC API for tools that want to work with an
41unknown build of `jj` by having the tool run something like `jj api` to give it
42an address to talk to.
43
44In addition to helping with the problem of unknown backends, having an RPC API
45should make it easier for tools like VS Code that are not written in Rust. The
46RPC API will probably be at a higher abstraction level than the Rust API.
47
48See [design doc][api-design-doc].
49
50## Open-source cloud-based repos (server and daemon process)
51
52Google has an internal Jujutsu server backed by a database. This server allows
53commits and repos (operation logs) to be stored in the cloud (i.e. the database).
54Working copies can still be stored locally.
55
56In order to reduce latency, there is a local daemon process that caches reads
57and writes. It also prefetches of objects it thinks the client might ask for
58next. In also helps with write latency by optimistically answering write
59requests (it therefore needs to know the server's hashing scheme so it can
60return the right IDs).
61
62We (the project, not necessarily Google) want to provide a similar experience
63for all users. We would therefore like to create a similar server and daemon.
64The daemon might be the same process as for the RPC API mentioned above.
65
66## Virtual file system (VFS)
67
68For very large projects and/or large files, it can be expensive to update the
69working copy. We want to provide a VFS to help with that. Updating the working
70copy to another commit can then be done simply by telling the VFS to use the
71other commit as base, without needing to download any large files in the target
72commit until the user asks for them via the file system. A VFS can also make it
73cheap to snapshot the working copy by keeping track of all changes compared to
74the base commit.
75
76Having a VFS can also be very benefial for [`jj run`][jj-run], since we can then
77cheaply create temporary working copies for the commands to run in.
78
79## Better support for large files
80
81We have talked about somehow using content-defined chunking (CDC) to reduce
82storage and transfer costs for large files. Maybe we will store files in our
83future cloud-based server using the same model as [XetHub][xet-storage].
84
85
86[api-design-doc]: https://docs.google.com/document/d/1rOKvutee5TVYpFhh_UDNZDxfUKyrJ8rjCNpFaNHOHwU/edit?usp=sharing&resourcekey=0-922ApyoAjuXN_uTKqmCqjg
87[copy-design-doc]: design/copy-tracking.md
88[gg]: https://github.com/gulbanana/gg
89[jj-run]: https://github.com/jj-vcs/jj/issues/1869
90[submodules]: https://github.com/jj-vcs/jj/issues/494
91[xet-storage]: https://web.archive.org/web/20240914200921/https://xethub.com/assets/docs/concepts/xet-storage