{"id":13553609,"url":"https://github.com/arcatdmz/danoweb","last_synced_at":"2025-10-05T15:10:51.461Z","repository":{"id":48017691,"uuid":"184557513","full_name":"arcatdmz/danoweb","owner":"arcatdmz","description":"Yet another distributed authoring environment built with deno","archived":false,"fork":false,"pushed_at":"2021-08-10T23:58:04.000Z","size":30897,"stargazers_count":14,"open_issues_count":7,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-01T09:38:27.843Z","etag":null,"topics":["deno","typescript","web","webdav","wiki"],"latest_commit_sha":null,"homepage":"https://danoweb.digitalmuseum.jp","language":"JavaScript","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/arcatdmz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-05-02T09:54:29.000Z","updated_at":"2023-11-11T12:16:06.000Z","dependencies_parsed_at":"2022-08-12T16:50:13.216Z","dependency_job_id":null,"html_url":"https://github.com/arcatdmz/danoweb","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arcatdmz/danoweb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcatdmz%2Fdanoweb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcatdmz%2Fdanoweb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcatdmz%2Fdanoweb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcatdmz%2Fdanoweb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arcatdmz","download_url":"https://codeload.github.com/arcatdmz/danoweb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcatdmz%2Fdanoweb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278471478,"owners_count":25992477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["deno","typescript","web","webdav","wiki"],"created_at":"2024-08-01T12:02:29.402Z","updated_at":"2025-10-05T15:10:51.431Z","avatar_url":"https://github.com/arcatdmz.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","deno"],"sub_categories":[],"readme":"# danoweb\n\n**d**istributed **a**uthoring environment built with de**no** for the **web**\n\n## how to use\n\n- demo site: https://danoweb.digitalmuseum.jp\n- docker image: [arcatdmz/danoweb](https://hub.docker.com/r/arcatdmz/danoweb)\n\n1. anyone can (collaboratively) edit any served text files by appending `?mode=edit` query parameter -- どのページも URL 末尾に `?mode=edit` をつけると編集できます\n2. those who know the authentication token (`USER_PASSWORD`) can save the edits to update the served files (ask [me](https://twitter.com/arcatdmz) if interested) -- 編集結果をファイルに書き戻すには `USER_PASSWORD` が必要です\n\n### concept\n\n- what you see is what you can (collaboratively) edit\n  - like a [WebDAV](https://wikipedia.org/wiki/WebDAV) server but with a code editor that appears with `?mode=edit` query parameter\n  - like a [Wiki](http://wiki.c2.com/?WikiWikiWeb) site but with focus on serving raw files\n- built with Deno for Deno\n  - [Deno](https://deno.land/) allows to load TypeScript files on the web\n  - many put files on GitHub and load them through [denopkg.com](https://github.com/denopkg/denopkg.com)\n  - dano focuses on a more direct and casual way of sharing/editing code\n  - e.g., `deno https://danoweb.digitalmuseum.jp/index.ts` -- the code can be edited at https://danoweb.digitalmuseum.jp/index.ts?mode=edit\n\n### backend\n\n1. for collaborative editing, [Firebase Realtime Database](https://firebase.google.com/docs/database/) is used\n2. for serving files and saving the edits, native file system is used\n\n### plans\n\n- see [GitHub issues](https://github.com/arcatdmz/danoweb/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) for short-term goals\n- Wiki-like links in the editor (currently, the code editor renders the code as-is, but there is much space for [PX](http://sigpx.org) improvements)\n- better collaborative editing experience (e.g., asking the user to login using GitHub etc. to show collaborators)\n- TypeScript auto completion for all the Deno code on the web!\n\n## deploy\n\n### a) use pre-built Docker image\n\n- docker hub: [arcatdmz/danoweb](https://hub.docker.com/r/arcatdmz/danoweb)\n- regarding environment variables, see below.\n\n```sh\ndocker run --name danoweb -p 8000:8000 \\\n  -e API_KEY=... \\\n  -e AUTH_DOMAIN=... \\\n  -e DATABASE_URL=... \\\n  -e PROJECT_ID=... \\\n  -e STORAGE_BUCKET=bucket_id.appspot.com \\\n  -e MESSAGING_SENDER_ID=... \\\n  -e APP_ID=... \\\n  -e DATABASE_PREFIX=prefix_ \\\n  -e USER_PASSWORD=password \\\n  arcatdmz/danoweb\n```\n\n### b) build docker image and run\n\n1. git clone\n2. see \"environment variables\" section and put the `.env` file accordingly\n3. docker build and run\n\n```sh\ngit clone https://github.com/arcatdmz/danoweb.git\ncd danoweb\nvi ./server/.env\ndocker build . -t danoweb\ndocker build . --file Dockerfile.local -t danoweb:local\ndocker run --name danoweb -v ./public:/work/server/public -p 8000:8000 danoweb:local\n```\n\n### c) deploy to Heroku\n\n1. git clone\n2. see \"environment variables\" section and put the `.env` file accordingly\n3. create a Heroku project\n4. run [`heroku config:push`](https://github.com/xavdid/heroku-config) to save `.env` content as config vars\n5. `git push` to make the project public\n\n```sh\ngit clone https://github.com/arcatdmz/danoweb.git\ncd danoweb\nvi ./server/.env\nheroku create \u003cyour app name\u003e\nheroku stack:set container\nheroku config:push -f ./server/.env\ngit push heroku master\n```\n\n## environment variables\n\n- before starting the server, put `.env` file in `./server/` -- all the values except for `USER_PASSWORD` are related to [firebase](https://firebase.google.com/docs/database/) cand can be retrieved from the website\n\n```sh\nAPI_KEY={YOUR_FIREBASE_API_KEY}\nAUTH_DOMAIN={YOUR_FIREBASE_AUTH_DOMAIN}\nDATABASE_URL={YOUR_FIREBASE_DATABASE_URL}\nPROJECT_ID={YOUR_FIREBASE_PROJECT_ID}\nSTORAGE_BUCKET={YOUR_FIREBASE_STORAGE_BUCKET}\nMESSAGING_SENDER_ID={YOUR_MESSAGING_SENDER_ID}\nAPP_ID={YOUR_APP_ID}\nDATABASE_PREFIX={PATH_PREFIX_FOR_YOUR_DATABASE(optional)}\nUSER_PASSWORD={PASSWORD_FOR_AUTHENTICATION}\n```\n\n- optionally provide the following environment variables\n- do NOT define these variables when the application runs in a Docker container (especially Heroku that provides a unique `PORT` for every deploy)\n\n```sh\nUSER_DIR=./public\nHOST=127.0.0.1\nPORT=8000\n```\n\n## develop\n\n### build\n\n1. install `deno` (tested with `v1.7.1`)\n2. build client-side code (requires `yarn`) -- this can be skipped since the built files are included in the repo\n\n```sh\ncd client/\nyarn install\nyarn build\n```\n\n### start\n\nstart the server with `deno run` (use `deno` without `run` for `deno` below v0.4.0)\n\n```sh\ncd server/\ndeno run --allow-env --allow-net --allow-read --allow-write --unstable server.ts\n```\n\nor `yarn`\n\n```sh\ncd server/\nyarn start\n```\n\n---\n\nhttps://github.com/arcatdmz/danoweb\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcatdmz%2Fdanoweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farcatdmz%2Fdanoweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcatdmz%2Fdanoweb/lists"}