Giter VIP home page Giter VIP logo

fleek's Introduction

Fleek - "Home as Code" for Humans

** Fleek will no longer be maintained as of March 2024 **

  • Please use Nix Home Manager instead *

FlakeHub

Fleek is an all-in-one management system for everything you need to be productive on your computer.

Status: BETA. Probably won't eat your computer. Probably won't break your system, at least beyond simple recoverability.

What follows is a brief overview and quick start. See full documentation at https://getfleek.dev.

Fleek v0.9.0 introduced some changes to how it should be installed. If you already have fleek installed, see upgrade instructions on the website.

Fleek add

Own your $HOME

Instant Productivity

Fleek takes you from an empty slate to a fully productive working environment in less than five minutes.

Take It With You

No matter whether you work on a shiny new M2 MacBook Air, a well-loved ThinkPad running Linux, or Windows with WSL, Fleek lets you take the exact same environment, tools, and configuration wherever you go.

Zero Learning Curve To Start

You don't need to master a fancy DSL or spelunk through pages of online manuals to get started with Fleek. Answer two questions and you're instantly off to the races. Fleek gives you opinionated starter configurations for bash and zsh in four different levels of BLING. You can choose a standard close-to-stock experience, or dial your environment to 11 with all the latest desktop and terminal bling. And switching between them takes less than a minute when you change your mind.

Every Tool At Your Fingertips

Whether you need to install a new programming language's toolset or the latest social media application, Fleek has you covered with the largest set of programs and packages in the world. Add a line to your .fleek.yml file and fleek apply yourself into freedom.

Fleek search

Eject Button Optional

If you reach a point where you've grown beyond Fleek's opinions and you want more, just fleek eject and manage your configurations manually.

Party in the Front, Business in the Back

Fleek is a user-friendly wrapper around Nix and Nix Home Manager, but the friendly fleek command hides all the complexity from you. Edit a 10 line YAML file and Fleek harnesses the power of Nix behind the scenes.

Getting Started

See the installation instructions.

~/.fleek.yml

Here's what mine looks like:

───────┬───────────────────────────────────────────────────
       │ File: .fleek.yml
───────┼───────────────────────────────────────────────────
   1   │ aliases:
   2   │     fleeks: cd ~/.local/share/fleek
   3   │ bling: high
   4   │ ejected: false
   5   │ flakedir: .local/share/fleek
   6   │ git:
   7   │     autocommit: true
   8   │     autopull: true
   9   │     autopush: true
  10   │     enabled: true
  11   │ min_version: 0.8.4
  12   │ name: Fleek Configuration
  13   │ packages:
  14   │     - helix
  15   │     - go
  16   │     - gcc
  17   │     - nodejs
  18   │     - yarn
  19   │     - rustup
  20   │     - vhs
  21   │     - rnix-lsp
  22   │     - duf
  23   │ paths:
  24   │     - $HOME/bin
  25   │     - $HOME/.local/bin
  26   │     - $HOME/go/bin
  27   │ programs:
  28   │     - dircolors
  29   │ shell: zsh
  30   │ systems:
  31   │     - arch: aarch64
  32   │       hostname: f84d89911e5d.ant.amazon.com
  33   │       os: darwin
  34   │       username: brianjk
  35   │     - arch: x86_64
  36   │       hostname: beast
  37   │       os: linux
  38   │       username: bjk
  39   │ unfree: true
  40   │ users:
  41   │     - email: [email protected]
  42   │       name: Brian Ketelsen
  43   │       ssh_private_key_file: ~/.ssh/id_rsa
  44   │       ssh_public_key_file: ~/.ssh/id_rsa.pub
  45   │       username: brianjk
  46   │     - email: [email protected]
  47   │       name: Brian Ketelsen
  48   │       ssh_private_key_file: ~/.ssh/id_rsa
  49   │       ssh_public_key_file: ~/.ssh/id_rsa.pub
  50   │       username: bjk
───────┴──────────────────────────────────────────

I removed some of the aliases and systems just to make the example shorter.

Line 3: bling: high tells fleek how many extras I want in my $HOME setup. If you don't have a strong opinion I recommend high, because it isn't a really much stuff and the set we chose to add is really strong. Options are none, low, default, high.

Line 13: packages: starts a list of the packages I want installed. Mine are mostly focused around software development, but any package available in nixpkgs is available. You can search for packages to install with the fleek search command.

Line 23: paths: starts a list of directories I want to add to my $PATH.

Line 27: programs: - starts a list of programs to install. Programs are packages, but with optional configuration. See the documentation for more information.

