Giter Site home page Giter Site logo

sbwml / luci-app-mosdns Goto Github PK

View Code? Open in Web Editor NEW
935.0 5.0 183.0 910 KB

一个 DNS 转发器 - OpenWrt 🎁 MosDNS v5 is Ready! 🎉

Home Page: https://github.com/IrineSistiana/mosdns

Makefile 4.23% Lua 33.38% HTML 8.97% Shell 53.43%
luci-app-mosdns openwrt http3 dns-over-http dns-over-https dns-over-quic dns-over-tls

luci-app-mosdns's Introduction

luci-app-mosdns

MosDNS is a plug-in DNS forwarder. Users can splicing plug-ins as needed to customize their own DNS processing logic.

DNS protocol standard

General DNS (UDP): 119.29.29.29 & udp://119.29.29.29:53

General DNS (TCP): tcp://119.29.29.29 & tcp://119.29.29.29:53

DNS-over-TLS: tls://120.53.53.53 & tls://120.53.53.53:853

DNS-over-HTTPS: https://120.53.53.53/dns-query

DNS-over-HTTPS (HTTP/3): h3://dns.alidns.com/dns-query

DNS-over-QUIC: quic://dns.alidns.com & doq://dns.alidns.com


How to build

  • Enter in your openwrt dir

  • Openwrt official SnapShots

    • requires golang 1.20.x or latest version (openwrt-21.02 & older version needs)
    rm -rf feeds/packages/lang/golang
    git clone https://github.com/sbwml/packages_lang_golang -b 20.x feeds/packages/lang/golang
    # remove v2ray-geodata package from feeds (openwrt-22.03 & master)
    rm -rf feeds/packages/net/v2ray-geodata
    
    git clone https://github.com/sbwml/luci-app-mosdns -b v5 package/mosdns
    git clone https://github.com/sbwml/v2ray-geodata package/v2ray-geodata
    make menuconfig # choose LUCI -> Applications -> luci-app-mosdns
    make package/mosdns/luci-app-mosdns/compile V=s
  • Non-Openwrt official source

    # drop mosdns and v2ray-geodata packages that come with the source
    find ./ | grep Makefile | grep v2ray-geodata | xargs rm -f
    find ./ | grep Makefile | grep mosdns | xargs rm -f
    
    git clone https://github.com/sbwml/luci-app-mosdns -b v5 package/mosdns
    git clone https://github.com/sbwml/v2ray-geodata package/v2ray-geodata
    make menuconfig # choose LUCI -> Applications -> luci-app-mosdns
    make package/mosdns/luci-app-mosdns/compile V=s

How to install prebuilt packages

  • Login OpenWrt terminal (SSH)

  • Install curl package

    opkg update
    opkg install curl
  • Execute install script (Multi-architecture support)

    sh -c "$(curl -ksS https://raw.githubusercontent.com/sbwml/luci-app-mosdns/v5/install.sh)"

Preview Images

1

2

3

4

luci-app-mosdns's People

Contributors

actions-user avatar fanxjk avatar hu3rror avatar qingtian110 avatar qiusimons avatar sbwml avatar xiaoyannzbbb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

luci-app-mosdns's Issues

数据库更新失败问题

手动点击数据库更新按钮,显示失败。我查看之前的issues,输入/usr/share/mosdns/mosdns.sh geodata; echo $?测试

Downloading https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
100 9516k 100 9516k 0 0 1660k 0 0:00:05 0:00:05 --:--:-- 3038k
Downloading https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
100 5029k 100 5029k 0 0 1624k 0 0:00:03 0:00:03 --:--:-- 3183k
sh: geosite.dat: unknown operand
sh: ^https://raw.githubusercontent.com: unknown operand
Downloading
curl: (3) Error
1

我定位到是广告过滤列表更新出问题,导致显示更新失败,实际上geo数据库已经更新成功了。
我手动修改/usr/share/mosdns/mosdns.sh中的
elif [ "$1" == "geodata" ]; then
geodat_update && adlist_update

为:
elif [ "$1" == "geodata" ]; then
geodat_update

即可,因为我不需要广告拦截服务

新版无法运行

更新至新版之后就跑不起来了,可执行文件换成旧版也不能,系统是大雕的源代码。

自定义配置问题

我想让apple和microsoft的域名走远程dns解析,于是在非本地域名那里添加了两个geosite规则,但是查看dns解析发现它们还是走到大陆的dns服务器了,请问这是我写配置出错了么?请大佬帮忙看下,谢谢!

log:
level: info
file: "/tmp/mosdns.log"

