diff --git a/apps/minio_Potentially Edit/config.json b/apps/minio_Potentially Edit/config.json new file mode 100644 index 0000000..a23f21a --- /dev/null +++ b/apps/minio_Potentially Edit/config.json @@ -0,0 +1,43 @@ +{ + "name": "Minio", + "available": true, + "exposable": true, + "dynamic_config": true, + "port": 8001, + "id": "minio", + "description": "MinIO is a high-performance, S3 compatible object store. It is built for large scale AI/ML, data lake and database workloads.", + "tipi_version": 5, + "version": "RELEASE.2025-02-07T23-21-09Z", + "categories": ["development"], + "short_desc": "High Performance Object Storage.", + "author": "MinIO, Inc", + "source": "https://github.com/minio/minio", + "website": "https://min.io", + "form_fields": [ + { + "type": "text", + "label": "Minio root username", + "required": true, + "env_variable": "MINIO_ROOT_USER" + }, + { + "type": "password", + "label": "Minio root password", + "required": true, + "min": 8, + "env_variable": "MINIO_ROOT_PASSWORD" + }, + { + "type": "text", + "label": "Minio S3 API URL (when exposed)", + "placeholder": "s3.example.com", + "required": false, + "env_variable": "MINIO_API_URL" + } + ], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1742038537982, + "$schema": "../app-info-schema.json", + "force_pull": false +} diff --git a/apps/minio_Potentially Edit/docker-compose.json b/apps/minio_Potentially Edit/docker-compose.json new file mode 100644 index 0000000..486bf7c --- /dev/null +++ b/apps/minio_Potentially Edit/docker-compose.json @@ -0,0 +1,50 @@ +{ + "$schema": "https://schemas.runtipi.io/dynamic-compose.json", + "services": [ + { + "name": "minio", + "image": "minio/minio:RELEASE.2025-02-07T23-21-09Z", + "isMain": true, + "internalPort": 9001, + "addPorts": [ + { + "hostPort": 8000, + "containerPort": 9000 + } + ], + "environment": { + "MINIO_ROOT_USER": "${MINIO_ROOT_USER}", + "MINIO_ROOT_PASSWORD": "${MINIO_ROOT_PASSWORD}", + "MINIO_BROWSER_REDIRECT_URL": "${APP_PROTOCOL:-http}://${APP_DOMAIN}", + "MINIO_DOMAIN": "${APP_DOMAIN}" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/minio/data", + "containerPath": "/data" + } + ], + "command": "server --console-address :9001 /data", + "extraLabels": { + "traefik.http.middlewares.{{RUNTIPI_APP_ID}}-api-web-redirect.redirectscheme.scheme": "https", + "traefik.http.services.{{RUNTIPI_APP_ID}}-api.loadbalancer.server.port": "9000", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-insecure.rule": "Host(`${MINIO_API_URL}`)", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-insecure.entrypoints": "web", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-insecure.service": "{{RUNTIPI_APP_ID}}-api", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-insecure.middlewares": "{{RUNTIPI_APP_ID}}-api-web-redirect", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api.rule": "Host(`${MINIO_API_URL}`)", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api.entrypoints": "websecure", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api.service": "{{RUNTIPI_APP_ID}}-api", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api.tls.certresolver": "myresolver", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-local-insecure.rule": "Host(`{{RUNTIPI_APP_ID}}-api.${LOCAL_DOMAIN}`)", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-local-insecure.entrypoints": "web", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-local-insecure.service": "{{RUNTIPI_APP_ID}}-api", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-local-insecure.middlewares": "{{RUNTIPI_APP_ID}}-api-web-redirect", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-local.rule": "Host(`{{RUNTIPI_APP_ID}}-api.${LOCAL_DOMAIN}`)", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-local.entrypoints": "websecure", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-local.service": "{{RUNTIPI_APP_ID}}-api", + "traefik.http.routers.{{RUNTIPI_APP_ID}}-api-local.tls": "true" + } + } + ] +} diff --git a/apps/minio_Potentially Edit/docker-compose.yml b/apps/minio_Potentially Edit/docker-compose.yml new file mode 100644 index 0000000..0bb41f8 --- /dev/null +++ b/apps/minio_Potentially Edit/docker-compose.yml @@ -0,0 +1,69 @@ +services: + minio: + container_name: minio + image: minio/minio:RELEASE.2025-02-07T23-21-09Z + restart: unless-stopped + environment: + - MINIO_ROOT_USER=${MINIO_ROOT_USER} + - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} + - MINIO_BROWSER_REDIRECT_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN} + - MINIO_DOMAIN=${APP_DOMAIN} + ports: + - 8000:9000 + - ${APP_PORT}:9001 + volumes: + - ${APP_DATA_DIR}/data/minio/data:/data + networks: + - tipi_main_network + command: "server --console-address :9001 /data" + labels: + # Main + traefik.enable: true + # Console + traefik.http.middlewares.minio-console-web-redirect.redirectscheme.scheme: https + traefik.http.services.minio-console.loadbalancer.server.port: 9001 + # API + traefik.http.middlewares.minio-api-web-redirect.redirectscheme.scheme: https + traefik.http.services.minio-api.loadbalancer.server.port: 9000 + # Web - Console + traefik.http.routers.minio-console-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.minio-console-insecure.entrypoints: web + traefik.http.routers.minio-console-insecure.service: minio-console + traefik.http.routers.minio-console-insecure.middlewares: minio-console-web-redirect + # Web - API + traefik.http.routers.minio-api-insecure.rule: Host(`${MINIO_API_URL}`) + traefik.http.routers.minio-api-insecure.entrypoints: web + traefik.http.routers.minio-api-insecure.service: minio-api + traefik.http.routers.minio-api-insecure.middlewares: minio-api-web-redirect + # Websecure - Console + traefik.http.routers.minio-console.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.minio-console.entrypoints: websecure + traefik.http.routers.minio-console.service: minio-console + traefik.http.routers.minio-console.tls.certresolver: myresolver + # Websecure - API + traefik.http.routers.minio-api.rule: Host(`${MINIO_API_URL}`) + traefik.http.routers.minio-api.entrypoints: websecure + traefik.http.routers.minio-api.service: minio-api + traefik.http.routers.minio-api.tls.certresolver: myresolver + # Local domain - Console + traefik.http.routers.minio-console-local-insecure.rule: Host(`minio.${LOCAL_DOMAIN}`) + traefik.http.routers.minio-console-local-insecure.entrypoints: web + traefik.http.routers.minio-console-local-insecure.service: minio-console + traefik.http.routers.minio-console-local-insecure.middlewares: minio-console-web-redirect + # Local domain - API + traefik.http.routers.minio-api-local-insecure.rule: Host(`minio-api.${LOCAL_DOMAIN}`) + traefik.http.routers.minio-api-local-insecure.entrypoints: web + traefik.http.routers.minio-api-local-insecure.service: minio-api + traefik.http.routers.minio-api-local-insecure.middlewares: minio-api-web-redirect + # Local domain secure - Console + traefik.http.routers.minio-console-local.rule: Host(`minio.${LOCAL_DOMAIN}`) + traefik.http.routers.minio-console-local.entrypoints: websecure + traefik.http.routers.minio-console-local.service: minio-console + traefik.http.routers.minio-console-local.tls: true + # Local domain secure - API + traefik.http.routers.minio-api-local.rule: Host(`minio-api.${LOCAL_DOMAIN}`) + traefik.http.routers.minio-api-local.entrypoints: websecure + traefik.http.routers.minio-api-local.service: minio-api + traefik.http.routers.minio-api-local.tls: true + # Runtipi managed + runtipi.managed: true diff --git a/apps/minio_Potentially Edit/metadata/description.md b/apps/minio_Potentially Edit/metadata/description.md new file mode 100644 index 0000000..65d45f7 --- /dev/null +++ b/apps/minio_Potentially Edit/metadata/description.md @@ -0,0 +1,28 @@ +# Minio - Open Source Object Storage + +Host your own Amazon S3 compatible Object Storage! + +## Installation Info + +This MinIO setup requires two exposed URLS + +- The console URL +- The S3 API URL + +While the console URL is defined by the runtipi's default expose URL you need to define the S3 API URL in the settings when installing. + +**Example:** + +- API: Minio S3 API URL: s3.mydomain.com +- Console: Exposed URL: minio.mydomain.com + +| Exposed Service | Local Port | Exposed Domain | +| ------------------- | ---------- | ------------------ | +| Minio API | IP:8000 | s3.mydomain.com | +| Minio Admin Console | IP:8001 | minio.mydomain.com | + +## About + +MinIO is a High Performance Object Storage released under GNU Affero General Public License v3.0. It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure for machine learning, analytics and application data workloads. + +See https://github.com/minio/minio for more details diff --git a/apps/minio_Potentially Edit/metadata/logo.jpg b/apps/minio_Potentially Edit/metadata/logo.jpg new file mode 100644 index 0000000..93303cb Binary files /dev/null and b/apps/minio_Potentially Edit/metadata/logo.jpg differ diff --git a/apps/silverbullet_Reference/config.json b/apps/silverbullet_Reference/config.json new file mode 100644 index 0000000..366f074 --- /dev/null +++ b/apps/silverbullet_Reference/config.json @@ -0,0 +1,38 @@ +{ + "$schema": "../app-info-schema.json", + "name": "Silverbullet", + "port": 8214, + "available": true, + "exposable": true, + "dynamic_config": true, + "id": "silverbullet", + "tipi_version": 24, + "version": "2.1.9", + "categories": ["utilities"], + "description": "SilverBullet aims to be your workshop for the mind", + "short_desc": "SilverBullet is a creative space where you collect, create and expand your personal knowledge, while also letting you constantly evolve the tools you use to do so.", + "author": "zefhemel", + "source": "https://github.com/silverbulletmd/silverbullet", + "website": "https://silverbullet.md", + "form_fields": [ + { + "type": "text", + "label": "Username", + "max": 50, + "min": 3, + "required": true, + "env_variable": "SB_USER" + }, + { + "type": "password", + "label": "Password", + "max": 50, + "min": 8, + "required": true, + "env_variable": "SB_PASSWORD" + } + ], + "supported_architectures": ["arm64", "amd64"], + "created_at": 1691943801422, + "updated_at": 1760070985003 +} diff --git a/apps/silverbullet_Reference/docker-compose.json b/apps/silverbullet_Reference/docker-compose.json new file mode 100644 index 0000000..4a8e13c --- /dev/null +++ b/apps/silverbullet_Reference/docker-compose.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "name": "silverbullet", + "image": "zefhemel/silverbullet:2.1.9", + "isMain": true, + "internalPort": 3000, + "environment": { + "SB_USER": "${SB_USER}:${SB_PASSWORD}" + }, + "volumes": [ + { + "hostPath": "/etc/localtime", + "containerPath": "/etc/localtime", + "readOnly": true + }, + { + "hostPath": "${APP_DATA_DIR}/space", + "containerPath": "/space" + } + ] + } + ], + "$schema": "https://schemas.runtipi.io/dynamic-compose.json" +} diff --git a/apps/silverbullet_Reference/docker-compose.yml b/apps/silverbullet_Reference/docker-compose.yml new file mode 100644 index 0000000..57a4629 --- /dev/null +++ b/apps/silverbullet_Reference/docker-compose.yml @@ -0,0 +1,36 @@ +version: '3.9' +services: + silverbullet: + image: zefhemel/silverbullet:2.1.9 + container_name: silverbullet + restart: unless-stopped + volumes: + - /etc/localtime:/etc/localtime:ro + - ${APP_DATA_DIR}/space:/space + environment: + - SB_USER=${SB_USER}:${SB_PASSWORD} + ports: + - ${APP_PORT}:3000 + networks: + - tipi_main_network + labels: + traefik.enable: true + traefik.http.middlewares.silverbullet-web-redirect.redirectscheme.scheme: https + traefik.http.services.silverbullet.loadbalancer.server.port: 3000 + traefik.http.routers.silverbullet-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.silverbullet-insecure.entrypoints: web + traefik.http.routers.silverbullet-insecure.service: silverbullet + traefik.http.routers.silverbullet-insecure.middlewares: silverbullet-web-redirect + traefik.http.routers.silverbullet.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.silverbullet.entrypoints: websecure + traefik.http.routers.silverbullet.service: silverbullet + traefik.http.routers.silverbullet.tls.certresolver: myresolver + traefik.http.routers.silverbullet-local-insecure.rule: Host(`silverbullet.${LOCAL_DOMAIN}`) + traefik.http.routers.silverbullet-local-insecure.entrypoints: web + traefik.http.routers.silverbullet-local-insecure.service: silverbullet + traefik.http.routers.silverbullet-local-insecure.middlewares: silverbullet-web-redirect + traefik.http.routers.silverbullet-local.rule: Host(`silverbullet.${LOCAL_DOMAIN}`) + traefik.http.routers.silverbullet-local.entrypoints: websecure + traefik.http.routers.silverbullet-local.service: silverbullet + traefik.http.routers.silverbullet-local.tls: true + runtipi.managed: true diff --git a/apps/silverbullet_Reference/metadata/description.md b/apps/silverbullet_Reference/metadata/description.md new file mode 100644 index 0000000..5318832 --- /dev/null +++ b/apps/silverbullet_Reference/metadata/description.md @@ -0,0 +1,22 @@ +# SilverBullet +SilverBullet aims to be your **workshop for the mind**: a creative space where you collect, create and expand your personal knowledge, while also letting you constantly evolve the tools you use to do so. + +While you _can_ use SilverBullet as a simple note taking application that stores notes in plain markdown files on disk, it becomes truly powerful in the hands of more technical power users. By leveraging metadata annotations, its Objects infrastructure, Live Queries and Live Templates, SilverBullet becomes a powerful _end-user programming tool_, enabling you to quickly develop various types of ad-hoc knowledge applications. SilverBullet is implemented as an open-source, self-hosted, offline-capable web application. + +You’ve been told there is _no such thing_ as a [silver bullet](https://en.wikipedia.org/wiki/Silver_bullet). You were told wrong. + +[](https://www.youtube.com/watch?v=BbNbZgOwB-Y) + +## Features +SilverBullet... +* Runs in any modern browser (including on mobile) as a PWA in two Client Modes (_online_ and _synced_ mode), where the _synced mode_ enables **100% offline operation**, keeping a copy of content in the browser, syncing back to the server when a network connection is available. +* Provides an enjoyable markdown writing experience with a clean UI, rendering text using Live Preview, further **reducing visual noise** while still providing direct access to the underlying markdown syntax. +* Supports wiki-style **page linking** using the `[[page link]]` syntax. Incoming links are indexed and appear as “Linked Mentions” at the bottom of the pages linked to thereby providing _bi-directional linking_. +* Optimized for **keyboard-based operation**: + * Quickly navigate between pages using the **page switcher** (triggered with `Cmd-k` on Mac or `Ctrl-k` on Linux and Windows). + * Run commands via their keyboard shortcuts or the **command palette** (triggered with `Cmd-/` or `Ctrl-/` on Linux and Windows). + * Use Slash Commands to perform common text editing operations. +* Provides a platform for [end-user programming](https://www.inkandswitch.com/end-user-programming/) through its support for Objects, Live Queries and Live Templates. +* Robust extension mechanism using plugs. +* **Self-hosted**: you own your data. All content is stored as plain files in a folder on disk. Back up, sync, edit, publish, script with any additional tools you like. +* SilverBullet is [open source, MIT licensed](https://github.com/silverbulletmd/silverbullet) software. diff --git a/apps/silverbullet_Reference/metadata/logo.jpg b/apps/silverbullet_Reference/metadata/logo.jpg new file mode 100644 index 0000000..cef4f57 Binary files /dev/null and b/apps/silverbullet_Reference/metadata/logo.jpg differ diff --git a/apps/siyuan_Need to edit/config.json b/apps/siyuan_Need to edit/config.json new file mode 100644 index 0000000..36d3175 --- /dev/null +++ b/apps/siyuan_Need to edit/config.json @@ -0,0 +1,33 @@ +{ + "$schema": "../app-info-schema.json", + "name": "SiYuan", + "id": "siyuan", + "available": true, + "short_desc": "SiYuan is a privacy-first personal knowledge management system.", + "author": "siyuan-note", + "port": 6806, + "categories": ["utilities"], + "description": "SiYuan is a privacy-first personal knowledge management system, support fine-grained block-level reference and Markdown WYSIWYG.", + "tipi_version": 37, + "version": "v3.3.5", + "website": "https://b3log.org/siyuan/en/", + "source": "https://github.com/siyuan-note/siyuan", + "exposable": true, + "dynamic_config": true, + "supported_architectures": ["arm64", "amd64"], + "form_fields": [ + { + "type": "password", + "label": "Access Auth Code", + "required": true, + "min": 8, + "max": 50, + "hint": "Please be sure to modify, otherwise anyone can read and write your data.", + "env_variable": "SIYUAN_ACCESS_AUTH_CODE" + } + ], + "uid": 1000, + "gid": 1000, + "created_at": 1691943801422, + "updated_at": 1760565921555 +} diff --git a/apps/siyuan_Need to edit/docker-compose.json b/apps/siyuan_Need to edit/docker-compose.json new file mode 100644 index 0000000..eef4c4a --- /dev/null +++ b/apps/siyuan_Need to edit/docker-compose.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schemas.runtipi.io/dynamic-compose.json", + "services": [ + { + "name": "siyuan", + "image": "b3log/siyuan:v3.3.5", + "isMain": true, + "internalPort": 6806, + "environment": { + "TZ": "${TZ}", + "PUID": "1000", + "PGID": "1000" + }, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/workspace", + "containerPath": "/siyuan/workspace/" + } + ], + "command": ["--workspace=/siyuan/workspace/", "--accessAuthCode=${SIYUAN_ACCESS_AUTH_CODE}"] + } + ] +} diff --git a/apps/siyuan_Need to edit/docker-compose.yml b/apps/siyuan_Need to edit/docker-compose.yml new file mode 100644 index 0000000..cf1c037 --- /dev/null +++ b/apps/siyuan_Need to edit/docker-compose.yml @@ -0,0 +1,40 @@ +services: + siyuan: + image: b3log/siyuan:v3.3.5 + container_name: siyuan + command: + - '--workspace=/siyuan/workspace/' + - '--accessAuthCode=${SIYUAN_ACCESS_AUTH_CODE}' + user: '1000:1000' + restart: unless-stopped + environment: + - TZ=${TZ} + - PUID=1000 + - PGID=1000 + volumes: + - ${APP_DATA_DIR}/data/workspace:/siyuan/workspace/ + ports: + - ${APP_PORT}:6806 + networks: + - tipi_main_network + labels: + traefik.enable: true + traefik.http.middlewares.siyuan-web-redirect.redirectscheme.scheme: https + traefik.http.services.siyuan.loadbalancer.server.port: 6806 + traefik.http.routers.siyuan-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.siyuan-insecure.entrypoints: web + traefik.http.routers.siyuan-insecure.service: siyuan + traefik.http.routers.siyuan-insecure.middlewares: siyuan-web-redirect + traefik.http.routers.siyuan.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.siyuan.entrypoints: websecure + traefik.http.routers.siyuan.service: siyuan + traefik.http.routers.siyuan.tls.certresolver: myresolver + traefik.http.routers.siyuan-local-insecure.rule: Host(`siyuan.${LOCAL_DOMAIN}`) + traefik.http.routers.siyuan-local-insecure.entrypoints: web + traefik.http.routers.siyuan-local-insecure.service: siyuan + traefik.http.routers.siyuan-local-insecure.middlewares: siyuan-web-redirect + traefik.http.routers.siyuan-local.rule: Host(`siyuan.${LOCAL_DOMAIN}`) + traefik.http.routers.siyuan-local.entrypoints: websecure + traefik.http.routers.siyuan-local.service: siyuan + traefik.http.routers.siyuan-local.tls: true + runtipi.managed: true diff --git a/apps/siyuan_Need to edit/metadata/description.md b/apps/siyuan_Need to edit/metadata/description.md new file mode 100644 index 0000000..462c72d --- /dev/null +++ b/apps/siyuan_Need to edit/metadata/description.md @@ -0,0 +1,374 @@ +> [!IMPORTANT] +> If you got `permission denied` error in `Logs` after installation +> +> You need to +> 1. Execute the following command on your server: +> `sudo chown -R 1000:1000 ~/runtipi/app-data/siyuan/data/workspace` +> +> 2. Restart SiYuan +> +> For the reason, please refer to [User Permissions](#user-permissions) section + +
+
+
+Refactor your thinking
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+中文 +
+ +--- + +## Table of Contents + +- [Table of Contents](#table-of-contents) +- [💡 Introduction](#-introduction) +- [🔮 Features](#-features) +- [🏗️ Architecture and Ecosystem](#️-architecture-and-ecosystem) +- [🌟 Star History](#-star-history) +- [🗺️ Roadmap](#️-roadmap) +- [🚀 Download Setup](#-download-setup) + - [App Market](#app-market) + - [Installation Package](#installation-package) + - [Docker Hosting](#docker-hosting) + - [Overview](#overview) + - [File structure](#file-structure) + - [Entrypoint](#entrypoint) + - [User permissions](#user-permissions) + - [Hidden port](#hidden-port) + - [Note](#note) + - [Limitations](#limitations) + - [Unraid Hosting](#unraid-hosting) + - [Insider Preview](#insider-preview) +- [🏘️ Community](#️-community) +- [🛠️ Development Guide](#️-development-guide) +- [❓ FAQ](#-faq) + - [How does SiYuan store data?](#how-does-siyuan-store-data) + - [Does it support data synchronization through a third-party sync disk?](#does-it-support-data-synchronization-through-a-third-party-sync-disk) + - [Is SiYuan open source?](#is-siyuan-open-source) + - [How to upgrade to a new version?](#how-to-upgrade-to-a-new-version) + - [What if some blocks (such as paragraph blocks in list items) cannot find the block icon?](#what-if-some-blocks-such-as-paragraph-blocks-in-list-items-cannot-find-the-block-icon) + - [What should I do if the data repo key is lost?](#what-should-i-do-if-the-data-repo-key-is-lost) + - [Do I need to pay for it?](#do-i-need-to-pay-for-it) +- [🙏 Acknowledgement](#-acknowledgement) + - [Contributors](#contributors) + +--- + +## 💡 Introduction + +SiYuan is a privacy-first personal knowledge management system, support fine-grained block-level reference and Markdown +WYSIWYG. + +Welcome to [SiYuan English Discussion Forum](https://liuyun.io) to learn more. + + + + + +## 🔮 Features + +Most features are free, even for commercial use. + +* Content block + * Block-level reference and two-way links + * Custom attributes + * SQL query embed + * Protocol `siyuan://` +* Editor + * Block-style + * Markdown WYSIWYG + * List outline + * Block zoom-in + * Million-word large document editing + * Mathematical formulas, charts, flowcharts, Gantt charts, timing charts, staffs, etc. + * Web clipping + * PDF Annotation link +* Export + * Block ref and embed + * Standard Markdown with assets + * PDF, Word and HTML + * Copy to WeChat MP, Zhihu and Yuque +* Database + * Table view +* Flashcard spaced repetition +* AI writing and Q/A chat via OpenAI API +* Tesseract OCR +* Multi-tab, drag and drop to split screen +* Template snippet +* JavaScript/CSS snippet +* Android/iOS App +* Docker deployment +* [API](https://github.com/siyuan-note/siyuan/blob/master/API.md) +* Community marketplace + +Some features are only available to paid members, for more details please refer to [Pricing](https://b3log.org/siyuan/en/pricing.html). + +## 🏗️ Architecture and Ecosystem + + + +| Project | Description | Forks | Stars | +|----------------------------------------------------------|-----------------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| [lute](https://github.com/88250/lute) | Editor engine |  |  | +| [chrome](https://github.com/siyuan-note/siyuan-chrome) | Chrome/Edge extension |  |  | +| [bazaar](https://github.com/siyuan-note/bazaar) | Community marketplace |  |  | +| [dejavu](https://github.com/siyuan-note/dejavu) | Data repo |  |  | +| [petal](https://github.com/siyuan-note/petal) | Plugin API |  |  | +| [android](https://github.com/siyuan-note/siyuan-android) | Android App |  |  | +| [ios](https://github.com/siyuan-note/siyuan-ios) | iOS App |  |  | +| [riff](https://github.com/siyuan-note/riff) | Spaced repetition |  |  | + +## 🌟 Star History + +[](https://star-history.com/#siyuan-note/siyuan&Date) + +## 🗺️ Roadmap + +* [SiYuan development plan and progress](https://github.com/orgs/siyuan-note/projects/1) +* [SiYuan changelog](CHANGELOG.md) + +## 🚀 Download Setup + +It is recommended to give priority to installing through the application market on the desktop and mobile, so that you can upgrade the version with one click in the future. + +### App Market + +Mobile: + +* [App Store](https://apps.apple.com/us/app/siyuan/id1583226508) +* [Google Play](https://play.google.com/store/apps/details?id=org.b3log.siyuan) +* [F-Droid](https://f-droid.org/packages/org.b3log.siyuan) + +Desktop: + +* [Microsoft Store](https://apps.microsoft.com/detail/9p7hpmxp73k4) + +### Installation Package + +* [B3log](https://b3log.org/siyuan/en/download.html) +* [GitHub](https://github.com/siyuan-note/siyuan/releases) + +### Docker Hosting + +