Line 29: shell: zsh - this line isn't currently used, but will may be in the future. For now, it's just a placeholder.

Line 30: systems: These are added by fleek when you run fleek init, you shouldn't need to edit this part manually. Note that fleek and nix support macOS, Linux and WSL on Windows, so your configurations are fully portable.

Now that you've seen some of the possibile changes you can make, edit your ~/.fleek.yml file and save it.

To apply your changes run fleek apply. fleek spins for a bit, and makes all the changes you requested. You may need to close and re-open your terminal application to see some of the changes, particularly if you add or remove fonts.

That's the quick start! From here, you can try fleek add to add packages from the CLI, fleek search to search for available packages. The full documentation is on the fleek website.

Behind the Scenes

Fancy animated gifs and long-winded README's are great, but what really happens when you run fleek apply the first time? I'm glad you asked...

  1. fleek creates a nix home-manager configuration based on the templates here.
  2. fleek compiles the templates and writes them to disk at ~/.local/share/fleek by default.
  3. fleek calls the nix command, which does nix things to download and install all the packages in your .fleek.yml file.
  4. The libraries and binaries you specify get installed in the /nix folder, and symlinked into your very own personal nix profile. This is stored in your $HOME directory under ~/.nix-profile.
  5. The home-manager command in the configuration assembles shell scripts and configurations for you based on the shell specified in your .fleek.yml file.
  6. Your existing shell configuration files get renamed with a .bak extension, so you can go back to your business if fleek isn't for you.
  7. New configurations are written, either .zshrc or .bashrc, and these configuration files add your ~/.nix-profile and the packages you've installed to your $PATH

Fleek's goal is to give you 90% of the power of a fully customized, hand-written, artisinally crafted home-manager configuration -- without forcing you to learn nix, which can be (ok, it IS) intimidating.

You may like fleek and use it on one or more of your machines to install the things you need and use every day.

You might eventually be curious about how it all works. If that's the case you can always look at the nix flake that's generated for you and see what's going on behind the scenes. Cool! There's a lot you can do with nix that fleek doesn't even attempt.

Or you might be a practical pragmatist sort of computer user and not care about what's happening behind the curtain. That's fine with fleek. We're just here to help you go from zero to productive faster, more reliably, without a bunch of fuss.

Motivation

fleek is born out of frustration.

It's annoying setting up a new computer just right. It's annoying having completely different configurations and tools each place I need to work. It's nearly impossible to configure a Mac and an Ubuntu server to have the same look & feel, much less the same tools.

It's a huge time sink spending time configuring everything, and even worse when you try to do it in a way you can share it between computers.

It wasn't until I was talking with Jorge Castro and he pointed out how complex my home-manager config was compared to a simple YAML file.

nixmeup

Jorge is a smart dude. That night the first bits of fleek were written.

Within 24 hours I took the plunge and dog-fooded fleek on my development laptop. That was a great moment. A day later I added fleek remote commands to push my configs to GitHub, then added the code to detect your arch & os and change the flake accordingly.

I spent the next two weeks tweaking the user experience and testing over and over. Countless virtual machines were provisioned and destroyed.

| countless

And now we're here. fleek is ready for a broader audience than me and Jorge - who is the biggest inspriation for all the features fleek has, and maybe just as importantly, doesn't have.

Shoulders

Standing on the shoulders of giants:

This flake template was the thing that got everything started!

In my third rewrite, I looked at devbox and loved how they organized everything. I borrowed a LOT from this. And by borrowed I mean outright copy & pasted. Many supporting functions in this code were written by the JetPack team, and very lightly modified by me.

Tasty release shell script inspired by and copied from ssh-to-age.

Fleek's development flake was created by Luc Perkins.

Great terminal display code inspired by and copied from pcli.

None of this is possible without Nix and Nix Home Manager:

fleek's People

Contributors

1024bees avatar bketelsen avatar brianjriddle avatar castrojo avatar cig0 avatar dependabot[bot] avatar dnkmmr69420 avatar github-actions[bot] avatar jimt avatar lucperkins avatar mattbowen avatar tbjers avatar tml avatar tompscanlan avatar tulilirockz avatar waldyrious 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

fleek's Issues

How do I upgrade all my stuff?

Is your feature request related to a problem? Please describe.

I don't know how to upgrade Fleek. I don't know how to upgrade packages installed by Fleek.

Describe the solution you'd like

I'd like to run $ fleek upgrade and have it upgrade Fleek and upgrade all the packages Fleek manages.

