dDocs is a free, open source collaboration & communication project written in TypeScript and released under AGPL-3.0. It has 413 GitHub stars, 31 forks and 16 open issues, and was last pushed 11 hours ago. On this registry it ranks #40 of 41 tracked projects in Collaboration & Communication, with 5 head-to-head comparisons available. It gained 2 stars over the last 6 tracked days.

What is dDocs?

dDocs (Fileverse dDocs) is an end-to-end encrypted collaborative document editor written in TypeScript, licensed under AGPL-3.0, published as the @fileverse-dev/ddoc package and offered as a hosted app at ddocs.new, and it is built for developers and privacy-conscious teams who want multiplayer document editing without giving up control of the underlying data.

What it is

dDocs is an open-source, end-to-end encrypted document editor that the README describes as a privacy-focused alternative to Google Docs. The repository ships the core editor under /package, alongside example and demo source code that showcases what the editor can do. The editor is consumed as a React component named DdocEditor, imported from @fileverse-dev/ddoc with a companion stylesheet, and it is designed to sit inside an application that already uses Tailwind CSS rather than standing alone as a finished hosted product in the repository itself.

The concrete problem it solves is ownership. In a conventional cloud document suite, the storage provider holds the plaintext of every document and effectively acts as the authority on who may read it. dDocs moves that authority to the user: content is encrypted end to end, private access permissions are enabled through zero-knowledge proofs, and account and file recovery is handled through private social recovery that also relies on zero-knowledge proofs. Import and export of .docx, .md, .pdf, .html and other formats keeps documents portable, so adopting the editor does not trap content inside a single vendor's file model.

Key capabilities

  • End-to-end encryption applied across the document lifecycle, including an end-to-end encrypted, programmable API optimised for agents on an opt-in basis.
  • Real-time and asynchronous collaboration, configured through the enableCollaboration, collaborationId, username, setUsername, walletAddress and onCollaboratorChange props on the DdocProps interface.
  • Suggestion mode with tracked changes, plus commenting, so review happens inside the document instead of in a separate thread.
  • Markdown and LaTeX support, alongside MermaidJS diagram rendering.
  • Import and export of .docx, .md, .pdf, .html and more, which keeps documents movable between dDocs and other editors.
  • Offline and online editing, extended by enableIndexeddbSync and ddocId, so users can continue writing and open older documents with no WiFi connection, with cross-device syncing across desktop and mobile.
  • Version history, dark mode and colour themes, and a mobile-optimised webapp delivered as a PWA.
  • Editor-level control through initialContent, onChange, ref, isPreviewMode, editorCanvasClassNames, ignoreCorruptedData and onInvalidContentError.

Who uses it and how

  • Product teams embedding a document editor directly into their own React application, using DdocEditor as a component and keeping encryption in their own stack.
  • Privacy-sensitive organisations that need multiplayer editing but will not accept a provider holding plaintext or controlling access, and that prefer zero-knowledge proof based permissions and social recovery.
  • Distributed teams working across desktop and mobile, including the installed PWA, where offline editing and later IndexedDB sync matter for intermittent connectivity.
  • Agent and automation workflows that use the opt-in, end-to-end encrypted programmable API to operate on document content.
  • Any user who starts on the hosted ddocs.new instance and exports to .docx, .md, .pdf or .html when handing work to people outside the tool.

Getting started

The README documents the package route: install the peer dependencies with npm install @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities @fileverse/ui @fileverse/crypto viem framer-motion frimousse, then import { DdocEditor } from '@fileverse-dev/ddoc' together with '@fileverse-dev/ddoc/styles' in App.jsx or App.tsx, and add @fileverse-dev/ddoc/dist/index.es.js to the content array in the Tailwind config. A hosted option also exists at ddocs.new for users who would rather not wire the package up themselves.

How it compares

Against Google Docs, the comparison the README draws, dDocs is AGPL-3.0 licensed open source rather than a proprietary hosted service, and its end-to-end encryption means the operator does not hold readable document contents. Access permissions and file recovery are enforced with zero-knowledge proofs instead of an account system administered by the vendor, and the component can be embedded in an application the operator already controls.

When to use it — and when not to

A self-hoster must already run a project with Tailwind CSS and a Tailwind configuration file, and must accept the peer dependency set above, including viem and @fileverse/crypto. Anyone working outside React and Tailwind, or expecting a turnkey server deployment, should look elsewhere: this repository documents the editor package plus demo code, and it does not describe how to operate the hosted service or any backend infrastructure behind it. The registry entry also lists no topics, so discovery metadata is sparse and the README is the main source of truth.

project readme (upstream, from github) — read inline

Fileverse dDocs

ddocs.new is your privacy-focused, open-source alternative to Google Docs. It is an end-to-end encrypted document editor that is optimized for multiplayer collaboration without compromising on speed or people's control over their data.

𓆏 Features include:

  • End-to-end encryption
  • Real-time and async collaboration
  • Suggestion mode (tracked changes) and commenting
  • Markdown and LaTeX support
  • MermaidJS diagram support
  • Import/export of .docx, .md, .pdf, .html and more.
  • Dark mode and color themes
  • Offline/online editing (continue writing and opening older docs even with no WiFi)
  • Cross-device syncing (desktop and mobile)
  • Mobile optimized webapp & PWA
  • Private access permissions enabled through zero-knowledge proofs
  • Private social recovery of account/files, enabled through zero-knowledge proofs
  • Version history
  • End-to-end encrypted, programmable API optimised for agents (opt-in)
