Coder Social home page Coder Social logo

kubestellar / kubestellar Goto Github PK

View Code? Open in Web Editor NEW
226.0 8.0 53.0 127.16 MB

KubeStellar - a flexible solution for challenges associated with multi-cluster configuration management for edge, multi-cloud, and hybrid cloud

Home Page: https://kubestellar.io

License: Apache License 2.0

Makefile 2.94% Shell 14.59% Go 77.10% Dockerfile 0.28% Jinja 0.42% Python 4.29% Smarty 0.39%
placement scheduling synching deployment edge gitops kubernetes rollout status summarization

kubestellar's Introduction





Multi-cluster Configuration Management for Edge, Multi-Cloud, and Hybrid Cloud

    Join Slack

KubeStellar is a Cloud Native Computing Foundation (CNCF) Sandbox project that simplifies the deployment and configuration of applications across multiple Kubernetes clusters. It provides a seamless experience akin to using a single cluster, and it integrates with the tools you're already familiar with, eliminating the need to modify existing resources.

KubeStellar is particularly beneficial if you're currently deploying in a single cluster and are looking to expand to multiple clusters, or if you're already using multiple clusters and are seeking a more streamlined developer experience.

KubeStellar High Level View

The use of multiple clusters offers several advantages, including:

  • Separation of environments (e.g., development, testing, staging)
  • Isolation of groups, teams, or departments
  • Compliance with enterprise security or data governance requirements
  • Enhanced resiliency, including across different clouds
  • Improved resource availability
  • Access to heterogeneous resources
  • Capability to run applications on the edge, including in disconnected environments

In a single-cluster setup, developers typically access the cluster and deploy Kubernetes objects directly. Without KubeStellar, multiple clusters are usually deployed and configured individually, which can be time-consuming and complex.

KubeStellar simplifies this process by allowing developers to define a binding policy between clusters and Kubernetes objects. It then uses your regular single-cluster tooling to deploy and configure each cluster based on these binding policies, making multi-cluster operations as straightforward as managing a single cluster. This approach enhances productivity and efficiency, making KubeStellar a valuable tool in a multi-cluster Kubernetes environment.

Contributing

We ❤️ our contributors! If you're interested in helping us out, please head over to our Contributing guide and be sure to look at main or the release of interest to you.

This community has a Code of Conduct. Please make sure to follow it.

Getting in touch

There are several ways to communicate with us:

Instantly get access to our documents and meeting invites at http://kubestellar.io/joinus

❤️ Contributors

Thanks go to these wonderful people:


Jun Duan

👀

Braulio Dumba

👀

Mike Spreitzer

👀

Paolo Dettori

👀

Andy Anderson

👀

Franco Stellari

👀

Ezra Silvera

👀

Bob Filepp

👀

Effi Ofer

👀

Maria Camila Ruiz Cardenas

👀

Andrey Odarenko

👀

Aashni Manroa

👀

Kevin Roche

👀

Nick Masluk

👀

Francois Abel

👀

Nir Rozenbaum

👀

Maroon Ayoub

👀

Graham White

👀


FOSSA Status

Cloud Native Computing Foundation Logo
We are a Cloud Native Computing Foundation sandbox project.
Kubernetes and the Kubernetes logo are registered trademarks of The Linux Foundation® (TLF).
© 2022-2024. The KubeStellar Authors.

kubestellar's People

Contributors

amanroa avatar andreyod avatar aslom avatar clubanderson avatar dependabot[bot] avatar dumb0002 avatar effi-ofer avatar ezrasilvera avatar fab7 avatar fileppb avatar francostellari avatar grahamwhiteuk avatar jewzaam avatar kcp-ci-bot avatar kproche avatar mikespreitzer avatar mra-ruiz avatar msteinder avatar namasl avatar nirrozenbaum avatar openshift-ci[bot] avatar openshift-merge-robot avatar pdettori avatar pratik-mahalle avatar tingdai avatar vmaroon avatar waltforme avatar xrstf avatar yana1205 avatar yuji-watanabe-jp 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

kubestellar's Issues

Interaction between kcp-dev/edge-mc and kcp-dev/kcp

This issue tries to open some discussions regarding the relationship between kcp-dev/edge-mc and kcp-dev/kcp.

There are at least two possible options.

  1. Edge-mc is an 'enhancement' of kcp. A kcp server is separate from, and a prerequisite for edge-mc.
  2. Edge-mc is a 'replacement' for kcp. A kcp server is imported into, thus a part of edge-mc.

