+
+ Documentation
+ ·
+ User Guides
+ ·
+ Support
+
+
+
+
+### NGINX Reverse Proxy
+
+Add this to the site config file on your nginx server after you have changed the relevant parts in the <> brackets, and inserted your certificate paths.
+
+
+```bash
+server
+{
+ listen 443 ssl;
+ server_name .+Note: This requires a PowerShell prompt with winget installed. You should be able to copy and paste the code block to install. If you use an elevated PowerShell prompt, UAC will not pop up during the installs. + +```PowerShell +winget install -e --id Docker.DockerDesktop; ` +winget install -e --id Microsoft.VisualStudioCode +``` + +
++ +```sh +brew install --cask docker visual-studio-code +``` + +
++ +```sh +sudo snap install docker; \ +sudo snap install code --classic +``` + +
+`#d_CI-dhvP}Zi2=*_NQ7rm)^1}V+=eXi@~-kbF`qr8tX_14|yq5&B+T#;qSBN ztlP1&I8jeaNpm*EMPDM+y-byqIEgl0Q&bUC{da*0m!A{xq!(zC14X+`@q4=1+q#H2 zcfzjd)(dM39yDcDkS+<47G;DWlPv%M9moG%0NIE4X#8`b@-Y0zYvOll=37!D<_eC> z!Q_iLW>IP7=fv_LzVS*1* ;@BF?YKe(q!x%#T_LXSOVVWsG%JV|#Jjw5(KCPX}OM|eB-be`%8TRtn zOj7cax#1#p)TZ%YK2rf! t*CVm!{JpzEO 2W8*$CX1zzb+~YJ5X%0?)VHw+^ zhgzuHcdMYO88iGZ)a8h=4qTn^=?CU849@i!val$&p3xEWh(s(UnIw(92%*j4crSVN z9xzRNgyC`mo({BM9|(Fzn<4Vv5MCKC&`pR8EmXa_8xJn6K7xE1+CK+eiGv&;h=WXp z?W%ECpgN|Wv=`RE)?8A(;jv${F2^z^Ee)Y0Hc0*_b)=O3^YOMU%Cd?_rZ|mJ!5c!; zDa33|D3?FVK0>pKl?s@l6}g5hau8>79zd?*xWJ4IaVUwzWp1R?ixpm8L%|8{G_2=* z#d{hS5ZsOj$Lq5x&{q@*h!}c`clB@F*@jD50quQ-QqR$(dc0}P)oo3Zq^Guk{x5~Q zZt^$oP5Tc723O3PiapeZ7hDOmurX0Q#fK#uQj8#M_sN+q>cjgzUdz{u`RztoB@=)# z(F1pR !OxxINphX*qwT&6FdpU^Nk+_Z>1RM|04}yRBKvuHCqU+ zxG^J?Ofne-8`Rp a#7V -)WDCsED4>gVe$ zW~k5e)I zWJ6GIGy^t_BPf-UEQ#pgC9# 3M;?~T_Vz7(pV+e)E3F}Gaj7lGcZUK{gNOSB54kUFCjGijt3X~3>Yik zA3`1>XmDY0pByP|v+)}DCqKX3kSX~w+D|!Emou0|moI1HZD1E7j+cM3zmxPMR2}M9 zM(A2I@T)ut6WAS2DSF)z %>D<$+*9 zfkOs`BB%c>RD5+ae+qGBQ=J~-=BqeaBI-VQ`MP(%W1hI<-m&H3c)uTPS;qWj;We17 z_GFGISlXw^jNL ;AxZi^&aH-oxPxeXKLCHf(9Q3HD?$=!gJBw4iU 1oBCijlV?8?fW zuwAiT^}%$H>t=w*ESNW~Re4Do?)%{3TBYIH?B_7Y0&RT}?yoK=LGmA$$>Fzy+r|H5 z7{(9s-R`u; #fB5k}5Q+cpv=}WH)~RDG7(7?rD%3d)}YCz-txxU4nJi(H60e&IoKLgCN+YSeq7I7=^RnZ` k=?9U#9PH!)`rlrht0v{5GGYyn-P+PQjve5es!a&Cr;6^6feEDz2d!jOZ}V zF#`!4j@9I4`0$TsYuoxuofyof&)9z{)VgzcpIQJUWd?+QMI>ye621BW|5$$9Ab7G5 z2cX*^3%C2?D+Qvs`)v(+x!a=|QsaJj($>Ilw`vuGS#8Ca)?u}HO^xAsY=XH!kNOt5 zTP@H22Iy a|&8#S6czZe3I=mwkveuHnSQJI@1r;pTq-&GXM( z@X-^h)}!QApRda!5!<12!QzXL9mJ61w}_n2`o=}r4CxXFVWry#F<}>^OI1I}DsKoH z*8x_g{O&(^@NO0JwO)a>$;~j$-@q?;$;LA)*gtQAV>&p=iHJ2V9W2rGl)xVG*lURr z@g_fK9;u_b_p6DjI_7@Y+hiCxqs4U*)2(0M&51Cs40MHMyaEOVKJ9LFv`RG+(>8C{ zA0ZNhjwR= ulV3t{-wo4@r>j-M{GO6nDi2 zjG m^S3(ffwC6`-ZUaa!4iX+dECY{$?S2AaqmdmsC0D7kZ$n-b19rs^p> zFWc&EY~>3-@K**$6>_bQ#)yio@z%OA%37WxmO0#YYE_cOw(Q{+A$BZ-r#8&?a1s}$ z{g@UuY6+FRs8t2fTK#a{Ou0bE+L=4B1Qd+6CTS){M&F9Fhu_bTl#@?5UIz&nyBANO z&nsY!%aGJYfo3ibenCE&9!Z@)?GN8(d8<7QKHs5iJ`P_5BmZpuQ&OLcI-2kcLd&^5 zH;f*v+FB4T)v1bbijcb{YbyWC>gGw+Bqu2~ZfL<+JXBjc4boFSBMjo<;Lcf1(#GZk z|1nplE$(sg!TDD0_YDA(4$dxQ-Et$wv~8pr!@AAx$qr+m7??t0t_vlv9n7u!(V8s| zqMH%8jM?2n5`EuVFxbV44>QDsyYELe-{_+!hTux(j(PQ9&yPp)^S?;z%*+8|YPVCP zbuC^_P8I{k-2DR8har-M$o|EaAjN%1kL)|>rZW<#Ghn7~eXuuDk<()^Vva=KZ{(G0 zq&EtJn+oRxh`)PfadzXQm6B`iSc7Nt$cO^%9GQTX`EdQ1kP@Ks-?~8L+dbO|Ti5Sw zw{0@FQ;KpG2BQ5r^qU1QT`SgMx $i!1Oe~) zvua?k_^)*;Ad=tJE(#O;%@C<}79>f$Ng*L%_t0z75zhINozxcdeNU5_h<` RpC5=tK{~6!HiCa@A@YmJZ> FnNo=cBP4 z^`}MMeqy9W(^pV+CsRmYM-(j+qV!t*rN0tIizvd@)cZ=XI@qc=3`n{M$D~KN`c!`` zRk6m2ocyuIt#PnBW+Y1uC8O$~5evx >ulH_+?75LluwHTz*pky9N-9!y1>E1r>(}` z%tbJPyQjyf7ID9QO@}$cl-~Svu`jfijZRN?EaqzIPN9T~!Ky!rcHU3H7^Y!W^6vP@ zfqOo7l>TJEpcHPoPrsIX5t>rHsNg#7oCtppjLPpjckLeN#d NiY}@?oN-U+Vp<%d!D#862bzyFnbk&DB0gN-`5m)agJ#_R5E|PEw{M6 zP+77U`*IooZvWvu=p%Jnk=m3XxyaKStyL!FN7b;IeX_6gf_Anvu;o9E@@Yzh3!NLt zIjj8;aDR%V&zO7_y$GU{?9{uy{&sAO{N|hv;j6jvtDxV&v8bMht1E V_|JNVDb{>YuMZbA^ lOQv4j-S zbwhM(r TQwM35ZYA)ZDz4bNJZ4`_+rtej&s5*IJm1OZh?UBF zo@6zm(KgFv1y@+DkR>y4ohwxgx?KaDk4?z0r{~J2iW4D}08P2UMGs>|zzX&ccL3P^ zomRuY-YK`cN6dg)eU`yjqd_cPn)?n@=)G3YBQc^Zwp@r0C0$%`cc~cc&dQHxc1Z^5 z`hO;O7-D*niN8jEFXe24N7~~@<=&WZMBsSxJM)%W+*xq(vS5<1-V!$v!8Dtn$rvL9 zrNs{NWR?%6XJ$dRPm<+L)JnT=KEcms#Jk+am%Uso3~IFJz~GpHs1s}Yt8)=vJhnWa zabsk%kFA=C0Su1#&-YRCp9Jg{>@d(&bE4ns7`+!b-dh=|ci0Okq3nxE%Wgf0E=ab2 zcxC(zb0pzdCZS_v$3h4y@~yHmkjxnkmJuS=a)wTA^1@lWo#ta4+}}H>gp!<}SefLF z_Ce>+@X95^(GYO8c;$7>dr#4H@&d7v8>yB5G#ts<+Z8vj)j7JWb5R``eA5%VbEHQ; z%d6Z$9E$rAghrw4xN8#Jzf#48CUwqBdHYQzpdoCIUS8wSxni3Dfel2QTkFgd(XY6@ zIH+iQRU^>OQ77Xx=XUzqlS*>tILVOXlZWfkSK;=nIhkQRovJxdZ-9yH$lun*paXt^ z7S3<+ y0{>QU=NMZw1C<@3TH?tlf}{;L@N= zS^BdyB`V>24RInUUKcbEgpfUc|JvVq1Ey 3rl0* Lex8KD}=f BzGq;H;k>;$MRsWLI9nPTXAhC5bups& z*t)-7m9&HYQ}0Xpht#jR4A+<_@tnVMJ34Kg+O%u%oIT@EE}N@%-0F;*f2wK`Yu}Vd z+6#33GZ>{^-=7iRvMyy{muQe77_t{Q?}I5yhWZ52O})#VV+z9~)8QaN%#jbukET iELVWQ vs1b|8Xfhgo?N_QmE`(4-o`&m4bd z(tqf)7*qWezq)abcGSXIvVJWEK8 uci!mR#p<0+1ktxyVU0!n z#2*V+kNzA`J=Aq9 J5ttH#k$uoU9yl#c6v1YxSw(jU5w?Zg6>tejx@O7<5oT z(yP7yboizY3Yv}7)rB95>reU(Szc1#HT50y>R;TJCG_Dw-=E|u8WBq{yB7yvw2;5M zLvCQ0i Xe{3_mLNmcA^c!qN?_yi4q^CIACkQ8S-H9KY|Bd66bLq%U=Z0qGVRyYYLZK{v zHd3{+(37m}^e7q?DbT!RBI#av8xic}Bhuo;mB(e*H<*OpQ>2q|W3_R36NCZ3J31p5 zEmP)hOL!{vw4{(#@RrjlzuOaJ2)Wk+JlcIU M#*CH`kER|Kz_`Og$d}yrA z!Ep$vdm0xv>HmlO(zlw9x)d wgNq^%1!7WUzr~_wQPUXI{8tA<#4Rp>U7E z9kzEj-vOtQqn*&RPg0sQq?3k~{{a^;IqVLJ1X_nY--sBA9*|#s0amRya6@HZIyr|8 ztJ#E%HHh1}c%IO5(QIj^6WAJI5x0Ij+ty~=HtO(4q=&EH%+?E%10fkSD(Y2DFZ(am zd`dlw{2^SwuIm`6#-6i3R(^toyFkHpycvXAEn*aQ_NNvvQ0Dx92%ABz^>T9K&@w?! zH|lkankjCF=4f%9W>e>a-3kTzAOdphTH-tQlq`bqsRvz#XX?iML$U#E|HQl`wQ$;c z6uyPbG!l6;-zB>ZPsCuQ|3>&JS qEJngwU9VYBCV0)@U)KL00)!RL^e2k%p9jUe zJ*QhQ3UfQ_lwzsX*{&ax%c%^I7JvY@Ha3{k-|gib4e{Ze%_?>L*dP3AyAY(VMq200 zQ$~Xuo(n!<;pSO6rXQp66#pB8Uuu3?Yks n}r^PhlAp*1CwW-2pS zcpbJ>qkIOgleJ*KXJw{YdsY;Z0lI)tT<`Zq60rI6lAQuESx@w`qo3J%HvYTqo1}dK z+#fMz&lY={+dDBcKw8%wwEA)qUTTB`?@d}fw6Wpz@Tk&y1&XzB`q5Qj3Z|Q~_Nw2| z@$;3$VLyuE%j7qV7wRJOm1Rn&xd6JhIp&PqRE$_4v(ip+tiklZwkqQeN42Z(?)87? zRorq8IeQzW4J=vATfliAc}K?R`WCoFn2>A_{4*$^oFEDPx!EwUFPZ+R0lGn TtV!%8ho(d?iSpg0$#60X!`@`!hY9EDOWilqa z^vy 8sMiHbwcHTK|vz)!aCPsApZD28Vw9wK_#K z#hFC3R1`E-ofswtD7-Rx^H*7vqaW$33h1CkK;^aT;3G!-!nY ?=I0-?0O}#iHSz zAft{U-R)2U7O2l{4;EUPH}Rshfd8I@iPz613V`%T<7q3Hl1M{&%^MI0%{WyFW+$`z z9{B)=CR{tYo@}o=KL$sZ6N#nfN~hIoQtJare^*S+cJ@u)RM!sm1r`3A-CpM zJe$LG!8RsBf&}YmvHq5$+}5a{vEVs%nE#C+08O!#Lk7OuOs`d~>1YbvxxXU6<}vW0 ziOagmTGo?~vr1bix9RQH0XgM|E;Auc+HtxV>gbRXT8oNQk!Kx@4djZ&9;rz6mkbdV zvKW^TcO&8G2l&p(eyU4_OW0#o&anPqw>gva{us29_vdcgs)qeF)GHC3Bv94KH xf`V*&8&f$)k%Wwl|Li2}$0`%-dyuK`oQre&zaqb% z&RT28dS=8cS{p~P1#dZ^oQDqgwV8P8-_xSEk+!!j|NTx{YY5o>I;7Oi7;yA<)VC=$ zyX80v=+g}uc+QP~%cz{i)Hj>|^-cbFCTydBKqsK10_B^Am-u4}-mlX(t}N%j)p8^{ zNXQtI*8fB{ZueM!XTqO4r*=N1Y(9io16L+G9zO8fPFxQ-1313?I-HXNJQ|rW29 _ + +#### Key Features + +- Lots of trigger filters, such as "Trigger on text", "Remove text by selector", "Ignore text", "Extract text", also using regular-expressions! +- Target elements with xPath and CSS Selectors, Easily monitor complex JSON with JSONPath or jq +- Switch between fast non-JS and Chrome JS based "fetchers" +- Track changes in PDF files (Monitor text changed in the PDF, Also monitor PDF filesize and checksums) +- Easily specify how often a site should be checked +- Execute JS before extracting text (Good for logging in, see examples in the UI!) +- Override Request Headers, Specify `POST` or `GET` and other methods +- Use the "Visual Selector" to help target specific elements +- Configurable [proxy per watch](https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration) +- Send a screenshot with the notification when a change is detected in the web page + +We [recommend and use Bright Data](https://brightdata.grsm.io/n0r16zf7eivq) global proxy services, Bright Data will match any first deposit up to $100 using our signup link. + +Please :star: star :star: this project and help it grow! https://github.com/dgtlmoon/changedetection.io/ + +## Installation + +### Docker + +With Docker composer, just clone this repository and.. + +```bash +$ docker-compose up -d +``` + +Docker standalone +```bash +$ docker run -d --restart always -p "127.0.0.1:5000:5000" -v datastore-volume:/datastore --name changedetection.io dgtlmoon/changedetection.io +``` + +`:latest` tag is our latest stable release, `:dev` tag is our bleeding edge `master` branch. + +Alternative docker repository over at ghcr - [ghcr.io/dgtlmoon/changedetection.io](https://ghcr.io/dgtlmoon/changedetection.io) + +### Windows + +See the install instructions at the wiki https://github.com/dgtlmoon/changedetection.io/wiki/Microsoft-Windows + +### Python Pip + +Check out our pypi page https://pypi.org/project/changedetection.io/ + +```bash +$ pip3 install changedetection.io +$ changedetection.io -d /path/to/empty/data/dir -p 5000 +``` + +Then visit http://127.0.0.1:5000 , You should now be able to access the UI. + +_Now with per-site configurable support for using a fast built in HTTP fetcher or use a Chrome based fetcher for monitoring of JavaScript websites!_ + +## Updating changedetection.io + +### Docker +``` +docker pull dgtlmoon/changedetection.io +docker kill $(docker ps -a -f name=changedetection.io -q) +docker rm $(docker ps -a -f name=changedetection.io -q) +docker run -d --restart always -p "127.0.0.1:5000:5000" -v datastore-volume:/datastore --name changedetection.io dgtlmoon/changedetection.io +``` + +### docker-compose + +```bash +docker-compose pull && docker-compose up -d +``` + +See the wiki for more information https://github.com/dgtlmoon/changedetection.io/wiki + + +## Filters + +XPath, JSONPath, jq, and CSS support comes baked in! You can be as specific as you need, use XPath exported from various XPath element query creation tools. +(We support LXML `re:test`, `re:match` and `re:replace`.) + +## Notifications + +ChangeDetection.io supports a massive amount of notifications (including email, office365, custom APIs, etc) when a web-page has a change detected thanks to the apprise library. +Simply set one or more notification URL's in the _[edit]_ tab of that watch. + +Just some examples + + discord://webhook_id/webhook_token + flock://app_token/g:channel_id + gitter://token/room + gchat://workspace/key/token + msteams://TokenA/TokenB/TokenC/ + o365://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail + rocket://user:password@hostname/#Channel + mailto://user:pass@example.com?to=receivingAddress@example.com + json://someserver.com/custom-api + syslog:// + +And everything else in this list! + +d!H!#3Fd0{ z=3|{kV>wohYOJ} EHTtgem@v4FaA8)WO&_ICsg$nloYC<%| 7#vJ z+^cN#LceU i1 z&)J6vX0h(Yx+$qEgB1Q){d^u#Rgv*l!1_LkAXn!`9~yN%ZX!BuIFB}U&;{&gL(6=Ed}r)1#tm>eIx9(=e|HU0ph;cgkHu}0tQh`d z&3JaB>?n`a)Jdnzx)x}@v0do}n|Q~Lp+`pP)?tFjCUF+m?p_}A3!7VK1LP-`ZQ`!q z9GN(PqvF2tNvqPn>%9N|g5Edfr|_m&6id`5?<1xydsS7XJy_yXAJ_iT6_{Cs`Lgh| z4{;_O$BP9{S9%0X_{7G9CY8h%r%8duX@12HbYgm~qf=8brKfDQJxB$~e>R)`oOxK> zHH-S=6TY-d4K7FD2nxF)56_0|Tb6jTciXvY?!lUXlv*~)xWX?dy4`}cMUD6mAx^8n Wib7wj*N6l40A+bKxmuY|VgCUvX=c^{ literal 0 HcmV?d00001 diff --git a/calibre-web/0.6.20/data.yml b/calibre-web/0.6.20/data.yml new file mode 100644 index 000000000..9b517e139 --- /dev/null +++ b/calibre-web/0.6.20/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 40109 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: HTTP Port + labelZh: HTTP端口 + required: true + rule: paramPort + type: number + - default: ./data/books + edit: true + envKey: DATA_PATH + labelEn: Books folder path + labelZh: 书本文件夹路径 + required: true + type: text + - default: Asia/Shanghai + edit: true + envKey: TIME_ZONE + labelEn: Time zone + labelZh: 时区 + required: true + type: text diff --git a/calibre-web/0.6.20/docker-compose.yml b/calibre-web/0.6.20/docker-compose.yml new file mode 100644 index 000000000..3690f4e55 --- /dev/null +++ b/calibre-web/0.6.20/docker-compose.yml @@ -0,0 +1,25 @@ +version: '3' +services: + calibre-web: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8083" + volumes: + - "./data/config:/config" + - "${DATA_PATH}:/books" + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TIME_ZONE} + - DOCKER_MODS=linuxserver/mods:universal-calibre #optional + - OAUTHLIB_RELAX_TOKEN_SCOPE=1 #optional + image: linuxserver/calibre-web:0.6.20 + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/calibre-web/README.md b/calibre-web/README.md new file mode 100644 index 000000000..bcd0de98e --- /dev/null +++ b/calibre-web/README.md @@ -0,0 +1,133 @@ +# 使用说明 + +- 默认账户密码 + +``` +username:admin +password:admin123 +``` + +# 原始相关 + +# Calibre-Web + +Calibre-Web is a web app that offers a clean and intuitive interface for browsing, reading, and downloading eBooks using a valid [Calibre](https://calibre-ebook.com) database. + +[](https://github.com/janeczku/calibre-web/blob/master/LICENSE) + +[](https://github.com/janeczku/calibre-web/releases) +[](https://pypi.org/project/calibreweb/) +[](https://pypi.org/project/calibreweb/) +[](https://discord.gg/h2VsJ2NEfB) + + ++ + +*This software is a fork of [library](https://github.com/mutschler/calibreserver) and licensed under the GPL v3 License.* + + + +## Features + +- Modern and responsive Bootstrap 3 HTML5 interface +- Full graphical setup +- Comprehensive user management with fine-grained per-user permissions +- Admin interface +- Multilingual user interface supporting 20+ languages ([supported languages](https://github.com/janeczku/calibre-web/wiki/Translation-Status)) +- OPDS feed for eBook reader apps +- Advanced search and filtering options +- Custom book collection (shelves) creation +- eBook metadata editing and deletion support +- Metadata download from various sources (extensible via plugins) +- eBook conversion through Calibre binaries +- eBook download restriction to logged-in users +- Public user registration support +- Send eBooks to E-Readers with a single click +- Sync Kobo devices with your Calibre library +- In-browser eBook reading support for multiple formats +- Upload new books in various formats, including audio formats +- Calibre Custom Columns support +- Content hiding based on categories and Custom Column content per user +- Self-update capability +- "Magic Link" login for easy access on eReaders +- LDAP, Google/GitHub OAuth, and proxy authentication support + +## Installation + +#### Installation via pip (recommended) +1. Create a virtual environment for Calibre-Web to avoid conflicts with existing Python dependencies +2. Install Calibre-Web via pip: `pip install calibreweb` (or `pip3` depending on your OS/distro) +3. Install optional features via pip as needed, see [this page](https://github.com/janeczku/calibre-web/wiki/Dependencies-in-Calibre-Web-Linux-and-Windows) for details +4. Start Calibre-Web by typing `cps` + +*Note: Raspberry Pi OS users may encounter issues during installation. If so, please update pip (`./venv/bin/python3 -m pip install --upgrade pip`) and/or install cargo (`sudo apt install cargo`) before retrying the installation.* + +Refer to the Wiki for additional installation examples: [manual installation](https://github.com/janeczku/calibre-web/wiki/Manual-installation), [Linux Mint](https://github.com/janeczku/calibre-web/wiki/How-To:Install-Calibre-Web-in-Linux-Mint-19-or-20), [Cloud Provider](https://github.com/janeczku/calibre-web/wiki/How-To:-Install-Calibre-Web-on-a-Cloud-Provider). + +## Quick Start + +1. Open your browser and navigate to `http://localhost:8083` or `http://localhost:8083/opds` for the OPDS catalog +2. Log in with the default admin credentials +3. If you don't have a Calibre database, you can use [this database](https://github.com/janeczku/calibre-web/raw/master/library/metadata.db) (move it out of the Calibre-Web folder to prevent overwriting during updates) +4. Set `Location of Calibre database` to the path of the folder containing your Calibre library (metadata.db) and click "Save" +5. Optionally, use Google Drive to host your Calibre library by following the [Google Drive integration guide](https://github.com/janeczku/calibre-web/wiki/G-Drive-Setup#using-google-drive-integration) +6. Configure your Calibre-Web instance via the admin page, referring to the [Basic Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#basic-configuration) and [UI Configuration](https://github.com/janeczku/calibre-web/wiki/Configuration#ui-configuration) guides + +#### Default Admin Login: +- **Username:** admin +- **Password:** admin123 + +## Requirements + +- Python 3.5+ +- [Imagemagick](https://imagemagick.org/script/download.php) for cover extraction from EPUBs (Windows users may need to install [Ghostscript](https://ghostscript.com/releases/gsdnld.html) for PDF cover extraction) +- Optional: [Calibre desktop program](https://calibre-ebook.com/download) for on-the-fly conversion and metadata editing (set "calibre's converter tool" path on the setup page) +- Optional: [Kepubify tool](https://github.com/pgaskin/kepubify/releases/latest) for Kobo device support (place the binary in `/opt/kepubify` on Linux or `C:\Program Files\kepubify` on Windows) + +## Docker Images + +Pre-built Docker images are available in the following Docker Hub repositories (maintained by the LinuxServer team): + +#### **LinuxServer - x64, aarch64** +- [Docker Hub](https://hub.docker.com/r/linuxserver/calibre-web) +- [GitHub](https://github.com/linuxserver/docker-calibre-web) +- [GitHub - Optional Calibre layer](https://github.com/linuxserver/docker-mods/tree/universal-calibre) + + Include the environment variable `DOCKER_MODS=linuxserver/mods:universal-calibre` in your Docker run/compose file to add the Calibre `ebook-convert` binary (x64 only). Omit this variable for a lightweight image. + + Both the Calibre-Web and Calibre-Mod images are automatically rebuilt on new releases and updates. + + - Set "path to convertertool" to `/usr/bin/ebook-convert` + - Set "path to unrar" to `/usr/bin/unrar` + +## Contributor Recognition + +We would like to thank all the [contributors](https://github.com/janeczku/calibre-web/graphs/contributors) and maintainers of Calibre-Web for their valuable input and dedication to the project. Your contributions are greatly appreciated. + +## Contact + +Join us on [Discord](https://discord.gg/h2VsJ2NEfB) + +For more information, How To's, and FAQs, please visit the [Wiki](https://github.com/janeczku/calibre-web/wiki) + +## Contributing to Calibre-Web + +Check out our [Contributing Guidelines](https://github.com/janeczku/calibre-web/blob/master/CONTRIBUTING.md) diff --git a/calibre-web/data.yml b/calibre-web/data.yml new file mode 100644 index 000000000..ff1c69266 --- /dev/null +++ b/calibre-web/data.yml @@ -0,0 +1,20 @@ +name: Calibre-Web +tags: + - 工具 +title: 用于浏览、阅读和下载存储在 Calibre 数据库中的电子书的 Web 应用程序 +type: 工具 +description: 用于浏览、阅读和下载存储在 Calibre 数据库中的电子书的 Web 应用程序 +additionalProperties: + key: calibre-web + name: Calibre-Web + tags: + - Tool + shortDescZh: 用于浏览、阅读和下载存储在 Calibre 数据库中的电子书的 Web 应用程序 + shortDescEn: Web app for browsing, reading and downloading eBooks stored in a Calibre database + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://calibre-ebook.com + github: https://github.com/janeczku/calibre-web + document: https://calibre-ebook.com/help \ No newline at end of file diff --git a/calibre-web/logo.png b/calibre-web/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e98cc134ab88b26dd2a594dd734b9d2fc2fdc8 GIT binary patch literal 8719 zcmV+qBJkabP)Table of Contents (click to expand)
+ +- [使用说明](#使用说明) +- [原始相关](#原始相关) +- [Calibre-Web](#calibre-web) + - [Features](#features) + - [Installation](#installation) + - [Installation via pip (recommended)](#installation-via-pip-recommended) + - [Quick Start](#quick-start) + - [Default Admin Login:](#default-admin-login) + - [Requirements](#requirements) + - [Docker Images](#docker-images) + - [**LinuxServer - x64, aarch64**](#linuxserver---x64-aarch64) + - [Contributor Recognition](#contributor-recognition) + - [Contact](#contact) + - [Contributing to Calibre-Web](#contributing-to-calibre-web) + +OdeH>u=SY+_QW%1tGe3fv&)#&+xkSICWx@hd3CU F0``_Q+dXUC8K1T 9j0ZIHTWYRfpjS*O0TMUh1)0wRj2!-_x_jhcs~)mpjjx$myX_wHYI+NEz< zn{_8vB q =ux!Al_jyU>3nUe5!PIwkf7MG}o=bIt9{#Vpkx+Gu@mZ?@TjN zUqjeiP^^xmF=2e~1kEI+mDV9KVh$#TsDcJ!EYGJ?BkloFkmUtr5zG_wjOd$WSwTJR z^8J7P2QGZ$^`xs$=h<)lBNIC(x#*goCJ)opY9J Pw z`uTgQ0Y|_>#A11N4MSiEI2X7`y!=RFa=toU7doAFYtOuFElz9M^dw1ALqu?gTo@}~ z^5BcV;%7l;e wH?dLFSYbw3%TTL`th{ zTqT}2gI(QPJ$9uL*Al>qU`{cM1en*`;?c(TI=>%Mr{@WBo&|15mo%u++8T@aFrH0j z{42&c%kRjse#sUGr-q;f2<0tW)ipKhl`^XDa^~OZOfQtwY6f72m|?^j{r2Cz+-AlH zrGJXpTJ_u@=nZDlWmujR(FZiw`&He;7Hx_^KYo;x!lD-Rtbwv%NRunk_>;q q=QHKbxSJNnI|Jru>c+#n%-1j0k@R z_VS|o;D@mI1Z_sdE@{>q8=B3=1`%23aKsR2%+qZAq2I0Wi7;cqXM}Ag;>5iTc-!*P zk&hDD7(?8s#^a0aJZP^6FweY0aG!ED|84KxZ+dm>qD7*`L+-VU>jEB~na^s*?0N9& z)_L!K)7AX91@|f79X%c5JTvfuw({Qj4(Huxed@m`svi_c4hXs870jL&fkae4=u`hi z=iO(4ci1BELk3pRWk^b{a^gRoc=u&h{TU-Vvv^8|tB#d2b{;XJQ`MhIy!)~f|7nn` z2KoFAj-Y3j)h!sn1>U>6Q &62Hl{^bV`jDp!^UgFzDX`}~N1 z*pIr~EySfURzf}*m>DrfEX1XL)ZOk!{KEv^*Xwc3mHrmAMJ&d(>S}j8U;m6mE{;W{ z@+}quBNh>fT Q#Y{8#Ik2x zIuUo1OVfunNjH?g>+$f8KpzU)P-V }j+$*Z<>=kk3iUnuJn272+UvJ#&oc@I> zWBqui>>oj!k$2lf 9H`qeaXzZ63#qZbu@fyGD+fi!WyG}21H8jWl6Zo99HO`izb z5a&7nig(?bq(fhe$R#lj(A4@ABgQ~PE=kg%ubqFzyKWWd=@)C=Q$Zix7;i&TZ{0g~ z`h}lRQD;_(x!*AhsHht|{lZU3y>&0x(6J{v%s;&ow3UJu WvGqwMaiC;y( zV;1R5?Z K_{&8`+q*CstK1#^4fTAa74xa>j*M ze{spGeH%Jcd%o=I^`4BSCl)%!NLo)ftUPVaeLiij3Zdx5Fe>Je5DI+ST($DFHTR|U zbVKaXWPZT~9ix$^?jwy>^WHqmnxV)Lsp86mj))M7j6BPljaKvCG<6?|ap8TB1s1g7 z)csz)mfUHv==lVqV*V*NiWSsr$(>H!?=7@Ly 0S7Z;e3IOmdUsK~ny|KHPk3t2OjjgiwjO;s9m_A<$|K{Z)Oq`PM@ K9}b)E%#+qizXEZF^l9#x_o%(a~JRIT S@0%H+~uwzcXz#g5QX{BqHj!}_~69DsE@zyV)Ao&?CnM)p>)T(Q7NJj zY;hH2oIeCFk%o&n>CIACjDa-qKR4?0@3f}*xD_YvO3PIry5qQ?Y=9>+ Ct%-9KLps#r#T)-6tgIq2qKpG(yn;n*L4`J$JTr>p~NN{kdm-v%__3c5=az z{WN_+5rx8(!i0PtX3vWa1BQIT+gFeC 5FH9GEP?@_6 z>Gy}db3Qm&7hJ8r#5F!?*6GQeJObUIT(^3h^+Qwa?Is5-bIdb}Zky9Cdpqa8`MnG+ zTQ~EpnZB^6u 3-et`Ex$FEMeRD z4YT~5UTr$+1jou+#v8`=(hYjBA)7_=PMb5Y`YA5D?iVo%vhKvGtl?LX)|XIprw1Y- zx$MQ5pEHuI`;F0b+5gmIa2b6~$L4&nIz7kGTSLr`XPomw5rwmd+bpYhY0oU8AWAX4 zm*wYN&Ux?n5JpZmy?-DsUd7>wR?tdEZxx0&MvKqR^?81BdT!#3W;AO4V~O`8$34mu zB%0vFSl^sNrTn)5vB*FY&Un*L;C+* ^e1KQLnKMuZzJ(_b!uYh z!G(vzKa7YdZ&9Z=^h2%YGU@WQUsZJpB3exX7a0~K>huOt-eSzQBRTTJyVqI1Hz29` z+saKqvu%a@3lSmjv EWIWYWVg3CJ{->V&r{n^~^|W4LTF!Y`*V*bIDKt zDkCe;#^_RHotef%{ptTN97q1_hfb@Y%vbF FqnlzlsY$hZIQ4>{vaKgFu^ub?)v6t4+_5HMntBYGrdf5e3y z_rf8VHpsJ?S{RgRScyTq>)6xr5R7Q0P)5>#ch*PeL&~}y>V7^pBWXRBW; z=m4bf0f(#!eGsZU7HX|gvdIa)|1W>di;w(2TFXx(X|#wD##+W`!zd1Sks>4ws5KU+ zsJkv ?OKNoXjWe}p8wP}6=rW@|YUGEB>cs+D zqmV9v0s9WmiC~c=sj+s=&}`>1nECITRr|}Fx*1pV?H9aE%^QFF_;S1!9K)9Rla67e zCLe5P@y|Q<+HxK~FJ3v?V9?a?qxHJKCLdH&WrnEY>#YO73K4wMkh-CV3sVP>8jwP- zvT#l&2g*BSuf3*u?wBo#VFp9ZoS(dKH~;*fOXvpaFDnhyRj-kv_|Yu7@3>ce+59r? z9CC2!FDGgJhRkq_^4?o ?n$jU 02YqL>$~sr{GeWe0pzm}p@ew;vP|>dr&jH|Khkdm(E}u$PT|}rh$yf9_ z(HKga7d@44yZnXj^N*rsBCX$>tS)OGSWd33x2qLt)po6--!Y7CEYcNj= 2#E>% zlK7_0tIB>B{@Ujh!-i6`i@Q31{o*Pr7J{xCjm$27%d;{h$fVY+MlGc0s_5yxEFx1; zaXgqsRP^*(NYAZV4gJzRALXTIzID;i=!z;`x?&(18eLI;>6vd`^rd?~impB93R pwp<_S{%~bY(zU%F zR7J&!P?L1+Bi$da)H7JVEF-T~&PK(cVn9Y-JA>uRbWJk0Hn*x;XT@NXTVPExwpOR< ztWc^ta1{fL8HzGZXN5XRR#X$hib1EG7$z%Jovy2FbH$)zfI3~LVsTZqBdKEWF~s63 z1zFMSp;T1N3nt4o3M18guwu|L0~1D6%!VqLqhjzez=l;ghR)y>6@82#H8srldLR`Q z^MPT$+AmtMs8B(Q*FUVHqW=-3P{XR`*cFQc!@3HxzpBGgG581|`&Ep6RVj{&K}Q6{ z*r$l?>h)kMD&_^TU1}mbDwm^T@DWhit})n_O3oF7jsP*(77Z45Rtw)1gN^}34CC4$ z*%gT#u>p2PMZY6LB+?++rQ3= p@jioCqDuwqB8*Ij$OHS2WvNO$;jr6$7H#Rt>UC{pfNNm%dQ8 zLawM7JS+ypr7!r=<))AQ%U`p5%TrG`TBE%lS4G8f(P)jbd&^T#KlU$wjc$GRQQ8yZ zPy3|N>v2_792Y)m(4N@!^wwt|#s9aP{t%1tiOGra4p3F`uNXKcC&s7Oop;6N_2<6{ z?Mj!f%btlAU#JS6R}2~=O0@W5N3&--+QonU> A3 z(|Xzf{^Ffw *n+N!JwMQW8NUD3w~LQQ=(9`=9bh3<=>DFFT& zcTRbP1C8?7WIpwTcy~Fm67&%nB%f@tUPcur^QkA!h{KPqPcA(0YcGcgH&{^^@c}34 z<$=IpUAcup0E@jI#oUoa**?cmaTF8}gjf{rkOUR4J~{9Y!Bd3%es#%hm6%_J00vY0 zA@2-E#+m`O2GoZZo2Z2t19{QC->HAa#qjNYI}iNBETZZk8e4JZ _xXz%?iKdl2I`tO}+4|(C*MRYFa1v6lP zHYF}5F+*vKJJBABs{fv9e2ov`n~m4rJA*+k@l%PpYZr;*HNRA+q-O|1uHjQjU8o<% z?en$mhtDN6;nQKc-Y!npSR9}@RmGx3R0+Yh>8|kU<`ImFxAtNFVu0En#=_r-PkzIy zEv0ipbY`-+kQQ9ZxcFjoEnbTuB3LZ`hIZUzQ4T9f@782Tc)k&faE~PZ77 Grv zfuh@+7 NP71`(1> tpQg{*Kvq?zek|St+X4QV99NpCMOf(JfL8 zRYwT%3q`PpkfXQN^x<_1j~Za1_(a{M*9$#P&k~405vA{L7iQobuj9d;r1xILlfqfe zWuf>)biA$t{p;BiL9l4wh#`L7IlZBmAv^){s7w|KP7MqF6?-uQt17C^D`luIe%>PA zm`j-r6%$_Xfhl<&{=mSbhnpBgjBZeNbyKvTlw5IA5D^S4&%+;J`noz56MUGX#Vw*e z>Wc8G#QP1_BQvBxFyX~^ofritMzl)Vixm+iFN#lPAwH@ibDAgkp~l>uJ{7&)(04-^ zIe~GW5MGVvCR>b8*I3c$&@PTXNvIfH1l?Ej{`SPpJ&fbKarc}Ljxj!K*0{5ojC?Fw zZ(4-cUF78~;d^^V`0>{C;@Rd~@d{Kt?QG&sk?Cjk7~+zC%l@b4d~mQXBk7tyYNeO` z4 i`7HLsJqC&?Hc3KrTbacoMvC{`)YDnabk!FBFVG+@-2U~FWZKb+MJ*3huxAn z9~>>GA =_Wh4Lzn11SYfn7*YU%?@r1 zmASjceqD0 #U1dEGbs~nj$UkpeNg|PVoVF8<#&qrx zsl4hFr5A=lM6t+@n8jZ=b2F7Rj_q3dqBD2@ ;QP6$<7_`FF4+WD 3!IJ%q__DG{h(cis22QM8VLZ&2US^VDo%Yx2<3b| lU{Tr}AdRo!bl7!zkU4;iTXP?FL(( zJDndHndHJH`#GaI#geq3;R~D^O&=LfjQlWBps3JFL2GvWXLHb*5%0_6P5#e!Rx+JC zM(QU&JS*am7@wKWid%z%o ^Wn%g4vgu_-jGb=Y1`9;1_{%EK`5rqHP(d31FDI@h_VeVE&py=Kt z#_lpOd;IwCo_S(p5ft&Z>HKZsqo-xbA9b`h3of%bF@}7=fIJE>PS*)j4UBS^UW^>p zrx41`@^*y3pAyVihGr5Ntp^q&DqD}9m(u*BPpy|tR-E{5PCq>#-P}A(6#DVidH7Ln zxSxwXZsIw6QW7;1t+u}%4-0XZQgwuG_`egXA8$8+d9a0kULq6 zamezI!70A{cB&%)O33n$NfH0}WE!}WThT!TE5aQy g*!-p4QW5~kP+!4WIxW!^|mx@wt#b5jg zrO#}!xXWU=WuXk&f)$Y}yGPkAMJRq>RhdhTg^IyML=dMGq4<4^cFRJVuLV_=h!8^Y zyVKq7ZK733Z!sbwh MSq4Chml zG@Y7mPu-Yh;g7Wk)qr|(-*>8HoqXfYm$qGBWK%nwt7>ZuI?j2DY--2Om$qG>b+V1e zQhH!M>6s&2Z!YBr-`n)%=bzkkUD6tTT(u`#sVn9IRY%eqef;?+H(mFG?``^Wy}7h^ zW9ivD%WUm3`(9z;>QKau_2zIjSsWlllzMZRP{fUeg{uwwp2++yV;>JaRZm$^L;#tz zPW#5)FFbi$v>4 5(+SktBmgV6u)j8x;=(jK+h$`wF zSswm!Upsr73J)c nJEGjw-lY}8$*b{ z93#8?#VQ|49}2qEu80!zY-7l>E6u_^GILT(s<`#Zr##0pv;EgB+!M0w%9v*x%ir~Q zct@Zw1$_WfM0INn-J3(+dB2HmR)6#^NEP#ipx$B1=1_FrA4B(MQQf+rJ?oBx{vO>d zBB0^3#qQ3P#lGTW;&o5CAEXlYd?O;LD&lodv9I`8v9Gui$7g#zuDLQ8f(CE`UD{zf z+!6Bp>LS=ZAVrlCGe68`lz EZVL}{If3EpQSJR zE2Y6tO5I%#TqfROF(R?-8?zV?1k-YoXGOrU?^-9^XVd&sHd;Jfr-see5?*{-1{SNJ zXPBMbhzK^t!&0+{_fNF{SCY6Z8%h0L(d?Zr)e9ABWjhZ6i-!ojU$6SiDqb0)0I`{d zPSTB8e9}pLpp$p+&-3u`P*R(+DM6MTJQs_ZMJ?!8;L4C+j5ZZDe#IujSAs-X?yiz9 zZ${;6^>USot`R%f@vGm`!$bs`DGF}o*5hrlux}D=lhydwus?iLO^HL17_AI*o;qIE zDJ19_N I8SU^G?vS{a`dNC4z#G;(%oURwbX+CMJ#c3^@oP|DU z)dI`KY}8;#keXr1%xmU`bp@M@$b`WzF}4%KONGVpv^F~a{I|clHCZz9@|v?Q9q+cM tb`}A=gF};eX5+=8W&MjqGN+vv{y&_usM_zNba?;(002ovPDHLkV1hYB6M_H$ literal 0 HcmV?d00001 diff --git a/changedetectionio/0.44/data.yml b/changedetectionio/0.44/data.yml new file mode 100644 index 000000000..68a3cbf37 --- /dev/null +++ b/changedetectionio/0.44/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 40097 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number diff --git a/changedetectionio/0.44/docker-compose.yml b/changedetectionio/0.44/docker-compose.yml new file mode 100644 index 000000000..757d262ad --- /dev/null +++ b/changedetectionio/0.44/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3' +services: + changedetection: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:5000" + volumes: + - "./data:/datastore" + image: dgtlmoon/changedetection.io:0.44 + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/changedetectionio/README.md b/changedetectionio/README.md new file mode 100644 index 000000000..ea93e7424 --- /dev/null +++ b/changedetectionio/README.md @@ -0,0 +1,260 @@ +## Web Site Change Detection, Restock monitoring and notifications. + +**_Detect website content changes and perform meaningful actions - trigger notifications via Discord, Email, Slack, Telegram, API calls and many more._** + +_Live your data-life pro-actively._ + + +[ ](https://changedetection.io?src=github) + +[![Release Version][release-shield]][release-link] [![Docker Pulls][docker-pulls]][docker-link] [![License][license-shield]](https://github.com/dgtlmoon/changedetection.io/blob/master/LICENSE.md) + + + +[**Don't have time? Let us host it for you! try our $8.99/month subscription - use our proxies and support!**](https://changedetection.io) , _half the price of other website change monitoring services!_ + +- Chrome browser included. +- Super fast, no registration needed setup. +- Get started watching and receiving website change notifications straight away. + + +### Target specific parts of the webpage using the Visual Selector tool. + +Available when connected to a playwright content fetcher (included as part of our subscription service) + +[
](https://changedetection.io?src=github) + +### Easily see what changed, examine by word, line, or individual character. + +[
](https://changedetection.io?src=github) + + +### Perform interactive browser steps + +Fill in text boxes, click buttons and more, setup your changedetection scenario. + +Using the **Browser Steps** configuration, add basic steps before performing change detection, such as logging into websites, adding a product to a cart, accept cookie logins, entering dates and refining searches. + +[
](https://changedetection.io?src=github) + +After **Browser Steps** have been run, then visit the **Visual Selector** tab to refine the content you're interested in. +Requires Playwright to be enabled. + + +### Example use cases + +- Products and services have a change in pricing +- _Out of stock notification_ and _Back In stock notification_ +- Monitor and track PDF file changes, know when a PDF file has text changes. +- Governmental department updates (changes are often only on their websites) +- New software releases, security advisories when you're not on their mailing list. +- Festivals with changes +- Discogs restock alerts and monitoring +- Realestate listing changes +- Know when your favourite whiskey is on sale, or other special deals are announced before anyone else +- COVID related news from government websites +- University/organisation news from their website +- Detect and monitor changes in JSON API responses +- JSON API monitoring and alerting +- Changes in legal and other documents +- Trigger API calls via notifications when text appears on a website +- Glue together APIs using the JSON filter and JSON notifications +- Create RSS feeds based on changes in web content +- Monitor HTML source code for unexpected changes, strengthen your PCI compliance +- You have a very sensitive list of URLs to watch and you do _not_ want to use the paid alternatives. (Remember, _you_ are the product) +- Get notified when certain keywords appear in Twitter search results +- Proactively search for jobs, get notified when companies update their careers page, search job portals for keywords. +- Get alerts when new job positions are open on Bamboo HR and other job platforms +- Website defacement monitoring +- Pokémon Card Restock Tracker / Pokémon TCG Tracker + +_Need an actual Chrome runner with Javascript support? We support fetching via WebDriver and Playwright!
+ +Now you can also customise your notification content and use Jinja2 templating for their title and body! + +## JSON API Monitoring + +Detect changes and monitor data in JSON API's by using either JSONPath or jq to filter, parse, and restructure JSON as needed. + + + +This will re-parse the JSON and apply formatting to the text, making it super easy to monitor and detect changes in JSON API results + + + +### JSONPath or jq? + +For more complex parsing, filtering, and modifying of JSON data, jq is recommended due to the built-in operators and functions. Refer to the [documentation](https://stedolan.github.io/jq/manual/) for more specifc information on jq. + +One big advantage of `jq` is that you can use logic in your JSON filter, such as filters to only show items that have a value greater than/less than etc. + +See the wiki https://github.com/dgtlmoon/changedetection.io/wiki/JSON-Selector-Filter-help for more information and examples + +### Parse JSON embedded in HTML! + +When you enable a `json:` or `jq:` filter, you can even automatically extract and parse embedded JSON inside a HTML page! Amazingly handy for sites that build content based on JSON, such as many e-commerce websites. + +``` + +... + +``` + +`json:$..price` or `jq:..price` would give `3949.99`, or you can extract the whole structure (use a JSONpath test website to validate with) + +The application also supports notifying you that it can follow this information automatically + + +## Proxy Configuration + +See the wiki https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration , we also support using [BrightData proxy services where possible]( https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration#brightdata-proxy-support) + +## Raspberry Pi support? + +Raspberry Pi and linux/arm/v6 linux/arm/v7 arm64 devices are supported! See the wiki for [details](https://github.com/dgtlmoon/changedetection.io/wiki/Fetching-pages-with-WebDriver) + +## API Support + +Supports managing the website watch list [via our API](https://changedetection.io/docs/api_v1/index.html) + +## Support us + +Do you use changedetection.io to make money? does it save you time or money? Does it make your life easier? less stressful? Remember, we write this software when we should be doing actual paid work, we have to buy food and pay rent just like you. + + +Firstly, consider taking out a [change detection monthly subscription - unlimited checks and watches](https://changedetection.io?src=github) , even if you don't use it, you still get the warm fuzzy feeling of helping out the project. (And who knows, you might just use it!) + +Or directly donate an amount PayPal [](https://www.paypal.com/donate/?hosted_button_id=7CP6HR9ZCNDYJ) + +Or BTC `1PLFN327GyUarpJd7nVe7Reqg9qHx5frNn` + +
+ +## Commercial Support + +I offer commercial support, this software is depended on by network security, aerospace , data-science and data-journalist professionals just to name a few, please reach out at dgtlmoon@gmail.com for any enquiries, I am more than glad to work with your organisation to further the possibilities of what can be done with changedetection.io + + +[release-shield]: https://img.shields.io:/github/v/release/dgtlmoon/changedetection.io?style=for-the-badge +[docker-pulls]: https://img.shields.io/docker/pulls/dgtlmoon/changedetection.io?style=for-the-badge +[test-shield]: https://github.com/dgtlmoon/changedetection.io/actions/workflows/test-only.yml/badge.svg?branch=master + +[license-shield]: https://img.shields.io/github/license/dgtlmoon/changedetection.io.svg?style=for-the-badge +[release-link]: https://github.com/dgtlmoon/changedetection.io/releases +[docker-link]: https://hub.docker.com/r/dgtlmoon/changedetection.io \ No newline at end of file diff --git a/changedetectionio/data.yml b/changedetectionio/data.yml new file mode 100644 index 000000000..c0e74ac28 --- /dev/null +++ b/changedetectionio/data.yml @@ -0,0 +1,20 @@ +name: Changedetection.io +tags: + - 工具 +title: 网站更改检测、补货监控和通知。 +type: 工具 +description: 网站更改检测、补货监控和通知。 +additionalProperties: + key: changedetectionio + name: Changedetection.io + tags: + - Tool + shortDescZh: 网站更改检测、补货监控和通知。 + shortDescEn: Web Site Change Detection, Restock monitoring and notifications + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://changedetection.io/ + github: https://github.com/dgtlmoon/changedetection.io + document: https://github.com/dgtlmoon/changedetection.io/wiki diff --git a/changedetectionio/logo.png b/changedetectionio/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..80290161e6c1de3e4ebbf5817d793594e3872ea3 GIT binary patch literal 22507 zcmV*nKuEudP)
JNRCt{2y?1;Z)xG!sp4p}@*_Lcs?zUWTH#WxDrWX?+xfgP2 zNeJQQNg$AfCnOLEPZB5ma`PkQNp47mdx6ji3H?F<8!*+q;vyHxvLqK-y=>n(&mX(9 zJLSymu8^tz`en`R>E&}i=X>fXr`+ 5c$ybDKka^dw5F%}Da+k78{}dT>bGWH6 zM9PgW*7z-H5tca8;Tp~Lhb3Lk?#$`R#Ba VeTiq+E zcLh@{`7{=@nd~ixbYua))t~ }UzvrIEOWEnMuZ5x4^?HxRv_ z0i5-3z6_ULXP29qW6r FV{DjL2ploYVv11|S)`=Mt{f zT>okDBW&)Bjmg5=*4~BOLE&tdTgBSV20C*hXSad)&A$N+42Uv+`Gt}Es{&cs%%*}^ z0c8M(4fleKnE_}SciEZJ#Kgj4W{k=S=+>@45}vIwx%3SAsTb~Gb`Mw9L*yrlYud8= z&BZKZ=iU(9!?2gPISk=qmwES^=5-}Ht$iBLI{HtUTDx 4%~Sr`gS-qq*VUFXlt`NrwQlDWre_L*Ot`KvT`yKH%urOn=elCvDfN_PXZ zbr6_lOFL+E_hwd=Fr^I4Y0yd3gdE&ujO>hSa-Vjhr$xrf@ BM|Qpcxu)ZjH%mm&|kSBw%E1qc5**70<@5`ctANkc|NiDRP=ou&MyI zcnwc$LvaXK+7M;oS>rdzV06!V4B6&j2hPN9VG76_Aa=h_?v0|FOb6PSbiYoq z4lC e zyJDkFzG{xmM37l&%qiV^y}5V)@~~w6(ZK!YnrEwD)motz0=6(9HqfU7Pno5`Y+_Wi zUt_THo
ENQXNnmDcaVNg|^z>JH?E!`MP=GU#el~-Ca(fO%4r2Hh~Ra_D$w-T-Z zbQgO$x%oBQS-bOW?w#W`F|@7X9TqPH7CQ-3V)o+7lsWedY46qsBLlOwfy&ufKG&QZ z!wxnx=b}R*F|#sV+Dw>1oeN9K!_6a3mvmcuzJZmIIbN%s*H+mUol?eniVSE{c9Z~J z7yxOC02^?f!!_E=!D$Z9%*L`tVyu?jz$0_xssK2KW%Qdrle=`+E?}1BH$Q-xQ#zPn zc29@9D&{qH^;Vry1}2Pv5ScFB=1x}%EZx5aT>4Ws?IxX`!^Is2_cGub{YyP&V I;>vi$7=<}^x;>~D5&gqaqt_vq7R?V_-V%N`I28K>*j!o?Ip+=DdOV~_v2Z%7a z$e$gB%|&iu*!^V-!|d1WDjTrf{JOa{mxwvdvN*lgiqE`D7%=70Y~#S#1^}76d2=Gn zge@{=PCY@Ut3W}q0A1o#n7zqbeDdA73mhm@x!Vl{{Q0N#{rJr{-S&8dH11sEO1{Z^ z5+r6xl>_9=iZcVty7M$U8qGm6J!Vh|G>tT@g+qLnI5I&ic6S!PsZ>ds* zXoa#(=((r{rUY7SjNw~dn^`$qN}b}D$D6w(QzG-Jr_mUXJ>B`9TruV~6Pi;P-c02f zvT86h>!TL8# L1C*u3L9=jU*lcX4r&}QdJ|RFe&H|BXV2Z&E z6w^XSx&bKyMFB-o3 X4`cRT|n`T{;q{>Dg5XWK(I=aHNcZAvB(#P)RegY)$h&c88 zyIH@r4YUM>J{3)GA&P>k$kT0nn$4W`*X&^ov}bt#yZ7>Ccdu=ynGuXKw$sJtP8dKc zVP^f^5RPpxg;URv_9|m$L%24-X1iQ;w^&RgAz;L?0^-8Uv ($dW{uN AWNIa~b7N#A%{$bp878ejyEJD`(5HM>iL(ioWzYKaPD4cm6Z5mvt$kJf_KG(j{j zm^{9m(PM{l)djUonJ|pXp#`XUs1dPPf}Y+mef?3|IwQ38#^~#h5$p{U4n~MXV#MQd zgr<>5h~!{UQBhSDpWjO$;HS7aKyhgSWyL;*l=&D^?x& U(lZ$1Nc*=o1Tqzc5F`X7gu>K`!#H>GSk7HMn%eP0@OZN8poxSa7>;xJNDmE- z9c l3#3&Ykh6bt~fx)Ye;>71TyU`{ghbx(^lAoTD}`mvcQ<@&W;4UjRj z6VPRiBn@Co!^&lVsDmgT*C;CTF?Q?_uDWOni{{oavZ}~+P$z_-zduUD!9E(By4bS) zFt2TDLkmYB7N@-@Mk1l%_avv)bg(Fj9)0fHPK|TfLL}KX78exwRVvE-D5{szvI3Tz zRK?UOBN#iToKYi-C@Ao|?spbK(AE}W^OnOr^XzV#4s;O=#_)R8G>~M+rrf}pPP6H^ zya#Z4H$SucbvAS8c@|vvl)wTSJ76W r8ZR^W%D*elrNVVz zB2_*LNfr)A1jDNeSul4vV@3~Q(ZXuRjU7TkffqOF>x=OAJI$ jiQn8?$aMBtT;TVq zj2KzYH!hvdX(x@QYG@Ho5{blVKGM&-8=HCl^#gRa_p<*`KLx6S&ugyg{Pjd<{m|WS zCN5RU>{n4!*^I|D6h&cFO$n95N;vndvCNq>lIjt~_ r6vVhHI<{YkB?J)W^m>cY*y@thI zJRulcQ_8=bQ_JNSOl8=RLR*)qOE47W%}s|{v#yC3-)trvjF5 wBK e{3;8+{*=fDv d0Bu- z6Dzs!f{84cUqeZWT-O!?_UvinA5ZLL&FU6nu>>A9mol&e*gb!_fj>K#b8K)%K+D+K z2FAPqnJ<_f;&*CHLXgm4?1Z6w=gOI!ws0&(4*FzASBTfvH1qg#yV={&K{yhpz^8(e ze`UF;2>CV$DVw{5VK%c@G9tO!Sy ;)Ef5_Op{Y`Q#eP%jI+Hp-`MPs}Jz_qdPg! z*oDWFtKL7*bPsgV$AOV8{*(n@d(uF*5-?hTmfKvj(F`+4^PcuIhMS2$o)8okc=(sI zCUW)XXE9+^88Qil
*S -MGJtC;zd7x8FEGBqC#L_jzh*9wdJARWI@_XJx_Ho)og_ zIq5*m#Euy|T}?3-WJV=0s527X+^*&%|JaxrKxl~6CZu6iC4B3PbGTsXIEsq=SS1$I z*uJNY-#oO9ojVTG+ZUzKucn3%)`H2ez-6o>^P3&u`E|hq?HOWGjnYy-GiFxvg)661 zJ9!vBpMCzlzdy=rD;oIw<2&f=3?^4JZQ-WpUq z!l YnxhG77+A`qH9TrK7H^!X$C*46Vlp|%p49BS?3!RP9D?xo#y^+b|e zH5EzsoT?Nz7Lq;XcKKD7% 5? zfxuy!a&V{U23l6ucTdfUmoEq8%q-P;!RX$mW~A*b>V(mcwUHS7$Qp?d0-*`KJ`ex) znW@}#%>pKjslY0+Sb`O+oB7Ef*6`}vjl`k})YQU SEh!X;oD*Crq!TuQx_>Q%`bEUoofI znkMIbn$zoAwu(G2xt5gzcxvWdzC42|3-FBZ766;n1OTB()r|Dh3CuE<$LwBcf}v#r z{`Xhr^YzPTQBh_e;Itg+ zx{Q(%v)Wc#R=}Kj)f5%_*}J=)SWHWQxF}y{Hu@SEtINwu z=FY&-Mi$mVCt+5Z&TDmNkjz}Mk#Wtx)68s$L-(s`FnV|~-@9f$mn@rt*TN>6CU|d8 zJ3qc_H7~DfK#M2vsH!cq*;;;XEMt6Hl@+sl_pqG(W{Vp`YIALPipgj4pQ hZ3gVF4uI+R4Unju=a9hW_AlhH%l?J z@m#hrcs7LY%G#I#nX;3f9C6U4W$rXhFm-$dw|?y;&RR0wwmBylj`PT~yZFEVy`H*# z?f5)ux kB#M#L>2el3*yt?;hODJ&$drw=aT6RdXmTy}+F8as@~} z6=a6+z`&f3d!v~=Uh8jFRp{@J@!pmrgu`*BO|LR7p(~2Q*l`t9k1S4tx;x@917ZYa zzWKDLdLWI~GjiT#%K@97D_`iq40;(w3yZl$wJ^owV5cPnb5E$^wrdx1;>>ESa^PSO zzrBAWe}7>&$x(Q&-S7JWvz%?LGXS{)EBAEB8&GaxxDUdN@A@h2y>;!hw}luzrkt{J z^JcD*HKo*yF6F@fF1k9x>2e<&P@4OoeDkUQ^^BZ**>dZQf_wmn0n9GjIvto<24>le zMncn=J++eCzp;qf)2gt_hWCze=U>+H`s$`MnB6n$4zj^yO#M9@IP>)@?-_)|ELXpB zclv&l#{FIFscWaYrj!xYB^kGhLiNZ}MvX0{VQ&ZBU13wtnG3LG?%uCI<9iCwDG`RC zgwYI(u4||ot2?7e28n44iCrQgIAP)tZvFZ~=AJOzX8*>z7XIT;YuLG`J+<2B%s}S< z#(`9RQ)Ph3ubX=(R=38fNZiZ8?52k*E@2tt%&m;lW=hguM|+UE?QIMnQNpOv=2h6? zBT5)CvV?}c?R0lVl67H-*Zh{PjI8;zt1B{p<}fmGdPdH@bh&BTF3ZdVSeCB!hh#xT zSpCX$?$o=c2_}y% !&?LKY{jP6b`n@eX%1jC0EaPwCeu=J#{w$NT%-NgU* zht(Wy52i0(ac=GUyM(3k0JGJvn|mj=abrf~yU}$vzjlB2{HA*Y2X(;gSLQRr){$_W z9q%2bdSof1$7YyXQDEe#GRn#W?AY2$ERwK|W!#xLlV58&JC(Q0uc>|%1<%Mimo0a^ zUO=|L!=^XO2YOBmCnk0mNoH1kUjFyhC-T{|CfQ~)R;_8~jz6rXwJn(5Fk{VVcC$h8>YG*m?)6pFE9Yb(_?rHmS5RzF6Mtsvm{ zvVHSWG);5Wsbz8NF=wv}+0&9YVf@BQGB0+?q9ZF-Q(^XF3(7JGj0w2xqG?>ZY_bi^ zn|8GFi@Voy
QX4mvwH99n)(V779*-MyV1G5IuBQ7$ZPjaAl=+|%t4rwe0d%&g38 zPq#-^= m@-qN)n#URcX{7fnumU&lSYMi;VP0f~EA-P*vM`lCv3_Y}gS zf+X*lNY7%VSzKT~LX|PkuzNCar;SV(ojQhZUOK}xnGaBZpo`z$w}Ar(dont+gV^na z+|E%&GP)Cn|M^PNpDe9z>CgCe5XCtRomFN2?M#@v=%J;-q$(V3?dRe9Hq)@L!{pZM zQ~8%Grm^tUQ7AIMj-lr+nXugJ#=y`*Uil8o+V< a&Dil3XmR`3w9N0hseN|4Ov;?xr@r-_(r0yc z)+u&EG(`9Qwj-zgyJA0mF`Y#f9*0h?_Eq8Ae zn|s9`r&In+UtmB%QQ*~o?&F!i?I0f0O!3TLJc`d=HpOuNhc(^yGLpwFEH>u)vGyRk zq!riHu@%$43a1T68HUyw+oFOPH}#v?To8^Wm^OJhmwslNZ6EHsZHIW|*`0`lX1bP3 z4kDvj_Cc7Q4{PPg24VTdX$NA~bmZXIIUO=s+ub|GD}+FcD};K;^tO(18DlauztocA zivQWemJJ6@@vExBS)Zw8%GBY+BATs!tl>MwX*{+pBLZVsMsu%m{AL-inP1H0YZsf2 zZ8y_2s2p0vO;^okWTpAEMAM;O?znpchmZE-GXOm|)^WCTGPByd*~#5yG*Y*8$R#(w za=WBoci=h!MKEei8JB-?7S+{d9BAy|q5s}WdwUSSU$uqd8kVBa+Y{yS`?fKnx`ff= zE7I=EhZOSpFHfiSNDm!t!Sp`r{PO8+CKKJAr+W6K%T1#>AqTVLw@!>owy>C6{6rFh z3ztph%NI>GP0@wIG46U`Bk!zh!t2RxK;{I%eCCd2eg_5=W6ZgySF!!gm^-J@`gATU z YX73`MzOr|m&QvP7h__KE3xd72gXU|?~&MJo!nA3KOinSA# z#cB1MNN5ZlQo;!{%zI?!om|Z=KVHJz1tU>YxRW N^8vGhK5ds`Sv%ue2LxbZVAH@+nBUW+oqR9wd%1MkG)7gI znu2R=>E_RmY#| ?7{n;xzkp>r$n5nG?i0`Av7l zszNvt1M*|_jGdfebBR;NJh_J iYM8gE2BFE*Y7~1P>0HLL zbU=ERL)bSQ>8&KAgBZ*evkGEzVrTT?B0t}_d^*L&=7X5;Y-r)txAvR7WM@g|jJkuu z2!8ij2DzEN+f}fpMiz!~wC>&rjNp;S>E3|sVVLJ|w1nV=XZNsfbqg{nuPEfwFV5nE zf1Q#%u_COYx|O%W+Eq=gd#l+LrqA!;{EMejF{Dr$r#Y31CB^1At^UkmBz>#;>6Eli z3~9YtGct2pM>a2ar>%9?HmDi`K_VeodeSHs%rc)mY448khbMNVj!&60AWL}0PVa`? zmzeFqlKacG<=gyP`(?*;2wRA<@U3Z0`_-o!^)B1ebvuV;RudFJQ55?7B0O~OCf?h6 zMCz-!B*4X2%;dsLrsDCcnfP7Po78*b35}PY+)c;Ppvldci4`n4XB_dU=1|Ut{F>h7 zamh#{`Cs6vp80RfO}=cpvDuqB9>p+kZHPt(wI(Pm@^j >B6IuGFF?&W?>10u;u89QSthQGPy(-LQT&uc37tjEoq2XK(wJ=fP8 zrG9S*W5$(JHKGKo`28Mgrwl`A8vAy4q9sJ~UJpqgOlejWx;ny?mid`Fb9mZ;sw$LK z6i~PAC_P;f)7~7#976hUw%*9 7hGat)|#5ESq zAH|ZnBTWT%xV4W5pQ!_hE+-Q+!&+F$qU*^spYCe%U}U>rH}`To_kklgT~3o B z_)-*wriO0*`;Y6{`Ch9ul)@q(pSx^27hW<2pJAZr+%sf)z&HNcKvQFv$#(3-3g(?W zD!rdw?l(Kh*zL^aq*`Y*tT!hm@orEj((Vl5nB1j)Yl8C90G~g15`N1i+)u5jr?IIE zug6(eaw|Bi8(Bu>W_H_Lft~BXGq w=;IX z1BuhAThEB9C^R;7anD`r*tXfc&smq^5 NbpMWO?YUeUY)s%oWs}9iA&}Fh6 zQB%gEv&Pu+l}UB>vXYla=FL+*{qxIBlM}iMf|+scpf?WyF@&KY2*ng`{n~t{*A6o! z?D>^@dGh6b1iZ4!vSd`(WJK};NBzDIO-o)6rfK%y!eo|QZcjeVZj7HTwl^F*KxB4K zW=4N@GnqTtQwG3Hxd15oU|f(YAHx7$B=c#^v(O9|VWz520eZS4?AzVWs4-=X7%9=I z175~Y8bU{VKP~%vKye0^Lb6;#eKCqkeN3M-B2&()LZHCQhBuo?#5GemvOEujsJzL7 zu^ezUdbey|k-NhL^tdKiICD62E!Plqc87WJ`MnrF%<7crL;?x}Dy79f`~e>xj|Y!e zO@Fj9?cQ|q+YCHw_~|_bnnrtDAKg8X^!EVW*w|7c()8LHF(1FVfj=HgBC)X0gWs>> z^LmoyqN=DKC3P{SimIf(&ZR1;l|_N7DtNpq9#z5XOU_GsyeeLA(yhm E}(P+Hh)o{N$m`Up$&OUTVPSw_n+o zYdJaDd%*(IG&^VBGlM{bV<*-I!g0aOStA)`8A1Q^t^KsM_GJCQrK%{LvT!74oic`+ z;l)%`6j5B{qo~k_*XzOK$$U^U`Arlnj4h(K#FUd*EWx^s2YLC`de&?>NGKFHT!L !m-Qan0$xqa@ga(D?}x^_N){?%$4>N;G%@u;ZDs}R<{et^$?X=d8o z=l3vm_6Rn--Ap7B&*_`#<{C- }Jk>g(fH{@G@)82tNC{Db!9GMro=0r|I60 xsB-^G(Dxwyr cGxIuv*}%re?WM-$ zZ`-cC)a%IVGG &{#Ebg*fAD}HbGFSiaY^E1?8Woa;_tTe!qMPpcS;z(XywV!`H zvx~j;oer0y<7nn)mn;8R-3d)lJ+he3Upk$$&z*$V>&XdlAB0SqK8&GNh4l4A(q=NS zdA%z8cXzUTYa5m4WB^@M5@6>1Y7QOfHtgGQ6Qhpnt`cUBV5R(}dtK{{hh_hUOpR7Z zUcq|R1+}J69wZVPYd1C1*%P%*(3_bm`8O8R(o;LfS`-Be0$wgSua+Nve<>%<8DY*p zZp>g@#&CA8NZu9GKeL^d5KKFvif`Vyi1W^$jL-Mc0kftF-hF*PN1FQ_uVFK?s-_7x zt!^d~&K%cL6j*TD7!*`Pc^Lf~!&4l~3d_5K(>!#Vr7gD~>7!^PgIkt>Rlkp^lg#Yg z))i*O+szbs<+Y;d2}q&nNLz^KR_x>8k-lsz%!4Z9$5wFbO-nd+$r#&U(I}Y$Or}}J zAMXCZP=F>knkJZc;z(|~c` 5 z-;l~8#!Vh#Isxb$nzIXQ8oat6$Jq;61QK@&3W $HB;m z;l m*)N5JpJ%?y4u5% zYu0eC|E4>b+l~g=vhffvy|9;HUzEPyD8XQiXe5D_urKXrh{72lT0$^?(J0eZU$%IU z^z+c4H?e<@eRe~ZBjd_sG@PJr(^1a;Y@C9^3^vNj3h*fMK{$wXE#?Ylh4i4%NNXa^ z7@*idZGG1R)HIknww$?B%<9I$!@cZl>_ig+kE0GGXDyFMaakT$(%^7sisXAJ6ekpn zA%MI7vW}NuZQ$xFXK>2G(bDOs;Z?=laNPp>`lD=nuhozad0O4#H=Eh>qiKSvQ-^Wg z4JR>bbg9H=>eCxrj_~kbx3F(dCt7M*IXPpg;Pa^{KBsgz>$;jIn76owuYUU^hE>VG ziQe5A=D|O0Wc%jBj Z%4b0>~dKVmc?zl zIZ5bSN%cP6uwrOCQ)me|p3oRQvXq&%Lrsa;v9E)sgFSdXs!JtjPp~e+^p;(}G^#Rc zYR+0wpl){?zxv%89{ fzc>^pLHR&D$|GO)z?N z8DIJ8JjSQgE31TpF`jy22fzFEYIg5zM~LJ?Npj&tR`uzqq-oM6kr2#XP{TDhEN}#K zPgj`xf4`nht6OZ_e6yYQ(ce9)Li^z$E%iO7u!mL^QCu8AB Ca__R8-8s2YBw?tkLT6`~zdo{!2Oil* zB$AMZHGW( P3=)2w+1y_x2gC(C{X0aaCnTz$ CUtE(f#{l8z&hPRv3gHxHJl}mbrfPHmG ziG(vJS` GdcMb^CFZkp-_xR9@xUmFYF~AOE})~=U!I!vQNYXC(InqH8;$s za)g|jdwU{0^p}lnct-+eB^LrR+ju+*2ljRn>@y$HT6oSFipzYqU5B!~x#u$(K$4;L zI+E$h4ue2z!lMa=F*W8vMQ3l6t$VtpCsH!Na I2C7&)>O;c$v0mvjIi!0+>L`4uxc=iFN9)LgJX#-k5z<&_ur zrPLk!e6=;MTnIvFf{C?5xcd4N8R?*}cXft%;E(HB`$m&IHxls4Fkwos0&UGfdO9K) zrLwvh71iV`+uXht0Y*%yx)zvOA=GCPEh~f;&*m*bFubw|zdtjA1!!#Urn@g{0h94W zgM$hB=?R)B1up`_xvsr4vRXoXN};CSI(rYG=QcF*L1k$Gm#Kn zaM4sQ`rNeSF(-?}VhNsmdKa&}xQ|3!%lc6yYrKwm7BIB3kjt)_#kfgBq PAKJ#- z?=+eUUKhXL!xfj$ g?~6KK zB`nKl#?DSa09sryYHT^Do- Ok{QwYt#75)M* z(@q?oZWuCgIyb7vYXr9G_EE)HfwqMcYd4yq`u?~eD$HGHB$}YPEu7p??&3E)3mCgH z_byN#hPgX*0)=j_stRpKgWUJmt-QDWsKhk{0v^8dmARaC<^&t)W$9K(7U%Stm0W$z z94f2ivkJR*v~ka$Hqg-?L{&5Ql-Tp+R0hubLqITOXd%NSakn1o U~!MS#s)*ivhopUAUegM-5>Zax%{`lt&H0 O97d8zK#_v7w7U{&o$A5B8G!RJl8ANzF24WwT4&LwD4$r$S3; zY+l#GAO7QAHm_-M+yLdq(&jkrG5aR9f~gw|7Peg%fF(aa%HW zm&}S_F3fDUv#%!R+CwOSqAG0Nc9=i>aUC~)`(%a=weQg$KYj?;{QDgKaMwBx9qdg_ z!DZt0dA(fy?{hf$l+n`MMZ$6Z@%VN&t~(?>F_T|ex#v$y2sXak!mcfCsER^=e &)I8WM_AUL{uZ(Zw7Sv&;lxJN=)Ms>nf)V6GqWZq{l~c>uyq# zS|qS;@aYZ4iN@U*Ae`g0cVD@OVa~8Bac^%xGFYelD@owJ{7M7=^FO<#7aamDSu&O{ zd|@_zzc*bms-n=*5#pXdZDQkk^G)|cz^kt`@Wi9r5kfQVhLeFqmiKJEo>Teh`#{|I z*6LT5x?JNlx)VUKFJ>C16_xlYs|c7^3vJVe_C_nir0F_cqvzaJ1YsLP#^V~jy g ztl2> gXH`0~hb2j;0^v}c#~$6ziWU2%Zd6ra*=Htk>18ue6;FDM yD2fLVD2kmRtk89;3%3TLn`A4GyvrzGyVQk|(MX(vqRc?h zw7@rjH0tkOrwvEeEZI#`coX&th(zNAgOQYemTThl7z~3zVRtV}hq*z@TeEWo31=6U ze0e+`dVBl$?QdVAsCWtU=1sMEDJt@D^)*X5(EK_tzx)y+GZ9Z$<1W7Uy&crl)UaX0 zdI}2)C ^oGp&w!$ {-Kl>PNuYI0zOX(=*%r$O3$YUltUulUfC^9 67ITWt(mpo3H 0IW5$dj7BlYwR#oFrRY|KG z!Dthmy_;!idyc&a@1?ozpY#OxplJ~lMNPXmraM;x%2pokDug*sr?A}1S$|cC$2By~ z0%%Q<&a%lV%PzW|YEG;(up9#ucJ9#cQFDqk8#~I}%L_}MUYYxBc1AW3B2KWsfwrSB za`528balN(EY^k)Q540K0=wYZXP@O4zxW0H{qlvE*|TSJ>#es^R#rwlE |?vzSL?A!OE(3U^xTEUO%$`NW*X^M|&wI#p6{_RAaiG z!cRSIhkld)yt%H#+0C-8+uOrX(%uY%gdF3{h|3@@OBmKewaIj q1OnWD|NT@|RdN0G*BjJ{jGKS?mw%zNvy;2-x{F{inA3f3<}f^H zT9}^DUi!lODKDBvW$8T13Mb-GeaNOOomL#B;oD4vWo k0PP zp=rG&**N=kW$ADfg@S?t9)0vtX3m_+8E2efbK~)NxZ;W{Xl-rf!3Q5Ck&vH?$r4jC z%|fHIe;a+F2Fi=4GNSwxiv7b;6fdCJ>c{w=y}a#pn@?CyjBIo#guv@jZA;v;BUrg$ z!fJ2cB4_a=x69s)JRTLFU!Qt1hM4rLFAwJur`4~M4|y2E^2~H;v1mJeeecoRvxY<> zlyc+F$fl5mFfnawYb(F`&2Olvs9^5gxi 8I{q-C=bcko4eU^fP0*5KC?4sZy zt_5lD-9%4t50#}0s4SgLp}z`i50+nFATMM2RH-aox%HktZ}JLYQ_PxiyJxPcwz9N> zX#vz-Z!zjc22D$`NALA|2>5+z7PbyNW#eVV@;_rH_bW@IH4i}Q;ziwGQoZQu*+}b= zf6&$W8i_ Yt#C*HAmJS)m(nYGRl;CCKe}5fVEZ>i(f2$5hU;XwjMo8JIb|} zu*R7*Rgrj*i@qn>s;? sNrKq!t5CWgi$2Hen!*754Tb3?eY67*#<6+B|E!=$b%^WyzKpMvA(WCk0 zFMr9rdGm6b`N%HG^arDdIMDu2_8s{ F{AD~I^MEoQkMqz& z5ApQVPfJw`MNzo$!VCH8SHC()s)s3b0Q#ecs6YBF`;I 3a}gpnHp$*IWW$7XVI`x_81-fc9ad3jZ41)bZN5NcXt|G~0*~|%sVxkt zot)L3`8AoHM7)o#jyGv*{RhGR_YfjMKGSekNhA`?o;{n}Zo7>!W8^m+m6n#`_xmjy z)D^nBySekuJ9+;3=cWEsRpsCR{olFz>Z=Kd!-L4wsWhOXi8x35HnaQ46Et h1JzSTun6OOS8C8f3 z+u0*9wFm_c9_gpOGsKvh%uPJQh7?jz;3XJJxZbhm9KM{@W$8_RvOG#S*hqKhTSOzx zK%DmjWB^UmIN^j7xZ{pHsI9G)y4k#WGxy(rKjCoLwqT;FDxIC3{P2fAq_nh@v(G-; z=HKV@ar4bL69@#j@4owN(}9B_3M!#^2aO%CGGdI6Z~ypKszwZ9&wH)B__tj&*LR^f z-0~_f_w0=9WELp$P&(9nx~a1@$dSfg>8C) mWv z%288OPGM01(Ghk`h`Z#nf~f$4X!Hnu-RlYV?LgD|F?2oymP8`K`0?ZU=}&*kv}x0% zZtCmn`Q @C8brGeyk4mI=YS9Mhhr6mQn8+fwm!?Jw@Qoo9dmI%_*xrVmG zPte!1&H(23Cz_^FSy{=gx8BOUdGn-hIyySI>#n<4w{BflM)mo896o%QU;XM=96WeX z>ZY);kn69%o(nI$&=%fc06ZR#Q&m;Pf&~jq<~8HX`O0@s; 3G;ljdz@KkIphUtb?^5o#4MK_dc6wcM-`f`yUMLv zoad~QaVlt9jQ-wTv>kbh?v542V{N!;*ZD~DU~4JYUw=Jko_VI!O*|gw?z`{ig%@7P zSv^n`g?HY0hu{6~cXV`gNZkw_I+SmI^P9|@H_tR{G8ig|$KxRs3Q6b3hgKDF$u+Y% z|MF=R6!~l l$Jd2C{ESg_~SHIz1Q8;v{hYeefxQ1b5Wh_s#I~7EnXyh>6?XS_-{Vws?5rd2O zFG2_cfdF6m%2)XEm%mIPVE-myJRax1`|jhOd+s5TNaO`JAp~`GbwnZ&=Fgvx-*3MT zY{-xyj2SbAmtTIFP$*>E>@-kORh7QJKD=Hp3l}cL>op_D=l3vf@=$yMsNdN}B97@( z9M)Ai=N{H-mT|4B3bU5fFm+CK+CeOm;H_u&aj2nNGRtAd1g7v6R8(SGh?c&cZ0}fs zr)uQ%<%*{mMfGD}d9hPGl6Qcn)({t;UrUkU8yfKh{LhL8l$_@&W#83EW+WOpOmF9E zx;tMb7HL9=m?RbNPkcTfS6p!g-}=_KC@Qkwo191_c>M9lx$CaG2!%oe*fp0tqO^JQ zW;`AbC!KVX6tJU5k7oS%@x1=}>qMi`K?AiAg6-S4Gj7~C>A1k_RT*151jQd@*S2~{ z6rft>udVgtUZ3W76_vC9Z5maEYkWh!F`oa+*7OM{=P*)#l}uQ1EyAJxU2JQAiM>7V z&=Wh1r=qZHxfX2&6g<8%6vby_N9)thuuxLq 5szOFU&biPhFxH~oAvsdb1OmoFz zF)q63B5uF^b}A|=q;B4P^G)u&^G;e?THZIf6h$Exi?MCnHb#va#pKD8rS7IonZnqy zV_CIo6|q=s&_LbY-OY|2JD4 GV)cRbbq_fJG0B_ks1 z7Fm%!%bv*!8JP{?79le(60$-@*&{-sWMq$Q*}1s(#kFVly!_7n{{Q=v`?&YM-tY4| z&vo9f%Q^wo^oDBE*{e2I+cb;V8P9H7p@Z3{&6||GLV`?spU7~B(hry>pM4*ropQ`X z-bx)BwAIa!c4=&Vs~5%HmPkRyQfvM3KO%XJfb)9;e=#-hYP%&u-Z4>q>)O?Rf9zAw z9N8+hoL@{J8iw00U;DcTzndQX(eY9A_Qt2Xo`z=hVzE8lDR&ZtpM}yIpV80Jel}L_ zRDCd)q|6qjK z@$*wiF&?>JCRE>0%;ngi&aSnQ@8L+_<#mSw8}VnQ{%_+_cxhps4Y8|v-q-clajC|< ziM^PsojdDS#qEYRHHB&AuhE#_Xdnv?+NGvskw>$A%|)D}8^94aKkW$SeAM6eq}y1U zv_PWxBJ+Q0!{rB5pB>r6+V003k;l$l(?K^hWvVT%PslsWFOztcQH6=JOS sL> QWm%;TazT1&lO{wa9%k2&B+Sr>J z*%RSsME+&J$q+__2_*jx7E0*(1P3p~t1Ht=Kgmkxa(ypoE#aQ>ptS$&>E>ShXKf85 zHB^^!Vw^O^7tTyiDxXx8gtDbBF}|}gDVu?>3Rb)Hx!H?4gz7wn$_@u*ct*xe@^Nn= zPHl$v{l5vy^z=s$Yd(K$gab`<3T%T~(j)go`{jSyT<}hLv9RtFWLr*j>o4(*=tn(7 zZNw>Q;i{Rjv9XTLbViP&_GQDnHVb`2Lv7&_6K$|1vP5Y7ujl5z+W+@>cWt}_#3nOZ z*mdavr)IpozW(K|t}g#R=#Z(lDE5`1LVq6p?7Ir9dq)XEPf1x=So&9U**`ajJjc7J zB}$EzeaysrErzjjMlW#uP$BX&+QF$urQX|&ZcE&lP4?WdA`cUpHLj}&7ZX_FqKTl1 zaQ{pFeA>~Gi(>r6*JV_A%LIjsnrZO!dKb@P^-tM9$gWX^$WGU%H2GJ_^EBaZY2~t~ z3QJFrKXBklStVlJjhx qmH>2L{c!jr82-hxg8S@5-N7V2irO8hQCr5Lzu|`=w|9S6x1nlHhOpIl?~2 z9#;e`_)@yg*dmeY{uMue{)^9_Se)MR94>caKixo_*0Z>eU1!NBGV_=U>`W93`^all z^rV@5F#n;FG;7Y+uiWP1gZFyQk!WdYjk#jX$J|EkHB+9~N#|5oCo{b)_XCpH9C=ZY zHQ*NzjAnZAnQJ6qWSL` 1PpC4H5MwpL!c#q ln6g-k0t7V@cflbjo}gz$AQorksitLJL|`%TK;)r zFqG~R!%#)4M4w9z^b^x+T;CHx_I(kxRRh2a`0p~efB<1()6>)2zG(ulvtl#2vrlt# zr?(CuSMZQ#J@%0UV@yj+TW(m=-N_{J^2^U&pTM=kXb scSmC|YHU%0zW16Y`HiR*@0*)<1yi##cVuT}1+M#^9_2qQR?Y3;awr<0dXu j-78e#60`&h5XF&~ML0dKJ-jSv+D+1rWdzasN?6cjEYFgeYa$Pp8 zJ%!Q2(P~*S63zLx{*hZ`t8oBT^>&{|KL%st$`q~&Cl6!nF}Ll8ivnwFYZZ(nemjl4 zoXp@RUtL{&@Zdo_zxjrTG%X!n*1TSd3sOZlSeXrK$f=zi&$`m4`mZ858>yVB%NBKh z$}#@O4}K6N?F5lxd3tE%gI~6U(^)SYrX01+C*`fFNpFT`P=%`w|9U~MBZn6a4-XfW zkU$R)hvaguW5QZ-iwf5TZ7;}a7g={P`s@~`{T&>fV~op2E_zQ4Cd3@ARYd~s@5FzN z@t5Teu;PW-MRIS W&C-RskjJ#@)-x~G3$!O2Oe z@f}4b7`(ndJ=mGtH*aQ?m&Z3WD1wR(3=D)m6ZG7+ZO!t%%P&0cg4VLb*2=uV>44)+ zxfAELUK3YT)LGe7>wUD}B2lZLq|_+Hb5xIMR~OdM(6|8IDN0oN L3N+FZAoZu zZh+!-2%a_AqVD!^QGW5#@vTzU?fba8;lX|D7XJRuj9+l-+R2HJxWhzpsyjxsE0!KV zF6oLSsdD1CG%yg=!o3&io*XoFaD89(`LiFirVN+hG7{exS8H`v yJ7Rk$+Y z{5;@oCxyh=Wce|+udjj9cV7v#!3TX*q49f_uq$walqTl2gM$F2%yzF(p1vfhzoI!z zaSIEh=y(m|JA){gTAJxCHFb4$Suq`~arHE~27R`u$r7|SE=LZ}bD2v!w$cHKoFbFk zC(1J_=tfe(nez1XH?XCK2IVI_mv1pLGDa+x egfr+@@-Pd>nF4S^R9HX?mj+B#w5 z6XG|*{eIo09MJffzhZ`l5Y7p&udU66aHa0cFCE4ckKi_b0w|8ID)`C2=@6((R*&Ii z!DPu@`zsm_{O$-@`|Y={Pfzfuqfu=4LmTmTGO&pW(8_e7z~t9WfnT%uHZtM=@^WuR z%AJ(kJ2Zf5DBo=7&AQVZ(J>h+Yh1OIn-?!)6VcxV&|0xpx!f1zvGt$n`FaB*^Jk`X zc6N3%0=@?wXX;Eo)S(`|nW*)?1FV3xw?i#v#l0Fq=CF`$3w?rX1Jxk~Rrs=dw7ZHk z#U5S(N!sZZ_nGRgNVlZF27g79^~soXkFJr?o?m#J?9XRK&_<~q)Bh1l8uMC3 qc$_x02GUH$zygj*=3wMjXG` zxZVSZQy~2rg29@QrS4%#Xzk2*%V**rCIqAI3c9Tr`y6yw3VZF^#h6=KBFZK_d6Og@ zPVQgnmUWa@vQAU;^_9y>^~~kLJ#CH1Dk_Q|$TRYt(SDAKwo149>_Bk>4y6G!#q%PK z8#IJ d zT>&&7*fu&Z%Xe^}fie0b^`#&}%!ba^5=qhB@{sOKmWnw%^n_Z;_HG5XHa}GSOa;+3 z?hf`K!rrss$BzgC=lPRS`h4|rkrkC!qUi@+Ly*6L7w8isD(LCyotM7l6afeAt_(Xf z_alk`W4mSc%zQS&EQjWjOifJ>hI@QkKHV~v-KMZX+)Tgzrv;KdNSQvsN9gJ4MVIpO z@mT>lwkqJSYX~yT )=Fk`_wxRUeTa%GZ*&_loLs)_Ak)6*@p5?IkiW(dBTE#r;TFst?sMekAN8P^) zQ8&&|{2^JNs7W&BYZ *3u|}ZN_I&9bZ{lne4D4#lLO|Hv*z3&bpJG0{cf1%}=B^ z+t`m!_UaHN7ly}gU|Ke#h)OcxvB?&24%CW*?rUb39bL136cpI>q{<-n$@_EEx5u5K zV=qBgl|#{~cs>=isZJp5%NI%I^mwZfSLKNpGxw6j?G+6Sth*AQ=?MWlN&>|!EG$g^ z_9I?g{tqxDBpV4L;a`@3cL?I-Ur;G;HPBFkP3qLV+^Lj|j0}QD(4V9iQTn7nWCsQz zMDa3Sr6J!gkdsT!#_EH(Vz}eBl3rDHq?FWj`bAxo@!3pU)R^b;chuAc%k=Ug6#jcQ zQW~0M?Dc$#i>s^m% q6 zh~jEC0U^PPX{OvB$VLzJ_d5bcPHlJ$fe1+V!K}ydL(FMr)`_Xz6@$6=y1LFAcQ?0J zfK6LKf5_h2Cb9c}R9H^#5;F=DH;-4j7lRUlv4=gqAN`dpui%@7p0(3nVwG+?!5?jS z)*$}dS J3t0TC44aznnG0xD7#IjVrfI;9>4rC@kSNFK84Z#6pzW9vB*KHVgPfB{|e4R5;I% zyvao}0xi#tVo$`EF$HpSVVwRv2qt-@O_~@`CIt0jW5WggTP&mj8M4MFzQ-da$da-$ z^w`+@Y$W1#6>2EMvZ4xfE+OOjQN4L@Q7bd*ZUAA32PoPqDkkQ=;#o;~+|>REMh8;_ zVW1{=NKFt1XG>v9I-lm7s)q26mGRpBQit6{(s=huI87@PK8cVVp*aOXu$BBPPQ$+k zIFCCyIf uTr{oqn21Dz@(y;S54=dqC5gIo6*eWbQ(dWR$EkbtlVp zgmJ;Y0~F$@Xn%;<1fIF3qoW)1z=bC}wOoDAD0Xj&pEc6?-=u WIp7Yf^}CDp67oGkY0KeV2zb@%@J^{n z!C|aC3cO2CzIoLrN6F(5Mk7?lneQN3(?Q8*X~ew(|4QgY%nP%l!$Vs;JFA_gfqb)y zXsA~&1`~Jkp;ztPSYkGHWb4KeKK9cmVe3wYZs{#eP(STo)MM ^!}*c1 zJ{rh1V3v9{6K`pM^tg?SrdR&(l1v@82f*bu;hHm4!is$Ixf#O=16PoH_TVzL&COYE z-MR%Ri%#AxG}L)drgb@l#G)WBid_xdH?6kh6p6O%ft7VnYRXQd8YluEyeHw_W=6{1 zyFsHK$s!xF8FH>f7kUaP7gGDkyn@<9;Q#mtPbqb7+6*udN
c^IEwZRcm=IaQU?X1a1)OFb=m%pHy9*ry)K-3a zax`3myi9h9dH=rb&apyA&e`4%R=J=O9zKMx?VN;`em2*cKzP%P93&y+fx)VoC8ecB zuyT+biz_Q%zy^ZRhM~#A>M93KNPMk!mX6v|I!3|N%uEwL2KE#!J-t2<68tb(yrdJG z^L%$!ZZ3HpRtL0rH*YFIx7F-T;DFMfY|V9T@9t*Tx$Pi7=uo7){=F*9d`ZNnn;C`z zJ@8;a{U5G0&1+N)|FjgrBoerCch?OVsnD3O=C%z @VO2K0t@@kZ fCm6M zpah7AhTsjMt9vIVx^oTkJV0Cl38nw~B{oisGMSAhI&73Zh>l$F%&&EL3^{1B&*35< zSCQkCB48)kF> Gj$~;rIEEpO{|)F1doz$vb;U5Id=B| zr5P{iN6oH!-@>B1FG~YmbpRy<`Xx5hw{m)?c>QhtwL;^I*GbeOS!cT>uvVj`_OR6w zlai1xUuySwqL@2&jXQEoX4_O;WZ)1fI7L7CGjNyTQUJ@J9Bwbdrq6bLT7U_|uD7o5 zB~_jn^Qnq5a$E_^VtT(}I-?fB{1}Aq%5ZT|M8u^hg$zJij*`iw`#DHQiThHQ7KlP+ zhtPi3Bqcrb&LkzW13CT=9Rwepv@bhdjc3N YzozkVoAm`RS`MMy`k7b82BR zgSRTg+J)V0ogM0M@|5IHHbbIuZ)E@9KTc@dxem6_twea9Se;Gg11EVzoK7q= i*|yVx@}E=U*Z-=C3#@X3;MaT4sH + + +Like what you see? :eyes: Give us a GitHub Star! :star: + + + +Focalboard is an open source, multilingual, self-hosted project management tool that's an alternative to Trello, Notion, and Asana. + +It helps define, organize, track and manage work across individuals and teams. Focalboard comes in three editions: + +* **[Mattermost Boards](https://mattermost.com/boards/)**: Integrated with the Mattermost platform for your team to plan and collaborate. + +* **[Personal Desktop](https://www.focalboard.com/docs/personal-edition/desktop/)**: A standalone, single-user [macOS](https://apps.apple.com/app/apple-store/id1556908618?pt=2114704&ct=website&mt=8), [Windows](https://www.microsoft.com/store/apps/9NLN2T0SX9VF?cid=website), or [Linux](https://www.focalboard.com/download/personal-edition/desktop/#linux-desktop) desktop app for your own todos and personal projects. + +* **[Personal Server](https://www.focalboard.com/download/personal-edition/ubuntu/)**: A standalone, multi-user server for development and personal use. + +## Try Focalboard + +### Mattermost Boards + +**Mattermost Boards** combines project management tools with messaging and collaboration for teams of all sizes. To access and use **Mattermost Boards**, install or upgrade to Mattermost v6.0 or later as a [self-hosted server](https://docs.mattermost.com/guides/deployment.html?utm_source=github&utm_campaign=focalboard). After logging into Mattermost, select the menu in the top left corner and select **Boards**. + +### Personal Desktop (Windows, Mac or Linux Desktop) + +* **Windows**: Download from the [Windows App Store](https://www.microsoft.com/store/productId/9NLN2T0SX9VF) or download `focalboard-win.zip` from the [latest release](https://github.com/mattermost/focalboard/releases), unpack, and run `Focalboard.exe`. +* **Mac**: Download from the [Mac App Store](https://apps.apple.com/us/app/focalboard-insiders/id1556908618?mt=12). +* **Linux Desktop**: Download `focalboard-linux.tar.gz` from the [latest release](https://github.com/mattermost/focalboard/releases), unpack, and open `focalboard-app`. + +### Personal Server + +**Ubuntu**: You can download and run the compiled Focalboard **Personal Server** on Ubuntu by following [our latest install guide](https://www.focalboard.com/download/personal-edition/ubuntu/). + +### API Docs + +Boards API docs can be found over at https://htmlpreview.github.io/?https://github.com/mattermost/focalboard/blob/main/server/swagger/docs/html/index.html + +## Contribute to Focalboard + +For anyone interested in being an official maintainer of the Focalboard repository, please reach out to us on our [Focalboard Community Channel](https://community.mattermost.com/core/channels/focalboard). If there are no maintainers, and you’re still interested in adding your own improvements to the Focalboard Personal Editions, we encourage you to fork and maintain the repository. + +### Getting started + +Our [developer guide](https://developers.mattermost.com/contribute/focalboard/personal-server-setup-guide) has detailed instructions on how to set up your development environment for the **Personal Server**. It also provides more information about contributing to our open source community. + +Clone [mattermost-server](https://github.com/mattermost/mattermost-server) into sibling directory. + +Create an `.env` file in the focalboard directory that contains: + +``` +EXCLUDE_ENTERPRISE="1" +``` + +To build the server: + +``` +make prebuild +make +``` + +To run the server: + +``` + ./bin/focalboard-server +``` + +Then navigate your browser to [`http://localhost:8000`](http://localhost:8000) to access your Focalboard server. The port is configured in `config.json`. + +Once the server is running, you can rebuild just the web app via `make webapp` in a separate terminal window. Reload your browser to see the changes. + +### Building and running standalone desktop apps + +You can build standalone apps that package the server to run locally against SQLite: + +* **Windows**: + * *Requires Windows 10, [Windows 10 SDK](https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/) 10.0.19041.0, and .NET 4.8 developer pack* + * Open a `git-bash` prompt. + * Run `make prebuild` + * The above prebuild step needs to be run only when you make changes to or want to install your npm dependencies, etc. + * Once the prebuild is completed, you can keep repeating the below steps to build the app & see the changes. + * Run `make win-wpf-app` + * Run `cd win-wpf/msix && focalboard.exe` +* **Mac**: + * *Requires macOS 11.3+ and Xcode 13.2.1+* + * Run `make prebuild` + * The above prebuild step needs to be run only when you make changes to or want to install your npm dependencies, etc. + * Once the prebuild is completed, you can keep repeating the below steps to build the app & see the changes. + * Run `make mac-app` + * Run `open mac/dist/Focalboard.app` +* **Linux**: + * *Tested on Ubuntu 18.04* + * Install `webgtk` dependencies + * Run `sudo apt-get install libgtk-3-dev` + * Run `sudo apt-get install libwebkit2gtk-4.0-dev` + * Run `make prebuild` + * The above prebuild step needs to be run only when you make changes to or want to install your npm dependencies, etc. + * Once the prebuild is completed, you can keep repeating the below steps to build the app & see the changes. + * Run `make linux-app` + * Uncompress `linux/dist/focalboard-linux.tar.gz` to a directory of your choice + * Run `focalboard-app` from the directory you have chosen +* **Docker**: + * To run it locally from offical image: + * `docker run -it -p 80:8000 mattermost/focalboard` + * To build it for your current architecture: + * `docker build -f docker/Dockerfile .` + * To build it for a custom architecture (experimental): + * `docker build -f docker/Dockerfile --platform linux/arm64 .` + +Cross-compilation currently isn't fully supported, so please build on the appropriate platform. Refer to the GitHub Actions workflows (`build-mac.yml`, `build-win.yml`, `build-ubuntu.yml`) for the detailed list of steps on each platform. + +### Unit testing + +Before checking in commits, run `make ci`, which is similar to the `.gitlab-ci.yml` workflow and includes: + +* **Server unit tests**: `make server-test` +* **Web app ESLint**: `cd webapp; npm run check` +* **Web app unit tests**: `cd webapp; npm run test` +* **Web app UI tests**: `cd webapp; npm run cypress:ci` + +### Translating + +Help translate Focalboard! The app is already translated into several languages. We welcome corrections and new language translations! You can add new languages or improve existing translations at [Weblate](https://translate.mattermost.com/engage/focalboard/). + +### Staying informed + +* **Changes**: See the [CHANGELOG](CHANGELOG.md) for the latest updates +* **GitHub Discussions**: Join the [Developer Discussion](https://github.com/mattermost/focalboard/discussions) board +* **Bug Reports**: [File a bug report](https://github.com/mattermost/focalboard/issues/new?assignees=&labels=bug&template=bug_report.md&title=) +* **Chat**: Join the [Focalboard community channel](https://community.mattermost.com/core/channels/focalboard) \ No newline at end of file diff --git a/focalboard/data.yml b/focalboard/data.yml new file mode 100644 index 000000000..b2b3b0910 --- /dev/null +++ b/focalboard/data.yml @@ -0,0 +1,20 @@ +name: Focalboard +tags: + - 工具 +title: Trello,Notion和Asana的开源自托管替代方案 +type: 工具 +description: Trello,Notion和Asana的开源自托管替代方案 +additionalProperties: + key: focalboard + name: Focalboard + tags: + - Tool + shortDescZh: Trello,Notion和Asana的开源自托管替代方案 + shortDescEn: An open source, self-hosted alternative to Trello, Notion, and Asana + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://www.focalboard.com/ + github: https://github.com/mattermost/focalboard + document: https://docs.mattermost.com/guides/boards.html diff --git a/focalboard/logo.png b/focalboard/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f8489e8f2f3c8b0d46874c3c9b299752dc4b433c GIT binary patch literal 4069 zcmeHK=U3AS(+x&KF@Oc>Rgfw|04dTIgoUVxh(MHTLNTHcN)ixAf>h~EkuDms5X5Kz zNhm=uD!sU26$rm|7co+$ETJTMdA`5@!Sj5$GiSccoH^&topbMAyx=M&sU!&kfu!JW z&X@Kw?LQEQ>_xjli0NLEz_?wB1%Xa#{RblPPaJR{kW3le+3|9G)nZj5Ex;xDgF_oR zYoBIW=CdBqW4C)5tB0@8U!r)Y9RIA5j&ywZOqA>7+2GO`Tt@3OxN}G3>~lnoQ=a&& zCQa_u0jE=sNM}7WO{DMbcXQKlyaN|L__DcVhOc#fC%VAnQ|{d}dlSBFw>dRj&aa#q zXftEK49GdyZ1S%^{+
zPy@)+{A})Im~B`NC9$ z@oZ{}Y9y#?11fALq7}TN1`Lyou4aC}XR17pE9f?^Vyj6~rPq&sMOYr-X=6^ja-1Kz z5p0if8Wm^&Nx@0m4E^5gagw(vld3%5;2ocheLx(b4CCE%*{LQqfw~NS28rH0k}BM$ zZ6LBl&X>z7%?HX%y(144?8^jqsi$_)&U}vs&ITU=65h|UL2G%~<(lt=1EcVQk%W*= zrFh4e*~}UkF9)>}(O;5>RR#r#;y!vSA9Yvj7ZN`q@Vsr@7^2m)b7H%S@oSsoyDLOF zT}MsdymWJS*MCEA#TCX&6sr 0G8%W+vFBW~4 zMMwQ^6*YjsGpLcLRvu6zo2g5E*tSjaO$AGKwF7ceD;FzvVUAB6hp{^b5Sw>jciK4- zCI4*kCPYC6H6rr1O7T%2>cZl5AwnyRiGB-5+-e448S~=cpV=Hwq8EU&PPfWBlVVq1 zr8TgB;q(+ e9j-=#?by$vqJth!y=W~NDp4k+>!n}DuthM%9MS}y~1C} zHs|;;+n7TEVikwBoo~xu8Cu9L7s >c;pn8g;24rAx7H`aEFDJpUot W3>W*N<$^YDXL2@|9Moe(K+kXg&VQSl|2$Bp#-3o*>SX#$5aIVOKlC zq0PdSo!su-X$v9Z34F!iS~iuxYAYIyh6-|Dr?TjlBC+t2g=oML&;jl!?0$Q+c$fK- zc^2qX*xlH=i@9tsEK=Bov*_|g_M}Qse~JfKrqHQdYjwDD|68z?Aw;;A#9vI=1UDU% zO3HEbsO;a-7H6gOkQ@dk(#$ir ev($Ypp+^kd}w #nr{lm@L^_jOIY zxaySMAVLryKzFsV=sl!!G0~!44hNN4fbU#O5Lj9XvvZ0ZByim$a~`%5)GCsy)1uo8 z44>E@eZRMt^S|#A;VB2)Oyj63@p!1<8`~OR*mA6J2WyM5D_NF-@f2C~fRyFtmm6i| zl-a`k9b3uv8rfq3u3tG9V?3dqy8oE5`T7{0SE026V^NNLYS%-nC^JAZyVt233*+(g zun^wKR~w|3C^hiEdIm%okY)|NuUIS|K+}EDq!yExfrIkT0aZQ;x?@k3eyCIrFT4%3 zS$NC%JH8SI^e}f;^ )g>_zDAcp>hH!hDNH-aCFs#^>dnTr6LwF4k>d SSf23bU{)KhgM~je=3SWHwes`&3&y! zI-}=Oz}#v|?JWw!0@C$@*Jkla_|=(?CL^4bLU8q)$&nr{OFDy%ID?nb3K(yWnx{Ql z9wdZPMDxk`mDBwQd@_^}EuAhMshTLs)6<`tEHob(5*4JcCo*(5+o}b*+M~)#74YQ@ zErlu$9n90`dtLPX0PMgW7#rK^;HA;}4!zd~5cNFlTDi(K+$r{=SW*dRbZbFj*Az8< z_O|QR-5`G`rv&*+Ef*^UO~JG0G~k`FP(igdB=SIq0fdNj?P}_$2KfEhg7L<45*5b` zZuV3&?O{CK*sY)K57+a3f;f`?pQAn8uJ!9P`N{bn>!McX5Me1b(htyG4@3HZqq4eZ zs&*2jJJcz^Z?}%yn9fMFw{VF=<1=Todo b{x4VVihFg9*~Huq7C0VPqduSMT>o%@41 zmlLaW+Dw&2AI!rN3(NRH?n>0jxK8zPrpS5*M!qGa=9yvN&dA_CU>LQMgItN&34Ly= zp4;spdN8$1owxjrcQkLHyg%pf!JW56Plu*yVN!wV`lO{$= YHwu~6A@uOhu afgYXTj>Py@_2M)Ay{+96s#;cXX%E- sn z5fZ)Vgo1z*%g++q^^A@B47p)zkJ{fpc28)GCMoQeu;^Ow#FV~Tw9VM=oZX&wegL9= z#tQXwi+-Od_AN$Mb07J~3Wvn!N*mG^E%`{g>($6T=n%B8HUrS@;N<%JoPDI_{YZ6`0;c97R`+Bzv z-w(NR eHX30(q2gcbF`neyjk!@9 zE&~Q3CXUv}ra=NPe=ZoSeQDpWVQhh=()I90KGQy>6Nx#CvAvBhTkfj2IEYflv3(%q zio?e%IZ<+%73a@x$$o87>8O0CC_7{ENdaJ2Df#KHMz#}CF*Y}P=AO1Jkp~+7wXH#| zY!?0A5gk0PkhH~eB-Zs8{p$5pi%4Jx*6dtCRhzNPzx4!NAWQGvc?2b~jvD#29kpOE zmL1k3!lEDeIss!3ny?qIQ*4G1mM1z1E&Ah`AC%_*y(!6}+qvzeogRj zujV-OH2PfEvtK(x3GPtB7t$17F~ #vnM^w*nEe~Z&Vd*2%2+!KS_4Ct8ZTIal$M>jXN6Skb=9nfYM zt?RDzgajtLLj~6_;btvvt3SVW-{e$S^3W&!DLc5IRG+LWIpG7E>>ja*%?=t9;_1aS za;IP5=&hM$9iW++cYg4&QRV7lk!=y9;yHDB{4btD(wvjK!)i!`G+K^twenc=fMvi$ zyaZYz(WjHepKZmgvL36tm9)&2q}^6Pn4frF+sd(+yx`jlFnlgnw!DFRkb*>HSU|t` zK>hT0GL0)owjPQB!V`ur21XfPdT|ro85XW&vMf85tv%W^+p)H~eV<%-?aGADaJyZc z;aCVhT3~VMOBi@e?S3O%YZ(a)?a`flv$gij_87~Gi