Giter Club home page Giter Club logo

bolt's People

Contributors

adamcake avatar agwhitaker93 avatar jertzukka avatar kmcgurty avatar smithcol11 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

bolt's Issues

Invisible Window [Wayland/NVIDIA]

Hello,

I am using Arch Linux with Bolt installed from the AUR. I have recently updated my system and now whenever I launch Bolt the window is invisible. Below is a screenshot of the window and output from launching it in the terminal. It works fine on X so it might be some weird new NVIDIA bug on Wayland. Let me know if you need more info provided.

Kernel: 6.7.5-arch1-1
OS: Gnome 45.4
NVIDIA Driver: 545.29.06

$ bolt
[0222/103545.463725:WARNING:chrome_browser_cloud_management_controller.cc(87)] Could not create policy manager as CBCM is not enabled.
[B] OnContextInitialized
[B] Browser::Window popup constructor, this=106430610144080
[B] OnWindowCreated 0 this=106430610144080
[B] OnAfterCreated for browser 1
[B] OnBrowserCreated this=106430610144080 1
[R] OnBrowserCreated for browser 1
MESA-LOADER: failed to open nvidia-drm: /usr/lib/gbm/nvidia-drm_gbm.so: cannot open shared object file: Permission denied (search paths /usr/lib/gbm, suffix _gbm)
MESA-LOADER: failed to retrieve device information
MESA-LOADER: failed to open nvidia-drm: /usr/lib/dri/nvidia-drm_dri.so: cannot open shared object file: Permission denied (search paths /usr/lib/dri, suffix _dri)
MESA-LOADER: failed to open kms_swrast: /usr/lib/dri/kms_swrast_dri.so: cannot open shared object file: Permission denied (search paths /usr/lib/dri, suffix _dri)
MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so: cannot open shared object file: Permission denied (search paths /usr/lib/dri, suffix _dri)
[R] OnLoadEnd for browser 1
[0222/103545.659410:ERROR:ev_root_ca_metadata.cc(161)] Failed to decode OID: 0

Screenshot from 2024-02-22 10-36-30

Fails to Build on Arch Linux via AUR installation due to missing fmt9 dependency

$ makepkg -si PKGBUILD
==> Making package: bolt-launcher 0.8.2-3 (Tue Apr 16 11:34:00 2024)
==> Checking runtime dependencies...
==> Installing missing dependencies...
error: target not found: fmt9
==> ERROR: 'pacman' failed to install missing dependencies.
==> Missing dependencies:
  -> fmt9
==> Checking buildtime dependencies...
==> ERROR: Could not resolve all dependencies.

Issues with GPU and HDOS plugin

Bolt worked perfectly for the first few months, all functionality was there.
For the past week I'm unable to enable the GPU or HD plugins, they instantly switch back to off.

Where is the logfile located?

Thanks for the help!

Icon missing from window panel

The bolt launcher icon shows up with the applets on the right panel, but instead of there being an icon for the active window it's a thin transparent box. I can pin the bolt launcher to the panel and click that, but it still opens up under that thin box. Runelite will also open up as the thin box but has the regular icon when run without the bolt launcher.

I'm using Linux Mint 21.3. When I set the button label to "Window Title" it shows as full width with no icon, but I'd prefer to have icons only in the panel.

image

No audio in runelite client

When launching Runelite through the Bolt launcher, my client doesn't have audio. Standalone, runelite does at least have audio on the login screen (the music), but when launched via Bolt there is not even an audio stream listen in Pulseaudio. I do have the pulseaudio-alsa package installed. Let me know where I can find useful logs for y'all to help solve this issue. I'm running Arch Linux, and it is updated as of today.

Attached is a txt file of the logs output in a shell running bolt from start until the launcher is opened. It looks like the symlink Pulse errors might be a good place to start.

Thanks for your help!
boltLaunchLogs2024-01-24.txt

Minor bug: unable to launch RuneLite on Fedora 39 after adding a new character on first launch

This happened when I did a specific sequence of actions on Fedora 39. I added a new character to my account while the launcher was open and I was logged in, then I closed and re-opened the launcher. When I tried to launch the RuneLite client on my new character, the following error was shown:

Error from https://api.github.com/repos/runelite/launcher/releases: 0:

I tried this on all the characters on my account, and the same error was thrown when attempting to launch RuneLite. HDOS didn't work either (though I didn't record the error message).

Re-launching the client seemed to fix this and RuneLite works now. Just figured I'd report it anyway.

Use native .runelite directory in flatpak?

Sorry if its a dumb question, but is it possible to have the flatpak version of RuneLite use the ~/.runelite instead of ~/.var/app/com.adamcake.Bolt/data/bolt-launcher/.runelite?

This is mainly for easier access to screenshots, so otherwise is it possible to symlink the screenshot folder out into something like ~/Pictures/RuneLite or something like that? I set up this symlink manually anyway, but not sure if it's possible in the flatpak setup natively.

Legacy Java Client

Is it possible to have the legacy java client added to the launcher as a launch option alongside RuneLite/HDOS?

Audio is played via HDMI Instead of Default Audio Device on Arch Linux

bolt-launcer version 0.8.2-1 (from AUR)
OS: Arch linux 6.7.5
Motherboard: X570
GPU: GTX 1080 nvidia 545.29.06-4
Audio drivers: alsa pulseaudio pulseaudio-alsa

