docs
AGENTS.md17k starsChanged 4 months agoMITView on GitHub
This file contains guidelines for AI agents coding in this repository. La Suite Docs is a collaborative text editor built by DINUM (French government) and ZenDiS (German government). It features real-time editing, offline support, AI actions, and multi-format export (PDF/DOCX/ODT). Repository: https://github.com/suitenumerique/docs Tests run inside Docker containers. You must first build the backend image and ensure the lasuite-network Docker network exists before running tests. The container starts with node --import ./dist/sentry.js dist/server.js: keep the --import when overriding the command. src/yhub-server/README.md…
- Reads credentials
We split this AGENTS.md into the rules it gives an agent
17 rules. About 0 are common, 8 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 147
After a compaction that found new content, yhub calls POST /documents/{id}/content-updated/ so that the backend updates updated_at and the …
- Distinctive: line 156
never put a document id, a user id or a path in a metric label
- Very specific: line 170
Use @transaction.atomic, select_related/prefetch_related, type hints list[str]
- Distinctive: line 171
Run migrations after model changes
- Distinctive: line 173
Use specific exceptions, no unused imports, double quotes, f-strings
- Very specific: line 174
Tests: Prefer the settings fixture from pytest-django over django.test.override_settings
- Very specific: line 185
Every environment variable is read, validated and refused at import time in src/config.ts (secrets through secret() in src/env.ts, which …
- Very specific: line 208
Never commit secrets; use Got templating {{ now | unixEpoch }}
- Very specific: line 209
Follow semantic versioning.
- Very specific: line 228
Update CHANGELOG.md under [Unreleased] with format: - <gitmoji>(type) description (max 80 chars per line).
- Very specific: line 232
Run before submitting: make lint && make frontend-lint && make test
- Distinctive: line 236
Commit messages should be clear and descriptive
- Very specific: line 237
Run make lint and tests before committing
- Distinctive: line 238
Use DRF for REST APIs with proper serializers
- Distinctive: line 240
Use Django settings for configuration
- Distinctive: line 243
Write docstrings for classes and complex functions
- Distinctive: line 244
Use type checking: TypeScript (frontend), mypy optional (Python)
≈ “Common” is an estimate: at least 1 in 5 of the 36,368 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Agent Guidelines for Docs
This file contains guidelines for AI agents coding in this repository.
Project Overview
La Suite Docs is a collaborative text editor built by DINUM (French government) and ZenDiS (German government). It features real-time editing, offline support, AI actions, and multi-format export (PDF/DOCX/ODT).
Repository: https://github.com/suitenumerique/docs
Monorepo Structure
src/backend/- Django REST API (Python 3.14+)src/frontend/apps/impress/- Main Next.js 15 application (TypeScript)src/frontend/apps/e2e/- Playwright E2E testssrc/frontend/packages/i18n/- Shared i18n utilitiessrc/frontend/packages/eslint-plugin-docs/- Custom ESLint pluginsrc/frontend/servers/y-provider/- Conversion service only (Express,POST /api/convert/). It no longer serves any websocketsrc/yhub-server/- Collaboration server: a thin TypeScript wrapper around@y/hub(websockets, REST routes, worker). It holds the content of the documentssrc/mail/- Email templates (MJML)src/helm/- Kubernetes/Helm deployment
Development Commands
Setup and Services
make bootstrap # Full dev setup (build + migrate + demo + run)
make build # Build all Docker containers
make run # Start all services
make stop # Stop services
make build-yhub # Build the collaboration server (yhub) image
make migrate-yhub # Create/upgrade the yhub database schema (`yarn init-db`), safe to re-run
make status # Check running servicesBackend (Python/Django)
Tests run inside Docker containers. You must first build the backend image and ensure the lasuite-network Docker network exists before running tests.
make build-backend # Build the backend Docker image (required before first test run)
docker network create lasuite-network # Create the external network (required once)
bin/pytest -n auto # Run all backend tests in parallel
bin/pytest -n auto path/to/test # Run specific test file/directory
bin/pytest -n auto path/to/test.py::TestClass::test_method # Run single test via docker compose
make lint # ruff format + ruff check + pylint
make lint-ruff-format # Format only
make lint-ruff-check # Lint only
make migrate # Run database migrations
make makemigrations # Create new migrations
make resetdb # Flush DB + create superuser (admin/admin)Frontend (TypeScript/Next.js)
# From src/frontend/apps/impress/:
yarn dev # Development server (port 3000)
yarn build # Production build (includes prettier + stylelint checks)
yarn lint # TypeScript check + ESLint
yarn test # Run Vitest tests
yarn prettier # Format code
yarn stylelint # Lint CSS
# From project root:
make frontend-lint # Lint all frontend workspaces
make frontend-test # Run frontend testsCollaboration server (yhub, TypeScript)
# From src/yhub-server/ (standalone package: its own package.json and yarn.lock,
# not a workspace of src/frontend):
yarn test # Vitest unit tests (@y/hub is mocked, no store needed)
yarn typecheck # tsc --noEmit
yarn lint # ESLint
yarn build # Compile to dist/
yarn init-db # Create/upgrade the yhub postgres schema (what `make migrate-yhub` runs)The container starts with node --import ./dist/sentry.js dist/server.js: keep the
--import when overriding the command. src/yhub-server/README.md is the reference
for everything this server does (permissions, roles, migration, storage, metrics).
Mails
make mails-install # Install dependencies
make mails-build # Convert MJML to HTML + plaintextHelm/Kubernetes Deployment
make build-k8s-cluster # Create local Kind cluster
make start-tilt # Start Tilt for hot-reload
# From src/helm/: helmfile -n impress -e dev apply/destroy/diffDev Service URLs
- Frontend: http://localhost:3000
- Backend API/Admin: http://localhost:8071
- Keycloak (auth): http://localhost:8083
- MinIO (S3): http://localhost:9000
- Collaboration server (yhub): http://localhost:3002 (websocket on
/collaboration/ws/v1/docs/{docid}) - yhub PostgreSQL: localhost:5433 (its own database, apart from the backend's on 15432)
- Mailcatcher: http://localhost:1081
Architecture
Backend
- Framework: Django + DRF, configured via
django-configurations(src/backend/impress/settings.py) - Main app:
src/backend/core/(models, API viewsets, services, authentication) - API: REST on
/api/v1.0/with nested routes (e.g.,/documents/{id}/accesses/) - Auth: OIDC via
mozilla-django-oidc(Keycloak in dev) - Background tasks: Celery + Redis
- Database: PostgreSQL 16 with
django-treebeardfor document hierarchy - Storage: S3-compatible (MinIO in dev) for attachments and media. The content of a document is not stored by the backend anymore: it lives in the collaboration server (yhub).
Document.content,save_contentand the S3 object versions are gone;file_keyonly survives as a pointer for the migration of legacy documents - Collaboration server client:
core/services/yhub_services.py(YHubService:get_ydoc,create_ydoc,delete_ydoc,restore_ydoc,reset_ydoc,migrate,reset_connections). It is called synchronously by document creation from a file,duplicate,formatted-content, and from Celery tasks for delete/restore/access changes. Mock it in tests (CELERY_TASK_ALWAYS_EAGER=Truein theTestconfiguration, so tasks run inline) - Service-to-service auth: short-lived RS256 JWTs with an
audclaim, never a shared bearer token. The backend signs withJWT_PRIVATE_KEY(core/services/jwt_services.py) and publishes its keys on/api/v1.0/jwks; yhub signs withYHUB_JWT_PRIVATE_KEYand publishes/collaboration/jwks/v1. Dev keys are generated indata/jwt/bymake bootstrap - Removed endpoints:
documents/{id}/content/(GET and PATCH),documents/{id}/versions/,documents/{id}/can-edit/. New ones:documents/{id}/content-updated/(called by yhub) anddocuments/{id}/accesses/me/.documents/{id}/formatted-content/now reads the content from yhub - Legacy documents:
python manage.py migrate_documentshands the S3 content of existing documents to yhub (resumable, idempotent);SOFT_MIGRATION=trueon yhub seeds a document on first open. SeeUPGRADE.md - Search: Full-text indexing via
manage.py index - Load-test tooling:
src/backend/loadtest/is a separate Django application that mints sessions for existing users (create_load_test_sessions,revoke_load_test_sessions). It is only installed by theLoadTestconfiguration (DJANGO_CONFIGURATION=LoadTest, a subclass ofProduction);LOAD_TEST_TOOLS_ENABLEDisFalseeverywhere else, pinned inProduction, and never read from the environment. Anything added for load tests goes there, not incore, and must stay off inProduction
Frontend
- Editor: BlockNote.js 0.54.x (Tiptap-based block editor)
- Real-time: Yjs with the plain
y-websocketWebsocketProvider(features/docs/doc-management/stores/useProviderStore.tsx), and an HTTP polling fallback (@y/yhub-http-fallback) used while the websocket cannot be opened. Hocuspocus is gone - Offline: documents are kept locally (
y-indexeddb) and a service worker (features/service-worker/) caches pages and API answers and replays queued mutations when back online - Version history: built from the activity API of yhub, not from the backend
- State: Zustand (broadcast store for cross-tab sync), TanStack React Query for server state
- UI: Mantine 8 + Cunningham design system
- Export: BlockNote XL packages (PDF, DOCX, ODT)
- i18n: i18next with Crowdin for community translations
Collaboration Flow
Clients connect via WebSocket to the collaboration server (src/yhub-server, built on @y/hub), authenticated by their Django session cookie.
- On every connection (and permission recheck, REST call, fallback poll) yhub asks the backend who the caller is and what they may do:
GET /users/me/,GET /documents/{id}/abilities/, andGET /documents/{id}/accesses/me/for the history. The backend stays the source of truth for access rights - Updates travel between replicas through Redis/Valkey streams, so yhub replicas are stateless and need no sticky sessions. A worker (
YHUB_ROLE=all|server|worker) compacts the stream into yhub's own PostgreSQL database (optionally S3 for the blobs) - After a compaction that found new content, yhub calls
POST /documents/{id}/content-updated/so that the backend updatesupdated_atand the search index - The backend reads and writes content through the REST routes of yhub with an admin JWT (see
YHubService)
Observability
- Metrics (opt-in,
PROMETHEUS_METRICS_ENABLED+ a requiredPROMETHEUS_API_KEYbearer token, both services refuse to start without the key):- backend: django-prometheus on
/metrics, deliberately outside/api/, protected bycore.middleware.PrometheusAuthMiddleware. Multiprocess mode is set up automatically for the uvicorn workers. Seedocumentation/metrics.md - yhub:
src/yhub-server/src/metrics.ts, served on its own port (9464) in every role, the worker included. See the "Metrics" section ofsrc/yhub-server/README.md - chart:
ingressMetricspublishes/metrics,/metrics/yhuband/metrics/yhub-workeron a dedicated host - never put a document id, a user id or a path in a metric label
- backend: django-prometheus on
- Sentry: backend (
SENTRY_DSN), y-provider, and yhub (src/yhub-server/src/sentry.ts, preloaded,SENTRY_*settings;error/fatallog lines of the shared pino logger are reported) - Profiling: django-silk, opt-in with
SILK_ENABLED(documentation/profiling.md) documentation/load-testing.mdis the load-testing guide: tooling, setup of an instance, scenarios. Never against production- Load generators:
src/loadtest/k6/(plain k6 scripts: the page-open HTTP sequence and the heavy endpoints; every request tagged with anamefree of identifiers, CSRF by double-submit with the frontend'sOrigin) andsrc/loadtest/swarm/(standalone TypeScript package, likesrc/yhub-server) opens many Yjs clients on yhub with the frontend's client stack, reading the manifest ofcreate_load_test_sessions. Tests run against an in-process y-websocket server (__tests__/_server.ts);src/loadtest/canary/(same shape, Playwright library) drives a few real Chromium pairs through the frontend to measure page open, editor ready and keystroke propagation, with the manifest's cookies (session +csrftoken) set on the context
Code Style Guidelines
Python (Backend)
- Formatter: Ruff (line-length: 88)
- Linter: Ruff + Pylint (pylint runs only on files changed from
origin/main) - Imports (Ruff enforced): future, stdlib, django, third-party, impress (
core), first-party, local - Naming: PascalCase classes, snake_case functions/variables, UPPER_SNAKE_CASE constants
- Print statements are forbidden (T20 rule) - CI will reject them in backend code
- Use
@transaction.atomic,select_related/prefetch_related, type hintslist[str] - Run migrations after model changes
- In
settings.py,post_setupruns after django-configurations has handed the settings to Django: change lists and dicts in place there (append,insert, item assignment), a reassignment is silently ignored - Use specific exceptions, no unused imports, double quotes, f-strings
- Tests: Prefer the
settingsfixture frompytest-djangooverdjango.test.override_settings
TypeScript/React (Frontend)
- Formatter: Prettier (single quotes, trailing commas, semicolons, 80 char width)
- Linter: ESLint 9 with custom
eslint-plugin-docs - Style: Stylelint for CSS
- Imports: React & Next.js, libraries, internal, types, styles
- Naming: PascalCase components/types, camelCase functions,
use*hooks, UPPER_SNAKE_CASE constants - Strict mode, interfaces for shapes, Zustand for state, React Query for data
TypeScript (yhub-server)
- Every environment variable is read, validated and refused at import time in
src/config.ts(secrets throughsecret()insrc/env.ts, which supportsNAME_FILE): add new settings there, with a test in__tests__/config.spec.ts - Prettier style with single quotes; tests are Vitest and mock
@y/hub @y/ymust stay the very copy@y/hubresolves (__tests__/dependencies.spec.ts)
Helm/Kubernetes Deployment
Structure
helmfile.yaml.gotmpl- Helmfile defining releases and environmentsimpress/- Helm chart with templates and default valuesenv.d/{env}/- Environment-specific values (dev=local, feature=CI)
Services
- Backend (Django + Celery), Frontend (Next.js), yhub (collaboration server, plus an optional separate worker with
yhub.worker.enabled), yProvider (conversion only) - Two standalone Valkey instances from the official
valkey/valkeychart:valkey-docs(backend cache, sessions, Celery) andvalkey-yhub devonly (monitoring: truein the helmfile environment): a trimmedkube-prometheus-stackrelease (env.d/dev/values.prometheus.yaml.gotmpl, operator + CRDs + one Prometheus at https://docs-prometheus.127.0.0.1.nip.io) scraping the backend and yhub through theserviceMonitorof the chart, with the token in thedocs-metricsSecret it creates, and a Grafana at https://docs-grafana.127.0.0.1.nip.io (admin/admin) whose sidecar loads the dashboards ofsrc/loadtest/dashboards/from ConfigMaps (legend{{escaped for helm's tpl, as the values file explains)- Websocket ingress on
/collaboration/ws/with noupstream-hash-by: any yhub replica serves any document - DocSpec (conversion), Posthog (analytics) - optional
Deployment Model
- Kind cluster with mkcert HTTPS, local registry (localhost:5001)
- CoreDNS for nip.io domains, dev-backend deps (Keycloak, PostgreSQL, Minio)
Helm Guidelines
- Never commit secrets; use Got templating
{{ now | unixEpoch }} - Follow semantic versioning; values use
@paramannotations
Git Conventions
Commit Format
<gitmoji>(type) lowercase title
Mandatory description explaining why.- No space between emoji and
(type), one space after closing parenthesis - Types:
backend,frontend,ci,docker,dependencies,e2e,export,auth, etc. - Gitmoji examples:
✨feature,🐛fix,♻️refactor,⬆️dependency upgrade,🔒️security - Commits must be signed (
-S) and signed-off (--signoff)
Changelog
Update CHANGELOG.md under [Unreleased] with format: - <gitmoji>(type) description (max 80 chars per line).
PR Checklist
Run before submitting: make lint && make frontend-lint && make test
General Practices
- Commit messages should be clear and descriptive
- Run
make lintand tests before committing - Use DRF for REST APIs with proper serializers
- Implement proper error handling with try/except blocks
- Use Django settings for configuration
- Internationalize user-facing strings with
_() - Cache expensive operations, use database indexes
- Write docstrings for classes and complex functions
- Use type checking: TypeScript (frontend), mypy optional (Python)
Environment Configuration
Config files in env.d/development/: common, postgresql, kc_postgresql, crowdin, yhub, yhub-postgres. The collaboration server reads its own two files and none of the backend's. Create .local overrides (gitignored) for custom settings.
i18n
make i18n-generate # Extract translation strings (backend + frontend)
make i18n-compile # Compile translations for all appsInternationalize user-facing strings with _() (backend) or i18next (frontend).
Key Directories
src/backend/- Django REST API backendsrc/frontend/- Next.js (apps/impress, packages/i18n, servers/y-provider)src/yhub-server/- Collaboration server (yhub)src/helm/- Helmfile and Helm chart for Kubernetes deploymentsrc/mail/- Email template generator (MJML)documentation/- Documentation.github/- GitHub workflows and templates
Trending
More talk lately.about the whole repository
Who's talking about suitenumerique/docs
- Digitiz Business“LaSuite numérique : j’ai testé les outils collaboratifs libres de l’État français”YouTube · Sep 27, 2026 · 80k views
- A Hacker News story“Docs – Open source alternative to Notion or Outline”Hacker News · Mar 16, 2025 · 2k points
- A la french 💻“L'État défie Microsoft Word et Google Docs avec ses développeurs open source! @alafrench”YouTube · Jan 9, 2026 · 1.2k views
- trms“The Government-Mandated Notion Alternative”YouTube · Apr 4, 2025 · 1.1k views
- Digitiz Business“La Suite numérique est réservée à l'État… sauf si vous l'installez vous-même”YouTube · Oct 18, 2026 · 661 views
The biggest 5 of 111 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 111
Talked about on GitHub, Bluesky, YouTube, Hacker News and the web (111 times).
On GitHub · 50
- Apr 25, 2025NixOS native deployment of La Suite — suitenumerique/hackdays202525 reactions · 9 comments
- Apr 22, 2025Sheets app — suitenumerique/hackdays20253 reactions · 3 comments
- Apr 25, 2025nixos/lasuite-docs: init — NixOS/nixpkgs2 reactions · 9 comments
- Dec 2, 2025lasuite-docs{-frontend,-collaboration-server}: 3.6.0 -> 4.0.0, lasuite-docs: 3.9.0 -> 4.0.0 — NixOS/nixpkgs1 reaction · 1 comment
- May 31, 2025Docs - AI Agent that gives all kind of data — suitenumerique/hackdays20251 reaction
45 more on GitHub
- May 23, 2025Couple of improvement on the open source repo — etalab-ia/OpenGateLLM1 reaction
- Apr 25, 2025Publish a security policy — suitenumerique/django-lasuite1 reaction
- Mar 19, 2025Add Docs to wishlist — YunoHost/apps1 reaction · 4 comments
- Mar 18, 2025Drop obsolete code from the initial boilerplate — suitenumerique/meet1 reaction · 3 comments
- Oct 26, 2026Upgrade to v6.0.4 — YunoHost-Apps/lasuite-docs_ynh0 reactions · 2 comments
- Oct 26, 2026✨(feature) Being able to limit number of versions of documents — yjs/yhub0 reactions
- Oct 26, 2026Toggling “Header row” on a table wipes cell content being edited by another collaborator — TypeCellOS/BlockNote0 reactions
- Oct 25, 2026Decide how to treat reference material that is not a package (12) — djangopackages/djangopackages0 reactions · 2 comments
- Oct 23, 2026Upgrade to v6.0.3 — YunoHost-Apps/lasuite-docs_ynh0 reactions · 1 comment
- Oct 22, 2026🐛(Bug) editor crash when typing the caret character at the start of an inline equation — TypeCellOS/BlockNote0 reactions
- Oct 21, 2026Upgrade to v6.0.2 — YunoHost-Apps/lasuite-docs_ynh0 reactions · 2 comments
- Oct 15, 2026Upgrade to v6.0.1 — YunoHost-Apps/lasuite-docs_ynh0 reactions · 2 comments
- Oct 15, 2026Awareness renewal pulls a sync round forward, so syncInterval is not respected — yjs/yhub-http-fallback0 reactions
- Oct 9, 2026Upgrade to v6.0.0 — YunoHost-Apps/lasuite-docs_ynh0 reactions · 2 comments
- Oct 5, 2026Prevent line breaks after literal hyphens in words — TypeCellOS/BlockNote0 reactions · 1 comment
- Sep 16, 2026Upgrade to v5.7.0 — YunoHost-Apps/lasuite-docs_ynh0 reactions · 3 comments
- Sep 11, 2026Dropdown doesn't adapt well when text is too long — suitenumerique/ui-kit0 reactions · 2 comments
- Sep 9, 2026✨ allow to leave an item — suitenumerique/drive0 reactions · 5 comments
- Sep 9, 2026CancelledError exception in shield future — suitenumerique/conversations0 reactions
- Sep 1, 2026Hosted App Research: LaSuite Docs — Z-Space-Society/Corliss0 reactions · 1 comment
- Aug 31, 2026Recipe: lasuite-docs — spelingbee/drillback0 reactions
- Aug 3, 2026✨(backend) make forward auth request uri header configurable — suitenumerique/drive0 reactions · 2 comments
- Jul 21, 2026🐛 Should not pinned dependencies — suitenumerique/ui-kit0 reactions
- Jul 6, 2026Dev: Timoni Part 4 — evocloud-dev/evocloud-paas0 reactions
- Jun 20, 2026Add PR template including AI requirements — PnX-SI/GeoNature0 reactions
- Jun 11, 2026Milestone 6: La Suite adapters — Docs API + Grist API/webhooks — gibouu/docgit0 reactions
- May 25, 2026Common configuration base — suitenumerique/django-lasuite0 reactions · 2 comments
- May 21, 2026lasuite-docs: 5.6.1 -> 5.7.0-preprod — NixOS/nixpkgs0 reactions · 4 comments
- May 11, 2026Evaluate La Suite Docs — EnigmaCurry/d.rymcg.tech0 reactions
- Apr 6, 2026[Project]: Docs — yncyrydybyl/ex-od-us0 reactions
- Apr 6, 2026[Project]: Docs — yncyrydybyl/ex-od-us0 reactions
- Feb 19, 2026⬆️(ci) upgrade GitHub Actions workflow steps to latest versions — suitenumerique/meet-kyutai-moshi-stt0 reactions · 3 comments
- Feb 19, 2026ci: upgrade GitHub Actions workflow steps to latest versions — suitenumerique/e2esdk0 reactions · 3 comments
- Feb 19, 2026👷(docker) add arm64 platform support for image builds — suitenumerique/meet-kyutai-moshi-stt0 reactions · 3 comments
- Feb 19, 2026👷(docker) add arm64 platform support for image builds — suitenumerique/e2esdk0 reactions · 3 comments
- Feb 10, 2026Sort user search by proximity — suitenumerique/django-lasuite0 reactions
- Feb 7, 2026I want general notes to be able to live close to my data, code, pubs, refs, etc. — calkit/calkit0 reactions
- Jan 26, 2026[Add App] docs — beclab/apps0 reactions
- Dec 12, 2025Use variable in cunningham-tokens.ts — suitenumerique/cunningham0 reactions
- Dec 11, 2025Réaliser un PoC de Docs pour COFOLIO — avenirs-esr/AVENIRS-Project0 reactions
- Nov 2, 2025Posted: suitenumerique / docs — nanameru/x-post-automation0 reactions
- Jun 11, 2025DevX guidelines — suitenumerique/dev-handbook0 reactions
- May 2, 2025Automated grammatical corrections — suitenumerique/hackdays20250 reactions
- Mar 18, 2025Support for Docs — souvikinator/notion-to-md0 reactions
- Mar 17, 2025Docs:一个开源的协作笔记、维基和文档平台,Notion 或 Outline 的开源替代方案 — jaywcjlove/quick-rss0 reactions
On Bluesky · 47
- Mar 17, 2025Docs : une alternative Open Source à Notion ou Outline. (P) Ce projet est le fruit d'une collaboration entre les gouvernements français (la… — @bearstech.com107 likes and reposts · 6 replies
- Apr 21, 2026Also, ICYMI, here's the official logo of the French/German/Dutch government effort to build some open source software:… — @wonkish.bsky.social28 likes and reposts
- Mar 17, 2025Docs is an open source collaborative text editor created by a joint effort from the French 🇫🇷 and German 🇩🇪governments.… — @chrisoffner3d.bsky.social27 likes and reposts
- Mar 16, 2025French gov's open source alternative to Notion or Outline Discussion — @hackernewsbot.bsky.social19 likes and reposts
- Apr 25, 2025github.com/suitenumeriq... — @aurelia.nullvoid.space16 likes and reposts · 2 replies
42 more on Bluesky
- Mar 17, 2025Docs is a Notion alternative that is: - European - open source - built with public financing (public money, public code!)… — @bomberstudios.com13 likes and reposts
- Mar 17, 2025Opensource alternative to Notion or Outline: a collaborative note taking, wiki and documentation platform that scales. "the result of a… — @brucel.bsky.social13 likes and reposts · 1 reply
- Mar 16, 2025Je viens de tomber sur ça sur Linkedin, ça a l’air sympa vu les alternatives qui existent (SharePoint, Confluence…)… — @tzkuat.bsky.social11 likes and reposts · 4 replies
- Mar 16, 2025Docs: #opensource alternative to Notion or Outline. Simple editing tools, collaborate with others, work offline, and built-in wiki… — @davidbisset.com8 likes and reposts
- Mar 16, 2025Docs: A collaborative note taking, wiki and documentation platform that scales. Built with Django and React. Opensource alternative to… — @scripting.com8 likes and reposts
- Mar 30, 2026French and German government open source initiatives, an alternative to using Notion, wiki, and office suites etc.,… — @harshak.bsky.social4 likes and reposts
- Aug 22, 2025🔗 Liens utiles Docs : 👉 Le projet : github.com/suitenume... 👉 En savoir plus : docs.numerique.gouv.... — @bearstech.com4 likes and reposts
- Mar 29, 2025Docs A collaborative note taking, wiki and documentation platform that scales. Built with Django and React. Opensource alternative to… — @pythonhub.dev4 likes and reposts
- Mar 17, 2025Docs - Notion 또는 Outline의 오픈 소스 대체제 | GeekNews news.hada.io/topic?id=19791 suitenumerique/docs: A collaborative note taking, wiki and… — @lunamoth.bsky.social4 likes and reposts
- Mar 16, 2025Docs - NotionやOutlineに代わるオープンソース Docs – Open source alternative to Notion or Outline 🔺 344 💬 21 🔗 HN Post | Article — @hacker-news-jp.bsky.social4 likes and reposts · 1 reply
- Jul 27, 2026Alors pour les notes c’est docs de #LaSuite github.com/suitenumeriq... et pour les liens et à lire + tard c’est karakeep karakeep.app en… — @souverain.ovh3 likes and reposts · 1 reply
- Mar 19, 2025github.com/suitenumeriq... C’est terriblement courant aujourd’hui malheureusement… — @aeris.eu.org3 likes and reposts
- Apr 15, 2026github.com/suitenumeriq... has good DX to get up and running in development, good job. — @paulmwatson.com2 likes and reposts
- Jan 6, 2026open source et ça peut être self-hosted. Faut voir quelle infra est utilisée par les insitutions pour leur hébergement du service… — @tapyplus.bsky.social2 likes and reposts · 1 reply
- Jun 14, 2025Tem o github! github.com/suitenumeriq... — @rrrenato.bsky.social2 likes and reposts · 1 reply
- Mar 22, 2025The mascot of github.com/suitenumeriq... is a really cute way of depicting the countries. Everyone lives foreign food 😀 — @martin.rauscheronline.de2 likes and reposts · 1 reply
- Mar 19, 2025Looks delish! 😌 github.com/suitenumeriq... — @kimberlybiscuits.bsky.social2 likes and reposts
- Mar 16, 2025"Docs – Open source alternative to Notion or Outline" Open source tools like Docs can break free from expensive subscription models. They… — @hackerbriefs.bsky.social2 likes and reposts
- Mar 16, 2025Docs: A collaborative note taking, wiki and documentation platform that scales. Built with Django and React. Opensource alternative to… — @dave.feediverse.org2 likes and reposts
- Mar 16, 2025Docs: A collaborative note taking, wiki and documentation platform that scales. Built with Django and React. Opensource alternative to… — @radiofreeameri.ca2 likes and reposts
- Mar 16, 2025The French government really are taking digital government to the next level github.com/suitenumeriq... — @radiobeartime.com2 likes and reposts · 1 reply
- Mar 30, 2026French and German government open source initiatives, an alternative to using Notion, wiki, and office suites etc.,… — @harshak.mastodon.social.ap.brid.gy1 likes and repost
- Jan 12, 2026Niet alleen, de Duitse overheid heeft zelf ook dit ontwikkeld: www.opendesk.eu/en/ En de Duitsers hebben samen met de Fransen dit… — @jeroeneuropa.bsky.social1 likes and repost
- Dec 1, 2025So wie ich es verstanden habe ist es eine komplette Neuentwicklung. Die "Docs"-Suite wurde im Rahmen einer deutsch-französischen… — @ixolius.bsky.social1 likes and repost
- Nov 1, 2025📦 suitenumerique / docs ⭐ 14,100 (+26) 🗒 Python A collaborative note taking, wiki and documentation platform that scales. Built with… — @github-trending.bsky.social1 likes and repost
- Jul 28, 2025github.com/suitenumeriq... — @astralfrontier.org1 likes and repost · 1 reply
- Apr 24, 2025En su GitHub ( github.com/suitenumeriq...) lo ponen: 🚀 Easy to install, scalable and secure alternative to Notion, Outline or Confluence — @quest10.eurosky.social1 likes and repost · 1 reply
- Apr 21, 2025It's really cool the EU is financing and open sourcing a Google Docs and Notion alternative... But why did they have to use React and Next?… — @pierbover.com1 likes and repost · 1 reply
- Apr 3, 2025Participate to the #Docs project on #Github : A #european #sovereign #opensource #foss alternative to #GoogleDocs 🤘… — @rod2ik.bsky.social1 likes and repost
- Apr 3, 2025Participate to the #Docs project on #Github : A #european #sovereign #opensource #foss alternative to #GoogleDocs 🤘… — @rod2ik.bsky.social1 likes and repost
- Mar 20, 2025J'ai vu passé ça il y a peu: github.com/suitenumeriq... Alternative open source à Notion! — @loicmathieu.fr1 likes and repost
- Mar 18, 2025Wow. TIL the French and German governments are collaborating on a docs platform. Nice! github.com/suitenumeriq... — @ajkelkar.bsky.social1 likes and repost
- Mar 17, 2025French gov being based and making their own offline-first OSS alternative to Notion/similar github.com/suitenumeriq... — @murrax.dev1 likes and repost · 1 reply
- Mar 17, 2025Collaborative writing tool (like Notion) funded by German and French governments. Open source. I think this is the way to build essential… — @canolcer.eu1 likes and repost
- Mar 16, 2025An interesting project. Opensource alternative to Notion or Outline. Test login credentials available. — @balticseadivingr.eurosky.social1 likes and repost
- Mar 16, 2025Very cool project supported by the French and German governments. Such efforts save tax payers money in the long run and benefit everyone.… — @kobia.dev1 likes and repost
- Mar 16, 2025🌐Docs – Notion や Outline のオープンソース代替品 https://github.com/suitenumerique/docs via #HackerNews — @kdmsnr.com1 likes and repost
- Mar 16, 2025Docs – Open source alternative to Notion or Outline https://github.com/suitenumerique/docs (https://news.ycombinator.com/item?id=43378239) — @betterhn300.e-work.xyz1 likes and repost
- Mar 16, 2025French gov's open source alternative to Notion or Outline https://github.com/suitenumerique/docs… — @betterhn50.e-work.xyz1 likes and repost
- Apr 24, 2025El el github, aparece como 'demo document'. github.com/suitenumeriq... — @cartdestr.eurosky.social0 likes and reposts · 1 reply
- Mar 17, 2025Docs une alternative open source à Notion ou Outline mais développée en collab entre la France 🇫🇷 (gov) et l'Allemagne 🇩🇪 (gov) Cela… — @thibaud.dev0 likes and reposts · 1 reply
- Mar 16, 2025代码仓库地址: github.com/suitenumeriq... — @luosays.bsky.social0 likes and reposts · 1 reply
On YouTube · 11
- Sep 27, 2026LaSuite numérique : j’ai testé les outils collaboratifs libres de l’État français — Digitiz Business80k views · 57 comments
- Jan 9, 2026L'État défie Microsoft Word et Google Docs avec ses développeurs open source! @alafrench — A la french 💻1.2k views · 6 comments
- Apr 4, 2025The Government-Mandated Notion Alternative — trms1.1k views · 6 comments
- Oct 18, 2026La Suite numérique est réservée à l'État… sauf si vous l'installez vous-même — Digitiz Business661 views · 3 comments
- Oct 3, 2026Docs (La Suite): edit team documents on your own server | open source — Git Gems233 views
6 more on YouTube
- Jun 11, 2025Our Paris HackDays submission for integration with docs — BigBlueButton230 views · 1 comment
- Mar 16, 2025GitHub - suitenumerique/docs: A collaborative note taking, wiki and documentation platform that s... — GitHub Daily Trend AI Podcast148 views
- May 13, 2026docs belongs on your radar — Repo Radar76 views
- Nov 3, 2025suitenumerique/docs - Gource visualisation — Gourcer37 views
- Jan 24, 2026Binärgewitter Talk #356: ... wenn du ein Ceph Cluster betreibst — Binaergewitter0 views
- Jan 8, 2026Binärgewitter Talk #356: ... wenn du ein Ceph Cluster betreibst — Binaergewitter0 views
On Hacker News · 2
- Mar 16, 2025Docs – Open source alternative to Notion or Outline2k points · 454 comments
- May 9, 2026La Suite Docs v5.0.0 released4 points
On the web · 1
- Mar 25, 2026Can't restore a sub-doc as parent doc #2130 — google.com
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 28,693 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

