Skip to content

Releases: Open-Source-Legal/OpenContracts

v3.0.0.b3 - Collaborative Document Intelligence Hub

12 Dec 05:24
ffcbcb2

Choose a tag to compare

🎯 Summary

v3.0.0.b3 transforms OpenContracts from a document analysis platform into a collaborative document intelligence hub. This is our largest release ever, introducing social features, AI agents, and a complete versioning system.


✨ New Features

📄 Document Versioning

  • Version History Panel - Track changes, view metadata, restore previous versions
  • Time Travel - Query corpus state at any point in history
  • Soft Delete & Restore - Deleted documents go to trash and can be recovered
  • Corpus Isolation - Each corpus gets independent version trees (no cross-corpus conflicts)
  • Dual-Tree Architecture - Efficient storage with shared structural annotations

💬 Collaboration System

  • Forum-Style Discussions - At global (/discussions), corpus, and document levels
  • Threading - Nested conversations with voting (upvote/downvote)
  • @Mentions - Tag documents, corpuses, and AI agents inline
  • Pinning & Locking - Moderator controls for important/resolved threads
  • Full-Text Search - Find threads across all discussions at /threads

🤖 AI Agent System

  • Configurable Agents - Create custom AI assistants with specific tools and personas
  • @Mention Invocation - Type @agent-name to trigger AI responses in any thread
  • Tool System - Agents can use similarity_search, load_document_text, search_annotations
  • Corpus-Scoped Agents - Create agents specific to individual corpuses
  • Default Agents - Research Assistant and Document Analyst installed automatically

🏆 Badges & Gamification

  • Achievement System - Earn badges for contributions (First Upload, Prolific Annotator, etc.)
  • Celebration UI - Modal with confetti when badges are earned
  • Custom Badges - Admins can create corpus-specific or global badges
  • Reputation System - Points from annotations, uploads, discussions, upvotes

📁 Folder Organization

  • Hierarchical Folders - Unlimited nesting depth within corpuses
  • Drag & Drop - Move documents and folders visually
  • Folder Tree Sidebar - Collapsible navigation with document counts
  • Breadcrumb Navigation - Easy path awareness and quick navigation

👤 User Profiles & Leaderboard

  • Public Profiles (/profile/:slug) - Avatar, stats, badges, activity feed
  • Privacy Controls - Toggle profile visibility in settings
  • Leaderboard (/leaderboard) - Community rankings by reputation
  • Activity Feed - Recent uploads, annotations, discussions

🏠 Discovery Landing Page

  • New Homepage - Replaces direct redirect to /corpuses
  • Trending Corpuses - Popular public document collections
  • Recent Discussions - Active community threads
  • Community Stats - Total users, documents, annotations

📊 Analytics Dashboard

  • Corpus Engagement Metrics - Thread counts, message volume, contributors
  • Visualizations - Bar charts with animated counters
  • Auto-Refresh - Updates every 5 minutes

🔧 Technical Improvements

Infrastructure

  • Parallel Test Execution - 4x faster with pytest-xdist (-n 4 --dist loadscope)
  • License Change - GPL-3.0 → AGPL-3.0 for stronger copyleft protection
  • PostHog Telemetry - Opt-in analytics with singleton client pattern
  • TypeScript 5.9 - Full upgrade from 4.5 with all type errors resolved
  • Security Fixes - npm vulnerability resolutions via yarn resolutions

API & Database

  • DocumentPath Model - Replaces M2M for document-corpus relationships
  • StructuralAnnotationSet - Shared annotations across corpus copies
  • Relay-Style Pagination - Consistent pagination for thread search
  • Query Optimizations - Permission-annotated queries with batch loading

Frontend

  • @floating-ui/dom - Replaced deprecated tippy.js
  • Improved Mobile UX - Better responsive layouts for corpus/document views
  • Deep Linking - Support for tabs, messages, and annotation display settings
  • Component Test Stability - Fixed Playwright test infrastructure

🔄 Migration Guide

Quick Start

