Git Product home page Git Product logo

Comments (9)

CardboardTurkey avatar CardboardTurkey commented on June 1, 2024 2

I'm also getting this on my thinkpad T14 with integrated graphics (running NixOS + Wayland). If I install via flatpak though Signal works fine. I also find Signal works fine on my XPS with a dedicated graphics card.

from signal-desktop.

trevordblack avatar trevordblack commented on June 1, 2024 2

Sure. Quick update.

I ended up going back to 6.41 and that works fine.

sudo apt install signal-desktop=6.41.0

I installed the latest (6.43) and it's crashing again.

Running 6.43 --disable-gpu crashes in the same way

trevor@tdb:~$ signal-desktop --disable-gpu 
Set Windows Application User Model ID (AUMID) { AUMID: 'org.whispersystems.signal-desktop' }
NODE_ENV production
NODE_CONFIG_DIR /opt/Signal/resources/app.asar/config
NODE_CONFIG {}
ALLOW_CONFIG_MUTATIONS undefined
HOSTNAME undefined
NODE_APP_INSTANCE undefined
SUPPRESS_NO_CONFIG_WARNING undefined
SIGNAL_ENABLE_HTTP undefined
userData: /home/trevor/.config/Signal
config/get: Successfully read user config file
config/get: Successfully read ephemeral config file
making app single instance
{"level":30,"time":"2024-01-04T05:38:44.852Z","msg":"got fast localeOverride setting null"}
{"level":30,"time":"2024-01-04T05:38:44.852Z","msg":"app.ready: hour cycle preference: UnknownPreference"}
{"level":30,"time":"2024-01-04T05:38:44.852Z","msg":"app.ready: preferred system locales: en-US, en"}
{"level":30,"time":"2024-01-04T05:38:44.852Z","msg":"locale: Supported locales: af-ZA, ar, az-AZ, bg-BG, bn-BD, bs-BA, ca, cs, da, de, el, en, es, et-EE, eu, fa-IR, fi, fr, ga-IE, gl-ES, gu-IN, he, hi-IN, hr-HR, hu, id, it, ja, ka-GE, kk-KZ, km-KH, kn-IN, ko, ky-KG, lt-LT, lv-LV, mk-MK, ml-IN, mr-IN, ms, my, nb, nl, pa-IN, pl, pt-BR, pt-PT, ro-RO, ru, sk-SK, sl-SI, sq-AL, sr, sv, sw, ta-IN, te-IN, th, tl-PH, tr, ug, uk-UA, ur, vi, yue, zh-CN, zh-HK, zh-Hant"}
{"level":30,"time":"2024-01-04T05:38:44.852Z","msg":"locale: Preferred locales: en-US, en"}
{"level":30,"time":"2024-01-04T05:38:44.852Z","msg":"locale: Locale Override: null"}
{"level":30,"time":"2024-01-04T05:38:44.854Z","msg":"locale: Matched locale: en"}
{"level":40,"time":"2024-01-04T05:38:44.871Z","msg":"intl.onWarn [@formatjs/intl] \"defaultRichTextElements\" was specified but \"message\" was not pre-compiled. \nPlease consider using \"@formatjs/cli\" to pre-compile your messages for performance.\nFor more details see https://formatjs.io/docs/getting-started/message-distribution"}
{"level":30,"time":"2024-01-04T05:38:44.871Z","msg":"locale: Text info direction for en: ltr"}
{"level":30,"time":"2024-01-04T05:38:44.872Z","msg":"app ready"}
{"level":30,"time":"2024-01-04T05:38:44.872Z","msg":"starting version 6.43.0"}
{"level":30,"time":"2024-01-04T05:38:44.872Z","msg":"media access status [object Undefined] [object Undefined]"}
{"level":30,"time":"2024-01-04T05:38:44.873Z","msg":"got fast theme-setting value system"}
{"level":40,"time":"2024-01-04T05:38:44.873Z","msg":"MainSQL: Database log code=283: recovered 611 frames from WAL file [REDACTED]/sql/db.sqlite-wal"}
{"level":30,"time":"2024-01-04T05:38:44.873Z","msg":"MainSQL: updateSchema:\n  Current user_version: 970;\n  Most recent db schema: 970;\n  SQLite version: 3.42.0;\n  SQLCipher version: 4.5.5 community;\n  (deprecated) schema_version: 437;\n"}
{"level":30,"time":"2024-01-04T05:38:44.874Z","msg":"got fast theme-setting value system"}
{"level":30,"time":"2024-01-04T05:38:44.874Z","msg":"got fast spellcheck setting true"}
{"level":30,"time":"2024-01-04T05:38:44.875Z","msg":"getSystemTraySetting had no flags and did no DB lookups. Returning DoNotUseSystemTray"}
{"level":30,"time":"2024-01-04T05:38:44.875Z","msg":"Initializing BrowserWindow config: {\"show\":false,\"width\":1290,\"height\":785,\"minWidth\":300,\"minHeight\":200,\"autoHideMenuBar\":false,\"titleBarStyle\":\"default\",\"titleBarOverlay\":false,\"backgroundColor\":\"#121212\",\"webPreferences\":{\"devTools\":false,\"spellcheck\":true,\"enableBlinkFeatures\":\"CSSPseudoDir,CSSLogical\",\"nodeIntegration\":false,\"nodeIntegrationInWorker\":false,\"sandbox\":false,\"contextIsolation\":true,\"preload\":\"[REDACTED]/preload.bundle.js\",\"backgroundThrottling\":true,\"enablePreferredSizeMode\":true,\"disableBlinkFeatures\":\"Accelerated2dCanvas,AcceleratedSmallCanvases\"},\"icon\":\"[REDACTED]/images/signal-logo-desktop-linux.png\",\"x\":0,\"y\":37}"}
{"level":30,"time":"2024-01-04T05:38:44.896Z","msg":"spellcheck: user locales: [\"en-US\",\"en\"]"}
{"level":30,"time":"2024-01-04T05:38:44.896Z","msg":"spellcheck: available spellchecker languages: [\"af\",\"bg\",\"ca\",\"cs\",\"cy\",\"da\",\"de\",\"de-DE\",\"el\",\"en\",\"en-AU\",\"en-CA\",\"en-GB\",\"en-GB-oxendict\",\"en-US\",\"es\",\"es-419\",\"es-AR\",\"es-ES\",\"es-MX\",\"es-US\",\"et\",\"fa\",\"fo\",\"fr\",\"fr-FR\",\"he\",\"hi\",\"hr\",\"hu\",\"hy\",\"id\",\"it\",\"it-IT\",\"ko\",\"lt\",\"lv\",\"nb\",\"nl\",\"pl\",\"pt\",\"pt-BR\",\"pt-PT\",\"ro\",\"ru\",\"sh\",\"sk\",\"sl\",\"sq\",\"sr\",\"sv\",\"ta\",\"tg\",\"tr\",\"uk\",\"vi\"]"}
{"level":30,"time":"2024-01-04T05:38:44.896Z","msg":"spellcheck: setting languages to: [\"en-US\",\"en\"]"}
[75392:0103/223844.918719:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[75392:0103/223845.037129:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[75392:0103/223845.145544:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
{"level":30,"time":"2024-01-04T05:38:45.182Z","msg":"got fast theme-setting value system"}
[75392:0103/223845.214260:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[75392:0103/223845.280569:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[75392:0103/223845.351015:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[75392:0103/223845.351035:FATAL:gpu_data_manager_impl_private.cc(448)] GPU process isn't usable. Goodbye.
Trace/breakpoint trap (core dumped)

Downloaded the beta and ran it. Crashing. I had the crash send to you all.

trevor@tdb:~$ signal-desktop-beta 
Set Windows Application User Model ID (AUMID) { AUMID: 'org.whispersystems.signal-desktop-beta' }
NODE_ENV production
NODE_CONFIG_DIR /opt/Signal Beta/resources/app.asar/config
NODE_CONFIG {}
ALLOW_CONFIG_MUTATIONS undefined
HOSTNAME undefined
NODE_APP_INSTANCE undefined
SUPPRESS_NO_CONFIG_WARNING undefined
SIGNAL_ENABLE_HTTP undefined
userData: /home/trevor/.config/Signal Beta
config/get: Successfully read user config file
config/get: Successfully read ephemeral config file
getLogger: Logger not yet initialized!
crashReporter: enabled
making app single instance
{"level":30,"time":"2024-01-04T05:41:08.001Z","msg":"crashReporter: enabled"}
{"level":30,"time":"2024-01-04T05:41:08.002Z","msg":"got fast localeOverride setting null"}
{"level":30,"time":"2024-01-04T05:41:08.002Z","msg":"app.ready: hour cycle preference: UnknownPreference"}
{"level":30,"time":"2024-01-04T05:41:08.002Z","msg":"app.ready: preferred system locales: en-US, en"}
{"level":30,"time":"2024-01-04T05:41:08.002Z","msg":"locale: Supported locales: af-ZA, ar, az-AZ, bg-BG, bn-BD, bs-BA, ca, cs, da, de, el, en, es, et-EE, eu, fa-IR, fi, fr, ga-IE, gl-ES, gu-IN, he, hi-IN, hr-HR, hu, id, it, ja, ka-GE, kk-KZ, km-KH, kn-IN, ko, ky-KG, lt-LT, lv-LV, mk-MK, ml-IN, mr-IN, ms, my, nb, nl, pa-IN, pl, pt-BR, pt-PT, ro-RO, ru, sk-SK, sl-SI, sq-AL, sr, sv, sw, ta-IN, te-IN, th, tl-PH, tr, ug, uk-UA, ur, vi, yue, zh-CN, zh-HK, zh-Hant"}
{"level":30,"time":"2024-01-04T05:41:08.002Z","msg":"locale: Preferred locales: en-US, en"}
{"level":30,"time":"2024-01-04T05:41:08.002Z","msg":"locale: Locale Override: null"}
{"level":30,"time":"2024-01-04T05:41:08.004Z","msg":"locale: Matched locale: en"}
{"level":40,"time":"2024-01-04T05:41:08.023Z","msg":"intl.onWarn [@formatjs/intl] \"defaultRichTextElements\" was specified but \"message\" was not pre-compiled. \nPlease consider using \"@formatjs/cli\" to pre-compile your messages for performance.\nFor more details see https://formatjs.io/docs/getting-started/message-distribution"}
{"level":30,"time":"2024-01-04T05:41:08.024Z","msg":"locale: Text info direction for en: ltr"}
{"level":30,"time":"2024-01-04T05:41:08.024Z","msg":"getSystemTraySetting got fast value MinimizeToSystemTray"}
{"level":30,"time":"2024-01-04T05:41:08.024Z","msg":"getSystemTraySetting returning MinimizeToSystemTray"}
{"level":30,"time":"2024-01-04T05:41:08.025Z","msg":"app ready"}
{"level":30,"time":"2024-01-04T05:41:08.025Z","msg":"starting version 6.44.0-beta.1"}
{"level":30,"time":"2024-01-04T05:41:08.025Z","msg":"media access status [object Undefined] [object Undefined]"}
{"level":30,"time":"2024-01-04T05:41:08.026Z","msg":"got fast theme-setting value system"}
{"level":40,"time":"2024-01-04T05:41:08.027Z","msg":"MainSQL: Database log code=283: recovered 660 frames from WAL file [REDACTED]/sql/db.sqlite-wal"}
{"level":30,"time":"2024-01-04T05:41:08.027Z","msg":"MainSQL: updateSchema:\n  Current user_version: 970;\n  Most recent db schema: 980;\n  SQLite version: 3.42.0;\n  SQLCipher version: 4.5.5 community;\n  (deprecated) schema_version: 437;\n"}
{"level":30,"time":"2024-01-04T05:41:08.027Z","msg":"MainSQL: updateToSchemaVersion980: success!"}
{"level":30,"time":"2024-01-04T05:41:08.027Z","msg":"MainSQL: updateSchema: optimize took 0ms"}
{"level":30,"time":"2024-01-04T05:41:08.027Z","msg":"got fast theme-setting value system"}
{"level":30,"time":"2024-01-04T05:41:08.028Z","msg":"got fast spellcheck setting true"}
{"level":50,"time":"2024-01-04T05:41:08.028Z","msg":"visibleOnAnyScreen: windowOptions didn't have valid bounds fields"}
{"level":30,"time":"2024-01-04T05:41:08.028Z","msg":"Location reset needed"}
{"level":30,"time":"2024-01-04T05:41:08.028Z","msg":"Initializing BrowserWindow config: {\"show\":false,\"width\":800,\"height\":610,\"minWidth\":300,\"minHeight\":200,\"autoHideMenuBar\":false,\"titleBarStyle\":\"default\",\"titleBarOverlay\":false,\"backgroundColor\":\"#121212\",\"webPreferences\":{\"devTools\":true,\"spellcheck\":true,\"enableBlinkFeatures\":\"CSSPseudoDir,CSSLogical\",\"enablePreferredSizeMode\":true,\"nodeIntegration\":false,\"nodeIntegrationInWorker\":false,\"sandbox\":false,\"contextIsolation\":true,\"preload\":\"[REDACTED]/preload.bundle.js\",\"backgroundThrottling\":true,\"disableBlinkFeatures\":\"Accelerated2dCanvas,AcceleratedSmallCanvases\"},\"icon\":\"[REDACTED]/images/signal-logo-desktop-linux.png\"}"}
{"level":30,"time":"2024-01-04T05:41:08.047Z","msg":"spellcheck: user locales: [\"en-US\",\"en\"]"}
{"level":30,"time":"2024-01-04T05:41:08.047Z","msg":"spellcheck: available spellchecker languages: [\"af\",\"bg\",\"ca\",\"cs\",\"cy\",\"da\",\"de\",\"de-DE\",\"el\",\"en\",\"en-AU\",\"en-CA\",\"en-GB\",\"en-GB-oxendict\",\"en-US\",\"es\",\"es-419\",\"es-AR\",\"es-ES\",\"es-MX\",\"es-US\",\"et\",\"fa\",\"fo\",\"fr\",\"fr-FR\",\"he\",\"hi\",\"hr\",\"hu\",\"hy\",\"id\",\"it\",\"it-IT\",\"ko\",\"lt\",\"lv\",\"nb\",\"nl\",\"pl\",\"pt\",\"pt-BR\",\"pt-PT\",\"ro\",\"ru\",\"sh\",\"sk\",\"sl\",\"sq\",\"sr\",\"sv\",\"ta\",\"tg\",\"tr\",\"uk\",\"vi\"]"}
{"level":30,"time":"2024-01-04T05:41:08.047Z","msg":"spellcheck: setting languages to: [\"en-US\",\"en\"]"}
{"level":30,"time":"2024-01-04T05:41:08.054Z","msg":"spellcheck: dictionary initialized: en"}
{"level":30,"time":"2024-01-04T05:41:08.054Z","msg":"spellcheck: dictionary initialized: en-US"}
{"level":30,"time":"2024-01-04T05:41:08.315Z","msg":"got fast theme-setting value system"}
{"level":30,"time":"2024-01-04T05:41:08.711Z","msg":"got fast spellcheck setting true"}
{"level":30,"time":"2024-01-04T05:41:08.716Z","msg":"System tray service: created"}
{"level":30,"time":"2024-01-04T05:41:08.716Z","msg":"System tray service: updating main window. Previously, there was not a window, and now there is"}
{"level":30,"time":"2024-01-04T05:41:08.716Z","msg":"System tray service: rendering no tray"}
{"level":30,"time":"2024-01-04T05:41:08.716Z","msg":"System tray service: enabling"}
{"level":30,"time":"2024-01-04T05:41:08.716Z","msg":"System tray service: rendering the tray"}
{"level":30,"time":"2024-01-04T05:41:08.716Z","msg":"System tray service: creating the tray"}
{"level":30,"time":"2024-01-04T05:41:08.717Z","msg":"Begin ensuring permissions"}
{"level":30,"time":"2024-01-04T05:41:08.717Z","msg":"Ensuring file permissions for 4 files"}
{"level":30,"time":"2024-01-04T05:41:08.718Z","msg":"Finish ensuring permissions in 1ms"}
{"level":30,"time":"2024-01-04T05:41:08.746Z","msg":"deleteAllBadges: deleted 0 files"}
{"level":30,"time":"2024-01-04T05:41:08.747Z","msg":"MainSQL: removeKnownStickers: About to iterate through 0 stickers"}
{"level":30,"time":"2024-01-04T05:41:08.747Z","msg":"MainSQL: removeKnownStickers: Done processing 0 stickers"}
{"level":30,"time":"2024-01-04T05:41:08.747Z","msg":"deleteAllStickers: deleted 0 files"}
{"level":30,"time":"2024-01-04T05:41:08.748Z","msg":"MainSQL: removeKnownDraftAttachments: About to iterate through 1 conversations"}
{"level":30,"time":"2024-01-04T05:41:08.748Z","msg":"MainSQL: removeKnownDraftAttachments: Done processing 1 conversations"}
{"level":30,"time":"2024-01-04T05:41:08.748Z","msg":"deleteAllDraftAttachments: deleted 0 files"}
{"level":30,"time":"2024-01-04T05:41:08.748Z","msg":"cleanupOrphanedAttachments: found 0 attachments on disk"}
{"level":30,"time":"2024-01-04T05:41:08.749Z","msg":"MainSQL: getKnownConversationAttachments: About to iterate through 1"}
{"level":30,"time":"2024-01-04T05:41:08.749Z","msg":"MainSQL: getKnownConversationAttachments: Done processing"}
{"level":30,"time":"2024-01-04T05:41:08.749Z","msg":"cleanupOrphanedAttachments: found 1 conversation attachments (1 missing), 0 remain"}
{"level":30,"time":"2024-01-04T05:41:08.749Z","msg":"cleanupOrphanedAttachments: took 9ms"}
{"level":30,"time":"2024-01-04T05:41:08.749Z","msg":"MainSQL: getKnownMessageAttachments(aaa38c68a7de8fdc): Starting iteration through 0 messages"}
{"level":30,"time":"2024-01-04T05:41:08.749Z","msg":"Begin ensuring permissions"}
{"level":30,"time":"2024-01-04T05:41:08.752Z","msg":"Ensuring file permissions for 121 files"}
{"level":50,"time":"2024-01-04T05:41:08.753Z","msg":"ensureFilePermissions: Error from chmod ENOENT: no such file or directory, chmod '[REDACTED]/SingletonCookie'"}
{"level":50,"time":"2024-01-04T05:41:08.753Z","msg":"ensureFilePermissions: Error from chmod ENOENT: no such file or directory, chmod '[REDACTED]/SingletonLock'"}
{"level":30,"time":"2024-01-04T05:41:08.754Z","msg":"Finish ensuring permissions in 5ms"}
{"level":30,"time":"2024-01-04T05:41:08.785Z","msg":"updater/start: Updates disabled - not starting new version checks"}
{"level":30,"time":"2024-01-04T05:41:08.790Z","msg":"Prevent display sleep service: allowing display sleep"}
{"level":30,"time":"2024-01-04T05:41:08.790Z","msg":"Background throttling enabled because no call is active"}
{"level":30,"time":"2024-01-04T05:41:08.801Z","msg":"MainSQL: finishGetKnownMessageAttachments(aaa38c68a7de8fdc): reached the end after processing 0 messages"}
{"level":30,"time":"2024-01-04T05:41:08.801Z","msg":"cleanupOrphanedAttachments: found 0 message attachments, (0 missing) 0 remain"}
{"level":30,"time":"2024-01-04T05:41:08.801Z","msg":"deleteAll: deleted 0 files"}
{"level":30,"time":"2024-01-04T05:41:08.801Z","msg":"deleteOrphanedAttachments: took 52ms"}
[77458:0103/224109.007179:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[77458:0103/224109.121009:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[77458:0103/224109.233665:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[77458:0103/224109.304118:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[77458:0103/224109.381166:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[77458:0103/224109.462314:ERROR:gpu_process_host.cc(991)] GPU process exited unexpectedly: exit_code=133
[77458:0103/224109.462338:FATAL:gpu_data_manager_impl_private.cc(448)] GPU process isn't usable. Goodbye.
Trace/breakpoint trap (core dumped)

from signal-desktop.

ayumi-signal avatar ayumi-signal commented on June 1, 2024

@trevordblack Hi there, sorry this is happening for you. Can you try running Signal Desktop with --disable-gpu?

If that doesn't work, a crash dump would be helpful for us to debug. Could I ask you to use Signal Beta, so next time it crashes it will generate a dump, and on the next startup it would ask you to submit the dump.

Beta instructions: https://support.signal.org/hc/en-us/articles/360007318471-Signal-Beta

from signal-desktop.

ayumi-signal avatar ayumi-signal commented on June 1, 2024

@trevordblack Thanks for reproducing with Beta and for info that it's working in 6.41. Since then we upgraded electron from 25 to 27 so I wonder if it's related.

Regarding the debug log, can you restart after the crash and generate a full debug log and post the link? (It's redacted so safe to post here.) They log links look like this: https://debuglogs.org/desktop/6.34.0-abcdef/abcdefghijklmnop

from signal-desktop.

anpandey avatar anpandey commented on June 1, 2024

Starting signal-desktop in an X11 environment before moving back to Wayland seems to at least get signal-desktop showing again. However this was on NixOS and not the officially distributed version.

from signal-desktop.

scottnonnenberg-signal avatar scottnonnenberg-signal commented on June 1, 2024

@trevordblack @anpandey This is very likely an Electron issue - for the best chance of getting this fixed, you can help by filing a bug on their project with an Electron Fiddle showing a minimum repro, and providing all of your hardware (especially graphics hardware/drivers) details.

You can also try Chrome or Chromium, to see if the same thing reproduces there, and file issues on those projects. Probably a better chance of getting low-level stuff like this fixed if you go directly to the source!

from signal-desktop.

hamoid avatar hamoid commented on June 1, 2024

It is an Electron issue.

I have the same problem with chromium and with upscayl-2.9.5-linux.AppImage. Older versions used to work but they are no longer compatible with the system. In my case with NVidia on Manjaro. Telegram works fine.

from signal-desktop.

hamoid avatar hamoid commented on June 1, 2024

I'll correct myself: it's an issue that affects Electron. In my case it was solved by installing libva-nvidia-driver.

from signal-desktop.

sunder-kirei avatar sunder-kirei commented on June 1, 2024

Hi, I was facing this issue recently, if you are using intel integrated graphics on your system, try removing intel-i915-dkms and install intel-i915 drivers, it worked for me

sudo apt remove intel-i915-dkms

sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo apt update
sudo apt dist-upgrade
sudo reboot
sudo lshw -c video | grep 'configuration'

This should show

driver=i915

from signal-desktop.

Related Issues (20)

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.