just playing with tangled
at globpattern 91 lines 4.2 kB view raw view rendered
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