# 1. Pull new images
docker compose -f production.yml pull

# 2. Run migrations FIRST (critical!)
docker compose -f production.yml --profile migrate up migrate

# 3. Verify migration
docker compose -f production.yml run django python manage.py validate_v3_migration

# 4. Start services
docker compose -f production.yml up -d

Breaking Changes

  1. Corpus-Document Relationship - Uses DocumentPath model (M2M still works but deprecated)
  2. Thread Search Pagination - Now uses Relay-style (edges, pageInfo, totalCount)

📖 Full migration guide: See docs/releases/v3.0.0.b3.md


🐛 Bug Fixes

Security

  • Fixed IDOR vulnerability in agent creation
  • User profile privacy now enforced properly
  • Server-side validation for all @mentions

Data Integrity

  • Missing parsing artifacts in corpus copies
  • NULL hash deduplication issues
  • Structural annotation portability across corpuses

Frontend

  • Migration failure for existing installs (documents.0023)
  • Mobile viewport overflow issues
  • Ping-pong redirect loops in navigation

📦 New Routes

Route Description
/ Discovery landing page
/discussions Global discussions
/threads Thread search
/leaderboard Community leaderboard
/profile/:slug User profiles
/admin/agents Agent management
/admin/badges Badge management

Full Changelog: v3.0.0.b2...v3.0.0.b3

Detailed Release Notes: docs/releases/v3.0.0.b3.md

v3.0.0.b2 - Mobile Improvements, Modular Agent Instructions & Enhanced Export

26 Oct 22:56
99ce7aa

Choose a tag to compare

Description

This release brings important mobile improvements, new agent capabilities, and enhanced export functionality