Describe alternatives you've considered

This will update Fleek itself:

$ nix profile upgrade ".*"

This will update "iterm2", which is an app I installed using Fleek:

$ fleek remove iterm2 --apply
$ fleek add iterm2 --apply

I note that:

$ fleek update --apply

didn't seem to update iterm2 to the latest version, only removing it then adding it did. I guess I'm unclear what fleek update --apply is supposed to do...get the latest list of available apps but not upgrade anything that's already installed?

Additional context

none

fleek eject

add an eject marker & eject command so we don't rewrite flakes after ejection

i18n broken

all locales except EN are broken. Investigating!

docs: document what fleek does on fresh install

Placeholder issue for when we write the instructions:

New users who might not understand how nix/home-manager works might be surprised/shocked to see it take over all their dotfiles. The symlinks might also be confusing so we should make sure that's clear to them before they init.

Ability to do flakes from github

Is your feature request related to a problem? Please describe.
I am am unable to install things like nix-search cli or anything that is not in nix packages

Describe the solution you'd like
Ability to install flakes from github

Describe alternatives you've considered
Only alternative is to use nix profile directly

Additional context
Not much else for this feature request

fleek init -a -c

can't commit changes because no git configuration for name/email exists yet.

bug: crash on init

$ fleek init
 INFO  initializing fleek
Git Config - enter your email address: MYEMAILWASHERE
Git Config - enter your full name: MYNAMEWASHERE
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x9a8718]

goroutine 1 [running]:
github.com/ublue-os/fleek/nix.(*Flake).Init(0x0, 0x0?)
	/app/nix/flake.go:50 +0x38
github.com/ublue-os/fleek/cmd.initialize(0xc00028ac00?, {0xaca486?, 0x0?, 0x0?})
	/app/cmd/init.go:143 +0xb77
github.com/spf13/cobra.(*Command).execute(0xc00028ac00, {0x1037200, 0x0, 0x0})
	/root/go/pkg/mod/github.com/spf13/[email protected]/command.go:920 +0x847
github.com/spf13/cobra.(*Command).ExecuteC(0xc00028a000)
	/root/go/pkg/mod/github.com/spf13/[email protected]/command.go:1044 +0x3bd
github.com/spf13/cobra.(*Command).Execute(...)
	/root/go/pkg/mod/github.com/spf13/[email protected]/command.go:968
github.com/vanilla-os/orchid/cmdr.(*App).Run(0xc00028a000?)
	/root/go/pkg/mod/github.com/vanilla-os/[email protected]/cmdr/app.go:97 +0x78
main.main()
	/app/main.go:56 +0xfc5

This was on newest uBlue Kinoite (custom) as of March 22, 9pm EDT.

$ rpm-ostree status
State: idle
AutomaticUpdates: stage; rpm-ostreed-automatic.timer: no runs since boot
Deployments:
● ostree-unverified-registry:ghcr.io/bsherman/kinoite-custom:37
                   Digest: sha256:84bbd3540bf28c5c1909dfe4d524507f51610e9cd6aee5fd9a4b1d6e381d627c
                  Version: main (2023-03-23T01:11:06Z)
          LayeredPackages: langpacks-en

Ability to use fleek to do system wide packages

Is your feature request related to a problem? Please describe.
If I use fleek systemwide as root, It messes up nix so there should be much better support for that

Describe the solution you'd like
Maybe fleek ran in sudo mode doesn't change tons of stuff in the system just installs it in nix-default instead of nix-user

version .fleek.yml?

should we?
add a version field, and a simple struct that unmarshals just the version, then load the correct config

Maybe.

Merge all dev scripts onto a Justfile

Would make development be a lot easier than managing multiple shell scripts!
I've already discussed this with you on discord, so this issue is just here to be referenced by my pull request

XDG_DATA_DIRS is getting duplicate paths

XDG_DATA_DIRS=/var/home/bjk/.nix-profile/share:/var/home/bjk/.nix-profile/share:/nix/var/nix/profiles/default/share:/nix/store/xg6w58z42bq8azz3ya5ckkgagxv64kcs-vscode-1.76.2/share:/nix/store/5gr9s12xibq0c0ydf74b0xy7hb7bzs9y-gsettings-desktop-schemas-43.0/share/gsettings-schemas/gsettings-desktop-schemas-43.0:/nix/store/8zg9l6rsr08ydy4bqsjawdc7gwyrjfnj-gtk+3-3.24.36/share/gsettings-schemas/gtk+3-3.24.36:/var/home/bjk/.nix-profile/share:/var/home/bjk/.nix-profile/share:/nix/var/nix/profiles/default/share:/var/home/bjk/.nix-profile/share:/var/home/bjk/.nix-profile/share:/nix/var/nix/profiles/default/share:/var/home/bjk/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/