From users perspective, one basic fact is that: With the 1st option, users need both repositories; with the 2nd option, users need only edge-mc. What are other pros and cons?

From developers perspective: With the 1st option, code will be scaffolded in a way similar to the controller-runtime-example; With the 2nd option, code will be scaffolded similar to kcp developer's doc. What are the pros and cons? (Does any one of the options make coding easier? Does any one of the options make it easier if someday we want to merge the edge-specific controllers to kcp-dev/kcp?)

In addition to the two options above, are there any other options?

bug: ASeems that openshift-ci is not integrated with our PR process

Describe the bug

@clubanderson something is not working in the bot. Are you sure the openshift-ci is connected to our PRs? E.g., I tried adding /lgtm the bot should have kicked in and add the lgtm label, but this didn't happen.
I also see that we are not getting any message from openshift-ci (E.g., it should have assigned the reviewers)

Steps To Reproduce

Look at PRs

Expected Behaviour

openshift-ci bot will give comments

Additional Context

No response

bug: verify-contextual-logging.sh does not differentiate logcheck output

Describe the bug

hack/verify-contextual-logging.sh invokes logcheck twice, combining both outputs into one file in a way that does not make it clear which output is coming from which invocation.

Steps To Reproduce

  1. Look at hack/logcheck.out and try to figure out whether the output is from the first or second invocation of logcheck

Expected Behaviour

I expected to be able to understand the complaints.

Additional Context

No response

EPIC: Policy Distribution for KCP-Edge

Work in progress for Policy Distribution for KCP-Edge

References

Slides used in the https://github.com/kcp-dev/edge-mc/issues/44 on Dec. 1 (recording)
Demo recording
Prototype Implementation
Actions from comments in the Dec. 1. meeting

Review integration of OCM policy/Kyverno
Check Policy Report and Kubernetes Policy Management
Check the latest Upsync feature in KCP
Clarify cluster-scope sync requirement
CC: @yana1205

Demo Steps

Successful demonstration will include consideration for

  • generic application of policy to a wide number of products/projects from CNCF (lead projects from Constantine)
  • inclusion of policy reports from Kubernetes Policy Management so that policy status is reported using OSCAL and other control formats, and be used in IBM's SCC, OCM or other security policy definition, security compliance, and posture monitoring and enforcement products.

Action Items

  • Scope of the current demo is necessary to fit in the prototype boundaries
  • Contribute to the final demo script and recording

Stories

No response

feature: Add building icon to root README.md

Feature Description

Add a building icon to the root README.md

Proposed Solution

🏗️

Alternative Solutions

No response

Want to contribute?

  • I would like to work on this issue.

Additional Context

No response

EPIC: Edge Multicluster (KubeStellar)

Join us at our upcoming community meeting

The purpose of this Epic is to:

  1. Create awareness and onboarding for the KubeStellar community
  2. List the driving concerns behind the creation of the KubeStellar community
  3. Provide useful links to artifacts and issues that comprise the SIG KubeStellar initiative

How to join the discussion - leave a comment in this issue and we will invite you to our next KubeStellar community call

Driving Concerns

  • General Context: hierarchy, infrastructure & platform, roles & responsibilities, integration architecture, security issues
  • Runtime in[ter]dependence: An edge location may need to operate independently of the center and other edge locations​
  • Non-namespaced objects: need general support
  • Cardinality of destinations: A source object may propagate to many thousands of destinations. ​

for more detailed info see comments below.

Consequent Issues

  • Desired placement expression​: Need a way for one center object to express large number of desired copies​
  • Scheduling/syncing interface​: Need something that scales to large number of destinations​
  • Rollout control​: Client needs programmatic control of rollout, possibly including domain-specific logic​
  • Customization: Need a way for one pattern in the center to express how to customize for all the desired destinations​
  • Status from many destinations​: Center clients may need a way to access status from individual edge copies.​
  • Status summarization​: Client needs a way to say how statuses from edge copies are processed/reduced along the way from edge to center​

Approach

  • Collaboratively design a component set similar to those found in current KCP TMC implementation (dedicated Workspace type, scheduler, syncer-like mechanism, edgeplacement object definition, status collection strategy, and etc.)
  • Specify a multi-phased proof-of-concept inclusive of component architecture, interfaces, and example workloads
  • Validate phases of proof-of-concept with KCP, Kube SIG-Multicluster, and CNCF community members interested in Edge

Demo Steps

  • Phase 1
  • Phase 2
  • Phase 3
  • Phase 4

