Giter Site home page Giter Site logo

libgui's Introduction

LibGui

Maven metadata URL Discord

Minecraft GUIs without spending forever painstakingly aligning things to the background image. Instead, LibGui takes a logical description of your GUI, and draws it on-the-fly like any modern GUI system. Controls can be hung on an itemslot grid or offset from it. Panel styles, colors, and opacity can be customized, and everything can be extended.

See the LibGui wiki for setup

And for code examples:

For an idea of what's coming down the road for all my projects, you can check my roadmap at https://trello.com/b/0TVU8d63/falkreons-roadmap

libgui's People

Contributors

acikek avatar alex-haas avatar amirhan-taipovjan-greatest-i avatar apeng215 avatar biom4st3r avatar blazingtwist avatar cominixo avatar coolmineman avatar dani162 avatar enaium avatar erniebernie10 avatar falkreon avatar falseresync avatar fiws avatar fourmisain avatar frqnny avatar gabrielolvh avatar gregory1234 avatar haykam821 avatar jagerbob avatar juuxel avatar lemmaeof avatar lopymine avatar luligabi1 avatar nea89o avatar rover656 avatar snowyleopardcc avatar sturmlilie avatar tal5 avatar yanisbft 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

libgui's Issues

Scroll panel

Like lists, but contents are arbitrary and not dependent on data. (= Swing's JScrollPane)

overlap with REI when reopen container wider than 9 slots

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior Optional
A clear and concise description of what you expected to happen.

Screenshots Optional
If applicable, add screenshots to help explain your problem.

Version of the (please complete the following information):

  • Mod
  • Dependency A
  • Dependency B
  • Fabric API
  • Minecraft

Additional context Optional
Add any other context about the problem here.

Can't register in client init when updating to 1.16

Describe the bug
After following the Getting Started with GUIs portion of the wiki to update my 1.15 mod to 1.16, I get the following error:

incompatible types: cannot infer type-variable(s) H,S
        ScreenRegistry.register(AutomatedCraftingInit.AUTO_CRAFTER_SCREEN_HANDLER_TYPE, (gui, player, title) -> new AutoCrafterScreen(gui, player, title));

To Reproduce
Follow the tutorial on the above wiki page, try to build

Screenshots Optional
Lambda Function

Version of the (please complete the following information):

	fabric_api_version = 0.13.1+build.370-1.16
	fabricloader = >=0.7.4

	libgui_version = 2.0.1+1.16.1
	autoconfig1u_version = 3.2.0-unstable
	cloth_config_2_version = 4.5.6

Here is the commit containing my attempt to update my mod to 1.16.

Here is my clientInit class.

Apologies if this is just an error on my part, but I've been unable to either find any discrepancies between my mod and the wiki or get any help on the fabric discord for a couple days now.

Screen drawing issues on MacOS

It seems that, on MacOS, the screen's height isn't properly set, resulting in things not being drawn properly. The zero position seems to be at the middle of the screen for button and widget rendering. I'm not super sure how to fix this.

Add dynamic text objects (property labels, buttons, etc)

Is your feature request related to a problem? Please describe.
The default widgets all render fixed text, and need a subclass to achievee dynamic text labels.

Describe the solution you'd like
Having controls where the text on them is dynamic.

Describe alternatives you've considered
Subclassing to add these is possible, but it seems like something convenient enough to be included in the main library.

WListPanel Rendering broken in 1.15

Describe the bug
WListPanel rendering is broken in 1.15- I heard it was a z-problem. It normally appears that the text renders but anything else doesn't.

To Reproduce
Steps to reproduce the behavior:

  1. Make a test list panel.
  2. Launch the game and test it out
  3. if you did everything correctly it should show.
    Screenshots Optional
    If applicable, add screenshots to help explain your problem.
    2019-10-27_09 10 20
    2019-12-28_20 30 26

Version of the (please complete the following information):

  • LibGUI 1.4.0-beta.1
    -my unreleased mod
  • Fabric API 0.4.25+build.282-1.15
  • Minecraft 1.15.1

Modify WListPanel.scrollBar.value programmatically

Problem: I'd like to extend WListPanel to add onMouseScroll functionality, but when subclassing I cannot access this.scrollBar.value due to its protection level, and no methods exist to modify it.

Subclassing WClippedPanel and copy/pasting code from WListPanel is one way to circumvent this, but I feel as though it shouldn't be unnecessarily difficult to adjust a scrollbar programmatically.

suggestion: move wiki to repo

Imo it is better to have the documentation in the repo instead of a github wiki:

  • Allows other to create PRs for the documentation
  • Easily use branches for documentation (can also be a negative point as there can be outdated docs on older branches, but people usually only view the default branch anyway)
  • Can update code & documentation in one go (eg. in one pull request)
  • Sadly the wiki is enabled by default for new repos, so 90% of all github repos have this as a dead link. People tend to ignore it because of that.

Just a suggestion though. I could create a PR to migrate the wiki to the repo if wanted.

lang zh_cn.json

{
"options.libgui.libgui_settings": "LibGui设置",
"option.libgui.darkmode": "暗黑模式",
"option.libgui.done": "完成"
}

Widget networking

  • Two widget packet types:
    • libgui:clientbound_widget_update
      • Structure: syncId: VarInt, widgetId: String, contents: Buf
    • libgui:serverbound_widget_update
      • Structure: syncId: VarInt, widgetId: String, contents: Buf
  • All networking widgets must have a unique ID of some sort (either a string or an identifier). This can be shared with styles (#60).
  • Only widgets with a synced host can send messages, so hook networking up to validate or createPeers.
  • Example API:
    @Override
    public void validate(GuiDescription host) {
        super.validate(host);
        host.registerWidgetMessageHandler(this, MessageType.S2C, buf -> { /* handle the message */ });
    }
    
    @Override
    public void tick() {
        if (host.isServer()) host.sendWidgetMessage(this, MessageType.S2C, buf -> buf.writeString("hello"));
    }

[Feature Request] Huds documentation/example

Is your feature request related to a problem? Please describe.
I really like this library, it allows me to create guis quite easily, but the current documentation does not include a section on huds :/
I have already managed to create a hud that displays a widget on the player screen, but regarding how to set the position etc i'm struggling 😅.
I think it's worth noting that i'm using kotlin.

Describe the solution you'd like
Just adding an example or a tiny category about these huds would be enough.

Unable to include in project using gradle

Describe the bug
I've tried to follow the setup guide to install LibGui in my Fabric project but I'm unable to get Gradle to resolve the package.

Oddly enough it doesn't even look inside the maven repo:

A problem occurred configuring root project 'fabric-example-mod'.
> Could not resolve all dependencies for configuration ':modImplementation'.
   > Could not find any matches for io.github.cottonmc:LibGui:+ as no versions of io.github.cottonmc:LibGui are available.
     Searched in the following locations:
       - https://libraries.minecraft.net/io/github/cottonmc/LibGui/maven-metadata.xml
       - file:/Users/eliot/Dev/eliot/minecraft/fabric/fabric-example-mod/build/loom-cache/
       - file:/Users/eliot/Dev/eliot/minecraft/fabric/fabric-example-mod/.gradle/loom-cache/remapped_mods/
       - https://maven.fabricmc.net/io/github/cottonmc/LibGui/maven-metadata.xml
       - https://repo.maven.apache.org/maven2/io/github/cottonmc/LibGui/maven-metadata.xml
       - https://jcenter.bintray.com/io/github/cottonmc/LibGui/maven-metadata.xml
       - file:/Users/eliot/.gradle/caches/fabric-loom/1.15.2-mapped-net.fabricmc.yarn-1.15.2+build.17-v2/
     Required by:
         project :

Possible solution:
 - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html

I've included my gradle files in this gist: https://gist.github.com/fadookie/00033db0de410675742acc760473a719

To Reproduce
If it's not obvious why this is happening and the supplied files aren't enough, let me know and I can try to construct an example repro case.

Expected behavior Optional
Package installs

Screenshots Optional
N/A

Version of the (please complete the following information):

  • Mod (Development Snapshot)
  • Fabric API 0.11.1+build.312-1.15
  • Minecraft 1.15.2

Additional context Optional
Add any other context about the problem here.

1.10.0 release does not appear to match sources

Describe the bug
The 1.10.0 release does not appear to match the sources.

To Reproduce
Steps to reproduce the behavior:

  1. Download the release and jar from http://server.bbkr.space:8081/artifactory/libs-release/io/github/cottonmc/LibGui/1.10.0+1.15.2/
  2. Alternatively, download the release from https://github.com/CottonMC/LibGui/releases/tag/1.10.0 and view the corresponding tag: https://github.com/CottonMC/LibGui/tree/1.10.0
  3. See that some class files in the release, such as WScrollPanel and WVerticalBox, do not have corresponding java files in the sources

Dark mode for sliders

See #10.

If a dark mode is added for buttons, that can be used for the labeled slider thumb as well.
For regular sliders, I can make dark mode textures.

WText widget throws NullPointerExtecption

Describe the bug
Whenever you can a WText widget's paintBackground() function, it throws a null pointer exception. The object that seems to be null is the wrappedLines object.

To Reproduce

  1. Create a container that renders a WText widget.
  2. See null pointer

Versions

  • Mod Version 1.8.0+20w12a
  • Fabric API 0.5.6+build.313-1.16
  • Minecraft 20w13b

WBar crashing MC for no apparent reason

Describe the bug
I'm trying to add a progress bar to my controller, but every time I open the GUI MC crashes:

java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
	at net.minecraft.container.ArrayPropertyDelegate.get(ArrayPropertyDelegate.java:12)
	at io.github.cottonmc.cotton.gui.widget.WBar.paintBackground(WBar.java:73)
        ...

I tried to create peers for this WBar, as "properties" was probably empty, but it didn't worked
I'm probably missing something here, but even seeing some example code, I couldn't figure it out

To Reproduce
Steps to reproduce the behavior:

  1. Create a Controller with a GridPanel
  2. Add an WBar to it
  3. Activate the GUI in a client

Version of the dependencies:

  • Minecraft 1.15.1
  • Fabric 0.4.25+build.282-1.15
  • LibGUI 1.4.0-beta.1

Additional context

public DistillerController(int syncId, PlayerInventory playerInventory, BlockContext block) {
    super(RecipeType.SMELTING, syncId, playerInventory, getBlockInventory(block), 
        getBlockPropertyDelegate(block));

    WPlainPanel panel = new WPlainPanel();

    WItemSlot fuel = WItemSlot.of(blockInventory, 0);
    WItemSlot plant = WItemSlot.of(blockInventory, 1);
    WItemSlot water = WItemSlot.of(blockInventory, 2);
    WItemSlot essence = WItemSlot.outputOf(blockInventory, 3);

    panel.add(fuel, 0, 0);
    panel.add(plant, 0, 0); // TODO Layout
    panel.add(water, 0, 0);
    panel.add(essence, 0, 0);

    panel.add(new WLabel(new TranslatableText("block.withery.distiller"), WLabel.DEFAULT_TEXT_COLOR).setAlignment(Alignment.CENTER), 18 * 4, 0);
    panel.add(new WLabel(new TranslatableText("container.inventory"), WLabel.DEFAULT_TEXT_COLOR), 0, 18 * 3 + 12);

    panel.add(new WBar(new Identifier("withery:textures/gui/progress_bar_bg.png"),
            new Identifier("withery:textures/gui/progress_bar.png"), 0, 1, WBar.Direction.RIGHT),
            18 * 4, 18 * 4);

    panel.add(this.createPlayerInventoryPanel(), 0, 18 * 4 + 6);

    panel.validate(this);
    setRootPanel(panel);
}

Crash from NoSuchMethodError: BufferBuilder.vertex on 19w39a+

Describe the bug
There is a crash with LibGUI with 19w40a. I wanted to create a GitHub issue instead of just saying it on discord to be less disruptive, yet hopefully, you will check this. The crash happens because of rendering changes, again.

To Reproduce
Steps to reproduce the behavior:

  1. Try to open a libgui GUI in 19w39a or above- it won't work and you will crash.

Expected behavior Optional
It doesn't crash while rendering the screen.

Version of the (please complete the following information):

  • Personal Mod, in Development Environment
  • Fabric API
  • Minecraft

You can't hold down the arrow/backspace in WTextField

Describe the bug
If you try to hold down one of the horizontal arrow keys or the backspace, it only happens once and won't happen again.

To Reproduce
Steps to reproduce the behavior:

  1. Create a new GUI with WTextField.
  2. Write some text on it.
  3. Try to hold either the left arrow, the right arrow or the backspace on it.

Expected behavior
Holding down one of the keys should keep moving the cursor/deleting characters.

Versions:

  • LibGUI 1.4.0-beta.1
  • Fabric API 0.4.28+build.288-1.15
  • Minecraft 1.15.1

Additional context
Somehow, this bug doesn't happen on LibGUI's configuration screen.

Leftover println statement in WListPanel

In WListPanel#layout line 90 there's a leftover println statement that will print out the cell height whenever layout is called causing minor log spam.

  • LibGUI 1.3.2

If you select too much text, the blue highlight will escape the WTextField.

Describe the bug
If you select text bigger than the text field, the blue highlight will escape it and go beyond.

To Reproduce
Steps to reproduce the behavior:

  1. Create a new GUI with WTextField.
  2. Write a lot of text on it.
  3. Try to select everything.

Expected behavior
The blue highlight should be hidden like the text.

Screenshots
https://i.imgur.com/5M49tIt.png

Versions:

  • LibGUI 1.4.0-beta.1
  • Fabric API 0.4.28+build.288-1.15
  • Minecraft 1.15.1

Additional context
WTextField should have the character limit changed first.

Styling

Current plan:

  • JSON5-based (like Spinnery), since CSS is too heavy and there is an existing JSON5 parser bundled with LibGui (Jankson)
  • CSS-like selectors
  • Widgets can have a CSS-like style class, ID and a hierarchy of types (grid <- panel or just button for example)

Example of a style:

{
  button: {
    // Applies to all buttons
    text_color: 0xFF0000
  },
  "button.run_button, label": {
    // Buttons with the class .run_button and all labels
    background_color: 0xFF0000FF
  }
}

All styles are stored as assets/<namespace>/libgui/stylesheet.json5 (replace libgui with the project name if this is moved to another project). They are loaded and stacked from all resource packs.

TODO:

  • For selecting things with classes, there needs to be some sort of a priority system for selectors (I'm thinking of widget ID > numbers of classes > index in type hierarchy as a simple priority system)

[Feature] Dark Theme on buttons

Is your feature request related to a problem? Please describe.
The vanilla button looks alright with dark mode, but a dark theme on buttons (maybe like darker background) would be nice

Describe the solution you'd like
image
This is a random picture I stole from discord, the button is simply too bright.

Additional context
Another stolen picture:
image
In this picture, this button is darker, but it is kinda hard to differentiate between active and inactive (enabled or disabled) buttons. The first button is inactive, while the second button is active.

Allow any texture to have a specific UV

Is your feature request related to a problem? Please describe.
Right now most widgets take an Identifier as an argument for textures, this means that for every element you're required to have a separate texture file. Some inventories have many custom textured widgets and this ends up being non-optimal.

Describe the solution you'd like
I suggest the creation of a new class for passing texture information that allows the definition of custom UV, or perhaps something similar to how WSprite works, this way it's possible to use the same texture file for, as an example, both a WBar texture and background, similar to vanilla implementation.

You can't select everything in a WTextField with CTRL + A

Describe the bug
When you try to do CTRL + A in a WTextField in order to select everything, nothing happens.

To Reproduce
Steps to reproduce the behavior:

  1. Create a new GUI with WTextField.
  2. Type some text on it.
  3. Do CTRL + A

Expected behavior
The entire text should be selected.

Versions:

  • LibGUI 1.4.0-beta.1
  • Fabric API 0.4.28+build.288-1.15
  • Minecraft 1.15.1

Scroll panels cause the game to crash

Describe the bug
Using a WScrollPanel widget causes the game to crash.

To Reproduce
Steps to reproduce the behavior:

  1. Create a scroll panel and add it to a panel:
WLabel test = new WLabel(new LiteralText("test"));
WScrollPanel scrollPanel = new WScrollPanel(test);
root.add(scrollPanel, 0, 0);
  1. Display the root panel
  2. The game crashes

Versions:

  • Mod: 1.10.0
  • Fabric API: 0.14.0+build.317-1.15
  • Minecraft: 1.15.2

Additional context
The relevant sections of the crash log:

...
java.lang.NoSuchMethodError: io.github.cottonmc.cotton.gui.widget.WScrollBar.setMaxValue(I)V
	at io.github.cottonmc.cotton.gui.widget.WScrollPanel.layout(WScrollPanel.java:98)
	at io.github.cottonmc.cotton.gui.widget.WPanel.layout(WPanel.java:74)
	at io.github.cottonmc.cotton.gui.widget.WPanel.validate(WPanel.java:174)
...
-- Head --
Thread: Render thread
Stacktrace:
	at io.github.cottonmc.cotton.gui.widget.WScrollPanel.layout(WScrollPanel.java:98)
	at io.github.cottonmc.cotton.gui.widget.WPanel.layout(WPanel.java:74)
	at io.github.cottonmc.cotton.gui.widget.WPanel.validate(WPanel.java:174)
...

Ctrl + Q (drop key) functionality

Is your feature request related to a problem? Please describe.
Seems like the functionality of Drop and Drop + Q, when you mouseover a slot is not implemented for WItemSlots.
Describe the solution you'd like
Normal minecraft functionality on slots when you press Q or Ctrl + Q
Describe alternatives you've considered
I implemented it myself for my own mod, but I don't see why it should not be in LibGui per default.
Additional context
This is based on LibGui for 1.15.2.

Weird issue related to Kibby in latest 1.15.1 build

Describe the bug
LibGUI widgets are not all copies of Kibby.

To Reproduce
Steps to reproduce the behavior:

  1. Use LibGUI for anything;

Expected behavior
All widgets and sprites are variations of Kibby.

Screenshots
Expected Behaviour

Versions:

  • LibGUI 1.4.0
  • Fabric API 0.4.28+build.288-1.15
  • Minecraft 1.15.1

Additional context
Kibby good.

(2.0) Do something to PropertyDelegateHolder

You can implement it on Block with support in getBlockPropertyDelegate, but blocks can't have global state. I'll either add World, BlockState and BlockPos parameters or remove the support.

(1.16) WButton causes dedicated server tasks to fail due to SoundInstance being client-only

Describe the bug
When a controller that uses a WButton is opened on a server, it causes an Error executing task on Server runtime exception. For example:

[13:29:49] [Server thread/FATAL]: Error executing task on Server
java.lang.RuntimeException: Cannot load class net.minecraft.client.sound.SoundInstance in environment type SERVER
    at net.fabricmc.loader.transformer.FabricTransformer.transform(FabricTransformer.java:68) ~[[email protected]+build.4-v2.jar:?]
    at net.fabricmc.loader.launch.knot.KnotClassDelegate.loadClassData(KnotClassDelegate.java:173) ~[[email protected]+build.4-v2.jar:?]
    at net.fabricmc.loader.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:143) ~[[email protected]+build.4-v2.jar:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_212]
    at io.github.synthrose.artofalchemy.gui.controller.ControllerJournal.<init>(ControllerJournal.java:72) ~[main/:?]

where the relevant line in ControllerJournal is the one where a WButton is initialized.

To Reproduce
Steps to reproduce the behavior:

  1. Create a CottonCraftingController
  2. In the constructor for the class, instantiate a WButton
  3. Started a dedicated server instance and connect using a client
  4. Open the controller (using any means - item, block, etc)

Expected behavior Optional
The controller behaves as it does in single-player play (namely, doesn't crash!)

Versions:

  • LibGUI: 1.8.0+20w12a
  • Fabric API: 0.5.6+build.313-1.16
  • Minecraft: 20w13b

Additional context Optional
WButton#onClick makes use of PositionedSoundInstance, which is a client-only class.
For now, this can be worked around by sticking all uses of WButton in environment-type checks and using custom packets for any necessary server-sided behavior, but this obviously isn't ideal.

clicking on the frame of a gui drops stack

Describe the bug
clicking on the frame of a libgui gui with an itemstack drops the stack

Expected behavior
in vanilla the itemstack isn't dropped

Version:

  • Mod: 1.8.1
  • Fabric API: 0.7.1+build.301-1.15
  • Minecraft: 1.15.2

WPlainPanel does not resize properly

Describe the bug
Item slot widgets cause its parent WPlainPanel to have extra padding on the right side and bottom of the screen compared to vanilla UI.

To Reproduce
Steps to reproduce the behavior:

  1. Create a new object from a class that extends CottonCraftingController
  2. Create a WPlainPanel and set it as the root panel
  3. Add a WItemSlot at 0,0 to the WPlainPanel

Expected behavior
All sides of the ui should have the same amount of spacing to match vanilla UIs such as the chest ui.

Screenshots
LibGUI
image

A vanilla chest
image

Version of the:

  • LibGUI 1.8.2+1.15.2
  • Fabric API 0.7.1+build.301-1.15
  • Minecraft 1.15.2

Mutable slider range

  • Remove final from WAbstractSlider.min/max
  • Add WAbstractSlider.set[Min/Max]Value()
    • Clamp values to new range and send out events

Support custom UV bounds for WSprite

I'm currently working on a furnace-like block and need to show the remaining burn and cook times in the GUI. For that, I need to display parts of sprites (such as the bottom half of a texture). Of course, I could create my own widget, but having support for custom UV bounds will be useful for other modders using LibGui.

onSlotUpdate (listener) for WItemSlot

WItemSlot needs a way to say if it was used, therefore I recommend something like WButton's onClick. Maybe so field that gets passed to ValidatedSlot and ran when setStack and takeStack are, which I think are the ones that handle that stuff.

I also want to say that I would like to do this PR myself but I just want a thumbs up from your part to make sure you're okay with it or whether you prefer doing something else.

Support for accessibility keyboard control

Right now, LibGui doesn't have support for keyboard control of menus - using tab or shift+tab to move between buttons/sliders, space to interact with a button, and left/right to move sliders. This is pretty crucial for accessibility options. Vanilla screens do this through the changeFocus methods on both screens and buttons, and the keyPressed method on elements (buttons and sliders). It should hopefully not be too difficult to add support for these in with default implementations, but I'd have to try it myself to fully know.

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.