include: []

data_providers:

  • tag: geoip
    file: "/usr/share/v2ray/geoip.dat"
    auto_reload: true

  • tag: geosite
    file: "/usr/share/v2ray/geosite.dat"
    auto_reload: true

  • tag: whitelist
    file: "/etc/mosdns/rule/whitelist.txt"
    auto_reload: true

  • tag: blocklist
    file: "/etc/mosdns/rule/blocklist.txt"
    auto_reload: true

  • tag: greylist
    file: "/etc/mosdns/rule/greylist.txt"
    auto_reload: true

  • tag: hosts
    file: "/etc/mosdns/rule/hosts.txt"
    auto_reload: true

  • tag: redirect
    file: "/etc/mosdns/rule/redirect.txt"
    auto_reload: true

  • tag: local_ptr
    file: "/etc/mosdns/rule/local-ptr.txt"
    auto_reload: true

  • tag: adlist
    file: "/etc/mosdns/rule/adlist.txt"
    auto_reload: true

plugins:

  • tag: lazy_cache
    type: cache
    args:
    size: 0
    lazy_cache_ttl: 0

  • tag: modify_ttl
    type: ttl
    args:
    minimal_ttl: 0
    maximum_ttl: 0

  • tag: "forward_local"
    type: forward
    args:
    upstream:
    - addr: 127.0.0.1:88

  • tag: "forward_remote"
    type: fast_forward
    args:
    upstream:
    - addr: tls://1.1.1.1
    enable_pipeline: true
    - addr: tls://8.8.8.8
    enable_pipeline: true

  • tag: query_is_whitelist_domain
    type: query_matcher
    args:
    domain:
    - "provider:whitelist"

  • tag: query_is_blocklist_domain
    type: query_matcher
    args:
    domain:
    - "provider:blocklist"

  • tag: query_is_greylist_domain
    type: query_matcher
    args:
    domain:
    - "provider:greylist"

  • tag: query_is_hosts_domain
    type: hosts
    args:
    hosts:
    - "provider:hosts"

  • tag: query_is_redirect_domain
    type: redirect
    args:
    rule:
    - "provider:redirect"

  • tag: query_is_local_domain
    type: query_matcher
    args:
    domain:
    - "provider:geosite:cn"

  • tag: query_is_non_local_domain
    type: query_matcher
    args:
    domain:
    - "provider:geosite:apple"
    - "provider:geosite:microsoft"
    - "provider:geosite:geolocation-!cn"

  • tag: response_has_local_ip
    type: response_matcher
    args:
    ip:
    - "provider:geoip:cn"

  • tag: query_is_ad_domain
    type: query_matcher
    args:
    domain:
    - "provider:adlist"

  • tag: match_local_ptr
    type: query_matcher
    args:
    qtype: [12]
    domain:
    - "provider:local_ptr"

  • tag: match_qtype65
    type: query_matcher
    args:
    qtype: [65]

  • tag: "main_sequence"
    type: "sequence"
    args:
    exec:
    - _misc_optm
    - query_is_hosts_domain
    - query_is_redirect_domain

    - if: query_is_whitelist_domain
      exec:
        - forward_local
        - modify_ttl
        - _return
    
    - if: "query_is_blocklist_domain || query_is_ad_domain || match_local_ptr || match_qtype65"
      exec:
        - _new_nxdomain_response
        - _return
    
    - lazy_cache
    
    - if: query_is_greylist_domain
      exec:
        - forward_remote
        - modify_ttl
        - _return
    
    - if: query_is_local_domain
      exec:
        - forward_local
        - modify_ttl
        - _return
    
    - if: query_is_non_local_domain
      exec:
        - _prefer_ipv4
        - forward_remote
        - modify_ttl
        - _return
    
    - primary:
        - forward_local
        - if: "(! response_has_local_ip) && [_response_valid_answer]"
          exec:
            - _drop_response
      secondary:
        - _prefer_ipv4
        - forward_remote
        - modify_ttl
      fast_fallback: 200
    

servers:

  • exec: main_sequence
    listeners:
    • protocol: udp
      addr: ":5335"
    • protocol: tcp
      addr: ":5335"

需求请求--在luci设置中加入ipset相关选项

大佬您好,仅建议,看您心情。
1:在luci中添加国内国外ipset名称选项,生成的配置文件中,自动把分流后的解析结果加入指定的ipset中。
2:ipset例外功能,指定IP或者域名不加入IPSET,避免机场域名被加入ipset导致科学失效。

黑白名单的定义是否容易产生歧义?

