{"id":45396093,"url":"https://github.com/tropical-algae/markoun","last_synced_at":"2026-05-06T09:05:11.560Z","repository":{"id":333963584,"uuid":"1138185562","full_name":"tropical-algae/markoun","owner":"tropical-algae","description":"A lightweight, self-hosted, and entirely file-based Markdown editor designed for users who prioritize privacy and simplicity.","archived":false,"fork":false,"pushed_at":"2026-05-03T14:50:28.000Z","size":8811,"stargazers_count":52,"open_issues_count":0,"forks_count":6,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-03T16:30:25.855Z","etag":null,"topics":["editor","markdown","markdown-editor","markdown-language","website"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tropical-algae.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-20T10:53:06.000Z","updated_at":"2026-05-03T14:50:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tropical-algae/markoun","commit_stats":null,"previous_names":["tropical-algae/markoun"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/tropical-algae/markoun","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tropical-algae%2Fmarkoun","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tropical-algae%2Fmarkoun/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tropical-algae%2Fmarkoun/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tropical-algae%2Fmarkoun/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tropical-algae","download_url":"https://codeload.github.com/tropical-algae/markoun/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tropical-algae%2Fmarkoun/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32686265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["editor","markdown","markdown-editor","markdown-language","website"],"created_at":"2026-02-21T19:22:00.939Z","updated_at":"2026-05-06T09:05:11.553Z","avatar_url":"https://github.com/tropical-algae.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\u003cimg style=\"width: 180px\" src=\".github/assets/logo.png\"/\u003e\u003c/div\u003e\n\u003cp align=\"center\"\u003e\u003cstrong\u003e\u003cspan style=\"font-size: 1.25em;\"\u003eA self-hosted, file-based Markdown editor\u003c/span\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/Language-English-blue.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cdiv align=\"center\"\u003e\u003cimg src=\".github/assets/preview.png\"/\u003e\u003c/div\u003e\n\nMarkoun is a lightweight, self-hosted, and entirely file-based Markdown editor designed for users who prioritize privacy and simplicity.\n\n\u003e The UI layout of Markoun is inspired by [Haptic](https://github.com/chroxify/haptic) and [Obsidian](https://github.com/obsidianmd) — both excellent Markdown editing tools.\n\n## Features\n\n- **Clean UI**: Minimal interface with smooth animations and complete core editing features\n\n- **File-Based Architecture**: Works directly on local files — no database, no indexing, fully portable\n\n- **LaTeX support**: Live Markdown preview with built-in LaTeX support\n\n- **Image Upload**: Supports file upload and `Ctrl + V ` clipboard image paste\n\n- **Rich Configuration**: Flexible config.yaml options for logging, authentication, and file control\n\n## Deployment\n\nYou can deploy Markoun using Docker:\n\n```\nexport MARKOUN_PORT=10000\nexport MARKOUN_ROOT=./\n\ntouch ${MARKOUN_ROOT:-./}/config.yaml\n\ndocker run -itd --name markoun \\\n  --restart unless-stopped \\\n  -p ${MARKOUN_PORT:-10000}:80 \\\n  -v ${MARKOUN_ROOT:-$(pwd)}/data:/app/data \\\n  -v ${MARKOUN_ROOT:-$(pwd)}/config.yaml:/app/config.yaml \\\n  tropicalalgae/markoun:latest\n\n```\n\nThen run `docker logs -f markoun` to check the logs for the default administrator password.\n\nYou can also create a new regular user from the homepage.\n\n### Volume Explanation\n\n| **Path**           | **Description**                                   |\n| ------------------ | ------------------------------------------------- |\n| `/app/data `       | Directory where Markdown files are stored.        |\n| `/app/config.yaml` | Main configuration file.                          |\n| `/app/welcome.md`  | Optional welcome note shown when no file is open. |\n\nIf you want to customize the default welcome page in Docker, mount your own Markdown file to `/app/welcome.md`, or point `WELCOME_NOTE_PATH` at a different mounted location.\n\n## Configuration\n\nMarkoun is configured via a `config.yaml` file. Below are some important options:\n\n| **Key**                                | **Description**                                                                                           | **Default**                                |\n| -------------------------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------ |\n| `DEBUG`                                | Enables/disable debug-level logging for the backend service.                                              | false                                      |\n| `ACCESS_TOKEN_DEFAULT_EXPIRE_MINUTES`  | **Standard Session Lifetime**: Duration (in minutes) a user remains logged in before the session expires. | 1440                                       |\n| `ACCESS_TOKEN_EXTENDED_EXPIRE_MINUTES` | **Persistent Session Lifetime**: Duration (in minutes) for users who select \"Remember Me\" during login.   | 43200                                      |\n| `DISPLAYED_FILE_TYPES`                 | **File Filter**: A list of file extensions that the editor is permitted to display.                       | [\"md\", \"png\", \"jpg\", \"jpeg\", \"bmp\", \"svg\"] |\n| `WELCOME_NOTE_PATH`                    | Path to the Markdown file used as the default welcome page when no document is open.                      | `./welcome.md`                             |\n\nFor more configurable options, see [config.py](src/markoun/common/config.py)\n\n## Editor Details\n\n**Relative Image Paths**:\nWhen inserting images into a Markdown file, image paths are generated relative to the Markdown file’s location — not the project root. This ensures portability and correct rendering even if folders are moved.\n\n**Rename by Long Press**:\nLong-press on a file or folder name in the sidebar to rename it.\n\n**Drag-and-Drop Upload**:\nDrag a local file onto a folder in the sidebar to upload it directly into that folder.\n\n**File Visibility Rules**:\nBy default, the sidebar displays only Markdown files and common image formats. To show additional file types, modify DISPLAYED_FILE_TYPES in config.yaml.\n\n**System configuration**:\nThe administrator can enable or disable user registration in the settings section of the sidebar.\n\n## Limitations \u0026 Roadmap\n\n- [x] **Image security**: static image routes currently lack authentication checks\n- [x] **File system architecture**: design can be further optimized\n- [x] **UI polish**: incomplete animation feedback and styling inconsistencies\n- [ ] **Settings expansion**: add more configurable options for personalization and workflow control\n- [ ] **Quick actions \u0026 interaction enhancements**: support more intuitive and efficient operations\n- [x] **Improved usability**: provide a smoother and more comfortable operation experience\n- [x] **Enhanced previews**: support richer previews, including image preview and ~~Gantt chart rendering~~ in Markdown files\n- [ ] **Frontend refactoring**: codebase requires further optimization\n- [ ] **File synchronization**: support syncing files with a remote source\n- [ ] **Version management**: introduce file versioning with history tracking and restore capability\n\n## License\n\nThis project is licensed under the [MIT License](https://github.com/tropical-algae/markoun/blob/main/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftropical-algae%2Fmarkoun","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftropical-algae%2Fmarkoun","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftropical-algae%2Fmarkoun/lists"}