{
  "name": "outline",
  "private": true,
  "license": "Business Source License 1.1",
  "main": "index.js",
  "scripts": {
    "clean": "rimraf build",
    "copy:i18n": "mkdir -p ./build/shared/i18n && cp -R ./shared/i18n/locales ./build/shared/i18n",
    "build:i18n": "i18next --silent '{shared,app,server,plugins}/**/*.{ts,tsx}' && yarn copy:i18n",
    "build:server": "node ./build.js",
    "build": "yarn clean && yarn vite:build && yarn build:i18n && yarn build:server",
    "start": "node ./build/server/index.js",
    "dev": "NODE_ENV=development yarn concurrently -n api,collaboration  -c \"blue,magenta\" \"node --inspect=0.0.0.0 build/server/index.js --services=cron,collaboration,websockets,admin,web,worker\"",
    "dev:backend": "NODE_ENV=development nodemon --quiet --exec \"yarn build:server && yarn dev\" -e js,ts,tsx --watch server --watch shared --watch plugins --watch .env --watch .env.local --watch .env.development --ignore \"plugins/client/**/*.ts\" --ignore \"**/*.test.ts\" --ignore data/ --ignore build/ --ignore app/ --ignore shared/editor --ignore server/migrations",
    "dev:watch": "NODE_ENV=development yarn concurrently -n backend,frontend \"yarn dev:backend\" \"yarn vite:dev\"",
    "lint": "oxlint --type-aware app server shared plugins",
    "lint:changed": "git diff --name-only --diff-filter=ACMRTUXB | grep -E '\\.(js|jsx|ts|tsx)$' | xargs -r oxlint",
    "format": "prettier --write .",
    "format:check": "prettier --check .",
    "prepare": "husky install",
    "postinstall": "yarn patch-package",
    "install-local-ssl": "node ./server/scripts/install-local-ssl.js",
    "release": "node ./server/scripts/release.js",
    "heroku-postbuild": "yarn build && yarn db:migrate",
    "db:create-migration": "sequelize migration:create",
    "db:create": "sequelize db:create",
    "db:migrate": "sequelize db:migrate",
    "db:rollback": "sequelize db:migrate:undo",
    "db:reset": "sequelize db:drop && sequelize db:create && sequelize db:migrate",
    "upgrade": "git fetch && git pull && yarn install && yarn heroku-postbuild",
    "test": "TZ=UTC jest --config=.jestconfig.json",
    "test:app": "TZ=UTC jest --config=.jestconfig.json --selectProjects app",
    "test:shared": "TZ=UTC jest --config=.jestconfig.json --selectProjects shared-node shared-jsdom",
    "test:server": "TZ=UTC jest --config=.jestconfig.json --selectProjects server",
    "vite:dev": "VITE_CJS_IGNORE_WARNING=true vite",
    "vite:build": "VITE_CJS_IGNORE_WARNING=true vite build",
    "vite:preview": "VITE_CJS_IGNORE_WARNING=true vite preview"
  },
  "funding": {
    "type": "GitHub Sponsors ❤",
    "url": "https://github.com/sponsors/outline"
  },
  "engines": {
    "node": ">=20.12 <21 || 22"
  },
  "repository": {
    "type": "git",
    "url": "git+ssh://git@github.com/outline/outline.git"
  },
  "browserslist": [
    "> 0.25%, not dead"
  ],
  "dependencies": {
    "@aws-sdk/client-s3": "3.956.0",
    "@aws-sdk/lib-storage": "3.956.0",
    "@aws-sdk/s3-presigned-post": "3.956.0",
    "@aws-sdk/s3-request-presigner": "3.956.0",
    "@aws-sdk/signature-v4-crt": "^3.956.0",
    "@babel/core": "^7.28.5",
    "@babel/plugin-proposal-decorators": "^7.28.0",
    "@babel/plugin-transform-class-properties": "^7.27.1",
    "@babel/plugin-transform-destructuring": "^7.28.5",
    "@babel/plugin-transform-regenerator": "^7.28.4",
    "@babel/preset-env": "^7.28.5",
    "@babel/preset-react": "^7.28.5",
    "@benrbray/prosemirror-math": "^0.2.2",
    "@bull-board/api": "^6.7.10",
    "@bull-board/koa": "^6.13.0",
    "@css-inline/css-inline-wasm": "^0.18.0",
    "@dnd-kit/core": "^6.3.1",
    "@dnd-kit/modifiers": "^6.0.1",
    "@dnd-kit/sortable": "^7.0.2",
    "@dotenvx/dotenvx": "^1.51.2",
    "@emoji-mart/data": "^1.2.1",
    "@fast-csv/parse": "^5.0.5",
    "@fortawesome/fontawesome-svg-core": "^7.1.0",
    "@fortawesome/free-brands-svg-icons": "^7.1.0",
    "@fortawesome/free-solid-svg-icons": "^7.1.0",
    "@fortawesome/react-fontawesome": "^0.2.6",
    "@getoutline/react-roving-tabindex": "^3.2.4",
    "@hocuspocus/extension-redis": "1.1.2",
    "@hocuspocus/extension-throttle": "1.1.2",
    "@hocuspocus/provider": "1.1.2",
    "@hocuspocus/server": "1.1.2",
    "@joplin/turndown-plugin-gfm": "^1.0.49",
    "@juggle/resize-observer": "^3.4.0",
    "@linear/sdk": "^58.1.0",
    "@node-oauth/oauth2-server": "^5.2.0",
    "@notionhq/client": "^2.3.0",
    "@octokit/auth-app": "^6.1.4",
    "@octokit/webhooks": "^13.9.1",
    "@outlinewiki/koa-passport": "^4.2.1",
    "@outlinewiki/passport-azure-ad-oauth2": "^0.1.0",
    "@radix-ui/react-collapsible": "^1.1.12",
    "@radix-ui/react-context-menu": "^2.2.16",
    "@radix-ui/react-dialog": "^1.1.15",
    "@radix-ui/react-dropdown-menu": "^2.1.16",
    "@radix-ui/react-one-time-password-field": "^0.1.8",
    "@radix-ui/react-popover": "^1.1.15",
    "@radix-ui/react-select": "^2.2.6",
    "@radix-ui/react-switch": "^1.2.6",
    "@radix-ui/react-tabs": "^1.1.13",
    "@radix-ui/react-toolbar": "^1.1.11",
    "@radix-ui/react-tooltip": "^1.2.8",
    "@radix-ui/react-visually-hidden": "^1.2.4",
    "@sentry/node": "^7.120.4",
    "@sentry/react": "^7.120.4",
    "@simplewebauthn/browser": "^13.2.2",
    "@simplewebauthn/server": "^13.2.2",
    "@tanstack/react-table": "^8.21.3",
    "@tanstack/react-virtual": "^3.13.12",
    "@types/form-data": "^2.5.2",
    "@types/mailparser": "^3.4.6",
    "@types/sanitize-filename": "^1.6.3",
    "@vitejs/plugin-react-oxc": "^0.2.3",
    "addressparser": "^1.0.1",
    "async-sema": "^3.1.1",
    "autotrack": "^2.4.1",
    "babel-plugin-styled-components": "^2.1.4",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "body-scroll-lock": "^4.0.0-beta.0",
    "bull": "^4.16.5",
    "class-validator": "^0.14.3",
    "command-score": "^0.1.2",
    "compressorjs": "^1.2.1",
    "content-disposition": "^0.5.4",
    "cookie": "^0.7.0",
    "copy-to-clipboard": "^3.3.3",
    "core-js": "^3.45.1",
    "crypto-js": "^4.2.0",
    "datadog-metrics": "^0.12.1",
    "date-fns": "^3.6.0",
    "dd-trace": "^5.76.0",
    "diff": "^5.2.0",
    "email-providers": "^1.14.0",
    "emoji-mart": "^5.6.0",
    "emoji-regex": "^10.6.0",
    "es6-error": "^4.1.1",
    "fast-deep-equal": "^3.1.3",
    "fetch-retry": "^5.0.6",
    "form-data": "^4.0.5",
    "fractional-index": "^1.0.0",
    "framer-motion": "^4.1.17",
    "franc": "^6.2.0",
    "fs-extra": "^11.3.2",
    "fuzzy-search": "^3.2.1",
    "glob": "^8.1.0",
    "http-errors": "2.0.1",
    "https-proxy-agent": "^7.0.6",
    "i18next": "^22.5.1",
    "i18next-fs-backend": "^2.6.1",
    "i18next-http-backend": "^2.7.3",
    "invariant": "^2.2.4",
    "ioredis": "^5.8.2",
    "is-printable-key-event": "^1.0.0",
    "iso-639-3": "^3.0.1",
    "jsdom": "^22.1.0",
    "jsonwebtoken": "^9.0.0",
    "jszip": "^3.10.1",
    "katex": "^0.16.25",
    "kbar": "0.1.0-beta.48",
    "koa": "^3.0.3",
    "koa-body": "^6.0.1",
    "koa-compress": "^5.1.1",
    "koa-helmet": "^6.1.0",
    "koa-logger": "^3.2.1",
    "koa-mount": "^4.2.0",
    "koa-router": "7.4.0",
    "koa-send": "5.0.1",
    "koa-sslify": "5.0.1",
    "koa-useragent": "^4.1.0",
    "lodash": "^4.17.21",
    "mailparser": "^3.7.4",
    "mammoth": "^1.11.0",
    "markdown-it": "^14.1.0",
    "markdown-it-container": "^3.0.0",
    "markdown-it-emoji": "^3.0.0",
    "mermaid": "11.12.1",
    "mime-types": "^3.0.1",
    "mobx": "^4.15.4",
    "mobx-react": "^6.3.1",
    "mobx-utils": "^4.0.1",
    "natural-sort": "^1.0.0",
    "node-fetch": "2.7.0",
    "nodemailer": "^7.0.11",
    "octokit": "^3.2.2",
    "outline-icons": "^3.18.0",
    "oy-vey": "^0.12.1",
    "pako": "^2.1.0",
    "passport": "^0.7.0",
    "passport-google-oauth2": "^0.2.0",
    "passport-oauth2": "^1.8.0",
    "passport-slack-oauth2": "^1.2.0",
    "patch-package": "^8.0.1",
    "pg": "^8.16.3",
    "pg-tsquery": "^8.4.2",
    "pluralize": "^8.0.0",
    "png-chunks-extract": "^1.0.0",
    "polished": "^4.3.1",
    "prosemirror-changeset": "2.3.1",
    "prosemirror-codemark": "^0.4.2",
    "prosemirror-commands": "^1.7.1",
    "prosemirror-dropcursor": "^1.8.2",
    "prosemirror-gapcursor": "^1.4.0",
    "prosemirror-history": "^1.5.0",
    "prosemirror-inputrules": "^1.5.1",
    "prosemirror-keymap": "^1.2.3",
    "prosemirror-markdown": "^1.13.2",
    "prosemirror-model": "^1.25.4",
    "prosemirror-schema-list": "^1.5.1",
    "prosemirror-state": "^1.4.4",
    "prosemirror-tables": "^1.8.1",
    "prosemirror-transform": "1.10.0",
    "prosemirror-view": "^1.41.4",
    "proxy-from-env": "^1.1.0",
    "query-string": "^7.1.3",
    "rate-limiter-flexible": "^2.4.2",
    "react": "^17.0.2",
    "react-avatar-editor": "^13.0.2",
    "react-color": "^2.17.3",
    "react-day-picker": "^8.10.1",
    "react-dnd": "^16.0.1",
    "react-dnd-html5-backend": "^16.0.1",
    "react-dom": "^17.0.2",
    "react-dropzone": "^11.7.1",
    "react-helmet-async": "^2.0.5",
    "react-hook-form": "^7.68.0",
    "react-i18next": "^12.3.1",
    "react-merge-refs": "^2.1.1",
    "react-portal": "^4.3.0",
    "react-router-dom": "^5.3.4",
    "react-use-measure": "^2.1.7",
    "react-virtualized-auto-sizer": "^1.0.26",
    "react-waypoint": "^10.3.0",
    "react-window": "^1.8.11",
    "react-zoom-pan-pinch": "^3.7.0",
    "redlock": "^5.0.0-beta.2",
    "reflect-metadata": "^0.2.2",
    "refractor": "^3.6.0",
    "request-filtering-agent": "^3.2.0",
    "resolve-path": "^1.4.0",
    "rfc6902": "^5.1.2",
    "sanitize-filename": "^1.6.3",
    "scroll-into-view-if-needed": "^3.1.0",
    "semver": "^7.7.2",
    "sequelize": "^6.37.7",
    "sequelize-cli": "^6.6.3",
    "sequelize-encrypted": "^1.0.0",
    "sequelize-strict-attributes": "^1.0.2",
    "sequelize-typescript": "^2.1.6",
    "slug": "^5.3.0",
    "slugify": "^1.6.6",
    "socket.io": "^4.8.1",
    "socket.io-client": "^4.8.1",
    "socket.io-redis": "^6.1.1",
    "sonner": "^1.7.4",
    "stoppable": "^1.1.0",
    "string-replace-to-array": "^2.1.1",
    "styled-components": "^5.3.11",
    "styled-components-breakpoint": "^2.1.1",
    "styled-normalize": "^8.1.1",
    "throng": "^5.0.0",
    "tiny-cookie": "^2.5.1",
    "tmp": "^0.2.5",
    "tunnel-agent": "^0.6.0",
    "turndown": "^7.2.2",
    "ukkonen": "^2.2.0",
    "umzug": "^3.8.2",
    "utility-types": "^3.11.0",
    "uuid": "^11.1.0",
    "validator": "13.15.22",
    "vaul": "^1.1.2",
    "vite": "npm:rolldown-vite@7.3.0",
    "vite-plugin-pwa": "1.0.3",
    "winston": "^3.17.0",
    "ws": "^7.5.10",
    "y-indexeddb": "^9.0.11",
    "y-prosemirror": "^1.3.7",
    "y-protocols": "^1.0.6",
    "yauzl": "^3.2.0",
    "yjs": "^13.6.1",
    "zod": "^3.25.76"
  },
  "devDependencies": {
    "@babel/cli": "^7.28.3",
    "@babel/preset-typescript": "^7.28.5",
    "@faker-js/faker": "^8.4.1",
    "@relative-ci/agent": "^4.3.1",
    "@types/addressparser": "^1.0.3",
    "@types/body-scroll-lock": "^3.1.2",
    "@types/cookie": "0.6.0",
    "@types/crypto-js": "^4.2.2",
    "@types/diff": "^5.0.9",
    "@types/dotenv": "^8.2.3",
    "@types/emoji-regex": "^9.2.2",
    "@types/escape-html": "^1.0.4",
    "@types/express-useragent": "^1.0.5",
    "@types/formidable": "^2.0.6",
    "@types/fs-extra": "^11.0.4",
    "@types/fuzzy-search": "^2.1.5",
    "@types/glob": "^8.0.1",
    "@types/google.analytics": "^0.0.46",
    "@types/invariant": "^2.2.37",
    "@types/ioredis-mock": "^8.2.6",
    "@types/jest": "^29.5.14",
    "@types/jsonwebtoken": "^8.5.9",
    "@types/katex": "^0.16.7",
    "@types/koa": "^2.15.0",
    "@types/koa-compress": "^4.0.6",
    "@types/koa-helmet": "^6.0.8",
    "@types/koa-logger": "^3.1.5",
    "@types/koa-mount": "^4.0.5",
    "@types/koa-router": "^7.4.8",
    "@types/koa-send": "^4.1.6",
    "@types/koa-sslify": "^4.0.6",
    "@types/koa-useragent": "^2.1.2",
    "@types/markdown-it": "^14.1.2",
    "@types/markdown-it-container": "^2.0.9",
    "@types/markdown-it-emoji": "^3.0.1",
    "@types/mime-types": "^3.0.1",
    "@types/natural-sort": "^0.0.24",
    "@types/node": "20.19.21",
    "@types/node-fetch": "^2.6.9",
    "@types/nodemailer": "^6.4.17",
    "@types/passport-oauth2": "^1.8.0",
    "@types/pluralize": "^0.0.33",
    "@types/png-chunks-extract": "^1.0.2",
    "@types/proxy-from-env": "^1.0.4",
    "@types/quoted-printable": "^1.0.2",
    "@types/react": "17.0.75",
    "@types/react-avatar-editor": "^13.0.4",
    "@types/react-color": "^3.0.13",
    "@types/react-dom": "^17.0.11",
    "@types/react-helmet": "^6.1.11",
    "@types/react-portal": "^4.0.7",
    "@types/react-router-dom": "^5.3.3",
    "@types/react-virtualized-auto-sizer": "^1.0.8",
    "@types/react-window": "^1.8.8",
    "@types/readable-stream": "^4.0.22",
    "@types/redis-info": "^3.0.3",
    "@types/refractor": "^3.4.1",
    "@types/resolve-path": "^1.4.3",
    "@types/semver": "^7.7.0",
    "@types/sequelize": "^4.28.20",
    "@types/slug": "^5.0.7",
    "@types/stoppable": "^1.1.3",
    "@types/styled-components": "^5.1.32",
    "@types/throng": "^5.0.7",
    "@types/tmp": "^0.2.6",
    "@types/turndown": "^5.0.6",
    "@types/utf8": "^3.0.3",
    "@types/validator": "^13.15.3",
    "@types/yauzl": "^2.10.3",
    "babel-jest": "^29.7.0",
    "babel-plugin-transform-inline-environment-variables": "^0.4.4",
    "babel-plugin-transform-typescript-metadata": "^0.4.0",
    "babel-plugin-tsconfig-paths-module-resolver": "^1.0.4",
    "browserslist-to-esbuild": "^1.2.0",
    "concurrently": "^8.2.2",
    "discord-api-types": "^0.38.36",
    "husky": "^8.0.3",
    "i18next-parser": "^8.13.0",
    "ioredis-mock": "^8.13.1",
    "jest-cli": "^30.2.0",
    "jest-environment-jsdom": "^29.7.0",
    "jest-fetch-mock": "^3.0.3",
    "lint-staged": "^13.3.0",
    "nodemon": "^3.1.11",
    "oxlint": "1.11.2",
    "oxlint-tsgolint": "^0.1.6",
    "postinstall-postinstall": "^2.1.0",
    "prettier": "^3.6.2",
    "react-refresh": "^0.18.0",
    "rimraf": "^2.5.4",
    "rollup-plugin-webpack-stats": "2.1.6",
    "terser": "^5.44.1",
    "typescript": "^5.9.2"
  },
  "resolutions": {
    "@types/react": "17.0.75",
    "@types/koa": "2.15.0",
    "@hocuspocus/server": "1.1.2",
    "fengari": "0.1.5",
    "prosemirror-transform": "1.10.0",
    "body-scroll-lock": "^4.0.0-beta.0",
    "d3": "^7.0.0",
    "debug": "4.3.4",
    "node-fetch": "^2.7.0",
    "js-yaml": "^3.14.1",
    "qs": "6.14.1",
    "prismjs": "1.30.0",
    "cheerio": "1.0.0-rc.12"
  },
  "version": "1.2.0-3",
  "packageManager": "yarn@4.11.0"
}
