Git Product home page Git Product logo

miaoyan's Introduction

English | 中文 | 日本語

妙言

轻灵的 Markdown 笔记本伴你写出妙言~

特点

  • 🏂 :纯本地使用、安全、语法高亮、黑暗模式、源文件保存、国际化、演示模式、PPT 模式、单独编辑模式、文档自动排版、文档导出、内部跳转、图床、LaTeX、Mermaid、PlantUML、Markmap 脑图
  • 🎊 :极简的设计风格,文件夹 + 文件列表 + 编辑器方式 3 列模式
  • 🚄 :使用 Swift5 原生开发,相比 Web 套壳方式性能体验好
  • 🥛 :很轻巧,纯编辑器输入体验,众多快捷键助你快人一步

首次使用

  1. GitHub Releases下载 最新的 dmg 安装包,macOS Big Sur 及以上版本体验更好,如安装出现问题请参考 文档,此外也支持从 brew install miaoyan --cask 安装。
  2. 可以在 iCloud 或根目录下创建一个 MiaoYan 的文件夹,打开妙言的设置,将默认存储地址修改成这个。
  3. 点击妙言左上角新增文件夹的图标,创建好自己的文档分类文件夹,就可以开始使用了。
  4. 同样假如你不习惯默认的字体,可以在设置中修改成其他的正常字体。

快捷键

窗口操作

  • command + 1:收起展开目录
  • command + 2:收起展开文档列表
  • command + 3:切换编辑和预览
  • command + 4:切换到演示模式
  • command + option + m:全局唤起/隐藏妙言

文档操作

  • command + n:新建文档
  • command + r:重命名文档
  • command + d:复制文档
  • command + o:单独打开文档
  • command + delete:删除文档
  • command + shift + n:新建文件夹
  • command + shift + l:自动排版
  • command + option + r:在 Finder 中显示
  • command + option + i:显示字数等文档属性
  • command + option + p:启动妙言 PPT 预览

🏂 此外还有很多快捷键 👆🏻 👇🏻 👈🏻 👉🏻 等着爱折腾的你去寻找~

妙言 PPT

  1. 新朋友默认初始化会生成模版,如果是老朋友需升级到 1.0,可以 Copy 此文件 到妙言玩一玩。
  2. 执行 command + option + p 可以启动妙言 PPT 预览,也可以选中文档点击右键,选择 妙言 PPT 打开。
  3. 只有在有 --- 分隔符标志的文档中,才可启用 PPT 模式,演示过程中你可以 回车键 预览演讲大纲,ESC 键可退出 PPT 模式。
  4. 你可以使用 HTML 来自定义效果,更多复杂的用法可以参考 Reveal 文档。

为什么要做妙言

  • 之前有尝试过众多的笔记应用,大学时期为知笔记、印象笔记,工作时候用过 Ulysses、Quiver、MWeb、Bear、Typora,种种原因,没有找到一个习惯的 Markdown 应用,才有了做妙言的想法。
  • 本职为前端开发,会一点 iOS 开发,爱折腾,借妙言来玩一下 Swift 以及独立产品,当做一个很愉快的事情。
  • 更多介绍可见 妙言 - 更适合工程师用的笔记应用,很欢迎交流和建议

支持

  • 我有两只猫,假如觉得妙言让你生活更美好,可以给猫 喂罐头 🥩🍤
  • 如果你喜欢妙言,可以在 Github Star,更欢迎 推荐 给你志同道合的朋友使用。
  • 可以关注我的 Twitter 获取到最新的妙言更新消息,也欢迎加入 Telegram 聊天群。

感谢

协议

  • 遵循 MIT 协议
  • 请自由地享受和参与开源

miaoyan's People

Contributors

hezhizhen avatar jounqin avatar long2ice avatar pan93412 avatar tsonglew avatar tw93 avatar tzxdtc avatar zhyncs 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  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

miaoyan's Issues

众多快捷键助你快一步?

我想了解下有哪些快捷键, 以及在哪里可以查看到, 我想要一个快速预览的快捷键, 没找到。
也没找到可以自定义快捷键的设置选项

0.5.0 在 M1 Mac 12.4 上启动 crash


Translated Report (Full Report Below)

