A 2025#

a. 2025-08

#

Migrations

You can now seamlessly edit and migrate Ledger Entries and Accounts for online Ledgers. This allows you to develop your product and Ledger seamlessly while maintaining data integrity the entire time. Read more about the migration, reversal, and archive mutations in our Migrate Data docs.

Small improvements

  • You can now JIT create Custom currencies when posting an Entry
  • Extended customCode length for a custom currency to 36 characters
  • Fixed a bug for displaying Entry Type count in the Dashboard
  • Fixed a bug that duplicated Entry Type names when creating multiple versions before deploying a Schema
  • Improved our tooltip implementation to make clipping text more legible in the Dashboard
  • Updated unknown error codes for Schema deployment
  • Fixed issues with comma-separated values during variable substitution
  • FRAGMENT CLI is now available via npm

b. 2025-07

#

Post Entry Updates

Guardrails have been added to the Entry posting flow from the Dashboard. Users will now be shown a list of available accounts for an Entry and given a warning during confirmation when an Entry will create a new Account after being posted.

Small improvements

  • Introduced the migrateLedgerEntry mutation. This will post a new entry and reverse an existing LedgerEntry. Read the migrateLedgerEntry API reference to learn more.
  • Fixed a bug when editing the Schema to prevent deletion of root Ledger Accounts
  • Added S3 bucket policy to the Data Export modal, making it easier to copy policies when needed
  • Fixed a bug in the FRAGMENT Dashboard that prevented accepting workspace invites
  • Moved the Delete button from a secondary click to the Project Tile for better accessibility
  • Fixed a bug in Ledger Line exports that excluded Tx details

c. 2025-06

#

Ledger Account Currency Upgrade

You can now upgrade a Ledger Account in your Schema from a single currency to multi-currency.

Small improvements

  • The FRAGMENT Dashboard is now more responsive for smaller screen sizes. You can view your Schema and Ledgers from your mobile device
  • You can now export Ledger Entries from the Dashboard as CSV
  • Fixed a bug with parsing empty string tag values
  • Added stricter validation in the client credentials flow
  • Fixed an issue when parsing invalid Ledger Entry Condition parameters. The API will now return a BadRequestError
  • The FRAGMENT blog got a redesign
  • You can now view a Ledger Account's historical balance change over a period of time, in the Balances page of a Ledger Account

d. 2025-05

#

Entry Stats

You can now query more information about your Ledger Entries using ledgerEntryStats including counts by status, type, and date ranges.

Small improvements

  • You can now define the Linked Account Types in your Schema from inside the Dashboard
  • Introduced advanced Tag filtering with TagMatchInput type, enabling complex queries including NOT, ANY, ALL, and NONE operations
  • Enhanced Group-based filtering with a GroupMatchInput filter type for flexible matching conditions
  • Tags can now be updated and deleted from Entries with the updateLedgerEntry mutation and removeFromTags parameter
  • Updated our Documentation page content and design
  • Workspace members is now a dedicated option in the main navigation of the Dashboard

e. 2025-04

#

Entry Versioning

  • You can now update an Entry types by incrementing its typeVersion field. This will automatically happen when editing your Schema within the Dashboard.
  • Once you deploy the Schema, the new Entry type version will become available alongside existing versions. To post to versioned entries addLedgerEntry and reconcileTx now both have a typeVersion parameter. This field is optional and will default to 1, so none of your existing callsites will be impacted.

Small improvements

  • Ledger Account names can now be updated in your Schema
  • Mitigated impact of noisy neighbours on historical balance updates in multi-tenant environments
  • Improved handling of retries when DynamoDB returns an Internal Server Error
  • Fixed bug where ledgerAccount queries could return ledger_account_not_found on existing accounts in high-throughput scenarios
  • Trying to use a deleted ledger now returns a specific error message instead of ledger_not_found
  • Better error messages when an invalid Ledger Account path is received

f. 2025-03

#

Repost Ledger Entries

You can now reverse and repost a Ledger Entry using the same idempotency key up to 10 times. This will create a chain to reversals and reposting that all share an idempotency key and the id of each LedgerEntry is unique.

Small improvements

  • Added drag and drop reordering of Schema Entry types in the FRAGMENT Dashboard
  • Fixed a race condition with updateLedger and deleteLedger
  • New invite feature to add members to your workspace via email
  • Updated the gen-graphql CLI command to support query generation for runtime Entries
  • Added delete-custom-txs, delete-ledger, delete-schema, and reverse-ledger-entry to the FRAGMENT CLI
  • Add support for notEqualTo and notIn on StringFilter, to support filtering on LedgerEntry.type

g. 2025-02

#

Reverse Ledger Entries

  • Introduced a reverseEntryLedger mutation. This will post a new entry with the opposite amounts of an existing LedgerEntry. It will also free up the idempotency key, and allow you to repost a new LedgerEntry.
  • Ledger Entry and Ledger Line now expose reversalHistory, reversalPosition, reversedBy and reverses to traverse this chain.

Small improvements

  • Increased throughput when posting Entries that instantiate Ledger Accounts templates
  • List Entries now support filtering on Groups

h. 2025-01

#

Balances over a period

The LedgerAccount type now exposes balancesDuring and balanceChangesDuring fields for efficiently querying all hourly, daily or monthly balances in a specified time period. These can be used to display portfolio charts or generate trial balance reports.

Get monthly balances for a year
query GetBalanceHistory(
  $ledgerAccount: LedgerAccountMatchInput!
) {
  ledgerAccount(ledgerAccount: $ledgerAccount) {
    # Get monthly balances for a year
    yearlyBalances: balancesDuring(
      startTime: "2021"
      duration: 12
      granularity: monthly
    ) {
      startTime
      endTime
      granularity
      nodes {
        at
        amount {
          currency {
            code
          }
          amount
        }
      }
    }
  }
}

Learn more in the documentation.

Small Improvements

  • Started enforcing that static parameters in the Schema cannot have an empty string key or value