Skip to content

Contribute a Blog Post

Thanks for considering a contribution to the XRP Ledger Dev Blog!

This page includes high-level instructions to create a new blog post. Detailed instructions and guidelines to contribute to the XRPL Developer Portal are available in Contribute Documentation.

Note
Blog posts are currently only available in English and are not yet translated.

Directory Structure for Blog Posts

The source files are located in the blog directory of the public xrpl-dev-portal repository.

The image files used in blog posts are located in the blog/img directory.

The blog posts are grouped by year, so all blog posts published in year 2025 are located in the blog/2025 directory.

Steps to Create a New Blog Post

To create a new post, follow these steps:

  1. Before you begin, ensure that you pull the most recent updates from the upstream master branch of the xrpl-dev-portal repository.

  2. Create a new branch for the blog post using the format blog-{short-desc-of-update}.

  3. Create a new markdown file in the blog/{YEAR} folder, for example https://github.com/XRPLF/xrpl-dev-portal/tree/master/blog/2025

  4. Refer to the template file _blog_template.md to compose your draft blog.

  5. Update the blog/sidebars.yaml file to include the newly created file.

  6. When the draft is ready for review, save and commit your updates.

  7. Create a new PR to merge your changes to master.

Release Notes

We have streamlined the release notes process with the assistance of Claude skills. To create new release notes, follow these steps:

  1. Load the generate-release-notes skill. Claude should auto-load it when you set the working directory to the xrpl-dev-portal repository. If not, you can explicitly point to the skill located at .claude/skills/generate-release-notes/SKILL.md.

    Note
    Although the skill is optimized for Claude, you can give this SKILL.md file to any coding agent.

  2. Run the generate-release-notes skill.

    /generate-release-notes --from <branch-or-tag> --to <branch-or-tag>

    The skill accepts these arguments:

    ArgumentsDescription
    --from(required) Base ref. Must match the exact tag or branch the current version of rippled is building from.
    --to(required) Target ref. Must match the exact tag or branch the upcoming version of rippled will be built from.
    --date(optional) Release date in YYYY-MM-DD format. Defaults to current date.
    --output(optional) Output file path. Defaults to blog/<year>/rippled-<version>.md.
  3. The AI executes these steps:

    • Runs a Python script that fetches all commits and PR details between the two refs and outputs a draft blog post.
    • Processes all amendment-related changes, keeping, removing, or merging entries based on which amendments are part of the release.
    • Sorts remaining entries into subsections (Features, Breaking Changes, Bug Fixes, etc.) based on files touched, PR labels, and descriptions.
    • Reformats each entry to match the release notes style and writes a summary of the release.
    • Cleans up empty sections and adds the post to the sidebar.

    Note
    Depending on the size of the release, this process can take upwards of ten minutes.

  4. Review the final output.

    • Check the descriptions of any entries in Amendments, Features, or Breaking Changes.
    • Verify the integrity of the package links and add in the SHA-256 hashes.
    • Verify the commit linked in the Install / Upgrade section points to the version bump commit.
    • If you didn't pass in the correct release date using the --date argument, update the date field in the frontmatter.
  5. Create a new PR to merge the release notes to master.