Action Items

  • Define the problem scope
  • Define the required interfaces
  • Define the required component architecture
  • Diagram and post component architecture diagrams
  • Define proof-of-concept phases
  • Diagram and post proof-of-concept phases

Artifacts

Edge Computing vs Transparent Multi-Cluster (TMC) - Mike Spreitzer

Contact us

#kubestellar-dev

Issues with README.md

We need consistent punctuation for list items. This post has some suggestions.

We don't have a 'developer guides' document but the README.md mentions it. Should we remove the link, or create such a guide then fix the link?

Create initial layout for the repo

We need to create the initial directory structure for the repo and importing some of the initial code assets (e.g. syncer, scheduler) that are specific to edge mc.

bug: kcp should be lowercase in README.md

Describe the bug

kcp should be lowercase in README.md

Steps To Reproduce

  1. Open README file

Expected Behaviour

kcp should be lowercase in text

Additional Context

No response

Initial trial of "Mailbox Design Option 1"

This is an initial trial of "Mailbox Design Option 1" in the design document for edge-mc scheduler shared by Paolo in #49. It is based on kcp-dev/controller-runtime-example for quick hands on.

This trial introduces

  • an edge Placement API, partially based on Mike’s placement proposal;
  • a controller reconciling edge Placements.

In this trial, I was able to implement a multicast pattern for workloads, which distributes one Deployment to multiple Locations using one edge Placement. I have a recording for that to discuss on.

Issues with watching

In this trial, I hit some issues with watching. Take kcp's "scheduling placement controller" as example, it is convenient to setup multiple watches, leveraging KubeSharedInformerFactory and KcpSharedInformerFactory.

	c, err := schedulingplacement.NewController(
		kcpClusterClient,
		s.KubeSharedInformerFactory.Core().V1().Namespaces(),
		s.KcpSharedInformerFactory.Scheduling().V1alpha1().Locations(),
		s.KcpSharedInformerFactory.Scheduling().V1alpha1().Placements(),
	)

Issue with multiple watches

In controller-runtime-example, the controller watches a virtual workspace corresponding to an APIExport. I followed that pattern to watch edge Placements using my-export.

👉 controller-runtime-example $ kc --server https://192.168.1.54:6443/services/apiexport/root:my-org:ep/my-export/clusters/*/ get placement.edge -A -o custom-columns='WORKSPACE:.metadata.annotations.kcp\.dev/cluster,NAME:.metadata.name'
WORKSPACE        NAME
root:my-org:ep   placement-sample

With this pattern (use APIExports), I didn't find an easy way to setup multiple watches.

Issue with watching kcp APIs

The "scheduling placement controller" watches two kcp APIs, Location and Placement. But I couldn't (by design?) do similar watch on Location or Placement via the corresponding APIExport.

👉 controller-runtime-example $ kc --server  https://192.168.1.54:6443/services/apiexport/root/scheduling.kcp.dev/clusters/*/ get placement -A
Error from server (NotFound): Unable to list "scheduling.kcp.dev/v1alpha1, Resource=placements": the server could not find the requested resource

Questions

Looks like controller-rumtime-example's pattern is for users rather than contributors to kcp? For edge-mc, maybe I have to switch to lower-level libraries like github.com/kcp-dev/client-go and github.com/kcp-dev/kcp/pkg/client? Need confirmation and more pointers from the community.

SIG KCP-Edge Community Meeting December 15, 2022

Overview

At 10am Eastern, 7am Pacific, 2pm UTC; find your time

Video call link: https://ibm.webex.com/ibm/j.php?MTID=mc9015c89e56fb75fc0956a1bdb93f931
Or dial: ‪1-844-531-0958‬ PIN: ‪145 377 9958‬#
More phone numbers: https://ibm.webex.com/webappng/sites/ibm/meeting/scheduler
Or join via SIP: sip:[email protected]

Meeting recordings available on YouTube at https://www.youtube.com/playlist?list=PLqN7RcoCwL96nXIIW6O51l8Lu_J-f5D27

Add topics you'd like to discuss below!

Contributor Code of Conduct
As contributors and maintainers in the CNCF community, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

We are committed to making participation in the CNCF community a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.

SIG KCP-Edge Community Meeting January 12, 2023

Overview

At 10am Eastern, 7am Pacific, 2pm UTC; find your time

Video call link: https://ibm.webex.com/ibm/j.php?MTID=mc9015c89e56fb75fc0956a1bdb93f931
Or dial: ‪1-844-531-0958‬ PIN: ‪145 377 9958‬#
More phone numbers: https://ibm.webex.com/webappng/sites/ibm/meeting/scheduler
Or join via SIP: sip:[email protected]

