v0.10.0

Contributing to Tide

Build and test the Rust workspace, understand its boundaries, and contribute through GitHub.

Start with the source

The executable lives in crates/tide; workbench coordination is in crates/tide-ui. Use the repository's pinned Rust toolchain, Git, and a native C compiler/linker.

git clone https://github.com/ultradotdev/tide.git
cd tide
cargo build --locked --release -p tide
./target/release/tide .

Use release builds for interactive testing. The architecture guide maps responsibilities across the crates.

Install your development build

To build and install in one step:

./install-from-source.sh

Or install the executable from the release build above:

./install.sh --binary "$PWD/target/release/tide"
~/.local/bin/tide .

To use a custom absolute prefix:

./install.sh --binary "$PWD/target/release/tide" --prefix "$HOME/apps"
./install.sh --prefix "$HOME/apps" --rollback

Local installs leave shell profiles unchanged. Add the launcher's directory to PATH if needed. Use real directories without symlink components; on macOS, use /private/tmp for a temporary prefix.

To migrate a recognized earlier Rust install from ~/.local/lib/tide-rust:

./install.sh --binary "$PWD/target/release/tide" --migrate-legacy

Run the core checks

cargo fmt --all -- --check
cargo clippy --locked --workspace --all-targets -- -D warnings
cargo test --locked --workspace

The tracked pre-commit hook runs the formatting check. Enable it once per clone:

git config core.hooksPath .githooks

Integration tests requiring PostgreSQL, real language servers, TLS, or vim have explicit prerequisites. Follow CONTRIBUTING.md for disposable fixtures and opt-in acceptance checks.

Work in the owning crate

  • Keep text operations independent of terminal rendering.
  • Service and provider crates expose typed operations without importing UI code.
  • Rendering and mouse targets share geometry.
  • Keep slow parsing, discovery, and service work off the input/render path.
  • Protect unsaved buffers and use explicit confirmation for destructive actions.
  • Use semantic theme roles and preserve child terminal colors.

Add commands through the native routes and shared runtime catalog. Maintain supported settings, aliases, and alternate bindings alongside the behavior they control.

Generate the references

cargo xtask generate-rust-reference --write
cargo xtask generate-rust-reference --check
cargo xtask generate-tide-site-package --write
cargo xtask generate-rust-notices --check
cargo xtask verify-tide-docs
cargo xtask validate-doc-links

Commit generated references with their source changes. Regenerate the website package after committing an input change so its source fingerprint is current. cargo xtask --help lists the available maintainer tasks.

Plugins and UX customization

Coming soon: plugins, UX mods, a dynamic interface, and custom workspaces. The current contribution path is the Rust workspace. Plugin APIs and development instructions will follow when that capability is available.

Issues and pull requests

Report bugs and request features in GitHub issues. Open pull requests against main, describing the concrete trigger, resulting behavior, relevant checks, and remaining limitations.

For vulnerability reports, follow the security policy.

License

Tide is licensed under the Apache License, Version 2.0. Bundled dependencies, themes, and syntax assets retain their attribution and notice requirements.