Audio output works perfectly with official Runelite launcher although I can't login due to Jagex account requirement.
But whenever I use the bolt-launcher the audio is played in my monitor speakers via HDMI and the audio output doesn't show anywhere in Pavucontrol.
Even when everything is muted the Runelite audio plays on the monitor speakers when launched via bolt-launcher.

I have:
-Reinstalled all audio drivers
-Reset all audio driver related configurations
-In /etc/modprobe.d/blacklist.conf I added lines: blacklist snd_hda_codec_hdmi blacklist snd_hda_codec_nvhdmi
-In /etc/pulse/default.pa I added line: set-default-sink alsa_output.pci-0000_0b_00.4.analog-stereo
-Set default sink to card 1 "$ pacmd set-default-sink 1"
-Tried RuneLite JAR extracted from official appimage but this made no difference

I have 3 monitors: DVI-D, HDMI and one DP. Audio is always played from the HDMI monitor.
I have ran out of ideas what to do. Audio works perfectly fine with the official Runelite launcher.
I didn't find any audio device settings in bolt-launcher, Runelite or Runescape.

$ pactl info | grep "Default Sink"
Default Sink: alsa_output.pci-0000_0b_00.4.analog-stereo
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 3: Generic Digital [Generic Digital]
  Subdevices: 0/1

  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 0: ALC1220 Analog [ALC1220 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 1: ALC1220 Digital [ALC1220 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

$ aplay -L
aplayL.txt

Console log
bolt-launcher.log

I appreciate any help and I'm happy to provide more information as needed

Problem running in wayland.

As the title says, the game is completely frozen. Is there any way to configure an environment variable so that the game runs normally? I tried changing the "data/bolt-launcher/Jagex/launcher/preferences.cfg" file but without any success.

Request to update documentation to include fixes for known issues.

I am using Bolt on Arch Linux to play OSRS with RuneLite.

I have been troubleshooting an audio-related issue. This issue seems to be affecting some RuneLite Linux users. I found a solution to this issue mentioned here

I'm not very familiar with the inner workers on java relating to the --configure option that is mentioned in that solution. Although, I was able to confirm, that JVM options that are added via the java --configure option do not apply to instances of runelite that are started through the Bolt Launcher.

I suspect this is due to the fact the Bolt Launcher sets its own JAVA HOME, but unsure.

As I was able to confirm that adding those JVM options to the execution of the RuneLite.jar from outside of Bolt Launcher resolved the "no sound" issue for myself. As the JVM options applied via --configure did not apply to instances of RuneLite.jar that was launched through the Bolt Launcher, the temporary solution that I was able to implement is as follows.

  1. Execute java -jar RuneLite.jar --configure and add the following options to the JVM section:
-Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider
-Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider
-Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider
-Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider
  1. Unmute the login screen music and see if this fixes the "no sound" issue, if it does, then proceed to the next steps.
  2. execute archlinux-java get and make note of the java version from the output.
  3. (as root) cd /usr/lib/jvm/<JAVA_VERSION>/bin
  4. (as root) mv ./java ./java-real
  5. (as root) vim ./java and populate it with the following:
#!/bin/bash

echo "$*" | grep -i "\ runelite.jar"

arguments=$(echo "$*" | sed "s/net\.runelite\.client\.RuneLite//g")

if [ "$?" -eq 0 ]; then
        java-real $arguments -Djavax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider -Djavax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider -Djavax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider net.runelite.client.RuneLite
else
        java-real $*
fi

7.(as root) chmod a+x ./java
8. attempt launching RuneLite through the Bolt Launcher.

Notes:
I recognize this solution isn't ideal for several reasons and should only function as a temporary "fix" until the downstream issue with alsa/java/runelite is resolved. Although its not an issue with Bolt Launcher itself, given the current working fix for this issue is a sub par solution, as you have to replace the java binary with a "helper" bash script that intercepts and modifies usage of the java command specifically when used for the RuneLite.jar. This can present issues as if java is updated, or you switch java versions, the solution will stop functioning, additionally, this solution may have an unidentified issue that leads to the execution of other java applications being affected.

With that in mind, below are the instructions for how to "undo" the changes.

(as root)

  1. cd /usr/lib/jvm/<JAVA VERSION>/bin
  2. mv ./java-real ./java
  3. chmod a+x ./java

and if you need to completely reinstall java, please refer to your distributions instructions for that matter.

Tray Icon Not Appearing in Wayland

Hi, I run Arch with Hyprland and this is a minor annoyance but when I launch RuneLite via Bolt I tend to exit Bolt right after with my keyboard shortcut.

Unfortunately, there is no tray icon or "exit" button in Bolt, and the process stays running unless I kill it with pkill -9 bolt.

I'm not sure if there's supposed to be a tray icon that is not appearing in Hyprland, and that's the reason it stays running in the background, but it is a minor annoyance of mine. I don't like to keep the Bolt window open once I've launched RuneLite.

Would be great to have an "exit" button in Bolt that clean exits and/or fix the minimize to tray functionality (if that is indeed supposed to be a feature).

Allow client arguments or add an option to dump authentication tokens

An important feature for the plugin development.
Currently there is no way to pass the --insecure-write-credentials argument to the client, which makes not possible to dump the credentials.properties file required for login without the Jagex Launcher.

Or at least I do not know how to do it right now.

Notification Settings Force not working

Ubuntu 22.04 LTS

On osrs, using runelite, activating in the pluging "RuneLite" -> "Notification Settings" -> "Request focus" -> "Force" is not forcing the window on top. RuneLite is taking the focus, but stays under other window.

It should bring the window on top of every other window.

RS3 Can't Launch on Archlinux

Arch btw

Ryzen 9 3900x
Rx 6900 xt

yay -S bolt-launcher
bolt

I was able to log in successfully. The first time I clicked download it downloaded and installed. It printed out Game launch status: 'OK' and has a bunch of bolt processes hanging (probably from chromium). A process named rs3linux is present but is looks like its hung up doing nothing.

[mkp@arch ~]$ bolt
[0419/021119.651473:WARNING:chrome_browser_cloud_management_controller.cc(87)] Could not create policy manager as CBCM is not enabled.
[0419/021119.653366:ERROR:object_proxy.cc(590)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/portal/desktop: org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.FileChooser”
[0419/021119.653409:WARNING:property.cc(144)] version: GetAndBlock: failed.
[0419/021119.653435:ERROR:select_file_dialog_linux_portal.cc(274)] Failed to read portal version property
[0419/021119.653483:WARNING:gtk_ui.cc(143)] Unexpected gtk-xft-rgba "rgba"
[B] OnContextInitialized
[B] Browser::Window popup constructor, this=111131796055424
[B] OnWindowCreated 0 this=111131796055424
[B] OnAfterCreated for browser 1
[B] OnBrowserCreated this=111131796055424 1
[0419/021119.759551:WARNING:sandbox_linux.cc(393)] InitializeSandbox() called with multiple threads in process gpu-process.
[R] OnBrowserCreated for browser 1
[R] OnLoadEnd for browser 1
[0419/021119.889887:ERROR:ev_root_ca_metadata.cc(161)] Failed to decode OID: 0
[B] Successfully spawned game process with pid 1301
/home/mkp/.local/share/bolt-launcher/rs3linux: error while loading shared libraries: libgdk-x11-2.0.so.0: cannot open shared object file: No such file or directory

/lib and /usr/lib (but not /usr/local/lib) has:

./libgdk_pixbuf-2.0.so.0
./libgdk-3.so.0.2409.32
./libgdk_pixbuf-2.0.so
./libgdk-3.so
./libgdk-3.so.0
./libgdk_pixbuf-2.0.so.0.4200.10

So it's understandable that rs3linux couldn't find libgdk-x11-2.0.so.0
Progress was made with yay -S libgtk2

Getting the issue with openssl 1.1 not being found.
Attempting to yay -S openssl-1.1

Okay its splash screening.
Signing in feels very loady, expected.
Logging in to play. [Loading - please wait.] ™️

My issue was resolved with,

yay -S libgtk2 openssl-1.1

Proposal

  • Add section for libgtk2 issue since this is a very vanilla install of x11 arch on cinnamon, if other can me too this
  • Add section promoting sdkman instead of using the aur jdk17, as its nicely packaged and contains actually modern releases while not stealing your JAVA_HOME and masking your /usr/bin/java
curl -s "https://get.sdkman.io" | bash
source \"~/.sdkman/bin/sdkman-init.sh\""
sdk install java 21.0.2-tem

# you can swap java versions easily via
# sdk use java 21.0.2-tem

# [mkp@arch lib]$ which java
# /home/mkp/.sdkman/candidates/java/21.0.2-tem/bin/java
# [mkp@arch lib]$ echo $JAVA_HOME
# /home/mkp/.sdkman/candidates/java/21.0.2-tem

Stuck at "loading application resources"

Heyo, I am running into an issue launching now but was able to get the bolt launcher to work for a while, but for whatever reason after I moved it stopped working. Not sure where I could get any more debug info but here is what I do have.

Stuck at around 20%ish on the "Loading application resources" part of launching. App is not responding at all, including close and settings button. Closing bolt and the terminal does not close the client at all, not sure if it should though. I have checked about every day with the updates but it does not seem to have resolved itself.

OS: Ubuntu 22.04
WM: i3wm
Game: Runescape 3
Output:

▶ flatpak run com.adamcake.Bolt
[1215/220114.821535:ERROR:zygote_host_impl_linux.cc(218)] Failed to get Widevine CDM folder for sandbox forwarding
[1215/220115.122967:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[1215/220115.277989:WARNING:chrome_browser_cloud_management_controller.cc(87)] Could not create policy manager as CBCM is not enabled.
[B] OnContextInitialized
[B] Browser::Window popup constructor, this=93988777187760
[B] OnWindowCreated 0 this=93988777187760
[B] OnAfterCreated for browser 1
[B] OnBrowserCreated this=93988777187760 1
[R] OnBrowserCreated for browser 1
[R] OnLoadEnd for browser 1
[1215/220115.721263:ERROR:ev_root_ca_metadata.cc(161)] Failed to decode OID: 0
[B] Successfully spawned game process with pid 90
Gtk-Message: 22:01:25.739: Failed to load module "atk-bridge"

Client output:

Messages:
Game launch status: 'OK'
Latest client is already installed
Save-credentials status: OK
Successfully added login for <my account>

HDOS/runelite not working (weird tzdb.dat location issue)

Attempting to launch HDOS from launcher version 0.9.0, nothing happens, causes this error: (from .local/share/bolt-launcher/hdos/launcher.log )
EDIT: runelite also has this issue
launcher gui says successful

running bolt from AUR on archlinux
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk/bin/java

console output:

[B] Successfully spawned game process with pid 231210
args = []
home = /home/redacted/.local/share/bolt-launcher/hdos
Exception in thread "main" java.lang.Error: java.io.FileNotFoundException: /home/redacted/.local/share/bolt-launcher/java-proxy/lib/tzdb.dat (Not a directory)
        at sun.util.calendar.ZoneInfoFile$1.run(ZoneInfoFile.java:261)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.util.calendar.ZoneInfoFile.<clinit>(ZoneInfoFile.java:251)
        at sun.util.calendar.ZoneInfo.getTimeZone(ZoneInfo.java:589)
        at java.util.TimeZone.getTimeZone(TimeZone.java:560)
        at java.util.TimeZone.setDefaultZone(TimeZone.java:666)
        at java.util.TimeZone.getDefaultRef(TimeZone.java:636)
        at java.util.TimeZone.getDefault(TimeZone.java:625)
        at java.text.SimpleDateFormat.initializeCalendar(SimpleDateFormat.java:657)
        at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:601)
        at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:580)
        at _a._a._a._i.<init>(_i.java:4)
        at _a._a._a._h.<clinit>(_h.java:11)
        at _a._a._a._g._z._a(_z.java:11)
        at _a._a._a._g._z.main(_z.java:1)
        at hdos.Launcher.main(Launcher.java:11)
Caused by: java.io.FileNotFoundException: /home/redacted/.local/share/bolt-launcher/java-proxy/lib/tzdb.dat (Not a directory)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at sun.util.calendar.ZoneInfoFile$1.run(ZoneInfoFile.java:255)
        ... 15 more

going to .local/share/bolt-launcher/java-proxy/lib shows it's linked to /usr/lib/jvm/java-17-openjdk/bin/java/lib/ (which doesn't exist and can't exist because the java binary is already there...)

Runelite not opening on first install [AUR]

Hiya, I'm using Arch + Hyprland to play OSRS

I've noticed if you install bolt-launcher via the aur (not sure about flatpak version) on a fresh install of arch / never installed bolt-launcher or runelite and you run runelite via bolt for the first time it never starts the runelite client, even though it says it's downloaded runelite and the GUI says "Game launch status: 'OK'' however that isn't the case. To rectify this I've found I needed to install runelite via the aur and then I can run runelite via bolt. I've also tested removing runelite 'pacman -R runelite' and bolt will still launch runelite like you would expect (I assume through the downloaded version bolt does) but I'm not totally sure.

Trouble with shimmed java, and a lack of feedback

I have to use different versions of java for work, so I use asdf-vm to help switch versions. I also use fish as my login shell, which might be complicating things.

If I don't have JAVA_HOME set, Runelite silently fails to launch, and I see unknown command: java. Perhaps you have to reshim?
Screenshot_20240221_010846

Which suggests Bolt is picking up the shimmed java that asdf provides from my PATH, but can't use it because it's not being initialized in the forked process Bolt starts. I don't have any experience with systems level development, but I'm guessing that's expected behaviour.

I didn't have JAVA_HOME set when I first installed Bolt, and it took me an embarrassingly long amount of time to figure out doing so would fix things. Similarly, having JAVA_HOME set to something invalid makes Bolt silently error.

All that to say, it would be nice if Bolt gave me some insight into why it's not launching Runelite, or even tell me it's failing to launch in the first place.

I'm happy to have a go at adding some error messages to the UI, if that's okay with you, but the last time I touched C++ was over a decade ago in university so it may take me a while

Is this safe?

Is it safe to use the launcher?
Sorry for the question, but are my passwords safe?

Problems building and launching RS3 on NixOS?

Using Flatpak on NixOs I manage to get the Bolt launcher running. RuneLite works well, but the rs3 doesn't:

  • it either crashes during 'loading application resources'
  • or it starts up but only has a black screen.

I would like to debug this, but cannot find any crash logs whatsoever. Is this not a thing? Or are they somewhere stored through Bolt?
Thanks!

Some way to quickly launch to a specific character? (Feature request/feature offer)

I'm interested in writing in a way to launch runelite through bolt without messing with the interface, just through command line arguments, for one click launching through a menu or something silly like a i3wm keybinding.

I've already written this into my one-python-file launcher, and i'd be interested in trying to write it right into Bolt, so I wanted to ask for some direction or feedback on how the original author would want this done (just calling an existing bolt binary with arguments, using some kind of inter-process communication with the bolt daemon, writing a new stand-alone program that can read the bolt config and do what it needs to do from there, or something else) or if this would even be possible in a satisfactory way.

arRPC doesn't function when using Runelite via Bolt

I'm using a Linux distro - KDE - and use Armcord for my Discord alternative.

It makes use of an arRPC server to display Rich Presence info.

You can find more details here on how it works:

https://github.com/ArmCord/ArmCord

https://github.com/OpenAsar/arrpc

https://github.com/OpenAsar/arrpc/blob/main/examples/bridge_mod.js

With the arRPC server running and using the bridge_mod script, running the Runelite flatpak and/or jar by itself (without bolt) has Runelite show up in my Discord status as expected.

However, when launching it via Bolt, the status doesn't show.

It should be noted that I symlinked my old Runelite installation to where Bolt expects to find the .runelite folder in ~/.var/app/com.adamcake.Bolt/data/bolt-launcher/, but this shouldn't affect anything as that's just user settings.

I tried both using the bolt-included runelite jar, and setting the custom jar location from my previous installation.

Do I need to set something via flatseal for Bolt or otherwise to get this to work properly? Thanks

Can't get past the CloudFlare robot check

When logging in there's a "Are you a robot?" CloudFlare captcha. Whenever I click the verification button, it loads for a moment and then the button comes back as if I had not clicked it.

This text gets printed out by Bolt to the terminal whenever the CloudFlare check fails

[R] OnLoadEnd for browser 3
[0506/193100.452764:WARNING:browser_info.cc(309)] Returning a speculative frame for 64424509448 [15,8]
[R] OnBrowserCreated for browser 3
[0506/193100.505459:WARNING:browser_info.cc(309)] Returning a speculative frame for 64424509448 [15,8]
[0506/193100.505564:WARNING:browser_info.cc(309)] Returning a speculative frame for 64424509448 [15,8]
[0506/193100.505599:WARNING:browser_info.cc(309)] Returning a speculative frame for 64424509448 [15,8]
[0506/193100.505627:WARNING:browser_info.cc(309)] Returning a speculative frame for 64424509448 [15,8]

I built Bolt from source on Gentoo with the minimal and ungoogled CEF binary build

How to customize RuneLite's launch options?

I'm using the Flatpak version of Bolt and works great, but I need to customize its launch options -- namely, passing --scale=2 because otherwise it is too small on my 4K screen, and I see no way of doing that in bolt.

AUR package has problems with Arch default environment variables

I installed the AUR package and encountered a couple of issues:

  1. Runelite links such as login or the Discord button do not work, fixed by setting XDG_* envvars
  2. OSHD launch complains about JAVA_HOME

As far as I know by default none of these are set in Arch. JAVA_HOME used to be set, but it seems Arch just sets PATH with the archlinux-java script. The XDG variables are, as far as I know, supposed to have defaults when they are not set.

They are also mentioned in the Arch wiki, and after launching with ~ $ XDG_CONFIG_HOME=$HOME/.config XDG_CACHE_HOME=$HOME/.cache XDG_DATA_HOME=$HOME/.local/share XDG_STATE_HOME=$HOME/.local/state bolt Runelite links seem to function.

Are the XDG variables perhaps not being set by default? #21 is possibly about the same issue.

Flatpak version crashes on Fedora with KDE and KWallet

Recently switched from gnome-keyring to KWallet and the launcher seems to crash with KWallet

flatpak run com.adamcake.Bolt
[0612/113252.667035:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[0612/113252.692614:WARNING:chrome_browser_cloud_management_controller.cc(87)] Could not create policy manager as CBCM is not enabled.
[B] OnContextInitialized
[B] Browser::Window popup constructor, this=94093377103840
[B] OnWindowCreated 0 this=94093377103840
[0612/113252.698804:ERROR:object_proxy.cc(590)] Failed to call method: org.kde.KWallet.isEnabled: object_path= /modules/kwalletd6: org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
[0612/113252.698832:ERROR:kwallet_dbus.cc(107)] Error contacting kwalletd6 (isEnabled)
[0612/113252.698922:ERROR:object_proxy.cc(590)] Failed to call method: org.kde.KLauncher.start_service_by_desktop_name: object_path= /KLauncher: org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
[0612/113252.698929:ERROR:kwallet_dbus.cc(79)] Error contacting klauncher to start kwalletd6
[0612/113252.698933:WARNING:key_storage_linux.cc(219)] OSCrypt tried KWallet but couldn't initialise.
[0612/113252.698997:ERROR:object_proxy.cc(590)] Failed to call method: org.kde.KWallet.close: object_path= /modules/kwalletd6: org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
[0612/113252.699002:ERROR:kwallet_dbus.cc(459)] Error contacting kwalletd6 (close)
[B] OnAfterCreated for browser 1
[B] OnBrowserCreated this=94093377103840 1
[R] OnBrowserCreated for browser 1
[0612/113252.744109:WARNING:sandbox_linux.cc(401)] InitializeSandbox() called with multiple threads in process gpu-process.
[R] OnLoadEnd for browser 1
[0612/113252.792131:ERROR:ev_root_ca_metadata.cc(161)] Failed to decode OID: 0
[0612/113255.015230:ERROR:gl_surface_presentation_helper.cc(260)] GetVSyncParametersIfAvailable() failed for 1 times!
[0612/113256.766576:ERROR:gl_surface_presentation_helper.cc(260)] GetVSyncParametersIfAvailable() failed for 2 times!

OS: Fedora Linux 40 x86_64
Kernel: Linux 6.8.11-300.fc40.x86_64
DE: KDE Plasma 6.0.5

Game launch status: 'JAVA_HOME environment variable is required to run HDOS'

I've been using bolt just fine for months, installed from the AUR, but now I'm getting the following errors when trying to launch HDOS. I did a complete reinstall and it's still giving me the error.

Game launch status: 'JAVA_HOME environment variable is required to run HDOS'

Latest JAR is already installed

Reason for obfuscating values as Base64 in CEF configuration?

In src/browser/app.cxx / Browser::App::Execute, the configuration values are encoded with Base64 and then decoded on the JS side. Why are they obfuscated in this manner, and not specified directly as plaintext?

The configuration values are important to look at when auditing this software before use, as they are involved in the login process. Having an extra step to manually decode them to inspect them might cause concern.

Apologies for creating a new issue for this, it seems the best way to ask this question in a way that also will provide the answer to anyone else who might have the same question.

CEF binaries are out of date

The CEF binaries listed at https://adamcake.com/cef (linked in the readme) are out of date, causing the Cloudflare robot check to fail. Spotify offers the most recent binaries here if you'd like to link to these instead.

Chrome 114 is from May 2023, the latest stable is version 126. Not sure of what version is packed with the flatpak app?

Stuck on "Loading application resources"

Today when I went to launch the game, it would run but I was unable to do anything in game. I initially thought this was related to some login issue, but those have since be resolved and I was still experiencing the issue. I have since tried reinstalling, but now the game gets stuck at "Loading application resources"
OS: Debian 12
DE: KDE Plasma 5.27.5
Game: RS3
If I run the launcher and game using flatpak run com.adamcake.Bolt I get the following output:

[0525/121957.218430:ERROR:zygote_host_impl_linux.cc(218)] Failed to get Widevine CDM folder for sandbox forwarding
[0525/121957.414526:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
Gtk-Message: 12:19:57.432: Failed to load module "xapp-gtk3-module"
[0525/121957.497204:WARNING:chrome_browser_cloud_management_controller.cc(87)] Could not create policy manager as CBCM is not enabled.
[B] OnContextInitialized
[B] Browser::Window popup constructor, this=93829655209520
[B] OnWindowCreated 0 this=93829655209520
[0525/121957.515624:ERROR:object_proxy.cc(590)] Failed to call method: org.kde.KWallet.isEnabled: object_path= /modules/kwalletd5: org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
[0525/121957.515665:ERROR:kwallet_dbus.cc(107)] Error contacting kwalletd5 (isEnabled)
[0525/121957.515913:ERROR:object_proxy.cc(590)] Failed to call method: org.kde.KLauncher.start_service_by_desktop_name: object_path= /KLauncher: org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
[0525/121957.515936:ERROR:kwallet_dbus.cc(79)] Error contacting klauncher to start kwalletd5
[0525/121957.515946:WARNING:key_storage_linux.cc(219)] OSCrypt tried KWallet but couldn't initialise.
[0525/121957.516157:ERROR:object_proxy.cc(590)] Failed to call method: org.kde.KWallet.close: object_path= /modules/kwalletd5: org.freedesktop.DBus.Error.ServiceUnknown: org.freedesktop.DBus.Error.ServiceUnknown
[0525/121957.516171:ERROR:kwallet_dbus.cc(459)] Error contacting kwalletd5 (close)
[B] OnAfterCreated for browser 1
[B] OnBrowserCreated this=93829655209520 1
[R] OnBrowserCreated for browser 1
[0525/121957.584591:WARNING:sandbox_linux.cc(401)] InitializeSandbox() called with multiple threads in process gpu-process.
[R] OnLoadEnd for browser 1
[0525/121957.669149:ERROR:ev_root_ca_metadata.cc(161)] Failed to decode OID: 0
[B] Successfully spawned game process with pid 102
Gtk-Message: 12:20:03.647: Failed to load module "atk-bridge"

Any ideas?

CMake Error on Windows

I've tried following the README steps for a windows build but am receiving the following error when executing
cmake -S . -B build -G "Visual Studio 17"

-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.26100.
CMake Error at CMakeLists.txt:371 (target_include_directories):
  Cannot specify include directories for target "bolt-plugin" which is not
  built by this project.


CMake Error at CMakeLists.txt:372 (target_link_libraries):
  Cannot specify link libraries for target "bolt-plugin" which is not built
  by this project.


-- Configuring incomplete, errors occurred!```

AUR package?

Hi, are there any plans for an AUR package for Arch users? Thanks!

Build Error

Here is what I am running, and here is the error I get.

$ cmake --version
cmake version 3.21.4

CMake suite maintained and supported by Kitware (kitware.com/cmake).
$ cmake -S . -B build -D CMAKE_BUILD_TYPE=Debug
$ cmake --build build
/home/user/workspace/Bolt/src/browser/app.cxx: In member function ‘virtual void Browser::App::OnUncaughtException(CefRefPtr<CefBrowser>, CefRefPtr<CefFrame>, CefRefPtr<CefV8Context>, CefRefPtr<CefV8Exception>, CefRefPtr<CefV8StackTrace>)’:
/home/user/workspace/Bolt/src/browser/app.cxx:62:134: error: no matching function for call to ‘std::basic_string_view<char>::basic_string_view(__gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >, __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >)’
   62 |  const std::string_view source_view_trimmed(source_line.begin() + first_non_whitespace, source_line.begin() + last_non_whitespace + 1);
      |                                                                                                                                      ^
In file included from /usr/include/c++/9/bits/basic_string.h:48,
                 from /usr/include/c++/9/string:55,
                 from /usr/include/c++/9/stdexcept:39,
                 from /usr/include/c++/9/array:39,
                 from /usr/include/c++/9/tuple:39,
                 from /usr/include/c++/9/bits/unique_ptr.h:37,
                 from /usr/include/c++/9/memory:80,
                 from /home/user/workspace/Bolt/cef/dist/include/internal/cef_ptr.h:34,
                 from /home/user/workspace/Bolt/cef/dist/include/cef_base.h:39,
                 from /home/user/workspace/Bolt/cef/dist/include/cef_app.h:41,
                 from /home/user/workspace/Bolt/src/browser/app.hxx:4,
                 from /home/user/workspace/Bolt/src/browser/app.cxx:1:
/usr/include/c++/9/string_view:129:7: note: candidate: ‘constexpr std::basic_string_view<_CharT, _Traits>::basic_string_view(const _CharT*, std::basic_string_view<_CharT, _Traits>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_string_view<_CharT, _Traits>::size_type = long unsigned int]’
  129 |       basic_string_view(const _CharT* __str, size_type __len) noexcept
      |       ^~~~~~~~~~~~~~~~~
/usr/include/c++/9/string_view:129:39: note:   no known conversion for argument 1 from ‘__gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >’ to ‘const char*’
  129 |       basic_string_view(const _CharT* __str, size_type __len) noexcept
      |                         ~~~~~~~~~~~~~~^~~~~
/usr/include/c++/9/string_view:123:7: note: candidate: ‘constexpr std::basic_string_view<_CharT, _Traits>::basic_string_view(const _CharT*) [with _CharT = char; _Traits = std::char_traits<char>]’
  123 |       basic_string_view(const _CharT* __str) noexcept
      |       ^~~~~~~~~~~~~~~~~
/usr/include/c++/9/string_view:123:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/9/string_view:120:17: note: candidate: ‘constexpr std::basic_string_view<_CharT, _Traits>::basic_string_view(const std::basic_string_view<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]’
  120 |       constexpr basic_string_view(const basic_string_view&) noexcept = default;
      |                 ^~~~~~~~~~~~~~~~~
/usr/include/c++/9/string_view:120:17: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/9/string_view:116:7: note: candidate: ‘constexpr std::basic_string_view<_CharT, _Traits>::basic_string_view() [with _CharT = char; _Traits = std::char_traits<char>]’
  116 |       basic_string_view() noexcept
      |       ^~~~~~~~~~~~~~~~~
/usr/include/c++/9/string_view:116:7: note:   candidate expects 0 arguments, 2 provided
/home/user/workspace/Bolt/src/browser/app.cxx:69:30: error: invalid conversion from ‘std::basic_string_view<char>::const_pointer’ {aka ‘const char*’} to ‘std::basic_string_view<char>::size_type’ {aka ‘long unsigned int’} [-fpermissive]
   69 |   source_view_trimmed.data() + (do_trim_end ? exc_end_column + max_dist : source_view_trimmed.size())
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                              |
      |                              std::basic_string_view<char>::const_pointer {aka const char*}
In file included from /usr/include/c++/9/bits/basic_string.h:48,
                 from /usr/include/c++/9/string:55,
                 from /usr/include/c++/9/stdexcept:39,
                 from /usr/include/c++/9/array:39,
                 from /usr/include/c++/9/tuple:39,
                 from /usr/include/c++/9/bits/unique_ptr.h:37,
                 from /usr/include/c++/9/memory:80,
                 from /home/user/workspace/Bolt/cef/dist/include/internal/cef_ptr.h:34,
                 from /home/user/workspace/Bolt/cef/dist/include/cef_base.h:39,
                 from /home/user/workspace/Bolt/cef/dist/include/cef_app.h:41,
                 from /home/user/workspace/Bolt/src/browser/app.hxx:4,
                 from /home/user/workspace/Bolt/src/browser/app.cxx:1:
/usr/include/c++/9/string_view:129:56: note:   initializing argument 2 of ‘constexpr std::basic_string_view<_CharT, _Traits>::basic_string_view(const _CharT*, std::basic_string_view<_CharT, _Traits>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_string_view<_CharT, _Traits>::size_type = long unsigned int]’
  129 |       basic_string_view(const _CharT* __str, size_type __len) noexcept
      |                                              ~~~~~~~~~~^~~~~
make[2]: *** [CMakeFiles/bolt.dir/build.make:137: CMakeFiles/bolt.dir/src/browser/app.cxx.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:188: CMakeFiles/bolt.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

No sound using Runelite (Pulseaudio)

When launching Runelite I get no sound output, and when running Bolt from the terminal I see the following messages:

2023-12-27 00:26:22 CST [main] INFO  n.r.client.config.ConfigManager - Profile '$rsprofile' is up to date
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
Failed to create secure directory (/run/user/1000/bolt-runelite-ucFzrN/pulse): Too many levels of symbolic links
2023-12-27 00:26:23 CST [main] INFO  n.r.c.plugins.kourendlibrary.Library - Library is now reset

Checking out the directory structure, it looks like this:

[username@BlackFox bolt-runelite-ucFzrN]$ ls -ln /run/user/1000/bolt-runelite-ucFzrN
total 0
lrwxrwxrwx 1 1000 1000 21 Dec 27 00:26 at-spi -> /run/user/1000/at-spi
lrwxrwxrwx 1 1000 1000 35 Dec 27 00:26 bolt-runelite-7GtAIl -> /run/user/1000/bolt-runelite-7GtAIl
lrwxrwxrwx 1 1000 1000 35 Dec 27 00:26 bolt-runelite-gqpzaR -> /run/user/1000/bolt-runelite-gqpzaR
lrwxrwxrwx 1 1000 1000 35 Dec 27 00:26 bolt-runelite-T6a7C7 -> /run/user/1000/bolt-runelite-T6a7C7
lrwxrwxrwx 1 1000 1000 35 Dec 27 00:26 bolt-runelite-ucFzrN -> /run/user/1000/bolt-runelite-ucFzrN
lrwxrwxrwx 1 1000 1000 18 Dec 27 00:26 bus -> /run/user/1000/bus
lrwxrwxrwx 1 1000 1000 25 Dec 27 00:26 ccache-tmp -> /run/user/1000/ccache-tmp
lrwxrwxrwx 1 1000 1000 21 Dec 27 00:26 dbus-1 -> /run/user/1000/dbus-1
lrwxrwxrwx 1 1000 1000 20 Dec 27 00:26 dconf -> /run/user/1000/dconf
lrwxrwxrwx 1 1000 1000 28 Dec 27 00:26 discord-ipc-0 -> /run/user/1000/discord-ipc-0
lrwxrwxrwx 1 1000 1000 28 Dec 27 00:26 discord-ipc-1 -> /run/user/1000/discord-ipc-1
lrwxrwxrwx 1 1000 1000 18 Dec 27 00:26 doc -> /run/user/1000/doc
lrwxrwxrwx 1 1000 1000 18 Dec 27 00:26 gcr -> /run/user/1000/gcr
lrwxrwxrwx 1 1000 1000 20 Dec 27 00:26 gnupg -> /run/user/1000/gnupg
lrwxrwxrwx 1 1000 1000 19 Dec 27 00:26 gvfs -> /run/user/1000/gvfs
lrwxrwxrwx 1 1000 1000 24 Dec 27 00:26 gvfs-burn -> /run/user/1000/gvfs-burn
lrwxrwxrwx 1 1000 1000 20 Dec 27 00:26 gvfsd -> /run/user/1000/gvfsd
lrwxrwxrwx 1 1000 1000 27 Dec 27 00:26 ICEauthority -> /run/user/1000/ICEauthority
lrwxrwxrwx 1 1000 1000 22 Dec 27 00:26 KeePass -> /run/user/1000/KeePass
lrwxrwxrwx 1 1000 1000 22 Dec 27 00:26 keyring -> /run/user/1000/keyring
lrwxrwxrwx 1 1000 1000 22 Dec 27 00:26 p11-kit -> /run/user/1000/p11-kit
lrwxrwxrwx 1 1000 1000 25 Dec 27 00:26 pipewire-0 -> /run/user/1000/pipewire-0
lrwxrwxrwx 1 1000 1000 30 Dec 27 00:26 pipewire-0.lock -> /run/user/1000/pipewire-0.lock
lrwxrwxrwx 1 1000 1000 33 Dec 27 00:26 pipewire-0-manager -> /run/user/1000/pipewire-0-manager
lrwxrwxrwx 1 1000 1000 38 Dec 27 00:26 pipewire-0-manager.lock -> /run/user/1000/pipewire-0-manager.lock
lrwxrwxrwx 1 1000 1000 20 Dec 27 00:26 pulse -> /run/user/1000/pulse
lrwxrwxrwx 1 1000 1000 22 Dec 27 00:26 systemd -> /run/user/1000/systemd
[username@BlackFox bolt-runelite-ucFzrN]$ ls -ln /run/user/1000
total 4
drwx------ 2 1000 1000  60 Dec 22 22:40 at-spi
drwx------ 2 1000 1000 520 Dec 27 00:20 bolt-runelite-7GtAIl
drwx------ 2 1000 1000 540 Dec 27 00:23 bolt-runelite-gqpzaR
drwx------ 2 1000 1000 560 Dec 27 00:24 bolt-runelite-T6a7C7
drwx------ 2 1000 1000 580 Dec 27 00:26 bolt-runelite-ucFzrN
srw-rw-rw- 1 1000 1000   0 Dec 22 22:40 bus
drwxr-xr-x 2 1000 1000  80 Dec 27 00:15 ccache-tmp
drwx------ 3 1000 1000  60 Dec 22 22:40 dbus-1
drwx------ 2 1000 1000  40 Dec 27 00:24 dconf
srwxr-xr-x 1 1000 1000   0 Dec 25 21:42 discord-ipc-0
srwxr-xr-x 1 1000 1000   0 Dec 23 16:45 discord-ipc-1
dr-x------ 2 1000 1000   0 Dec 31  1969 doc
drwx------ 2 1000 1000  60 Dec 22 22:40 gcr
drwx------ 2 1000 1000 160 Dec 22 22:40 gnupg
dr-x------ 2 1000 1000   0 Dec 22 22:40 gvfs
drwx------ 2 1000 1000  40 Dec 22 22:40 gvfs-burn
drwx------ 2 1000 1000  40 Dec 25 01:19 gvfsd
-rw------- 1 1000 1000 326 Dec 22 22:40 ICEauthority
drwxr-xr-x 2 1000 1000  80 Dec 22 22:40 KeePass
drwx------ 2 1000 1000  80 Dec 22 22:40 keyring
drwxr-xr-x 2 1000 1000  60 Dec 22 22:40 p11-kit
srw-rw-rw- 1 1000 1000   0 Dec 22 22:40 pipewire-0
-rw-r----- 1 1000 1000   0 Dec 22 22:40 pipewire-0.lock
srw-rw-rw- 1 1000 1000   0 Dec 22 22:40 pipewire-0-manager
-rw-r----- 1 1000 1000   0 Dec 22 22:40 pipewire-0-manager.lock
drwx------ 2 1000 1000 100 Dec 25 12:03 pulse
drwxr-xr-x 6 1000 1000 160 Dec 22 22:40 systemd

On a sidenote, it seems it doesn't clean up old symbolic links.

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.