Meeting recordings available on YouTube at https://www.youtube.com/playlist?list=PLqN7RcoCwL96nXIIW6O51l8Lu_J-f5D27

Add topics you'd like to discuss below!

Contributor Code of Conduct
As contributors and maintainers in the CNCF community, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

We are committed to making participation in the CNCF community a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.

epic: Edge Multicluster (SIG KCP-Edge)

The purpose of this Epic is to:

  1. Create awareness and onboarding for the SIG KCP-Edge community
  2. List the driving concerns behind the creation of the SIG KCP-Edge community
  3. Provide useful links to artifacts and issues that comprise the SIG KCP-Edge initiative

How to join the discussion - leave a comment in this issue and we will invite you to our next SIG KCP-Edge community call

Driving Concerns

  • General Context: hierarchy, infrastructure & platform, roles & responsibilities, integration architecture, security issues
  • Runtime in[ter]dependence: An edge location may need to operate independently of the center and other edge locations​
  • Non-namespaced objects: need general support
  • Cardinality of destinations: A source object may propagate to many thousands of destinations. ​

for more detailed info see comments below.

Consequent Issues

  • Desired placement expression​: Need a way for one center object to express large number of desired copies​
  • Scheduling/syncing interface​: Need something that scales to large number of destinations​
  • Rollout control​: Client needs programmatic control of rollout, possibly including domain-specific logic​
  • Customization: Need a way for one pattern in the center to express how to customize for all the desired destinations​
  • Status from many destinations​: Center clients may need a way to access status from individual edge copies.​
  • Status summarization​: Client needs a way to say how statuses from edge copies are processed/reduced along the way from edge to center​

Approach

  • Collaboratively design a component set similar to those found in current KCP TMC implementation (dedicated Workspace type, scheduler, syncer-like mechanism, edgeplacement object definition, status collection strategy, and etc.)
  • Specify a multi-phased proof-of-concept inclusive of component architecture, interfaces, and example workloads
  • Validate phases of proof-of-concept with KCP, Kube SIG-Multicluster, and CNCF community members interested in Edge

Demo Steps

  • Phase 1
  • Phase 2
  • Phase 3
  • Phase 4

Action Items

  • Define the problem scope
  • Define the required interfaces
  • Define the required component architecture
  • Diagram and post component architecture diagrams
  • Define proof-of-concept phases
  • Diagram and post proof-of-concept phases

Artifacts

Edge Computing vs Transparent Multi-Cluster (TMC) - Mike Spreitzer

Contact us

#kcp-dev

Separated controller fails to list resources

In #58, we tried to run the kcp-scheduling-placement-controller separately from kcp-dev/kcp. We tracked the path along which the controller is invoked in kcp-dev/kcp, then tried to reconstruct the path in main.go.

There must be something we missed in the path because the controller fails to list Placements and Locations.
Placement:

E1208 16:16:20.007490   72875 reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: Failed to watch *v1alpha1.Placement: failed to list *v1alpha1.Placement: the server could not find the requested resource (get placements.scheduling.kcp.dev)

Locations:

E1208 16:16:20.043833   72875 reflector.go:138] k8s.io/[email protected]/tools/cache/reflector.go:167: Failed to watch *v1alpha1.Location: failed to list *v1alpha1.Location: the server could not find the requested resource (get locations.scheduling.kcp.dev)

The controller also watches namespaces, but it doesn't complain about listing namespaces.

We need some help to understand what are the missing parts in the path.

SIG KCP-Edge Community Meeting December 1, 2022

Overview

At 10am Eastern, 7am Pacific, 2pm UTC; find your time

Video call link: https://ibm.webex.com/ibm/j.php?MTID=mc9015c89e56fb75fc0956a1bdb93f931
Or dial: ‪1-844-531-0958‬ PIN: ‪145 377 9958‬#
More phone numbers: https://ibm.webex.com/webappng/sites/ibm/meeting/scheduler
Or join via SIP: sip:[email protected]

Meeting recordings available on YouTube at https://www.youtube.com/playlist?list=PLqN7RcoCwL96nXIIW6O51l8Lu_J-f5D27

Add topics you'd like to discuss below!

Contributor Code of Conduct
As contributors and maintainers in the CNCF community, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

       We are committed to making participation in the CNCF community a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.

Edge-specific workspace type

Is it a good idea to create a specific workspace type for the edge use cases? Is it the best practice?