Process: MiaoYan [82842]
Path: /Applications/MiaoYan.app/Contents/MacOS/MiaoYan
Identifier: com.tw93.MiaoYan
Version: 0.5.0 (0.5.0)
Code Type: X86-64 (Translated)
Parent Process: launchd [1]
User ID: 501

Date/Time: 2022-06-18 09:48:14.4868 +0800
OS Version: macOS 12.4 (21F79)
Report Version: 12
Anonymous UUID: 0EABAA7E-515C-B2D6-4C64-239B9E87D9E2

Sleep/Wake UUID: 47FACED4-E881-4252-B68B-5C857F6DFEF5

Time Awake Since Boot: 630000 seconds
Time Since Wake: 782 seconds

System Integrity Protection: enabled

Crashed Thread: 0

Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY

Termination Reason: Namespace DYLD, Code 1 Library missing
Library not loaded: @rpath/Highlightr.framework/Versions/A/Highlightr
Referenced from: /Applications/MiaoYan.app/Contents/MacOS/MiaoYan
Reason: tried: '/usr/lib/swift/Highlightr.framework/Versions/A/Highlightr' (no such file), '/usr/lib/swift/Highlightr.framework/Versions/A/Highlightr' (no such file), '/Applications/MiaoYan.app/Contents/MacOS/../Frameworks/Highlightr.framework/Versions/A/Highlightr' (code signature in <51631255-D451-3179-ADD2-C6C8F5B87825> '/Applications/MiaoYan.app/Contents/Frameworks/Highlightr.framework/Versions/A/Highlightr' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)), '/Applications/MiaoYan.app/Contents/MacOS/Frameworks/Highlightr.framework/Versions/A/Highlightr' (no such file), '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/Highlightr.framework/Versions/A/Highlightr' (no such file), '/Applications/MiaoYan.app/Contents/MacOS/../Frameworks/Highlight
(terminated at launch; ignore backtrace)

Thread 0 Crashed:
0 Rosetta Runtime Routines 0x1031e9940 ???
1 0x10323b6dc ???
2 dyld 0x20301d1d2 abort_with_payload_wrapper_internal + 80
3 dyld 0x20301d204 abort_with_payload + 9
4 dyld 0x202fcb76f dyld4::halt(char const*) + 375
5 dyld 0x202fc75a5 dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3995
6 dyld 0x202fc64d4 start + 388

Thread 1:: com.apple.rosetta.exceptionserver
0 runtime 0x7ff7ffc229c4 0x7ff7ffc1e000 + 18884
1 runtime 0x7ff7ffc30460 0x7ff7ffc1e000 + 74848
2 runtime 0x7ff7ffc31ed8 0x7ff7ffc1e000 + 81624

Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000006 x1: 0x0000000000000001 x2: 0x0000000309933a90 x3: 0x0000000000000077
x4: 0x0000000309933690 x5: 0x0000000000000000 x6: 0x0000000309933680 x7: 0x0000002002fc3d87
x8: 0x0000000309933690 x9: 0x0000000000000000 x10: 0x0000000000000077 x11: 0x0000000309933690
x12: 0x0000000000000077 x13: 0x0000000309933a90 x14: 0x0000000000000001 x15: 0x0000000000000006
x16: 0x0000000000000209 x17: 0x0000000000000000 x18: 0x800000010b252b70 x19: 0x00000001031df000
x20: 0x00000000000007ff x21: 0x000000010b257fa0 x22: 0xffffffffffffffff x23: 0x00000001031e9914
x24: 0x000000020301d1d2 x25: 0x00000001031e91f4 x26: 0x0000000103239d78 x27: 0x0000000000000000
x28: 0x00000002030070be fp: 0x000000002c000000 lr: 0x000000010323b6dc
sp: 0x000000010b252b70 pc: 0x00000001031e9940 cpsr: 0x80001000
far: 0x000000010323b000 esr: 0x56000080 Address size fault

Binary Images:
0x0 - 0xffffffffffffffff ??? () <00000000-0000-0000-0000-000000000000> ???
0x202fc1000 - 0x20302cfff dyld (
) /usr/lib/dyld
0x7ff7ffc1e000 - 0x7ff7ffc4dfff runtime (*) <0ee8ce32-639c-316a-9551-dab9a2e0c8a5> /usr/libexec/rosetta/runtime