Major Features & Improvements

  1. Modular Agent Instructions - You can now customize agent system prompts per corpus, giving you fine-grained control over agent behavior for different document collections (#521)

  2. Enhanced Export Modal - Added pagination and delete functionality to the export modal for better management of export tasks (#507)

  3. Page Imaging Tool for Agents - Agents can now request page images, enabling new visual analysis capabilities (#506)

  4. Cookie Modal Revamp - Improved cookie consent modal with proper persistence (#508)

  5. GraphQL Query Optimizations - Significant performance improvements in GraphQL queries with better permission filtering and query optimization (#482)

  6. GCP Cloud Storage Support - Added Google Cloud Platform storage backend as an alternative to S3 (#475)

  7. Comprehensive Rate Limiting - Implemented rate limiting for GraphQL API to ensure system stability (#453)

Bug Fixes

  1. Mobile Viewport Issues - Fixed mobile and desktop viewport overflow problems in corpus chat and document viewer (#539)
  2. Re-authentication Flow - Improved user experience during re-authentication (#520)
  3. Non-PDF Exports - Fixed document export functionality for non-PDF file formats (#505)
  4. Corpus Layout - Eliminated unwanted spacing in corpus home layout
  5. Async/Sync Boundaries - Fixed async/sync boundary issue in document embedder picker

Infrastructure & Performance

  • Refactored S3 storage backend for enhanced connection pooling and client reuse
  • Enhanced annotation privacy and permission handling
  • Improved test coverage for agent tools and rate limiting
  • Docker and deployment configuration improvements
  • Better error handling in authentication and routing

Dependency Updates

Multiple security and feature updates including:

  • pytest-cov 6.2.1 → 7.0.0
  • jsonschema 4.24.0 → 4.25.1
  • coverage 7.10.7 → 7.11.0
  • django-cors-headers 4.7.0 → 4.9.0
  • vite 6.3.6 → 6.4.1
  • And many others

Included PRs

  • Merge pull request #542 from Open-Source-Legal/dependabot/pip/coverage-7.11.0
  • Merge pull request #541 from Open-Source-Legal/dependabot/pip/jsonschema-4.25.1
  • Merge pull request #540 from Open-Source-Legal/dependabot/pip/pytest-cov-7.0.0
  • Merge pull request #539 from Open-Source-Legal/JSv4/issue-531
  • Merge pull request #538 from Open-Source-Legal/dependabot/npm_and_yarn/frontend/vite-6.4.1
  • Merge pull request #537 from Open-Source-Legal/dependabot/pip/django-cors-headers-4.9.0
  • Merge pull request #535 from Open-Source-Legal/dependabot/pip/tokenizers-gte-0.21-and-lt-0.23
  • Merge pull request #534 from Open-Source-Legal/dependabot/pip/watchfiles-1.1.1
  • Merge pull request #521 from Open-Source-Legal/feature/issue-518-modular-agent-instructions
  • Merge pull request #520 from Open-Source-Legal/fix/issue-517-graceful-reauth
  • Merge pull request #508 from Open-Source-Legal/feature/issue-41-cookie-modal-revamp
  • Merge pull request #507 from Open-Source-Legal/feature/issue-93-export-modal-pagination
  • Merge pull request #506 from Open-Source-Legal/feature/issue-403-page-imaging-tool
  • Merge pull request #505 from Open-Source-Legal/fix/issue-449-non-pdf-exports
  • Merge pull request #501 from Open-Source-Legal/dependabot/pip/requirements/filetypes/mammoth-1.11.0
  • Merge pull request #499 from Open-Source-Legal/dependabot/github_actions/actions/setup-node-6
  • Merge pull request #498 from Open-Source-Legal/JSv4/improve-agent-tools
  • Merge pull request #492 from Open-Source-Legal/dependabot/pip/django-coverage-plugin-3.2.0
  • Merge pull request #491 from Open-Source-Legal/dependabot/pip/google-auth-2.41.1
  • Merge pull request #490 from Open-Source-Legal/dependabot/github_actions/actions/checkout-5.0.0
  • Merge pull request #487 from Open-Source-Legal/JSv4/revise-sidebar-overlay
  • Merge pull request #486 from Open-Source-Legal/dependabot/pip/django-anymail-mailgun--13.1
  • Merge pull request #485 from Open-Source-Legal/dependabot/pip/coverage-7.10.7
  • Merge pull request #484 from Open-Source-Legal/dependabot/pip/django-4.2.24
  • Merge pull request #483 from Open-Source-Legal/dependabot/docker/compose/production/traefik/traefik-3.5.3
  • Merge pull request #482 from Open-Source-Legal/JSv4/query-optimizations
  • Merge pull request #481 from Open-Source-Legal/dependabot/pip/pytest-8.4.2
  • Merge pull request #480 from Open-Source-Legal/dependabot/pip/djangorestframework-3.16.1
  • Merge pull request #479 from Open-Source-Legal/dependabot/npm_and_yarn/frontend/axios-1.12.0
  • Merge pull request #478 from Open-Source-Legal/dependabot/docker/compose/production/traefik/traefik-3.5.2
  • Merge pull request #477 from Open-Source-Legal/dependabot/npm_and_yarn/frontend/vite-6.3.6
  • Merge pull request #475 from Open-Source-Legal/JSv4/add-gcp-cloud-storage
  • Merge pull request #474 from Open-Source-Legal/dependabot/github_actions/actions/setup-node-5
  • Merge pull request #473 from Open-Source-Legal/dependabot/github_actions/actions/setup-python-6
  • Merge pull request #472 from Open-Source-Legal/dependabot/pip/django-redis-6.0.0
  • Merge pull request #470 from Open-Source-Legal/dependabot/pip/argon2-cffi-25.1.0
  • Merge pull request #469 from Open-Source-Legal/dependabot/pip/jsonschema-4.25.1
  • Merge pull request #468 from Open-Source-Legal/dependabot/pip/responses-0.25.8
  • Merge pull request #467 from Open-Source-Legal/dependabot/pip/django-anymail-mailgun--13.0.1
  • Merge pull request #466 from Open-Source-Legal/dependabot/pip/opencv-python-4.12.0.88
  • Merge pull request #465 from Open-Source-Legal/dependabot/github_actions/actions/checkout-5.0.0
  • Merge pull request #463 from Open-Source-Legal/dependabot/pip/cryptography-45.0.6
  • Merge pull request #462 from Open-Source-Legal/dependabot/pip/openai-1.102.0
  • Merge pull request #461 from Open-Source-Legal/dependabot/pip/mypy-1.16.1
  • Merge pull request #460 from Open-Source-Legal/dependabot/pip/tiktoken-0.11.0
  • Merge pull request #459 from Open-Source-Legal/dependabot/pip/coverage-7.10.5
  • Merge pull request #457 from Open-Source-Legal/dependabot/pip/pytest-cov-6.2.1
  • Merge pull request #456 from Open-Source-Legal/dependabot/github_actions/codecov/codecov-action-5
  • Merge pull request #455 from Open-Source-Legal/dependabot/pip/pytest-sugar-1.1.1
  • Merge pull request #454 from Open-Source-Legal/dependabot/pip/django-4.2.23
  • Merge pull request #453 from Open-Source-Legal/JSv4/add-ratelimits
  • Merge pull request #450 from Open-Source-Legal/JSv4/hygiene
  • Merge pull request #428 from Open-Source-Legal/dependabot/pip/django-storages-boto3--1.14.6
  • Merge pull request #427 from Open-Source-Legal/dependabot/pip/channels-redis-4.3.0

Full Changelog: v3.0.0.b1...v3.0.0.b2

v3.0.0.b1 - Combine All Doc Content Into Unified Feed; Bug Fixes

25 Aug 06:09
388ae48

Choose a tag to compare

Description

This release brings substantial but targeted improvements to the annotator UI/UX, specifically

  1. Vastly improved UI/UX for navigating notes, annotations and other document info in the view. Work there is still ongoing, but the many tabs and requirements to context switch have been replaced in favor of a single unified context feed where you can sort and filter the various info container types by page and - eventually - we can scroll lock the feed and the document.
  2. Also simplified the creation of labelsets and labels. Before, you had to know to create a labelset or link an existing one to a corpus. To add a new label to a doc that doesn't already exist, you had to exit the corpus, nav to the labelset, add the label, and then jump back in. All of this is now 1 - 2 clicks and can happen from within the floating label component.

We've also fixed and improved some things:

  1. The data extract performance using pydantic ai agents was middling, and we've updated how that agent is configured to improve structured data extract.
  2. Metadata creation and retrieval has been rebuilt to use the same storage types as extracts. Much better handling of types and much better test coverage.
  3. Fixed some bugs with export tasks expecting wrong # of arguments.
  4. Fixed issues with claude-based highlighter analyses

Included PRs

  • Migrate All Docling Embedders to Microservice, Remove HF dependencies from core app by @JSv4 in #362
  • Bump openai from 1.65.4 to 1.80.0 by @dependabot[bot] in #373
  • Bump llama-index-agent-openai from 0.4.1 to 0.4.8 by @dependabot[bot] in #372
  • Bump traefik from 3.3.6 to 3.4.0 in /compose/production/traefik by @dependabot[bot] in #361
  • Bump factory-boy from 3.3.1 to 3.3.3 by @dependabot[bot] in #360
  • Added GitHub action workflow to do release. by @JSv4 in #376
  • Create Agent Framework Agnostic Agent API by @JSv4 in #386
  • Streamlined Knowledge Base by @JSv4 in #400
  • Add Events (Like Tool Usage, Thinking, etc.) to Agent API and Return Message Types by @JSv4 in #392
  • Bump django-extensions from 3.2.3 to 4.1 by @dependabot[bot] in #393
  • [Snyk] Upgrade @types/react from 18.3.21 to 18.3.23 by @JSv4 in #396
  • Bump traefik from 3.4.0 to 3.4.3 in /compose/production/traefik by @dependabot[bot] in #399
  • Bump watchfiles from 1.0.4 to 1.1.0 by @dependabot[bot] in #395
  • Bump flake8 from 7.2.0 to 7.3.0 by @dependabot[bot] in #409
  • Bump celery from 5.4.0 to 5.5.3 by @dependabot[bot] in #407
  • Bump pytest-django from 4.9.0 to 4.11.1 by @dependabot[bot] in #406
  • Bump django-cors-headers from 3.13.0 to 4.7.0 by @dependabot[bot] in #405
  • Bump django-environ from 0.9.0 to 0.12.0 by @dependabot[bot] in #416
  • Bump hiredis from 3.0.0 to 3.2.1 by @dependabot[bot] in #414
  • Bump crispy-bootstrap5 from 2025.4 to 2025.6 by @dependabot[bot] in #413
  • Bump traefik from 3.4.3 to 3.4.4 in /compose/production/traefik by @dependabot[bot] in #412
  • Bump django-crispy-forms from 2.3 to 2.4 by @dependabot[bot] in #415
  • Improve Build Times by @JSv4 in #418
  • Bump djangorestframework from 3.15.2 to 3.16.0 by @dependabot[bot] in #423
  • Bump django-cte from 1.3.3 to 2.0.0 by @dependabot[bot] in #421
  • Bump docker/build-push-action from 5 to 6 by @dependabot[bot] in #419
  • Bump responses from 0.22.0 to 0.25.7 by @dependabot[bot] in #422
  • Bump actions/checkout from 4 to 5 by @dependabot[bot] in #438
  • Bump traefik from 3.4.4 to 3.5.0 in /compose/production/traefik by @dependabot[bot] in #430
  • Bump channels from 4.2.0 to 4.3.1 by @dependabot[bot] in #434
  • Bump form-data from 4.0.2 to 4.0.4 in /frontend by @dependabot[bot] in #425
  • v3.0.0.b1 by @JSv4 in #424

Full Changelog: v3.0.0.a2...v3.0.0.b1

v3.0.0.a2 - Async, Streaming, Multivector Support, and Vite Upgrade

06 May 12:21
5b7d8a6

Choose a tag to compare

Another big update:

  1. Supports dynamic length embeddings (per corpus) so you can configure a different embeddings module for different projects.
  2. Async and websocket support with improved agents (more work to be done)
  3. Source highlights IN document for queries
  4. Migrated to vite
  5. Migrated to pdf,js 5.*
  6. Playwright tests for key pdf interactions (more to come)

What's Changed

  • [Snyk] Fix for 32 vulnerabilities by @JSv4 in #291
  • Update quick-start.md by @ThreatLentes in #292
  • Fix documentation configuration by @ofek in #303
  • Issue85 port redirect to 3000 by @ThreatLentes in #293
  • Add Post Processors & Example PDF Redaction by @JSv4 in #306
  • Bump watchfiles from 1.0.3 to 1.0.4 by @dependabot in #310
  • [Snyk] Security upgrade nginx from 1.27.3-alpine to 1.27.4-alpine by @JSv4 in #316
  • [Snyk] Security upgrade cryptography from 43.0.1 to 44.0.1 by @JSv4 in #317
  • Bump traefik from 3.2.3 to 3.3.4 in /compose/production/traefik by @dependabot in #319
  • [Snyk] Security upgrade pillow from 9.5.0 to 10.3.0 by @JSv4 in #309
  • [Snyk] Security upgrade pillow from 9.5.0 to 10.0.1 by @JSv4 in #305
  • Implement ASGI, Doc Chat and Doc Summary View by @JSv4 in #311
  • Bump openai from 1.58.1 to 1.65.4 by @dependabot in #327
  • Bump django-redis from 5.2.0 to 5.4.0 by @dependabot in #324
  • Bump coverage from 7.6.1 to 7.6.12 by @dependabot in #315
  • [Snyk] Fix for 7 vulnerabilities by @JSv4 in #322
  • Bump axios from 1.7.9 to 1.8.2 in /frontend by @dependabot in #328
  • Pluggable vector storage by @JSv4 in #339
  • Add Bulk Import and Case Summarizer by @JSv4 in #343
  • Migrate to Vite & Upgrade Pdf.js by @JSv4 in #353
  • Bump traefik from 3.3.4 to 3.3.6 in /compose/production/traefik by @dependabot in #351
  • Bump sphinx from 6.1.0 to 8.2.3 by @dependabot in #326
  • Bump vite from 6.3.2 to 6.3.4 in /frontend by @dependabot in #357
  • Bump crispy-bootstrap5 from 2024.2 to 2025.4 by @dependabot in #348

New Contributors

Full Changelog: v3.0.0.a1...v3.0.0.a2

v3.0.0.a1 - GUI Overhaul + Modular Parsing Pipelines

06 Jan 06:10
9f4ed17

Choose a tag to compare

3.0.0 Alpha1 Release:

This release brings a ton of long-planned and much-needed improvements. Specifically:

  1. Brought the frontend up to React 18
  2. Completely overhauled state handling in the annotator component to improve performance and cut down on unnecessary re-renders. Using Jotai atoms now instead of contexts.
  3. Added modular document processing pipelines that can easily be configured and enabled/disabled via settings module.
  4. Added a docling-based processing pipeline
  5. Ensured that relationships are now imported and exported with corposes
  6. Load relationships produced by document processing pipeline
  7. Overhauled data extract task (still a work-in-progress)
  8. Improved test coverage
  9. Lots of GUI cleanup. Fixed minor bugs and general ugliness.

What's Changed

Full Changelog: v2.4.0...v3.0.0.a1

v2.4.0 - Txt-Based Format Annotator + Style Overhaul

11 Nov 02:46
d587b25

Choose a tag to compare

This is a pretty significant upgrade vs 2.3.1. We added a number of features:

  1. We now support ingesting, rendering and annotating txt-based formats like plaintext, markdown, etc.
  2. Our document ingestion pipeline has a parser for txt-based formats.
  3. The task decorator for custom tasks will automatically switch from span-based to token-based annotations depending on the underlying format. At the moment this is just pdf vs non-pdf, but could be a richer taxonomy.
  4. Substantial styling improvements.

What's Changed

Full Changelog: v2.3.1...v2.4.0

v2.3.1 - Improved Admin & Annotation Loading for Analyses

20 Sep 22:03
71630c4

Choose a tag to compare

Two primary improvements in this release:

  1. The admin views have been built out with more filters, raw_id renders (to cut down on M2M and FK pulls), and custom actions - including a custom dropdown action on selected Corpus(es) to make them public.
  2. We were previously loading ALL annotations for an analysis in each document view. First off, that's really inefficient for large corpuses. Second, it meant that the annotator got cluttered with random annotations that weren't actually in the loaded document. Added a filter on the fullAnnotationList prop of AnalysesType to filter to document_id. Updated frontend to only request annotation analyses for opened_document.

What's Changed

Full Changelog: v.2.3.0...v2.3.1

v2.3.0 - Add User Feedback

17 Sep 01:48
ac33c05

Choose a tag to compare

It is now possible to collect feedback from users on public corpuses where can_comment is set to true. Added some nice GUI enhancements to the labels to support more action buttons - including a cool parabolic spiral button cloud that sprouts from an action zone.

What's Changed

Full Changelog: v2.2.0...v.2.3.0

v2.2.0 - Document UI Overhaul

12 Sep 06:02
1046ae5

Choose a tag to compare

This release brings an enormous number of frontend improvements and tweaks, primarily focused on unifying the document annotation and viewer components into a single component that has a single, clean workflow for viewing different extracts and analyses for a given document.

What's Changed

Full Changelog: v2.1.0...v2.2.0

v2.1.0 - Corpus Actions

27 Aug 03:34
808050f

Choose a tag to compare

TLDR

This release brings the addition of CorpusActions, GitHub Action-style automatic analyzers or data extractors that run when a document is uploaded. See more here.

What's Changed

Full Changelog: v2.0.0...v2.1.0