Open Source (Go) implementation of "Zanzibar: Google's Consistent, Global Authorization System".

ORY Keto - Open Source & Cloud Native Access Control Server

Chat | Forums | Newsletter

Guide | API Docs | Code Docs

Support this project!

Ory Keto is the first and only open source implementation of "Zanzibar: Google's Consistent, Global Authorization System":

Determining whether online users are authorized to access digital objects is central to preserving privacy. This paper presents the design, implementation, and deployment of Zanzibar, a global system for storing and evaluating access control lists. Zanzibar provides a uniform data model and configuration language for expressing a wide range of access control policies from hundreds of client services at Google, including Calendar, Cloud, Drive, Maps, Photos, and YouTube. Its authorization decisions respect causal ordering of user actions and thus provide external consistency amid changes to access control lists and object contents. Zanzibar scales to trillions of access control lists and millions of authorization requests per second to support services used by billions of people. It has maintained 95th-percentile latency of less than 10 milliseconds and availability of greater than 99.999% over 3 years of production use.

Source

If you need to know if a user (or robot, car, service) is allowed to do something - Ory Keto is the right fit for you.

Currently, Ory Keto implements the basic API contracts for managing and checking relations ("permissions") with HTTP and gRPC APIs. Future versions will include features such as userset rewrites (e.g. RBAC-style role-permission models), Zookies, and more. An overview of what is implemented and upcoming can be found at Implemented and Planned Features.

Build Status Coverage Status Go Report Card


Who's using it?

The ORY community stands on the shoulders of individuals, companies, and maintainers. We thank everyone involved - from submitting bug reports and feature requests, to contributing patches, to sponsoring our work. Our community is 1000+ strong and growing rapidly. The ORY stack protects 16.000.000.000+ API requests every month with over 250.000+ active service nodes. We would have never been able to achieve this without each and everyone of you!

The following list represents companies that have accompanied us along the way and that have made outstanding contributions to our ecosystem. If you think that your company deserves a spot here, reach out to [email protected] now!

Please consider giving back by becoming a sponsor of our open source work on Patreon or Open Collective.

Type Name Logo Website
Sponsor Raspberry PI Foundation Raspberry PI Foundation raspberrypi.org
Contributor Kyma Project Kyma Project kyma-project.io
Sponsor ThoughtWorks ThoughtWorks thoughtworks.com
Sponsor Tulip Tulip Retail tulip.com
Sponsor Cashdeck / All My Funds All My Funds cashdeck.com.au
Sponsor 3Rein 3Rein 3rein.com
Contributor Hootsuite Hootsuite hootsuite.com
Adopter * Segment Segment segment.com
Adopter * Arduino Arduino arduino.cc
Adopter * DataDetect Datadetect unifiedglobalarchiving.com/data-detect/
Adopter * Sainsbury's Sainsbury's sainsburys.co.uk
Sponsor OrderMyGear OrderMyGear ordermygear.com
Sponsor Spiri.bo Spiri.bo spiri.bo

We also want to thank all individual contributors

as well as all of our backers

and past & current supporters (in alphabetical order) on Patreon: Alexander Alimovs, Billy, Chancy Kennedy, Drozzy, Edwin Trejos, Howard Edidin, Ken Adler Oz Haven, Stefan Hans, TheCrealm.

* Uses one of ORY's major projects in production.

Installation

Head over to the documentation to learn about ways of installing ORY Keto.

Ecosystem

We build Ory on several guiding principles when it comes to our architecture design:

  • Minimal dependencies
  • Runs everywhere
  • Scales without effort
  • Minimize room for human and network errors

ORY's architecture designed to run best on a Container Orchestration Systems such as Kubernetes, CloudFoundry, OpenShift, and similar projects. Binaries are small (5-15MB) and available for all popular processor types (ARM, AMD64, i386) and operating systems (FreeBSD, Linux, macOS, Windows) without system dependencies (Java, Node, Ruby, libxml, ...).

ORY Kratos: Identity and User Infrastructure and Management

ORY Kratos is an API-first Identity and User Management system that is built according to cloud architecture best practices. It implements core use cases that almost every software application needs to deal with: Self-service Login and Registration, Multi-Factor Authentication (MFA/2FA), Account Recovery and Verification, Profile and Account Management.