With an edge specfic workspace type, we can have some control on the behavior of the workspaces including specific initializers, apibindings etc. What are other benefits?

What are the possible drawbacks?

If we do take this approach, how are we going to implement it? Any discussions/pointers are welcome!

bug: release inconsistency with the rest of kcp

Describe the bug

I made a Go workspace pointing to edge-mc, kcp, and kcp's fork of Kubernetes. My IDE, VSCODE, objects that those things refer to different releases of k8s.io/api. I suspect that more complaints in the same vein will show up if that one were individually fixed. I see that edge-mc's go.mod refers to the release 1.25 versions of k8s.io/api, apimachinery, and client-go while kcp and its kube fork are at release 1.24.

Screen Shot 2022-12-20 at 12 09 36 PM

Steps To Reproduce

As outlined above.

Expected Behaviour

I expected to be able to use a go workspace to work on edge-mc.

Additional Context

No response

feature: Automated management of policy control for KCP-Edge

Feature Description

  • As a KCP Administrator, I want to enable automation for enabling policy control on both workspaces and p-clusters.
  • As a Policy Control Administrator, I want to define a policy control spec applied on all workspaces and p-clusters, deploy it, and then obtain a report on status of policy controls.
  • As a Workspace Administrator, I want to define a policy for controlling resources on a workspace and all p-clusters bound to the workspace. I want to obtain a report on status of resources according to the policy.
  • Covering generic application of policy to a wide number of products/projects from CNCF
  • Unified approach for managing policy definition and status reporting based on Kubernetes Policy Management

Proposed Solution

see the design document

Want to contribute?

  • I would like to work on this issue.

Additional Context

CC: @yana1205

bug: remove broken link from README

Describe the bug

In We ❤️ our contributors! If you're interested in helping us out, please head over to our [Contributing](https://github.com/kcp-dev/edge-mc/blob/main/CONTRIBUTING.md) and [Developer](https://github.com/kcp-dev/edge-mc/blob/main/docs/developers) guides. we don't have yet a developers guid for this project.

Steps To Reproduce

  1. Open README and click on "Developer guides" under Contributing

Expected Behaviour

Should not have broken link

Additional Context

No response

feature: Maintenance of the Infrastructure for Policy and Report delivery

Feature Description

The infrastructure needs to adapt to the changing patterns of policies, policy reports, and clusters, including:

  1. policy creation, update, and deletion;
  2. policy report creation;
  3. cluster addition and deletion.

Proposed Solution

The policy-and-report delivery infrastructure is generated based initially on the policy and cluster distributions. The infrastructure uses the scalable delivery approach to deploy policies in #56 and update the delivery topology whenever the policy report distribution pattern changes.

Alternative Solutions

No response

Want to contribute?

  • I would like to work on this issue.

Additional Context

No response

removing files from WORKFLOW

based on feedback from Steve K. -removing:

ci.yaml
ci-docs-only.yaml
kcp-image.yaml
kcp-test-image.yaml
syncer-image.yaml
docs-gen-and-push.yaml
goreleaser.yaml

to avoid conflict with KCP

feature: Scalable policy deployment and policy report delivery

Feature Description

We need a scalable architecture for delivering policies in a large number of clusters. This infrastructure will also be able to collect policy reports. This infrastructure will distribute the policy events coming from many work spaces, and keep a consistent view of the policies and their reports.

Proposed Solution

Design a hierarchical infrastructure starting from the root kcp to deploy the policies. Introduce a hierarchical relationship between different running kcp instances to distribute and balance the policy and report workloads.

Alternative Solutions

No response

Want to contribute?

  • I would like to work on this issue.

Additional Context

No response

feature: Roles and reposibilities for policy violations

Feature Description

In KCP, several actors are connected to a service deployment:

  • the service provider offers the service through API Resource Schemas and API Exports
  • the service user makes the service available for use in their workspace through API Binding
  • the cluster providers offer the infrastructure on top of which the service provider and service user work spaces are deployed.

When the service deployment violates a policy rule, the customer receives a policy report in their workspace. In addition, depending on the policy check, other personas, such as the service provider and the cluster providers might need to be alerted of the policy violation. The functionality to alert these additional personas is currently missing.

Proposed Solution

Whenever a policy violation occurs, identify the policy rule(s) violated. Then a Responsibility Decision Engine comes in play to determine who should receive the policy reports.

Alternative Solutions

No response

Want to contribute?

  • I would like to work on this issue.

Additional Context

No response

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.