提个建议
虽然注释中有解释但是名单的定义是否可以优化一下,比如在我的理解中,白名单应该是“本地查询”,黑名单“远程查询”,需要屏蔽的域名应该是“屏蔽列表”或者“屏蔽名单”之类的。
而现在的定义似乎是白名单“本地查询”,黑名单是屏蔽列表,灰名单则是“远程查询”。感觉有点不太准确。比较合理的应该是whitelite,blacklist, 和blocklist?

将下载Geo数据库作为可选项

在路由器上跑mosdns,如果路由器上装有OC一类的插件会自带GEO数据库,对于闪存较小的设备下两份GEO数据库空间是有些不足的

Package luci-* has no valid architecture, ignoring.

下载 .ipk 手动安装时提示:

 * pkg_hash_fetch_best_installation_candidate: Packages for luci-app-mosdns found, but incompatible with the architectures configured
 * pkg_hash_fetch_best_installation_candidate: Packages for luci-i18n-mosdns-zh-cn found, but incompatible with the architectures configured

建个假的 file: 软件源后提示:

Package luci-app-mosdns version 1.4.2 has no valid architecture, ignoring.
Package luci-app-mosdns version 1.4.2 has no valid architecture, ignoring.

和官方的其他 luci ipk 对比后发现 control 里少一行 Architecture: all

mosdns 包没问题。

更新版本后无法启动Mosdns

系统日志有如下打印:
Tue Oct 25 16:01:55 2022 daemon.err procd: Got unexpected signal 1

错误发生在/usr/share/mosdns/mosdns.sh,疑似configuration里缺少adlist_update字段导致

调试信息里面看到这个error,是有什么地方没有设置正确吗

2023-03-16T17:12:30.051Z debug forward_remote connection closed {"id": 6, "error": "read tcp 本机IP:41726->1.1.1.1:853: i/o timeout"}
2023-03-16T17:12:30.051Z debug forward_remote connection closed {"id": 5, "error": "read tcp 本机IP:46146->8.8.8.8:853: i/o timeout"}
2023-03-16T17:12:30.087Z debug forward_remote connection closed {"id": 4, "error": "read tcp 本机IP:42254->9.9.9.9:853: i/o timeout"}
2023-03-16T17:12:30.185Z debug forward_remote connection closed {"id": 9, "error": "read tcp 本机IP:44570->1.1.1.1:853: i/o timeout"}
2023-03-16T17:12:30.206Z debug forward_remote connection closed {"id": 8, "error": "read tcp 本机IP:39020->8.8.8.8:853: i/o timeout"}
2023-03-16T17:12:30.263Z debug forward_remote connection closed {"id": 7, "error": "read tcp 本机IP:55506->9.9.9.9:853: i/o timeout"}

geoip 数据库更新问题

手动更新数据库,点击按钮给人的感觉是没有操作一样,建议添加一个更新状态显示。这样知道到底更新成功了 还是失败了。

360v6 qsdk 固件启动不起来

geoip.dat
geosite.dat
均已下载,使用预设值的配置启动不了,把端口更换了也不行。
直接执行service mosdns start 提示
QQ图片20221116182242

然后测试不用LUCI启动
把/etc/init.d/mosdns删除后
执行mosdns service install -d /etc/mosdns -c config.yaml
再运行一次,此时提示Running,但是只能运行几秒,马上就变回stop
1

最后替换成这里的config.yaml就可以正常运行。

mosdns.sh 在 ash 下运行出错

问题描述:
在 luci 下无法更新数据库

环境:
coolsnowwolf 的 lede 使用 BusyBox v1.28.3 () built-in shell (ash)

尝试操作:
按照 #32 的手动更新的方法运行 /usr/share/mosdns/mosdns.sh geodata; echo $? , 终端提示 sh: =~: unknown operand
搜索后发现 ash 不支持 =~ 正则匹配

跟上述 issue 一样,因暂无广告屏蔽需求

elif [ "$1" == "geodata" ]; then
	geodat_update && adlist_update

改为

elif [ "$1" == "geodata" ]; then
	geodat_update

兄台,防火墙规则还用加不?

iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
[ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
[ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
兄台,这4条规则还用在openwrt里加上不?

mosdns4.0插件的支持

写了一套mosdns管理脚本,目前已经进官方wiki了,理论上讲只要用界面调用脚本,就能实现插件的功能,对luci插件不是很熟悉,作者大佬有时间可以参考下,我随时可以提供支持,希望能有更多的人用上你的插件 : D

地址 https://github.com/pmkol/easymosdns

数据库更新失败

openwrt主路由模式,能正常访问国内和外网(国外),但是openwrt中更新数据库失败,显示更新失败,请检查网络状态
mosdns为最上层dns解析,没有勾选启用 DNS 转发
adguardhome使用mosdns的5335的端口,使用adguardhome是为了看dns解析日志
openclash的dns使用adguardhome的553端口,并启用本地 DNS 劫持
openwrt网络下的DHCP/DNS未勾选DNS 重定向
图片_7
图片_8
图片_9
![图片_9](https://user-i
图片_11
mages.githubuserc
图片_12
ontent.com/65432445
图片_13
/198756778-1f2b8
图片_14
c6d-e441-4a7e-8cfc-0a5678430d47.Png)
图片_15

sh -c "$(curl -sS https://raw.githubusercontent.com/sbwml/luci-app-mosdns/master/install.sh)",报错

root@ImmortalWrt:~# sh -c "$(curl -sS https://raw.githubusercontent.com/sbwml/luci-app-mosdns/master/install.sh)"
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

默认启用http api并展示metrics数据

mosdns内置了一些简单的统计功能,可以通过启用http api的方式进行获取,是否可以默认启用http api功能并在luci界面加载时通过api获取metrics数据,并展示在luci界面上?

api:
  http: "0.0.0.0:8080"

自定义配置模式下第三方去广告选项

从默认配置切换到自定义配置模式后,第三方去广告列表的adlist文件被清空,无法使用,只能用geosite的。
能否在自定义配置luci界面中,增加选择开关去广告和三方列表,并在开启的情况下可更新。感谢。

更新到最新的版本后提示MosDNS 未运行

之前的版本4.18 现在更新到最新后提示MosDNS 未运行

mosdns_4.5.3-1_x86_64.ipk
luci-i18n-mosdns-zh-cn_git-22.338.28208-fe2caaa_all.ipk
luci-app-mosdns_1.4.4_all.ipk

geo 数据也更新过了

按照官方文档配置了 内设模式可以运行 但是自定义配置写进去 反复运行中未运行

日志设置

log:
level: debug
file: /tmp/mosdns.txt

数据源设置

data_providers:

  • tag: geosite
    file: "/usr/share/v2ray/geosite.dat"
    auto_reload: true

  • tag: geoip
    file: "/usr/share/v2ray/geoip.dat"
    auto_reload: true

  • tag: adlist
    file: "./rule/serverlist.txt"
    auto_reload: true

  • tag: whitelist
    file: "./rule/whitelist.txt"
    auto_reload: true

  • tag: hosts
    file: "./rule/hosts.txt"
    auto_reload: true

  • tag: blocklist
    file: "./rule/blocklist.txt"
    auto_reload: true

  • tag: redirect
    file: "./rule/redirect.txt"
    auto_reload: true

插件

plugins:

  • tag: "query_is_whitelist_domain"
    type: query_matcher
    args:
    domain:
    - "provider:whitelist"

  • tag: "query_is_blocklist_domain"
    type: query_matcher
    args:
    domain:
    - "provider:blocklist"

  • tag: "query_is_local_domain"
    type: query_matcher
    args:
    domain:
    - "provider:geosite:cn"

  • tag: "query_is_non_local_domain"
    type: query_matcher
    args:
    domain:
    - "provider:geosite:geolocation-!cn"

  • tag: "query_is_qtype65"
    type: query_matcher
    args:
    qtype: [65]

  • tag: "query_is_ad_domain"
    type: query_matcher
    args:
    domain:
    - "provider:adlist"

  • tag: "response_has_local_ip"
    type: response_matcher
    args:
    ip:
    - "provider:geoip:cn"

  • tag: "query_is_hosts_domain"
    type: hosts
    args:
    hosts:
    - "provider:hosts"

  • tag: "query_is_redirect_domain"
    type: redirect
    args:
    rule:
    - "provider:redirect"

  • tag: "reverse"
    type: "reverse_lookup"
    args:
    size: 65535
    ttl: 1800
    handle_ptr: true

  • tag: "lazy_cache"
    type: cache
    args:
    size: 104857600
    lazy_cache_ttl: 259200
    lazy_cache_reply_ttl: 5
    cache_everything: ture

  • tag: "forward_local"
    type: fast_forward
    args:
    upstream:
    - addr: 127.0.0.1:31
    - addr: 127.0.0.1:31

  • tag: "forward_remote"
    type: fast_forward
    args:
    upstream:
    - addr: 127.0.0.1:41
    enable_pipeline: true
    - addr: 127.0.0.1:41
    enable_pipeline: true

  • tag: "ttl 1"
    type: "ttl"
    args:
    minimal_ttl: 0 # 最小TTL。如果非零,小于这个数的应答的TTL会被修改成这个值。
    maximum_ttl: 0 # 最大TTL。如果非零,大于这个数的应答的TTL会被修改成这个值。

  • tag: main_sequence
    type: sequence
    args:
    exec:
    - _misc_optm
    - reverse
    - lazy_cache
    - query_is_hosts_domain
    - query_is_redirect_domain
    - _no_ecs
    - if: "query_is_whitelist_domain"
    exec:
    - forward_local
    - _return
    - if: "query_is_blocklist_domain || query_is_ad_domain || query_is_qtype65"
    exec:
    - _new_nxdomain_response
    - _return
    - if: "query_is_local_domain"
    exec:
    - forward_local
    - _return
    - if: "query_is_non_local_domain"
    exec:
    - _prefer_ipv4
    - forward_remote
    - _return
    - primary:
    - forward_local
    - if: "(! response_has_local_ip) && [_response_valid_answer]"
    exec:
    - _drop_response
    secondary:
    - _prefer_ipv4
    - forward_remote
    fast_fallback: 150
    always_standby: true

服务器设置

servers:

  • exec: main_sequence
    listeners:
    • protocol: udp
      addr: 127.0.0.1:5335
    • protocol: tcp
      addr: 127.0.0.1:5335

logfile_path()有时会返回意外的值

luci-app-mosdns/luci-app-mosdns/root/usr/share/mosdns/mosdns.sh

logfile_path() (
	configfile=$(uci -q get mosdns.config.configfile)
	if [ "$configfile" = "/etc/mosdns/config.yaml" ]; then
		uci -q get mosdns.config.logfile
	else
		[ ! -f /etc/mosdns/config_custom.yaml ] && exit 1
		cat /etc/mosdns/config_custom.yaml | grep -A 4 log | grep file | awk -F ":" '{print $2}' | sed 's/\"//g;s/ //g'
	fi
)

请问一下这个函数中grep -A 4 log取4行有什么深意吗?这似乎会导致在某些常用的config写法中,获取到意外的结果,导致启动出错。以下面为例

log:
  level: info
  file: "/tmp/mosdns.log"

data_providers:
  - tag: somedata
    file: "/foo/bar/somedata.txt"
    auto_reload: false

会返回两行路径

/tmp/mosdns.log
/foo/bar/somedata.txt

这里是否可以优化一下呢?

ttl怎么配置呢

我在x86安装了官方版本 只有1.2的luci文件 安装完成之后和作者你的界面不同 我想配置ttl怎么办呢

4.5.3 apple store无法打开

编译跟Passwall集成。

使用内置预设, 其他网站都没问题, 只有apple store无法打开。 不知道是什么原因, 只能回滚到老版本, 问题就没有了。

如何证明我现在的DNS解析来自mosdns,而不是其他?

[root@OpenWrt:03:36 PM ~] # nslookup taobao.com
Server: 127.0.0.1
Address: 127.0.0.1:53

Non-authoritative answer:
Name: taobao.com
Address: 140.205.94.189
Name: taobao.com
Address: 140.205.220.96

Non-authoritative answer:

[root@OpenWrt:03:36 PM ~] # nslookup taobao.com
Server: 127.0.0.1
Address: 127.0.0.1:53

Non-authoritative answer:
Name: taobao.com
Address: 140.205.220.96
Name: taobao.com
Address: 140.205.94.189

Non-authoritative answer:

[root@OpenWrt:03:37 PM ~] # nslookup taobao.com
Server: 127.0.0.1
Address: 127.0.0.1:53

Non-authoritative answer:
Name: taobao.com
Address: 140.205.94.189
Name: taobao.com
Address: 140.205.220.96

Non-authoritative answer:

如上;
无论我如何调整端口,调转发,回答的DNS主机名都是Server: 127.0.0.1 Address: 127.0.0.1:53
虽然luci上显示的是 “MosDNS 运行中”,但我没办法从回答中确认他是否在参与解析
我没有启用 “将 Dnsmasq 域名解析请求转发到 MosDNS 服务器” ,而是关闭了dnsmasq dns相关的设置后,
直接在DHCP/DNS里面转发到127.0.0.1#5335
请问在哪里能加上类似smartdns上的 “服务器名称” ?
image

这样,他在nslookup回复里面 就变成 Server: smartdns

谢谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.