ORY Hydra: OAuth2 & OpenID Connect Server

ORY Hydra is an OpenID Certified™ OAuth2 and OpenID Connect Provider which easily connects to any existing identity system by writing a tiny "bridge" application. Gives absolute control over user interface and user experience flows.

ORY Oathkeeper: Identity & Access Proxy

ORY Oathkeeper is a BeyondCorp/Zero Trust Identity & Access Proxy (IAP) with configurable authentication, authorization, and request mutation rules for your web services: Authenticate JWT, Access Tokens, API Keys, mTLS; Check if the contained subject is allowed to perform the request; Encode resulting content into custom headers (X-User-ID), JSON Web Tokens and more!

ORY Keto: Access Control Policies as a Server

ORY Keto is a policy decision point. It uses a set of access control policies, similar to AWS IAM Policies, in order to determine whether a subject (user, application, service, car, ...) is authorized to perform a certain action on a resource.

Security

Disclosing vulnerabilities

If you think you found a security vulnerability, please refrain from posting it publicly on the forums, the chat, or GitHub and send us an email to [email protected] instead.

Telemetry

Our services collect summarized, anonymized data which can optionally be turned off. Click here to learn more.

Guide

The Guide is available here.

HTTP API documentation

The HTTP API is documented here.

Upgrading and Changelog

New releases might introduce breaking changes. To help you identify and incorporate those changes, we document these changes in UPGRADE.md and CHANGELOG.md.

Command line documentation

Run keto -h or keto help.

Develop

We encourage all contributions and encourage you to read our contribution guidelines

Dependencies

You need Go 1.16+ and (for the test suites):

  • Docker and Docker Compose
  • GNU Make 4.3
  • NodeJS / npm@v7

It is possible to develop ORY Keto on Windows, but please be aware that all guides assume a Unix shell like bash or zsh.

Install from source

make install

Formatting Code

You can format all code using make format. Our CI checks if your code is properly formatted.

Running Tests

There are two types of tests you can run:

  • Short tests (do not require a SQL database like PostgreSQL)
  • Regular tests (do require PostgreSQL, MySQL, CockroachDB)
Short Tests

Short tests run fairly quickly. You can either test all of the code at once

go test -short -tags sqlite ./...

or test just a specific module:

go test -tags sqlite -short ./internal/check/...
Regular Tests

Regular tests require a database set up. Our test suite is able to work with docker directly (using ory/dockertest) but we encourage to use the script instead. Using dockertest can bloat the number of Docker Images on your system and starting them on each run is quite slow. Instead we recommend doing:

source ./scripts/test-resetdb.sh
go test -tags sqlite ./...
End-to-End Tests

The e2e tests are part of the normal go test. To only run the e2e test, use

source ./scripts/test-resetdb.sh
go test -tags sqlite ./internal/e2e/...

or add the -short tag to only test against sqlite in-memory.

Build Docker

You can build a development Docker Image using:

make docker
Comments
  • Moving forward with ORY Keto

    Moving forward with ORY Keto

    I recently (re-)discovered the OPA project. This issue is about deprecating the ORY Ladon engine and aligning ORY Keto with OPA. The decision is not yet made and we are looking for valuable input regarding this.

    OPA allows you to write authorization logic using a language specifically designed for that, called rego. Syntax is very go-like. Due to this, OPA is capable of providing all sorts of authorization mechanisms, like RBAC, ABAC, ACL, AWS IAM Policies, and more. In fact, I believe that ORY Ladon's logic is implementable using rego. I'm not sure if that holds true for conditions which still needs verification from my side.

    Let's take a look at the current downsides of each project.

    I believe that policy documents as implemented by ORY Ladon are very powerful, but also very complicated. Many developers struggle with proper resource & action naming. I think that regular expressions have their place here, but many developers struggle with writing and testing regular expressions and variable substitution is very flaky (currently only used in the ORY Oathkeeper adapter for ORY Keto iirc) from a ux perspective. Also, regular expressions do not scale well, especially if read from the database. I think we can fix this with caching, but that is not fixing the problem itself, only the symptom.

    On the same hand, OPA is limited. I think rego is great for developers that really want to jump into this (like me). But it's a new syntax, new language, and new tools. I think the language is not incredibly intuitive and not always readable:

    I believe that policy documents are, in general, quite complicated. In my opinion, rego has a steep learning curve as well. Can you tell me immediately what this does?

    sod_roles = [
        ["create-payment", "approve-payment"],
        ["create-vendor", "pay-vendor"]
    ]
    
    sod_violation[user] {
        role1 = user_role[user][_]
        role2 = user_role[user][_]
        sod_roles[_] = [role1, role2]
    }
    

    At least I can not - the point I'm trying to make is, you have to learn this.

    OPA comes with a REST API but it's really a parser and execution engine. It parses rego files and executes the logic based on data you provide. The result is always true or false, depending on the authorization result.

    The server is limited. It stores everything in-memory so pushing logic to the server is not realistic with more than one server running. Instead, you'll probably have to write a CI pipeline which builds a docker image that has all your policy definitions. IMO that can be very nice, especially if you have rego test as part of that pipeline. But, from my experience, most people do not want or know how to do these things.

    Coming back to policies for a moment: Most developers do not need AWS IAM Policies, simple role management is enough. By the way, the Google Cloud Platform migrated completely to RBAC/ACL as well recently (at least in the UI) - very few people want to deal with complicated JSON documents. And many make mistakes, which is evident due to the many S3 leaks we're seeing recently (caused by misconfigured buckets, well really misconfigured AWS IAM Policies). I think the same would have happened if AWS used rego, or it would have probably caused less people to use this feature at all.

    My vision for ORY Keto is to have a "policy decision point" (someone that says if something is allowed or not) that just works. I also believe that it should be possible to use several well-known patterns out of the box, this includes RBAC, ACL, ABAC and ORY Ladon Policies (for BC compatibility) and well, maybe your own rego definitions? I will experiment this month with different concepts and try to migrate Ladon Policies on top of rego. My preliminary tests showed that we can get a 10x performance improvement for simple use cases. We'll see how well this does for advanced ones.

    We write this software is for you, so please participate in the discussion and leave your ideas and comments below.

  • Keto latency with large number of policies

    Keto latency with large number of policies

    Describe the bug Keto's latency increases with policies and resources

    To Reproduce Steps to reproduce the behavior:

    1. (Optionally) Start with a fresh database
    2. Create 30k regex policies with 1 or more resources
    3. Perform allowed checks
    4. Witness requests take 1-10 seconds to complete

    Expected behavior Access allowed checks under 100ms

    Version:

    • Environment: MacOS Mojave, Postgres 11
    • Version: Master (0.3.1)

    Additional context Initially, I noticed Keto requests taking longer than 1 minute in pods running on Kubernetes when our policy count exceeded 30k. We also had memory issues but it may be unrelated. I was unable to run a memory profile using ppof on our images, the pod would crash OOM before the memory profile was written.

    The policy causing the latency had 16 resources. They all had 2 wildcards. Ex: tenant:<.*>:resource:foo<.*>

    Observations about latency:

    • The number of resources directly affects latency.
    • The number of policies (unused or not) affects latency
    • SERVE_MAX_AGE caused 500 errors with this many policies

    A temporary solution to this would be to split my policy into 16 individual policies, but 1-2 second requests (running locally) still seems extreme.

  • 0.2.2-sandbox+oryOS.10: Unable to initialize compiler: lstat /go: no such file or directory

    0.2.2-sandbox+oryOS.10: Unable to initialize compiler: lstat /go: no such file or directory

    Describe the bug Version [0.2.2-sandbox+oryOS.10] keto serve => Unable to initialize compiler: lstat /go: no such file or directory

    Version [v0.1.9-sandbox+oryOS.9] keto serve => work well

    To Reproduce Steps to reproduce the behavior:

    1. Run keto serve
    2. See error: Unable to initialize compiler: lstat /go: no such file or directory

    Version:

    • Environment: [binaries]
    • Version [0.2.2-sandbox+oryOS.10]
  • Define and architect SQL schema and queries for querying relations

    Define and architect SQL schema and queries for querying relations

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

    We need to define all SQL queries required for fetching / querying relations.

    Describe the solution you'd like

    Discuss SQL queries in this issue.

  • Protobuf APIs & tooling

    Protobuf APIs & tooling

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

    Currently we use protoc wich is quite limited. A better tool might be https://github.com/uber/prototool It comes with linting. Also interesting: https://github.com/googleapis/gapic-generator

    We might want to use a gateway to avoid writing REST APIs.

  • cmd: Add support for glob matching

    cmd: Add support for glob matching

    Related issue #66

    Proposed changes

    Adds support for the "glob" flavor, following the same patterns as "exact" and "regex".

    Checklist

    • [x] I have read the contributing guidelines
    • [x] I confirm that this pull request does not address a security vulnerability. If this pull request addresses a security vulnerability, I confirm that I got green light (please contact [email protected]) from the maintainers to push the changes.
    • [x] I signed the Developer's Certificate of Origin by signing my commit(s). You can amend your signature to the most recent commit by using git commit --amend -s. If you amend the commit, you might need to force push using git push --force HEAD:<branch>. Please be very careful when using force push.
    • [x] I have added tests that prove my fix is effective or that my feature works
    • [x] I have added necessary documentation within the code base (if appropriate)
    • [x] I have documented my changes in the developer guide (if appropriate) (https://github.com/ory/docs/pull/102)

    Further comments

  • Conditional function based on Context Conditions does not Apply

    Conditional function based on Context Conditions does not Apply

    Bug or Unclear Documentation Conditional function based on Context Conditions does not Apply Tested with EqualsSubjectCondition and StringEqualCondition

    To Reproduce Steps to reproduce the behavior:

    1. Create a exact Policie with the resulting Json Response on: /engines/acp/ory/exact/policies
    [{
       "id": "test-users-alice",
       "description": "",
       "subjects": ["users:alice"],
       "resources": ["resources:users:alice"],
       "actions": [ "read", "update"],
       "effect": "allow",
       "conditions": [ {
          "subject": {
             "type": "EqualsSubjectCondition"
          }
       }]
    }]
    
    1. Request on /engines/acp/ory/exact/allowed with the Request Body:
    {
        "action": "read",
        "subject": "users:alice",
        "resource": "resources:users:alice",
        "context": {
            "subject": "users:alice"
        }
    }
    
    1. Results in following Result
    {
        "allowed": false
    }
    

    Expected behavior Expected is to following Result:

    {
        "allowed": true
    }
    

    Version:

    • Environment: Docker
    • Version: oryd/keto:v0.2.2-sandbox_oryOS.10
  • feat: Add mapping table for encoding subject into UUIDs

    feat: Add mapping table for encoding subject into UUIDs

    This PR contains first work towards supporting automatic subject/object encodings into UUIDs, as discussed in #792.

    Related issue(s)

    #792

    Checklist

    • [x] I have read the contributing guidelines.
    • [x] I have referenced an issue containing the design document if my change introduces a new feature.
    • [x] I am following the contributing code guidelines.
    • [x] I have read the security policy.
    • [x] I confirm that this pull request does not address a security vulnerability. If this pull request addresses a security. vulnerability, I confirm that I got green light (please contact [email protected]) from the maintainers to push the changes.
    • [x] I have added tests that prove my fix is effective or that my feature works.
    • [ ] I have added or changed the documentation.

    Future work

    In order to complete the work for #792, the following items still need to be adressed (in this or future PRs):

    • [ ] RFC: Should the new encoding be enabled unconditionally, or opt-in as suggested in https://github.com/ory/keto/issues/792#issue-1071582579?
    • [ ] Use the new mapping methods in the API when reading or writing relation tuples.
  • SQL: make strings variable length

    SQL: make strings variable length

    Currently the column definitions use an arbitrary fixed string length. Researching a bit revealed that there are basically no advantages with that with any of our supported database systems. We should just make those strings variable length to allow applications to use any format they like. Making clear that using huge strings and pointing to the databases' documentation should be enough IMO.

  • Importing github.com/ory/keto not compatible with Kratos version 0.6.x

    Importing github.com/ory/keto not compatible with Kratos version 0.6.x

    Describe the bug

    When importing Keto we need to do the same replacements that are currently in master branch and in version v0.6.0.

    However, the replacement for kratos-client-go is on version v0.5.4-alpha.1.0.20210210170256-960b093d8bf9 which is not compatible with latest Kratos version.

    When removing this replacement the error

    go: github.com/ory/[email protected] requires
            github.com/ory/[email protected] requires
            github.com/ory/[email protected] requires
            github.com/ory/[email protected] requires
            github.com/ory/[email protected] requires
            github.com/ory/[email protected]: invalid version: unknown revision 000000000000
            
    

    occurs. As long as the replacement is there, it is obviously not possible to update kratos-client-go.

    Reproducing the bug

    Just have a Go project importing github.com/ory/keto v0.6.0-alpha.3, use the replacements (otherwise it's not working anyway) and then try to use kratos-client-go on its latest version.

    Expected behavior

    It should be possible to use latest Kratos (0.6.x) and Keto (0.6.x) version together.

  • glob not working on members of groups

    glob not working on members of groups

    Wildcards in the members of groups are not interpreted as wildcards for flavor glob.

    Applies to recent versions of keto, e.g., to commit db94481.

    The reason seems to be at the end of the file engine/ladon/rego/glob/main.rego in the function match_subjects. The intended implementation is preceded by the implementation for the flavor exact.

    Add something like

    decide_allow([group_policy], [{"id": "groups:6", "members": ["group-*"]}]) with input as {"resource": "articles:6", "subject": "group-member", "action": "actions:6"}

    to main_test.rego for a corresponding test.

  • chore(deps): bump github.com/ory/x from 0.0.502 to 0.0.524

    chore(deps): bump github.com/ory/x from 0.0.502 to 0.0.524

    Bumps github.com/ory/x from 0.0.502 to 0.0.524.

    Commits
    • 71af750 feat: add error tracing helper (#650)
    • 716ad47 feat: add WithSpan helper
    • 940234f feat: add function to get most accurate client IP from HTTP request
    • ecf137f feat: events: update naming and attributes
    • 3eb7c97 feat: make paginator work with pointer and value receiver implementations of ...
    • 3b6a608 chore: cleanup licence headers (#647)
    • e8188f8 feat: add --output=jsonpointer (#644)
    • d608f03 feat: add additional column ordering to keysetpagination (#640)
    • d5dfdaa feat: lighter SSRF migration (#641)
    • 6e01212 fix: pagination offset (#642)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • fix: remove pagination-related query elements on LIMIT 1

    fix: remove pagination-related query elements on LIMIT 1

    This patch removes query components which cause CockroachDB to perform a full-range query across all leaseholders for LIMIT 1 queries. Essentially, CockroachDB will query all potential nodes which might hold data when ORDER BY is used, or when the LIMIT indicates that there are rows missing.

    This can drop the query latency to a few ms versus hundreds of ms on a CockroachDB REGIONAL BY ROW table, without impact on the business logic.

    Closes #1167

    Further Comments

    I wasn't quite sure how to write tests for this. One way would be to test the resulting SQL query, but we do not have such capabilities yet.

  • LIMIT argument is incorrectly set to 2 instead of 1

    LIMIT argument is incorrectly set to 2 instead of 1

    Preflight checklist

    Describe the bug

    Calls to checkDirect perform a GetRelationTuples query with x.WithSize(1) to check whether a tuple was found or not.

    https://github.com/ory/keto/blob/a39325ce6ad9a401731cfcf5961932232f92145e/internal/check/engine.go#L162-L179

    For some reason though, we use the limit + 1 in the query:

    https://github.com/ory/keto/blob/a39325ce6ad9a401731cfcf5961932232f92145e/internal/persistence/sql/relationtuples.go#L215-L218

    So what should be LIMIT 1 (we have a binary question - does it exist or not?) we end up with LIMIT 2

    Reproducing the bug

    Look at a GetActiveProject trace in Grafana.

    Relevant log output

    No response

    Relevant configuration

    No response

    Version

    master

    On which operating system are you observing this issue?

    None

    In which environment are you deploying?

    None

    Additional Context

    No response

  • chore(deps): bump @grpc/grpc-js from 1.7.3 to 1.8.0 in /proto

    chore(deps): bump @grpc/grpc-js from 1.7.3 to 1.8.0 in /proto

    Bumps @grpc/grpc-js from 1.7.3 to 1.8.0.

    Release notes

    Sourced from @​grpc/grpc-js's releases.

    @​grpc/grpc-js-xds 1.8.0

    @​grpc/grpc-js 1.8.0

    Commits
    • c9f8f93 Merge pull request #2286 from murgatroid99/grpc-js_1.8.x_updates
    • a36d78e Merge pull request #2293 from murgatroid99/grpc-tools_1.12.3
    • b735abf grpc-tools: Bump to version 1.12.3
    • 2900c00 Merge pull request #2292 from murgatroid99/grpc-tools_mac_deployment_fixes_2
    • 11aa722 grpc-tools: Build for an older Mac version (attempt 2)
    • c92d3d5 Merge pull request #2290 from murgatroid99/grpc-tools_mac_deployment_target_fix
    • 45adf24 grpc-tools: Build for older Mac version
    • 49f8b5e Merge pull request #2288 from murgatroid99/grpc-tools_mac_tarball_fix
    • 2ddd628 Use BSD tar-specific options on Mac
    • 4888037 grpc-tools: Force GNU format for artifact tarballs
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • chore(deps-dev): bump prettier from 2.7.1 to 2.8.1

    chore(deps-dev): bump prettier from 2.7.1 to 2.8.1

    Bumps prettier from 2.7.1 to 2.8.1.

    Release notes

    Sourced from prettier's releases.

    2.8.1

    🔗 Changelog

    2.8.0

    diff

    🔗 Release note

    Changelog

    Sourced from prettier's changelog.

    2.8.1

    diff

    Fix SCSS map in arguments (#9184 by @​agamkrbit)

    // Input
    $display-breakpoints: map-deep-merge(
      (
        "print-only": "only print",
        "screen-only": "only screen",
        "xs-only": "only screen and (max-width: #{map-get($grid-breakpoints, "sm")-1})",
      ),
      $display-breakpoints
    );
    

    // Prettier 2.8.0 $display-breakpoints: map-deep-merge( ( "print-only": "only print", "screen-only": "only screen", "xs-only": "only screen and (max-width: #{map-get($grid-breakpoints, " sm ")-1})", ), $display-breakpoints );

    // Prettier 2.8.1 $display-breakpoints: map-deep-merge( ( "print-only": "only print", "screen-only": "only screen", "xs-only": "only screen and (max-width: #{map-get($grid-breakpoints, "sm")-1})", ), $display-breakpoints );

    Support auto accessors syntax (#13919 by @​sosukesuzuki)

    Support for Auto Accessors Syntax landed in TypeScript 4.9.

    (Doesn't work well with babel-ts parser)

    class Foo {
      accessor foo: number = 3;
    </tr></table> 
    

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Open-IM-Server is open source instant messaging Server.Backend in Go.
Open-IM-Server is open source instant messaging Server.Backend in Go.

Open-IM-Server Open-IM-Server: Open source Instant Messaging Server Instant messaging server. Backend in pure Golang, wire transport protocol is JSON

Jan 2, 2023
Magma is an open-source software platform that gives network operators an open, flexible and extendable mobile core network solution.
Magma is an open-source software platform that gives network operators an open, flexible and extendable mobile core network solution.

Connecting the Next Billion People Magma is an open-source software platform that gives network operators an open, flexible and extendable mobile core

Dec 31, 2022
Open-IM-Server is open source instant messaging Server.Backend in Go.
Open-IM-Server is open source instant messaging Server.Backend in Go.

Open-IM-Server is open source instant messaging Server.Backend in Go.

Dec 31, 2022
go-opa-validate is an open-source lib that evaluates OPA (open policy agent) policy against JSON or YAML data.
go-opa-validate is an open-source lib that evaluates OPA (open policy agent) policy against JSON or YAML data.

go-opa-validate go-opa-validate is an open-source lib that evaluates OPA (open policy agent) policy against JSON or YAML data. Installation Usage Cont

Nov 17, 2022
mesh-kridik is an open-source security scanner that performs various security checks on a Kubernetes cluster with istio service mesh and is leveraged by OPA (Open Policy Agent) to enforce security rules.
mesh-kridik is an open-source security scanner that performs various security checks on a Kubernetes cluster with istio service mesh and is leveraged by OPA (Open Policy Agent) to enforce security rules.

mesh-kridik Enhance your Kubernetes service mesh security !! mesh-kridik is an open-source security scanner that performs various security checks on a

Dec 14, 2022
go-opa-validate is an open-source lib that evaluates OPA (open policy agent) policy against JSON or YAML data.
go-opa-validate is an open-source lib that evaluates OPA (open policy agent) policy against JSON or YAML data.

go-opa-validate go-opa-validate is an open-source lib that evaluates OPA (open policy agent) policy against JSON or YAML data. Installation Usage Cont

Nov 17, 2022
An open source re-implementation of Diablo 2
An open source re-implementation of Diablo 2

OpenDiablo2 Join us on Discord! Development Live stream Support us on Patreon We are also working on a toolset: https://github.com/OpenDiablo2/HellSpa

Jan 8, 2023
Open Source (Go) implementation of "Zanzibar: Google's Consistent, Global Authorization System".

Open Source (Go) implementation of "Zanzibar: Google's Consistent, Global Authorization System". Ships gRPC, REST APIs, newSQL, and an easy and granular permission language. Supports ACL, RBAC, and other access models.

Jan 8, 2023
Open source re-implementation of the original Resident Evil 2 / Biohazard 2
Open source re-implementation of the original Resident Evil 2 / Biohazard 2

OpenBiohazard2 Open source re-implementation of the original Resident Evil 2 engine written in Go and OpenGL. You must own a copy of the original game

Jan 3, 2023
An open-source re-implementation of Pokémon Red
An open-source re-implementation of Pokémon Red

This project is open source re-implementation of Pokémon Red.

Dec 6, 2022
Project Kebe is the open-source Snap Store implementation.

Introduction Kebe intends to be a full replacement for the Snap Store. Quickstart Once you have an environment setup (for instance using https://githu

Nov 9, 2022
This project is designed to be an open source implementation for streaming desktop games using WebRTC
This project is designed to be an open source implementation for streaming desktop games using WebRTC

The aim of this project is develop a WebRTC screenshare designed for streaming video games and accepting remote inputs. There will be ansible instruct

Oct 6, 2022
Headscale - An open source, self-hosted implementation of the Tailscale control server

Headscale - An open source, self-hosted implementation of the Tailscale control server

Dec 29, 2022
Apache Traffic Control is an Open Source implementation of a Content Delivery Network

Apache Traffic Control Apache Traffic Control is an Open Source implementation of a Content Delivery Network. Documentation Intro CDN Basics Traffic C

Jan 6, 2023
An open source Pusher server implementation compatible with Pusher client libraries written in Go

Try browsing the code on Sourcegraph! IPÊ An open source Pusher server implementation compatible with Pusher client libraries written in Go. Why I wro

Aug 27, 2022
An open source Pusher server implementation compatible with Pusher client libraries written in GO

Try browsing the code on Sourcegraph! IPÊ An open source Pusher server implementation compatible with Pusher client libraries written in Go. Why I wro

Jan 3, 2023
Security research and open source implementation of the Apple 'Wireless Accessory Configuration' (WAC) protocol
Security research and open source implementation of the Apple 'Wireless Accessory Configuration' (WAC) protocol

Apple 'Wireless Accessory Configuration' (WAC) research Introduction This repository contains some research on how the WAC protocol works. I was mostl

Jul 28, 2022
Go language implementation of a blockchain based on the BDLS BFT protocol. The implementation was adapted from Ethereum and Sperax implementation

BDLS protocol based PoS Blockchain Most functionalities of this client is similar to the Ethereum golang implementation. If you do not find your quest

Oct 14, 2022
Feishu/Lark Open API Go Sdk, Support ALL Open API and Event Callback.

lark 中文版 README Feishu/Lark Open API Go Sdk, Support ALL Open API and Event Callback. Created By Code Generation. Install go get github.com/chyroc/lar

Jan 5, 2023
Kelp is a free and open-source trading bot for the Stellar DEX and 100+ centralized exchanges
Kelp is a free and open-source trading bot for the Stellar DEX and 100+ centralized exchanges

Kelp Kelp is a free and open-source trading bot for the Stellar universal marketplace and for centralized exchanges such as Binance, Kraken, CoinbaseP

Jan 6, 2023