External Modification Summary:
Calls made by other processes targeting this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by all processes on this machine:
task_for_pid: 0
thread_create: 0
thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=5292K resident=0K(0%) swapped_out_or_unallocated=5292K(100%)
Writable regions: Total=155.2M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=155.2M(100%)

                            VIRTUAL   REGION 

REGION TYPE SIZE COUNT (non-coalesced)
=========== ======= =======
Rosetta Arena 4096K 2
Rosetta Generic 780K 192
Rosetta IndirectBranch 32K 1
Rosetta JIT 128.0M 1
Rosetta Return Stack 20K 2
Rosetta Thread Context 20K 2
Stack 8176K 1
Stack Guard 56.0M 1
VM_ALLOCATE 13.3M 5
VM_ALLOCATE (reserved) 24K 1 reserved VM address space (unallocated)
__DATA 432K 7
__DATA_CONST 80K 1
__LINKEDIT 2736K 8
__TEXT 2592K 4
dyld private memory 1024K 1
mapped file 6.1G 28
=========== ======= =======
TOTAL 6.3G 257
TOTAL, minus reserved VM space 6.3G 257


Full Report

{"app_name":"MiaoYan","timestamp":"2022-06-18 09:48:14.00 +0800","app_version":"0.5.0","slice_uuid":"b434f095-590a-37f7-9b70-934a60906bd5","build_version":"0.5.0","platform":1,"bundleID":"com.tw93.MiaoYan","share_with_app_devs":1,"is_first_party":0,"bug_type":"309","os_version":"macOS 12.4 (21F79)","incident_id":"A550CDB2-37C9-4282-A4E3-9E6D6072DA14","name":"MiaoYan"}
{
"uptime" : 630000,
"procLaunch" : "2022-06-18 09:48:14.4444 +0800",
"procRole" : "Default",
"version" : 2,
"userID" : 501,
"deployVersion" : 210,
"modelCode" : "MacBookAir10,1",
"procStartAbsTime" : 15250978103361,
"coalitionID" : 93694,
"osVersion" : {
"train" : "macOS 12.4",
"build" : "21F79",
"releaseType" : "User"
},
"captureTime" : "2022-06-18 09:48:14.4868 +0800",
"incident" : "A550CDB2-37C9-4282-A4E3-9E6D6072DA14",
"bug_type" : "309",
"pid" : 82842,
"procExitAbsTime" : 15250979113904,
"translated" : true,
"cpuType" : "X86-64",
"procName" : "MiaoYan",
"procPath" : "/Applications/MiaoYan.app/Contents/MacOS/MiaoYan",
"bundleInfo" : {"CFBundleShortVersionString":"0.5.0","CFBundleVersion":"0.5.0","CFBundleIdentifier":"com.tw93.MiaoYan"},
"storeInfo" : {"deviceIdentifierForVendor":"3DA4DF85-87C0-5AA3-8F18-A87B00402924","thirdParty":true},
"parentProc" : "launchd",
"parentPid" : 1,
"coalitionName" : "com.tw93.MiaoYan",
"crashReporterKey" : "0EABAA7E-515C-B2D6-4C64-239B9E87D9E2",
"wakeTime" : 782,
"sleepWakeUUID" : "47FACED4-E881-4252-B68B-5C857F6DFEF5",
"sip" : "enabled",
"isCorpse" : 1,
"exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
"termination" : {"code":1,"flags":518,"namespace":"DYLD","indicator":"Library missing","details":["(terminated at launch; ignore backtrace)"],"reasons":["Library not loaded: @rpath/Highlightr.framework/Versions/A/Highlightr","Referenced from: /Applications/MiaoYan.app/Contents/MacOS/MiaoYan","Reason: tried: '/usr/lib/swift/Highlightr.framework/Versions/A/Highlightr' (no such file), '/usr/lib/swift/Highlightr.framework/Versions/A/Highlightr' (no such file), '/Applications/MiaoYan.app/Contents/MacOS/../Frameworks/Highlightr.framework/Versions/A/Highlightr' (code signature in <51631255-D451-3179-ADD2-C6C8F5B87825> '/Applications/MiaoYan.app/Contents/Frameworks/Highlightr.framework/Versions/A/Highlightr' not valid for use in process: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)), '/Applications/MiaoYan.app/Contents/MacOS/Frameworks/Highlightr.framework/Versions/A/Highlightr' (no such file), '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/Highlightr.framework/Versions/A/Highlightr' (no such file), '/Applications/MiaoYan.app/Contents/MacOS/../Frameworks/Highlight"]},
"extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
"faultingThread" : 0,
"threads" : [{"triggered":true,"id":5061744,"threadState":{"x":[{"value":6},{"value":1},{"value":13045545616},{"value":119},{"value":13045544592},{"value":0},{"value":13045544576},{"value":137489038727},{"value":13045544592},{"value":0},{"value":119},{"value":13045544592},{"value":119},{"value":13045545616},{"value":1},{"value":6},{"value":521},{"value":0},{"value":9223372041336728432},{"value":4347260928},{"value":2047},{"value":4481974176},{"value":18446744073709551615},{"value":4347304212},{"value":8640385490,"symbolLocation":80,"symbol":"abort_with_payload_wrapper_internal"},{"value":4347302388},{"value":4347633016},{"value":0},{"value":8640295102,"symbolLocation":10,"symbol":"__abort_with_payload"}],"flavor":"ARM_THREAD_STATE64","lr":{"value":4347639516},"cpsr":{"value":2147487744},"fp":{"value":738197504},"sp":{"value":4481952624},"esr":{"value":1442840704,"description":" Address size fault"},"pc":{"value":4347304256,"matchesCrashFrame":1},"far":{"value":4347637760}},"frames":[{"imageOffset":4347304256,"region":"Rosetta Runtime Routines","symbolLocation":10560,"imageIndex":0},{"imageOffset":4347639516,"region":"","imageIndex":0},{"imageOffset":377298,"symbol":"abort_with_payload_wrapper_internal","symbolLocation":80,"imageIndex":1},{"imageOffset":377348,"symbol":"abort_with_payload","symbolLocation":9,"imageIndex":1},{"imageOffset":42863,"symbol":"dyld4::halt(char const*)","symbolLocation":375,"imageIndex":1},{"imageOffset":26021,"symbol":"dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)","symbolLocation":3995,"imageIndex":1},{"imageOffset":21716,"symbol":"start","symbolLocation":388,"imageIndex":1}]},{"id":5061748,"name":"com.apple.rosetta.exceptionserver","frames":[{"imageOffset":18884,"imageIndex":2},{"imageOffset":74848,"imageIndex":2},{"imageOffset":81624,"imageIndex":2}]}],
"usedImages" : [
{
"size" : 0,
"source" : "A",
"base" : 0,
"uuid" : "00000000-0000-0000-0000-000000000000"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 8640008192,
"size" : 442368,
"uuid" : "b70ce1ec-b902-3852-8268-05de00bfa8d5",
"path" : "/usr/lib/dyld",
"name" : "dyld"
},
{
"source" : "P",
"arch" : "arm64",
"base" : 140703124545536,
"size" : 196608,
"uuid" : "0ee8ce32-639c-316a-9551-dab9a2e0c8a5",
"path" : "/usr/libexec/rosetta/runtime",
"name" : "runtime"
}
],
"sharedCache" : {
"base" : 140703294832640,
"size" : 15220686848,
"uuid" : "53b6853f-0bc3-33f5-be72-1aca3a188ff8"
},
"vmSummary" : "ReadOnly portion of Libraries: Total=5292K resident=0K(0%) swapped_out_or_unallocated=5292K(100%)\nWritable regions: Total=155.2M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=155.2M(100%)\n\n VIRTUAL REGION \nREGION TYPE SIZE COUNT (non-coalesced) \n=========== ======= ======= \nRosetta Arena 4096K 2 \nRosetta Generic 780K 192 \nRosetta IndirectBranch 32K 1 \nRosetta JIT 128.0M 1 \nRosetta Return Stack 20K 2 \nRosetta Thread Context 20K 2 \nStack 8176K 1 \nStack Guard 56.0M 1 \nVM_ALLOCATE 13.3M 5 \nVM_ALLOCATE (reserved) 24K 1 reserved VM address space (unallocated)\n__DATA 432K 7 \n__DATA_CONST 80K 1 \n__LINKEDIT 2736K 8 \n__TEXT 2592K 4 \ndyld private memory 1024K 1 \nmapped file 6.1G 28 \n=========== ======= ======= \nTOTAL 6.3G 257 \nTOTAL, minus reserved VM space 6.3G 257 \n",
"legacyInfo" : {
"threadTriggered" : {

}
},
"trialInfo" : {
"rollouts" : [
{
"rolloutId" : "60da5e84ab0ca017dace9abf",
"factorPackIds" : {

  },
  "deploymentId" : 240000008
},
{
  "rolloutId" : "5ffde50ce2aacd000d47a95f",
  "factorPackIds" : {

  },
  "deploymentId" : 240000161
}

],
"experiments" : [

]
}
}