Add a search function

It'd be nice to fleek search or something so I don't need to tab out to a browser to look up a packagename.

init with clone fails if no git configs exist for user

When running fleek init [email protected]:your/repo on a machine that has no git configurations, fleek will add the new machine to the configs and possibly attempt to push the configs back to the repo depending on the settings in .fleek.yml that it just cloned. This may fail if there is no user.name or user.email configured for git

flakedir:

machine specific override?
broken for cross platform installs right now

Internal error when running `fleek apply`

Describe the bug
Unable to apply after initialization

To Reproduce
Execute fleek init and then fleek apply

Expected behavior
It should not give an internal error

Environment

  • OS: macOS 13.3.1
  • Shell: zsh
  • fleek version 0.8.3

Additional context
image

flake-parts integration?

Hi!

This is a really cool project. I came across it on lobste.rs just now and realized that flake-parts would be a good fit for what you're doing, especially if you want to venture beyond nix and home-manager, and help out with custom packages, devshells, etc.

Is your feature request related to a problem? Please describe.

At some point, users will want to do something advanced and run fleek eject (which I think is a really neat idea).

What if instead, they could import their advanced thing into their fleek config, and keep using fleek?

Wouldn't it be nice to capture some more advanced patterns in Nix logic, and be able to share that with others?

Or perhaps reuse solutions to common problems that others have already solved?

Describe the solution you'd like

flake.parts provides the logic that lets you integrate these things. It takes pride in being an unopionated core, well, with two opinions:

  • the NixOS module system, which NixOS and home-manager are built on, is really nice
  • many things are a function of system, and standardizing the way to put that together is helpful

Because it's an unopinionated, thin wrapper around the schema of the Nix CLI, you can keep generating largely the same code you already are. You could put whatever flake outputs you generate right into the flake option.

A tighter integration - making use of the perSystem option - would be possible, but even without that, perSystem already works as expected for users if they write self'.packages instead of config.packages. Do you even generate packages? I might be overthinking.

Anyway, fleek eject could keep working the way it does, generating either a plain flake or a flake-parts based one, depending on user choice, or perhaps what's necessary if you decide to let some functionality rely on some flake-parts module.

Describe alternatives you've considered

Can't really think of any, but I can't claim to know the whole ecosystem either, and I'm really lazy when it comes to my home. It works :)

Additional context
Add any other context or screenshots about the feature request here.

container tags

all releases get "latest" tag. Figure that out. nightly/dev release shouldn't get latest, it should only get "dev" or something. "latest" should be latest tagged.

XDG_CONFIG_HOME support

Is your feature request related to a problem? Please describe.
You seem to have some support for XDG directories, but still litter my $HOME. Please put config files in $XDG_CONFIG_HOME. Add a command to fire up an editor on the config file if you must.

Describe the solution you'd like
~/.config/fleek/fleek.yaml

Describe alternatives you've considered
symlinks, wrapper script to temporarily set another $HOME

shell aliases

tune up shell aliases at each bling level
e.g ls = exa

A global fleek file

Is your feature request related to a problem? Please describe.
A global fleek file in either /etc/nix/global-fleek.yml or /etc/global-fleek.yml or /etc/fleek/global-fleek.yml

Describe the solution you'd like
global-fleek.yml will be a very simple file that kind of looks like this

global-packages:
programname1
programname2
random-something

then in ~/.fleek.yml there will be a section for global packages

global-packages:

whenever you run fleek apply it will read global-fleek.yml and will make the global-packages section of the config ~/.fleek.yml exactly the same as global-fleek.yml

to add or remove packages, you can just edit the config.

It will be good for setting default packages system wide

Describe alternatives you've considered
An alternative is to use nix profile to install things using root

fc-cache

investigate how to keep the font cache current when applying fonts

possibly run fc-cache --force after applying? Yucky.

reasoning: when applying a flake that has fonts, they disappear momentarily causing the terminal to default to a fallback font after the apply

Make macOS apps show up in Spotlight searches

Is your feature request related to a problem? Please describe.

