Skip to content
@structuredmerge

Structured Merge

Tools for structured, deterministic, merging of any AST-parseable document type

Structured Merge

StructuredMerge logo by Aboling0, CC BY-SA 4.0

Ruby Users Forum Live Chat on Discord

Structured Merge defines a common language for semantic merge rules, with implementations and fixtures across multiple languages.

  • Specification-first merge vocabulary and compatibility fixtures
  • Parser-backed template merges and git merges
  • Ruby tooling for AST-aware templating and project maintenance
  • Find out more at StructuredMerge.org

Community And Support

We welcome implementation feedback, prior art, bug reports, and release coordination in Ruby Users Forum and Discord.

Prior/Contemporaneous Art

Things we've heard about that are similar in some ways:

  • difftastic - structural diff tool, parses with tree-sitter, compares syntax aware structure, and renders human oriented diffs. Does not generate patches, or perform merges.
  • mergiraf - syntax-aware git merge driver implemented in Rust. Uses tree-sitter, and implements a fine-grained, 3DM-inspired, 3-way merge.
  • spork - AST-based merges in Java, based on the research paper arXiv-2202.05329v1. 3DM-derived merge over PCS/change-set structures, with custom conflict handling, formatting-aware printing, and git compatibility mode.
  • weave - entity-level semantic merge driver implemented in Rust, based on tree-sitter, which falls back to line-merge within multi-line entity spans.

Financial Support

Support StructuredMerge through Open Collective, GitHub Sponsors, or Liberapay.

Projects

Project Description Downloads Current CI Funding
structuredmerge-go Go implementation of the Structured Merge rules contract. - Current Open Collective / GitHub Sponsors / Liberapay
structuredmerge-ruby Ruby implementation and gem workspace. - Current Open Collective / GitHub Sponsors / Liberapay
structuredmerge-rust Rust implementation of the Structured Merge rules contract. - Current Open Collective / GitHub Sponsors / Liberapay
structuredmerge-typescript TypeScript implementation of the Structured Merge rules contract. - Current Open Collective / GitHub Sponsors / Liberapay
structuredmerge-spec Merge rules draft and shared specification material. - Current Open Collective / GitHub Sponsors / Liberapay
structuredmerge-fixtures Cross-implementation fixture corpus. - Current Open Collective / GitHub Sponsors / Liberapay
ast-crispr AST-aware structural editing primitives. ast-crispr Current Open Collective / GitHub Sponsors / Liberapay
ast-merge Structural merge tools for AST-backed documents. ast-merge Current Open Collective / GitHub Sponsors / Liberapay
tree_haver Tree and node helper APIs for structured documents. tree_haver Current Open Collective / GitHub Sponsors / Liberapay
smorg-rb Ruby CLI and orchestration helpers for Structured Merge. smorg-rb Current Open Collective / GitHub Sponsors / Liberapay
kettle-jem Template and maintenance engine for Ruby gem workspaces. kettle-jem Current Open Collective / GitHub Sponsors / Liberapay

Contribution Guidelines

This project is dual-licensed under AGPL-3.0-only and PolyForm-Small-Business-1.0.0, so pick whichever suits you best, or contact info@structuredmerge.org to request a license exception.

Pinned Loading

  1. structuredmerge-fixtures structuredmerge-fixtures Public

    Shared StructuredMerge conformance fixtures for peer language implementations

    Python

  2. structuredmerge-go structuredmerge-go Public

    Go implementation of the StructuredMerge contract

    Go

  3. structuredmerge-rust structuredmerge-rust Public

    Rust implementation of the StructuredMerge contract

    Rust

  4. structuredmerge-typescript structuredmerge-typescript Public

    TypeScript implementation of the StructuredMerge contract

    TypeScript

  5. structuredmerge-ruby structuredmerge-ruby Public

    ☯️ Ruby implementation of the StructuredMerge contract

    HTML 18

  6. structuredmerge-spec structuredmerge-spec Public

    ☯️ Specifications for the StructuredMerge contract; Draft RFCs for merge ruleset vocabulary

    Python 17

Repositories

Showing 10 of 23 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…