Model: MacBookAir10,1, BootROM 7459.121.3, proc 8:4:4 processors, 16 GB, SMC
Graphics: Apple M1, Apple M1, Built-In
Display: DELL U2720Q, 5120 x 2880 (5K/UHD+ - Ultra High Definition Plus), Main, MirrorOff, Online
Memory Module: LPDDR4
AirPort: Wi-Fi, wl0: Mar 23 2022 19:57:59 version 18.60.27.0.7.8.129 FWID 01-570be953
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: Wi-Fi, AirPort, en0
USB Device: USB31Bus
USB Device: USB3.0 Hub
USB Device: USB2.0 Hub
USB Device: USB Billboard Device
USB Device: DK2087
USB Device: Razer DeathAdder Essential
USB Device: USB31Bus
USB Device: hub_device
USB Device: composite_device
Thunderbolt Bus: MacBook Air, Apple Inc.
Thunderbolt Bus: MacBook Air, Apple Inc.

偏好设置-语言选项bug

在偏好设置-语言选项,打开语言下拉菜单,点击已选中项目仍然会重启应用。比如当前语言是Chinese,下拉菜单再点击Chinese,会重启应用。
另外一个小建议,偏好设置-语言下拉菜单的"Chinese(Simplified)"改为“中文(简体中文)"