After I've installed "iterm2" using Fleek, It would be nice to be able to press Command-Space, type in "iterm2" and Enter and have it launch iterm2. Unfortunately, Apple makes that hard, Fleek uses homemanager, and homemanager install links to the apps in a manner that doesn't work with Spotlight: nix-community/home-manager#1341. It's a known, upstream issue, so to be fair to Fleek, not really it's problem. BUT, seeing as Fleek is trying to wrap the suboptimal upstream UX and make it awesomer, seems worth mentioning in case a Fleek maintainer is interested...if not, feel free to close the ticket and at least folks can see that decision in case they come looking.

Describe the solution you'd like

Installing GUI apps on macOS, using Fleek, results in the GUI app being findable and launchable using Spotlight.

Describe alternatives you've considered

  • create the aliases myself, as discussed in homemanager GitHub ticket above, remove them manually as well whenever I've removed the app it was referencing
  • cry to myself

Additional context

none

Some elements cannot be translated

Some parameters like --version, and --help and categories (such as Usage: or Available Commands:) cannot be translated through the locale yml files, addind support for them would be great!

shell: fish doesn't work

Describe the bug
When I set shell: fish in my config and then I run fleek apply I get this error:

$ FLEEK_DEBUG=1 fleek apply
 [d]  debug enabled
 [d]  git autopush: false
 [d]  git autocommit: false
 [d]  git autopull: false
 [*]  Apply fleek configuration
 [d]  skipping git
 [✓]  Writing configuration files
 [d]  skipping git
  ERROR
  ERROR   Error: exit status 1
  ERROR
 [d]  Command stderr: error: syntax error, unexpected end of file

             at /nix/store/wr7g0yanjbkp384wz8zyak03z4gv3daf-source/shell.nix:12:12:

                 11| };
                 12|     # fish}
                   |            ^
      (use '--show-trace' to show detailed location information)

 [d]
      ExecutionID:4d0cadf6b3b3410db2424c653ba44623

To Reproduce
Steps to reproduce the behavior:

  1. set shell to fish in your config
  2. run fleek apply
  3. observe the error

Expected behavior

Running fleek apply should work without error.

Environment

  • OS: macOS 13.3.1
  • Shell: fish
  • fleek version: 0.0.0-dev

Additional context

$ cat /nix/store/wr7g0yanjbkp384wz8zyak03z4gv3daf-source/shell.nix                   
{ pkgs, misc, ... }: {
    programs.exa.enableAliases = true;

    programs.exa.extraOptions = [
   "--group-directories-first"
   "--header"
];

    programs.bat.config = {
  theme = "TwoDark";
};
    # fish}

git init configs

on fleek init, add templated git configs - especially gitignore

`fleek add` lets me add a package that doesn't exist

I was assuming that nix had a tizonia package so I did a fleek add tizonia and it added it without a problem. When I did a followup fleek apply though it errored out because the package didn't exist. Perhaps it should error immediately on add?

fleek sync doesn't work due to unconfigured git config

I have an existing repo and was able to init, however a sync fails due to my author identity unknown.

[jorge@frieza:0 ~]$ FLEEK_DEBUG=1 fleek sync
[DEBUG] 2023/03/30 13:12:30 /app/internal/midcobra/debug.go:49: Debug mode enabled.
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/root.go:28: initializing fleek controller
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:89: config found
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:94: config status: Exists
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:96: config isn't none
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:99: validating config
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:125: flake location: /var/home/jorge/.config/home-manager
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:133: flake struct created
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:146: flake exists: true
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:148: setting flakeStatus: Exists
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:156: repo exists: true
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:177: remote found: [email protected]:castrojo/fleek-homies
[DEBUG] 2023/03/30 13:12:30 /app/internal/fleekcli/fleek.go:195: getting remote status
[DEBUG] 2023/03/30 13:12:31 /app/internal/fleekcli/fleek.go:201: ahead: false
[DEBUG] 2023/03/30 13:12:31 /app/internal/fleekcli/fleek.go:202: behind: false
 [*]  Synchronize configuration with git
 [i]  Dirty                                                                                                                       
 [✓]  Getting git local status                                                                                                    
 [!]  Running `git commit`                                                                                                        
Error: exit status 128

[DEBUG] 2023/03/30 13:12:31 /app/internal/midcobra/debug.go:70: Command stderr: Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'jorge@frieza.(none)')

[DEBUG] 2023/03/30 13:12:31 /app/internal/midcobra/debug.go:72: 
ExecutionID:cdf43180bb974840beb8a6f626482a37

garbage collection

Add imperative gc command like nix-collect-garbage -d as fleek gc or fleek cleanup
investigate periodic gc

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.