ddocsNew

This repository contains:

  • /package – The core package code.
  • Example & demo source code to showcase dDocs functionalities.

Usage

Prequisites

To use dDocs, ensure your project is set up with Tailwind CSS and have a Tailwind configuration file.

Install & import

Add the following imports :

import { DdocEditor } from '@fileverse-dev/ddoc';
import '@fileverse-dev/ddoc/styles'; // in App.jsx/App.tsx

Peer Dependencies

This package requires the following peer dependencies to be installed in your project:

npm install @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities @fileverse/ui @fileverse/crypto viem framer-motion frimousse
Package Version
@dnd-kit/core >=6.3.1
@dnd-kit/sortable >=10.0.0
@dnd-kit/utilities >=3.2.2
@fileverse/ui >=5.0.0
@fileverse/crypto >=0.0.21
viem >=2.13.8
framer-motion >=11.2.10
frimousse >=0.3.0

These are externalized from the bundle to avoid duplication when your app already uses them. If you don't have them installed, npm (v7+) will auto-install them for you.

Update Tailwind Config

In your tailwind config, add this line to content array :

@fileverse-dev/ddoc/dist/index.es.js

You should now be set to use dDocs!

dDocProps Interface

The DdocProps interface is a TypeScript interface that defines the properties for a page-related component. It includes properties for handling preview mode, managing publishing data, and optionally storing metadata and content associated with the page.

Core Props

Property Type Description
initialContent JSONContent Initial content of the editor
onChange (changes: JSONContent, chunk?: any) => void Callback triggered on editor content changes
ref React.RefObject Reference to access editor instance
isPreviewMode boolean Controls if editor is in preview/read-only mode
editorCanvasClassNames string Additional CSS classes for editor canvas
ignoreCorruptedData boolean Whether to ignore corrupted data during loading
onInvalidContentError (error: any) => void Callback for handling invalid content errors

Collaboration Props

Property Type Description
enableCollaboration boolean Enables real-time collaboration features
collaborationId string Unique ID for collaboration session (required when collaboration enabled)
username string User's display name for collaboration
setUsername (username: string) => void Function to update username
walletAddress string User's wallet address
onCollaboratorChange (collaborators?: IDocCollabUsers[]) => void Callback when collaborators change
enableIndexeddbSync boolean Enables IndexedDB sync for offline support
ddocId string Unique document ID (required for IndexedDB sync)

UI/UX Props

Property Type Description
zoomLevel string Current zoom level of the editor
setZoomLevel React.Dispatch> Function to update zoom level
isNavbarVisible boolean Controls navbar visibility
setIsNavbarVisible React.Dispatch> Function to toggle navbar visibility
renderNavbar () => JSX.Element Custom navbar renderer
renderThemeToggle () => JSX.Element Custom theme toggle renderer
isPresentationMode boolean Controls presentation mode
setIsPresentationMode React.Dispatch> Function to toggle presentation mode
sharedSlidesLink string Link for shared presentation slides
documentStyling DocumentStyling Custom styling for document appearance
fonts FontDescriptor[] Consumer-provided font catalog (see Custom Fonts)

Document Styling

The documentStyling prop allows you to customize the visual appearance of your document with three distinct styling areas:

interface ThemeVariantValue {
  light: string;
  dark: string;
}

interface DocumentStyling {
  /**
   * Background styling for the outer document area.
   * Supports CSS background values including gradients.
   * Example: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)"
   */
  background?: string | ThemeVariantValue;

  /**
   * Background color for the editor canvas/content area.
   * Should be a solid color value.
   * Example: "#ffffff" or "rgb(255, 255, 255)"
   */
  canvasBackground?: string | ThemeVariantValue;

  /**
   * Text color for the editor content.
   * Example: "#333333" or "rgb(51, 51, 51)"
   */
  textColor?: string | ThemeVariantValue;

  /**
   * Font family for the editor content.
   * Example: "Inter, sans-serif" or "'Times New Roman', serif"
   */
  fontFamily?: string;
}

Usage Example

<DdocEditor
  documentStyling={{
    background: {
      light: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
      dark: 'linear-gradient(135deg, #2a3145 0%, #3a2f59 100%)',
    },
    canvasBackground: { light: '#ffffff', dark: '#1e1f22' },
    textColor: { light: '#333333', dark: '#e8ebec' },
    fontFamily: 'Inter, sans-serif',
  }}
  // ... other props
/>

Note: Document styling works in both regular editor mode and presentation mode. In presentation mode, only canvasBackground, textColor, and fontFamily are applied to maintain clean slide appearance.

Custom Fonts

The editor ships with a system-font baseline only (Arial, Calibri, Georgia, Times New Roman, etc.) and makes no third-party font requests — there is no Google Fonts @import. To offer additional fonts, pass a fonts catalog. Each font is self-hosted by your app and loaded on demand via the CSS Font Loading API: a font's woff2 is fetched only when it's selected in the picker or when a document (including a

readme truncated — read the full docs on github

Frequently asked questions

Is dDocs free to use?

dDocs is open source under the AGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does dDocs do?

End-to-end encrypted collaborative document editor

What is dDocs written in?

dDocs is primarily written in TypeScript. Its source is publicly available at https://github.com/fileverse/fileverse-ddoc, and it has 413 GitHub stars.