代码块语法不显示

文档笔记使用如下代码块语法默认显示文本

<pre>

</pre>

软件挺不错的,赞(另外,后续是否会支持 编辑&预览 双视图?

一点小建议

简单使用了一下,界面很简洁,字体也很漂亮,不过也遇到了一些小问题,如下:

1、默认字体有点小,[右键-字体]调整字号,切换预览又恢复原字号,希望能更方便的修改字号大小,支持快捷键【Cmd + (+或-)】调整字号就更棒了
2、最小化快捷键【Cmd + M】被占用了,用着不太方便,希望能调整一下

任务列表预览样式建议

任务列表在预览时,复选框前面会多出来无序列表的圆点符号

- [x] item1
- [ ] item2
- [ ] item3

上面的任务列表在预览和导出时会被渲染成如下样式:
image

希望可以调整一下,去掉前面的圆点

一些小问题

1.笔记的高度没法更改,很影响使用,并不是一定会使用全屏编辑的
2.笔记的字体和字号无法更改,可能不是所有人都能适应默认的字体
3.希望能增加快捷创建表格和简单的添加行列,合并单元格的功能
4.希望能增加对字体的颜色高亮(简单的几个颜色),还有一些简单格式快捷键(加粗、下划线等)
5.作者是否有想过适配m1mac呢,活动监视器看到是intel的,现在arm的用户应该越来越多了

粘贴图片时,URL 错误

CleanShot 2022-06-20 at 09 25 41

如上图所示,粘贴剪贴板图片时会在同级目录下创建 i 目录,并将图片保存在该目录下。这时图片的 URL 应为 i/xxx.png 而非 /i/xxx.png。虽然在 MiaoYan 可以正常预览,但是用其它 Markdown 编辑器打开的时候无法正常预览图片

[Feature]是否支持字数统计?

有用其写文章的需求。
是否有支持字数统计?
如果有,那么开关在哪里?
如果没有,可否支持下?实现上技术难度应该不大。

程序窗口无法保持后台运行

移到其他应用程序后,程序窗口丢失,需要点击 Dock栏才能重新唤起程序的窗口,或者通过任务切换器也可以唤起程序窗口。

这应该是一个 BUG。至少很影响体验。

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.