# scopes

Published articles for scopes.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Who gets to define an AI agent's intent?

DevFeed: [Who gets to define an AI agent's intent?](<https://devfeed.tech/articles/who-gets-to-define-an-ai-agent-s-intent-27010.md>)

Original publisher: [Read original article](<https://workos.com/blog/define-ai-agent-intent>)

Author: WorkOS

Published: 2026-09-15T20:25:55Z

Content type: article

Language: en

Sources: [WorkOS Blog](<https://devfeed.tech/sources/workos-blog.md>)

Topics: [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [identity](<https://devfeed.tech/tags/identity.md>), [policy](<https://devfeed.tech/tags/policy.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [tool](<https://devfeed.tech/tags/tool.md>), [workflow](<https://devfeed.tech/tags/workflow.md>)

### AI overview

The article explains how to define an AI agent's intent while preserving identity, resource-access controls, and company policy. It argues that the requester should specify the agent's purpose and intended effects, while the organization determines which actions are permitted. Using Airlock examples, it distinguishes task intent from policy decisions such as approval or denial of specific operations.

### Source excerpt

An agent's task describes the work to do. Learn how to define useful intent while keeping identity, resource access, and company policy in force.

## MCP authorization: governing tool calls beyond OAuth

DevFeed: [MCP authorization: governing tool calls beyond OAuth](<https://devfeed.tech/articles/mcp-authorization-governing-tool-calls-beyond-oauth-31435.md>)

Original publisher: [Read original article](<https://workos.com/blog/mcp-authorization-airlock>)

Author: WorkOS

Published: 2026-09-15T15:04:00Z

Content type: tutorial

Language: en

Sources: [WorkOS Blog](<https://devfeed.tech/sources/workos-blog.md>)

Topics: [Model Context Protocol](<https://devfeed.tech/topics/model-context-protocol.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>), [MCP OAuth](<https://devfeed.tech/topics/mcp-oauth.md>), [MCP Server](<https://devfeed.tech/topics/mcp-server.md>), [OAuth](<https://devfeed.tech/topics/oauth.md>)

Tags: [authorization](<https://devfeed.tech/tags/authorization.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [mcp-server](<https://devfeed.tech/tags/mcp-server.md>), [oauth](<https://devfeed.tech/tags/oauth.md>), [permissions](<https://devfeed.tech/tags/permissions.md>), [policy](<https://devfeed.tech/tags/policy.md>), [scope](<https://devfeed.tech/tags/scope.md>), [scopes](<https://devfeed.tech/tags/scopes.md>)

### AI overview

This guide explains why OAuth scopes alone cannot govern the content and destination of MCP tool calls. It presents server- or gateway-side policy enforcement before execution, including request-content inspection, approval handling, and testing for data leakage.

### Source excerpt

Secure MCP tool calls beyond OAuth scopes. Learn where to enforce tool permissions, check request content, and test for data leakage with Airlock.

## The hard part of an MCP gateway is auth

DevFeed: [The hard part of an MCP gateway is auth](<https://devfeed.tech/articles/the-hard-part-of-an-mcp-gateway-is-auth-16029.md>)

Original publisher: [Read original article](<https://workos.com/blog/mcp-gateway-hard-part-is-auth>)

Author: WorkOS

Published: 2026-09-11T15:22:28Z

Content type: opinion

Language: en

Sources: [WorkOS Blog](<https://devfeed.tech/sources/workos-blog.md>)

Topics: [MCP Server](<https://devfeed.tech/topics/mcp-server.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>), [Model Context Protocol](<https://devfeed.tech/topics/model-context-protocol.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>)

Tags: [audit](<https://devfeed.tech/tags/audit.md>), [auth](<https://devfeed.tech/tags/auth.md>), [github](<https://devfeed.tech/tags/github.md>), [integration](<https://devfeed.tech/tags/integration.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [mcp-gateway](<https://devfeed.tech/tags/mcp-gateway.md>), [mcp-server](<https://devfeed.tech/tags/mcp-server.md>), [salesforce](<https://devfeed.tech/tags/salesforce.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [slack](<https://devfeed.tech/tags/slack.md>), [warehouse](<https://devfeed.tech/tags/warehouse.md>)

### AI overview

The article examines Sierra's internal MCP gateway and argues that its most difficult challenges are authentication, identity, per-tool scopes, consent, and audit rather than MCP protocol design. It also discusses integration work and the lack of standardized gateway behavior.

### Source excerpt

Sierra's MCP gateway iceberg is a field report on agent auth: identity, per-tool scopes, consent, and audit are the submerged mass, and they ship off the shelf.

## What is MCP authorization? How OAuth works for AI agents

DevFeed: [What is MCP authorization? How OAuth works for AI agents](<https://devfeed.tech/articles/what-is-mcp-authorization-how-oauth-works-for-ai-agents-16071.md>)

Original publisher: [Read original article](<https://workos.com/blog/what-is-mcp-authorization>)

Author: WorkOS

Published: 2026-09-03T00:00:00Z

Content type: tutorial

Language: en

Sources: [WorkOS Blog](<https://devfeed.tech/sources/workos-blog.md>)

Topics: [Model Context Protocol (MCP)](<https://devfeed.tech/topics/model-context-protocol-mcp.md>), [OAuth](<https://devfeed.tech/topics/oauth.md>), [MCP Server](<https://devfeed.tech/topics/mcp-server.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [authorization](<https://devfeed.tech/tags/authorization.md>), [discovery](<https://devfeed.tech/tags/discovery.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [oauth](<https://devfeed.tech/tags/oauth.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [token](<https://devfeed.tech/tags/token.md>)

### AI overview

This tutorial explains MCP authorization as an OAuth 2.1 flow for allowing AI agents to call protected MCP servers on a user's behalf. It covers the roles of the MCP server, client, and authorization server; audience-bound tokens; discovery; deprecated Dynamic Client Registration; and step-up authorization for additional scopes.

### Source excerpt

MCP authorization is the OAuth 2.1 flow that lets an AI agent call a protected MCP server on a user's behalf. Here is how it works, step by step, under the 2026-07-28 spec.

## Add Cross App Access to Your OIDC Resource Application

DevFeed: [Add Cross App Access to Your OIDC Resource Application](<https://devfeed.tech/articles/add-cross-app-access-to-your-oidc-resource-application-15976.md>)

Original publisher: [Read original article](<https://developer.okta.com/blog/2026/08/24/xaa-oidc-resource>)

Author: Sohail Pathan

Published: 2026-08-24T05:00:00Z

Content type: tutorial

Language: en

Sources: [Okta Developer](<https://devfeed.tech/sources/okta-developer.md>)

Topics: [OpenID connect (OIDC)](<https://devfeed.tech/topics/oidc.md>), [API](<https://devfeed.tech/topics/api.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>), [JSON Web Tokens](<https://devfeed.tech/topics/jwt.md>), [Single sign-on (SSO)](<https://devfeed.tech/topics/sso.md>), [OAuth 2.0](<https://devfeed.tech/topics/oauth2.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [authorization](<https://devfeed.tech/tags/authorization.md>), [cross-app-access](<https://devfeed.tech/tags/cross-app-access.md>), [jwt](<https://devfeed.tech/tags/jwt.md>), [oauth-2-0](<https://devfeed.tech/tags/oauth-2-0.md>), [oidc](<https://devfeed.tech/tags/oidc.md>), [okta](<https://devfeed.tech/tags/okta.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [sso](<https://devfeed.tech/tags/sso.md>), [token](<https://devfeed.tech/tags/token.md>), [xaa](<https://devfeed.tech/tags/xaa.md>)

### AI overview

This guide explains how OIDC-federated applications can support Cross App Access (XAA) for API access on behalf of users. It covers validating and redeeming the ID-JAG, resolving users from claims, issuing access tokens, updating authorization server metadata, and testing the end-to-end flow.

### Source excerpt

If you currently federate enterprise customers using OpenID Connect (OIDC) and want to allow applications to access your API on behalf of those users, this Cross App Access (XAA) guide is for you. The Identity Assertion Authorization Grant specification, the basis of XAA, was designed with OIDC in mind. Your authorization server already trusts the customer's IdP for single sign-on (SSO), and XAA reuses that same trust for API access. This guide details what you need to support, how to validate the grant, and how to resolve the user at your resource authorization server. Table of Contents How XAA in OIDC works Analyzing the ID-JAG claims XAA implementation checklist for OIDC-federated applications Mapping user identity from iss and sub Validating the ID-JAG and resolving the user Issuing the access token Updating authorization server metadata Making cross-application requests from your OIDC app securely Configure your XAA OIDC Resource app in Okta Create the OIDC requesting app for testing Create the OIDC resource app in Okta Register and configure the AI Agent in Okta Verify your Okta XAA setup on xaa.dev Configure OIDC SSO Verify the refresh token exchange for an ID-JAG token Redeem the ID-JAG for an access token at the resource authorization server Call the resource API with the access token Prove the XAA connection end-to-end Takeaways for implementors who also have SAML apps Learn more about Cross App Access, OIDC, and OAuth 2.0 How XAA in OIDC works When an agent (like one running in Claude) needs API access, it presents an Identity Assertion Authorization Grant (ID-JAG). The ID-JAG is a short-lived JSON Web Token (JWT) issued by the customer's Identity Provider (IdP) for your authorization server. Your resource server accepts the token, identifies the user, and issues your own access token, all while leaving the customer's existing OIDC integration untouched. The sequence diagram shown below describes the OIDC XAA flow. Notice that the OIDC SSO flow stays the

## Give a scheduled agent access to a user's Google, Slack, and Jira with no signed-in session

DevFeed: [Give a scheduled agent access to a user's Google, Slack, and Jira with no signed-in session](<https://devfeed.tech/articles/give-a-scheduled-agent-access-to-a-user-s-google-slack-and-jira-with-no-signed-in-session-16005.md>)

Original publisher: [Read original article](<https://workos.com/blog/background-agent-third-party-access-no-session-pipes>)

Author: WorkOS

Published: 2026-08-12T00:00:00Z

Content type: tutorial

Language: en

Sources: [WorkOS Blog](<https://devfeed.tech/sources/workos-blog.md>)

Topics: [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [API keys](<https://devfeed.tech/topics/api-keys.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>), [OAuth](<https://devfeed.tech/topics/oauth.md>), [Slack](<https://devfeed.tech/topics/slack.md>), [Google](<https://devfeed.tech/topics/google.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [api](<https://devfeed.tech/tags/api.md>), [audit](<https://devfeed.tech/tags/audit.md>), [auth0](<https://devfeed.tech/tags/auth0.md>), [authorization](<https://devfeed.tech/tags/authorization.md>), [autonomous-agents](<https://devfeed.tech/tags/autonomous-agents.md>), [browser](<https://devfeed.tech/tags/browser.md>), [google](<https://devfeed.tech/tags/google.md>), [jira](<https://devfeed.tech/tags/jira.md>), [logging](<https://devfeed.tech/tags/logging.md>), [rotation](<https://devfeed.tech/tags/rotation.md>), [scheduled](<https://devfeed.tech/tags/scheduled.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [slack](<https://devfeed.tech/tags/slack.md>), [token](<https://devfeed.tech/tags/token.md>), [tokens](<https://devfeed.tech/tags/tokens.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

A tutorial showing how to give scheduled workers access to a user's Google, Slack, and Jira through WorkOS Pipes without a signed-in session. It covers scoped credential retrieval, token relay, rotation, revocation, and audit logging.

### Source excerpt

A runnable tutorial for pulling per-connection third-party credentials from WorkOS Pipes with nobody logged in, plus relay, rotation, revocation, and audit logging.

## Build a financial analysis MCP server with Appwrite Functions

DevFeed: [Build a financial analysis MCP server with Appwrite Functions](<https://devfeed.tech/articles/build-a-financial-analysis-mcp-server-with-appwrite-functions-16476.md>)

Original publisher: [Read original article](<https://appwrite.io/blog/post/financial-analysis-mcp-server>)

Author: Aditya Oberai

Published: 2026-08-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Appwrite Blog](<https://devfeed.tech/sources/appwrite-blog.md>)

Topics: [Appwrite](<https://devfeed.tech/topics/appwrite.md>), [Model Context Protocol (MCP)](<https://devfeed.tech/topics/model-context-protocol-mcp.md>), [MCP Server](<https://devfeed.tech/topics/mcp-server.md>), [Database](<https://devfeed.tech/topics/database.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>)

Tags: [build](<https://devfeed.tech/tags/build.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [github](<https://devfeed.tech/tags/github.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [mcp-server](<https://devfeed.tech/tags/mcp-server.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>)

### AI overview

This tutorial explains how to build a financial analysis MCP server with Appwrite Functions. The example uses Appwrite MCP server tooling to create a TablesDB schema and dummy financial data, then deploys a read-only reporting server that can generate statements, summarize portfolios, analyze spending, calculate cash flow, and search transactions.

### Source excerpt

Learn how to build a financial analysis MCP server with Appwrite Functions, TablesDB, and custom tools for statements, cash flow, and portfolio insights.

## Agentic Autonomy Levels

DevFeed: [Agentic Autonomy Levels](<https://devfeed.tech/articles/agentic-autonomy-levels-18043.md>)

Original publisher: [Read original article](<https://addyo.substack.com/p/agentic-autonomy-levels>)

Author: Addy Osmani

Published: 2026-07-03T14:30:33Z

Content type: article

Language: en

Sources: [Elevate](<https://devfeed.tech/sources/elevate.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>), [Agent Skill](<https://devfeed.tech/topics/agent-skill.md>), [Claude](<https://devfeed.tech/topics/claude.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [codex](<https://devfeed.tech/topics/codex.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [agentic](<https://devfeed.tech/tags/agentic.md>), [agentic-engineering](<https://devfeed.tech/tags/agentic-engineering.md>), [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [claude](<https://devfeed.tech/tags/claude.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [codex](<https://devfeed.tech/tags/codex.md>), [delegation](<https://devfeed.tech/tags/delegation.md>), [multi-agent](<https://devfeed.tech/tags/multi-agent.md>), [orchestration](<https://devfeed.tech/tags/orchestration.md>), [parallel](<https://devfeed.tech/tags/parallel.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [trust](<https://devfeed.tech/tags/trust.md>), [verification](<https://devfeed.tech/tags/verification.md>)

### AI overview

This article proposes a two-axis model for evaluating agentic engineering: agency, describing how independently a single agent operates, and orchestration, describing the skill of coordinating multiple agents. It argues that a single autonomy ladder is insufficient for multi-agent work and emphasizes matching autonomy levels with appropriate verification.

### Source excerpt

A working model of autonomy for agentic engineering

## Agentic Autonomy Levels

DevFeed: [Agentic Autonomy Levels](<https://devfeed.tech/articles/agentic-autonomy-levels-28492.md>)

Original publisher: [Read original article](<https://addyosmani.com/blog/agentic-autonomy-levels/>)

Author: Addy Osmani

Published: 2026-07-02T00:00:00Z

Content type: article

Language: en

Sources: [Addy Osmani](<https://devfeed.tech/sources/addy-osmani.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>), [Agent Skill](<https://devfeed.tech/topics/agent-skill.md>)

Tags: [agentic](<https://devfeed.tech/tags/agentic.md>), [agentic-engineering](<https://devfeed.tech/tags/agentic-engineering.md>), [ai](<https://devfeed.tech/tags/ai.md>), [delegation](<https://devfeed.tech/tags/delegation.md>), [multi-agent](<https://devfeed.tech/tags/multi-agent.md>), [orchestration](<https://devfeed.tech/tags/orchestration.md>), [scale](<https://devfeed.tech/tags/scale.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [trust](<https://devfeed.tech/tags/trust.md>), [verification](<https://devfeed.tech/tags/verification.md>)

### AI overview

The article argues that agent autonomy should be evaluated on two separate axes: agency, describing how independently an agent pursues a goal, and orchestration, describing the ability to coordinate multiple agents. It emphasizes choosing an autonomy level per task and defending that choice through verification.

### Source excerpt

The action in agentic engineering has moved from prompting to operating. Autonomy isn't one ladder, it's two axes (agency and orchestration) and six levels you move between per task. The real question is what level a task deserves, and what verification makes that level defensible.

## Custom Scopes in Koin: A Practical Example

DevFeed: [Custom Scopes in Koin: A Practical Example](<https://devfeed.tech/articles/custom-scopes-in-koin-a-practical-example-22968.md>)

Original publisher: [Read original article](<https://blog.insert-koin.io/custom-scopes-in-koin-a-practical-example-79cc1188810f?source=rss----925561f2ecdf---4>)

Author: Gabriel Bronzatti Moro

Published: 2026-06-19T12:01:01Z

Content type: tutorial

Language: en

Sources: [Koin developers - Medium](<https://devfeed.tech/sources/koin-developers-medium.md>)

Topics: [App](<https://devfeed.tech/topics/app.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [components](<https://devfeed.tech/tags/components.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [data](<https://devfeed.tech/tags/data.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [koin](<https://devfeed.tech/tags/koin.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [project](<https://devfeed.tech/tags/project.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [state](<https://devfeed.tech/tags/state.md>), [stateless](<https://devfeed.tech/tags/stateless.md>), [user-experience](<https://devfeed.tech/tags/user-experience.md>)

### AI overview

A practical tutorial on using custom scopes in Koin to keep a selected user profile image available across an application. It demonstrates a session scope, session data, and a stateless session manager using StreamPlayerApp as the example.

### Source excerpt

Hey friends 👋 Today, we are going to explore how we can create a custom scope, one of the powerful features provided by Koin. To make things practical 🔨, we'll walk through a real-world use case from the open-source project StreamPlayerApp (created by CodandoTV). Wireframes of a mobile app -- Unsplash by @alvarordesignWhat is the problem? StreamPlayerApp is an open-source project that aims to recreate the core experience of Netflix. One of its features allows users to select a profile, similar to the profile selection screen found in streaming platforms. The selected profile image needs to be accessible across the entire application, ensuring a consistent user experience on every screen. Whenever a user changes their profile, the updated image should be immediately reflected throughout the app, allowing all screens to stay synchronized with the current profile selection. Screenshots demonstrating the user profile selection feature.How we solve this problem using Custom Scopes? First, we create a class that represents the scope of a user session: class SessionScope Next, we create a lightweight data class containing only the information that needs to be kept in memory throughout the user session: data class UserSessionInfo( // represents the time user changed the profile val userTimestamp: Instant, // represents the selected picture url val profileImageUrl: String ) We then created a dedicated class responsible for managing the user's session lifecycle and state. class SessionManager { private val scopeId: String = "user_session" /** * Create custom scope and hold the user's session data */ fun openSession(imageUrl: String) { closeSession() val koin = KoinPlatform.getKoin() val scope = koin.createScope<SessionScope>( scopeId = scopeId, ) scope.declare( UserSessionInfo( userTimestamp = Clock.System.now(), profileImageUrl = imageUrl ) ) } /** * Retrieve the current user session */ fun userSessionInfo(): UserSessionInfo? { return KoinPlatform.getKoin() .getScopeOrNull(sc

## Standard Token Exchange is now officially supported in Keycloak 26.2

DevFeed: [Standard Token Exchange is now officially supported in Keycloak 26.2](<https://devfeed.tech/articles/standard-token-exchange-is-now-officially-supported-in-keycloak-26-2-31711.md>)

Original publisher: [Read original article](<https://www.keycloak.org/2025/05/standard-token-exchange-kc-26-2>)

Author: Giuseppe Graziano

Published: 2025-05-26T00:00:00Z

Content type: release

Language: en

Sources: [Keycloak Blog](<https://devfeed.tech/sources/keycloak-blog.md>)

Topics: [Keycloak](<https://devfeed.tech/topics/keycloak.md>), [OAuth 2.0](<https://devfeed.tech/topics/oauth2.md>), [releases](<https://devfeed.tech/topics/releases.md>)

Tags: [idm](<https://devfeed.tech/tags/idm.md>), [kerberos](<https://devfeed.tech/tags/kerberos.md>), [keycloak](<https://devfeed.tech/tags/keycloak.md>), [ldap](<https://devfeed.tech/tags/ldap.md>), [oauth-2-0](<https://devfeed.tech/tags/oauth-2-0.md>), [openid-connect](<https://devfeed.tech/tags/openid-connect.md>), [preview](<https://devfeed.tech/tags/preview.md>), [release](<https://devfeed.tech/tags/release.md>), [rules](<https://devfeed.tech/tags/rules.md>), [saml](<https://devfeed.tech/tags/saml.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [settings](<https://devfeed.tech/tags/settings.md>), [sso](<https://devfeed.tech/tags/sso.md>), [standard](<https://devfeed.tech/tags/standard.md>), [token](<https://devfeed.tech/tags/token.md>)

### AI overview

Keycloak 26.2 officially supports Standard Token Exchange and complies with OAuth 2.0 Token Exchange (RFC 8693). The feature lets clients exchange tokens, configure exchanges through the Admin Console, and enforce rules with Client Policies.

### Source excerpt

The Token Exchange feature has been available in Keycloak for a long time, but only as a preview feature. With the release of Keycloak 26.2, we're happy to share that Standard Token Exchange is now officially supported and fully compliant with OAuth 2.0 Token Exchange (RFC 8693). What is Token Exchange? 🔄 Token Exchange is a mechanism that allows a client to exchange one token for another. In the context of Keycloak, this means a client can exchange a token originally issued for another client and receive a new token issued specifically for itself. Token Exchange is especially helpful in these scenarios: 🎯 Different Audience When a token was issued for one service but needs to be used to access another, Token Exchange can issue a new token with the appropriate audience. 🔐 Scoped Permissions If a client needs to access a service with more limited permissions, it can exchange its token for one with reduced or more specific scopes. What's new? 🆕 ✅ Official support (no longer a preview feature) 📘 Compliance with RFC 8693 (OAuth 2.0 Token Exchange) 🖱 Simple configuration via the Admin Console (just a switch in client settings) 🛡 Integration with Client Policies to enforce custom rules. You can restrict exchanges to specific clients, or deny exchanges based on requested scopes. How to get started 🚀 If you're using Keycloak 26.2 or later, there's nothing extra to enable. Token Exchange is ready to use, just open the client settings in the admin console and enable the dedicated switch. If you're still using the preview feature of token exchange, check the migration guide and the comparison to understand the differences and plan your migration. 📄 For full setup instructions and configuration details, refer to the official documentation. What's next? 🔍 We're continuing to expand Token Exchange support with future enhancements such as: 🔄 Exchanging tokens issued by external identity providers 👤 Using token exchange to impersonate users Stay tuned for updates in upcoming rele

## Achieving Fine-Grained Admin Permissions with Keycloak 26.2

DevFeed: [Achieving Fine-Grained Admin Permissions with Keycloak 26.2](<https://devfeed.tech/articles/achieving-fine-grained-admin-permissions-with-keycloak-26-2-31704.md>)

Original publisher: [Read original article](<https://www.keycloak.org/2025/05/fgap-kc-26-2>)

Author: Vlasta Ramik

Published: 2025-05-14T00:00:00Z

Content type: tutorial

Language: en

Sources: [Keycloak Blog](<https://devfeed.tech/sources/keycloak-blog.md>)

Topics: [Keycloak](<https://devfeed.tech/topics/keycloak.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>), [Access Control](<https://devfeed.tech/topics/access-control.md>), [audit](<https://devfeed.tech/topics/audit.md>), [Security](<https://devfeed.tech/topics/security.md>), [console](<https://devfeed.tech/topics/console.md>)

Tags: [access-control](<https://devfeed.tech/tags/access-control.md>), [admin](<https://devfeed.tech/tags/admin.md>), [administration](<https://devfeed.tech/tags/administration.md>), [audit](<https://devfeed.tech/tags/audit.md>), [authorization](<https://devfeed.tech/tags/authorization.md>), [console](<https://devfeed.tech/tags/console.md>), [idm](<https://devfeed.tech/tags/idm.md>), [kerberos](<https://devfeed.tech/tags/kerberos.md>), [keycloak](<https://devfeed.tech/tags/keycloak.md>), [ldap](<https://devfeed.tech/tags/ldap.md>), [openid-connect](<https://devfeed.tech/tags/openid-connect.md>), [policies](<https://devfeed.tech/tags/policies.md>), [saml](<https://devfeed.tech/tags/saml.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [security](<https://devfeed.tech/tags/security.md>), [sso](<https://devfeed.tech/tags/sso.md>)

### AI overview

This article introduces Fine-Grained Admin Permissions V2 in Keycloak 26.2. It explains how FGAP V2 supports delegated administration and more granular management of users, clients, groups, and roles within a realm, with centralized permission management in the Admin Console.

### Source excerpt

For years, Role-Based Access Control (RBAC) has been the cornerstone of authorization in many applications. Assigning users to roles provides a simple and effective way to manage access for common use cases. However, as applications become more complex and security requirements more demanding, RBAC alone often falls short. Keycloak is leveling up administrative access control with the release of Fine Grained Admin Permissions V2 a major step towards introducing delegated administration to Keycloak so that server administrators can assign management privileges to other users in a realm. By doing that, you should be able to reduce management costs and effort, and improve the overall efficiency and security of your deployments by authorizing access to specific resources in a realm. Why Fine-Grained Admin Permissions (FGAP) V2? In previous Keycloak versions, administrative access was largely driven by broad roles such as realm-admin or manage-users. While effective for simple setups, these roles often granted more access than necessary and lacked clarity around which actions they allowed. FGAP V2 introduces a cleaner, more deliberate permission model that enables: Granular access control over users, clients, groups, and roles Clear boundaries between operations--no more implicit permissions Easier management of the permissions and policies Better evaluation mechanism to allow authorization administrators audit the model ✨ Key Highlights 🧭 Centralized Permissions Management A new Permissions section in the Admin Console provides a single place to view and manage all fine-grained permissions for a realm. This simplifies navigation and makes it easier to design and audit your permission model. 🔍 Improved Manageability and Evaluation Permissions are now easier to discover, filter, and evaluate. You can inspect which scopes are assigned to which identities--making it more transparent and manageable to build tailored administrative roles. 🎯 Resource-Specific and Global Permissi

## Performance in Jetpack Compose

DevFeed: [Performance in Jetpack Compose](<https://devfeed.tech/articles/performance-in-jetpack-compose-25901.md>)

Original publisher: [Read original article](<https://skyyo.medium.com/performance-in-jetpack-compose-9a85ce02f8f9?source=rss-56174fa84bcc------2>)

Author: Denys Rudenko

Published: 2022-10-03T16:41:03Z

Content type: tutorial

Language: en

Sources: [Stories by Denis Rudenko on Medium](<https://devfeed.tech/sources/stories-by-denis-rudenko-on-medium.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [article](<https://devfeed.tech/tags/article.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compose](<https://devfeed.tech/tags/compose.md>), [false-positive](<https://devfeed.tech/tags/false-positive.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [lambda](<https://devfeed.tech/tags/lambda.md>), [modifiers](<https://devfeed.tech/tags/modifiers.md>), [performance](<https://devfeed.tech/tags/performance.md>), [recomposition](<https://devfeed.tech/tags/recomposition.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [skip](<https://devfeed.tech/tags/skip.md>), [ui](<https://devfeed.tech/tags/ui.md>), [val](<https://devfeed.tech/tags/val.md>), [var](<https://devfeed.tech/tags/var.md>), [variables](<https://devfeed.tech/tags/variables.md>)

### AI overview

A practical guide to improving Jetpack Compose performance through stable parameters, skippable composables, optimized recompositions, remembered lambdas, and compiler and layout-inspector metrics.

### Source excerpt

Article tells about my research on how to write efficient Compose code. It consists of 6 sections and a TL;DR/Summary in the end. We will cover: Optimising recompositions When should you use @Immutable and @Stable annotations; Unstable classes, variables, lambdas; Non-restartable & skippable composables; Lambda modifiers; Passing lambdas providing required fields instead of fields in composables; Inlined composables; When you should use remember { }. We'll be using Compose Compiler Metrics and layout inspector tools to know: - If a class is stable or not; - If the composable function is skippable/restartable; - Amount of skipped recompositions. 1. Unstable objects on UI layer. To understand why we should care about stability, let us peek into a very important metric called skippability. It allows compose runtime to skip recomposition of a composable when all the parameters it uses are considered stable. What is considered stable by the compiler? - All primitive value types: Boolean, Int, Long, Float, Char, etc. - Strings - Lambdas (not always, we will get to it later) We want composable functions to use stable params to become skippable. 1) Don't use var when seeking stability. Fields declared as var are considered unstable: https://medium.com/media/724da23ba38eaa9d3312318e7e8038b9/hrefhttps://medium.com/media/f8dd8a39bce60e48b5ff8bdd4a02b9ef/href UserDetails composable will be recomposed even if the user never gets modified. Using val instead of var in User class will fix this issue. 2) Not all lambdas are considered stable. Let's look at the following examples: https://medium.com/media/fbbff417d165a501b21a3e5d2c6f087f/hrefhttps://medium.com/media/c6aaae01fda67c633edcdf7bb351e620/href Since the lambdas capture outside scopes, they won't be automatically inferred as stable and reused as expected. If the lambda requires access to external variables, the compiler will add those variables as fields, which are passed into the constructor of the lambda. We go a 2 ways of

## Things you can do in Android Studio

DevFeed: [Things you can do in Android Studio](<https://devfeed.tech/articles/things-you-can-do-in-android-studio-25669.md>)

Original publisher: [Read original article](<https://adambennett.dev/2022/06/things-you-can-do-in-android-studio/>)

Published: 2022-06-18T08:38:44Z

Content type: tutorial

Language: en

Sources: [Posts on Adam Bennett](<https://devfeed.tech/sources/posts-on-adam-bennett.md>)

Topics: [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [IntelliJ IDEA](<https://devfeed.tech/topics/intellij-idea.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [algorithms](<https://devfeed.tech/tags/algorithms.md>), [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [blog](<https://devfeed.tech/tags/blog.md>), [career](<https://devfeed.tech/tags/career.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [copy](<https://devfeed.tech/tags/copy.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [finance](<https://devfeed.tech/tags/finance.md>), [function](<https://devfeed.tech/tags/function.md>), [functional](<https://devfeed.tech/tags/functional.md>), [growth](<https://devfeed.tech/tags/growth.md>), [intellij](<https://devfeed.tech/tags/intellij.md>), [java](<https://devfeed.tech/tags/java.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [money](<https://devfeed.tech/tags/money.md>), [opinions](<https://devfeed.tech/tags/opinions.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [software](<https://devfeed.tech/tags/software.md>), [startups](<https://devfeed.tech/tags/startups.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>), [tooling](<https://devfeed.tech/tags/tooling.md>), [training](<https://devfeed.tech/tags/training.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

A practical list of Android Studio and IntelliJ productivity features, including excluding generated files with Scopes, using scratch files to test ideas, editing multiple lines simultaneously, and accessing clipboard history.

### Source excerpt

Based on a recent discussion on Twitter: a list of things that you can do in Android Studio which can make your life much easier. Hide files you don't care about If you work in a project with lots of generated code (e.g.: you use Dagger), you can exclude generated files from searches using Scopes:

## New Authorization Tooling - Improved Usability and Security

DevFeed: [New Authorization Tooling - Improved Usability and Security](<https://devfeed.tech/articles/new-authorization-tooling-improved-usability-and-security-15772.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/new-authorization-tooling-improved-usability-and-security>)

Author: Mike Ward

Published: 2020-12-16T20:00:00Z

Content type: release

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [Authorization](<https://devfeed.tech/topics/authorization.md>), [OAuth](<https://devfeed.tech/topics/oauth.md>), [Security](<https://devfeed.tech/topics/security.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [apis](<https://devfeed.tech/tags/apis.md>), [authorization](<https://devfeed.tech/tags/authorization.md>), [improvements](<https://devfeed.tech/tags/improvements.md>), [oauth](<https://devfeed.tech/tags/oauth.md>), [scope](<https://devfeed.tech/tags/scope.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [security](<https://devfeed.tech/tags/security.md>), [tokens](<https://devfeed.tech/tags/tokens.md>), [tooling](<https://devfeed.tech/tags/tooling.md>)

### AI overview

Square describes authorization tooling updates that provide more granular control over OAuth access tokens, including reduced permission scopes, short-lived tokens, and revocation of individual tokens.

### Source excerpt

More granular control of OAuth access tokens

## Using Kotlin's with Scope Function and Receiver Lambdas

DevFeed: [Using Kotlin's with Scope Function and Receiver Lambdas](<https://devfeed.tech/articles/with-the-receiver-in-scope-26030.md>)

Original publisher: [Read original article](<https://elizarov.medium.com/with-the-receiver-in-scope-7b52bdcca6e9?source=rss-4762e889f8fc------2>)

Author: Roman Elizarov

Published: 2020-07-01T14:33:13Z

Content type: tutorial

Language: en

Sources: [Stories by Roman Elizarov on Medium](<https://devfeed.tech/sources/stories-by-roman-elizarov-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Library](<https://devfeed.tech/topics/library.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [context](<https://devfeed.tech/tags/context.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lambda](<https://devfeed.tech/tags/lambda.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [receiver](<https://devfeed.tech/tags/receiver.md>), [scope-function](<https://devfeed.tech/tags/scope-function.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>)

### AI overview

The article explains how Kotlin's with scope function reduces repetitive object references and groups related initialization in a distinct block. It also introduces extension functions and lambdas with a receiver as ways to access object members without repeating the object's name.

### Source excerpt

Photo by Ben Wicks on UnsplashRepetitio est mater studiorum (Latin, repetition is the mother of all learning). Repetition is great for study, but a bane of software development. Repetitive code is boring and error-prone. Let's look at a hypothetical example inspired by imperative UI frameworks that are still being used a lot nowadays, even though their heyday is past. We might find ourselves having to write code like this: applicationWindow.title = "Just an example" applicationWindow.position = FramePosition.AUTO applicationWindow.content = createContent() applicationWindow.show() Referencing applicationWindow object over and over again is very explicit but it is not pretty. We can make this code better using with scope function from the Kotlin standard library: with(applicationWindow) { // this: ApplicationWindow title = "Just an example" position = FramePosition.AUTO content = createContent() show() } This code now has more lines, but the number of lines is not the key metric you should be looking at when judging the code. The code looks cleaner. It groups all the initialization of the applicationWindow object into a separate, syntactically distinct block. It directly represents the developer's intent to perform all of these actions on applicationWindow together. The block of code inside of with(x) { ... } is easily recognizable by any developer trained in a mainstream object-oriented language -- it is similar to the code you encounter inside a method of the corresponding class where this refers to the method's receiver object and all unqualified references like title refer to this object's properties and methods. In the Kotlin programming language writing a method is not the only way to get access to object members without having to repeat the object's name. Kotlin has support for extension functions that allow us to write a method-like looking code outside of the class body: fun ApplicationWindow.configure() { // this: ApplicationWindow title = ... // no need to

## How to Build a Twitch Bot Using TMI.JS (a moderator bot)

DevFeed: [How to Build a Twitch Bot Using TMI.JS (a moderator bot)](<https://devfeed.tech/articles/how-to-build-a-twitch-bot-using-tmi-js-a-moderator-bot-10682.md>)

Original publisher: [Read original article](<https://technotim.com/posts/twitch-bot/>)

Author: Techno Tim

Published: 2020-05-03T14:00:00Z

Content type: tutorial

Language: en

Sources: [Techno Tim](<https://devfeed.tech/sources/techno-tim.md>)

Topics: [Twitch](<https://devfeed.tech/topics/twitch.md>), [Bot](<https://devfeed.tech/topics/bot.md>), [API](<https://devfeed.tech/topics/api.md>), [OAuth](<https://devfeed.tech/topics/oauth.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [npm](<https://devfeed.tech/topics/npm.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [bots](<https://devfeed.tech/tags/bots.md>), [channel](<https://devfeed.tech/tags/channel.md>), [chat](<https://devfeed.tech/tags/chat.md>), [coding](<https://devfeed.tech/tags/coding.md>), [developer](<https://devfeed.tech/tags/developer.md>), [developer-portal](<https://devfeed.tech/tags/developer-portal.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [js](<https://devfeed.tech/tags/js.md>), [nodejs](<https://devfeed.tech/tags/nodejs.md>), [npm](<https://devfeed.tech/tags/npm.md>), [oauth](<https://devfeed.tech/tags/oauth.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [quick-start](<https://devfeed.tech/tags/quick-start.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [token](<https://devfeed.tech/tags/token.md>), [twitch](<https://devfeed.tech/tags/twitch.md>)

### AI overview

A video tutorial demonstrates how to build a Twitch moderator bot with TMI.JS, covering developer portal setup, OAuth scopes, access tokens, JavaScript, NodeJS, and NPM. It also explains inviting the bot to a channel and moderating chat.

### Source excerpt

Let's build a bot! Not a bad bot like a view bot, but bot for good.Let's build a Twitch moderator bot using tmi.js! The Twitch API is powerful and and already has lots of great bots however no bot has the flexibility of creating your own! In this video I will show you how to build a Twitch bot using TMI.JS from start to finish.You'll see how to use the developer portal, set up oauth, set the...

## Let's Build A Simple Interpreter. Part 19: Nested Procedure Calls

DevFeed: [Let's Build A Simple Interpreter. Part 19: Nested Procedure Calls](<https://devfeed.tech/articles/let-s-build-a-simple-interpreter-part-19-nested-procedure-calls-33322.md>)

Original publisher: [Read original article](<https://ruslanspivak.com/lsbasi-part19/>)

Author: Ruslan Spivak

Published: 2020-03-19T12:45:00Z

Content type: tutorial

Language: en

Sources: [Ruslan Spivak](<https://devfeed.tech/sources/ruslan-spivak.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [file](<https://devfeed.tech/topics/file.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [code](<https://devfeed.tech/tags/code.md>), [github](<https://devfeed.tech/tags/github.md>), [parameter](<https://devfeed.tech/tags/parameter.md>), [program](<https://devfeed.tech/tags/program.md>), [scope](<https://devfeed.tech/tags/scope.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [variable](<https://devfeed.tech/tags/variable.md>), [variables](<https://devfeed.tech/tags/variables.md>)

### AI overview

This tutorial explains how to execute nested procedure calls in a simple interpreter. It demonstrates nested procedures Alpha and Beta, examines their activation records, and fixes the nesting level for Beta by using the scope level stored in the scoped symbol table.

### Source excerpt

What I cannot create, I do not understand. --- Richard Feynman

## How Zoom App Publishing Requests Are Reviewed

DevFeed: [How Zoom App Publishing Requests Are Reviewed](<https://devfeed.tech/articles/behind-the-curtain-app-publishing-requests-24760.md>)

Original publisher: [Read original article](<https://medium.com/zoom-developer-blog/behind-the-curtain-app-publishing-requests-9494baee043f?source=rss----4a85731adaff---4>)

Author: Abraham Queen

Published: 2020-01-22T02:31:01Z

Content type: tutorial

Language: en

Sources: [Zoom Developer Blog - Medium](<https://devfeed.tech/sources/zoom-developer-blog-medium.md>)

Topics: [Publishing](<https://devfeed.tech/topics/publishing.md>), [App](<https://devfeed.tech/topics/app.md>), [zoom](<https://devfeed.tech/topics/zoom.md>), [Requirements](<https://devfeed.tech/topics/requirements.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [article](<https://devfeed.tech/tags/article.md>), [coding](<https://devfeed.tech/tags/coding.md>), [credentials](<https://devfeed.tech/tags/credentials.md>), [developer](<https://devfeed.tech/tags/developer.md>), [development](<https://devfeed.tech/tags/development.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [examples](<https://devfeed.tech/tags/examples.md>), [guides-and-tutorials](<https://devfeed.tech/tags/guides-and-tutorials.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [video-conferencing](<https://devfeed.tech/tags/video-conferencing.md>), [zoom](<https://devfeed.tech/tags/zoom.md>)

### AI overview

This article explains how Zoom reviews App Publishing Requests for the Zoom App Marketplace. It describes the role of metadata quality, clear explanations, test plans, images, videos, links, credentials, scopes, and features in the review process.

### Source excerpt

Have you ever wondered what goes on behind the scenes when you submit an app to the Zoom App Marketplace? There are two main submission processes that you can use when creating an app, App Publishing Request, and a Publishable URL sharing request. In this article, I'll cover an App Publishing Request, which allows an app to be installed by all Zoom users through the Marketplace. Publishable URL sharing requests, covered in this article, allows an unpublished app to be distributed to limited Zoom users outside your account. Whether you are exploring the many features Zoom has to offer, developing an app for the Marketplace, or returning to an old app to update it, you may want to know what Zoom is doing to support you. You may also have a couple of questions such as: How long does it take for my app to be published after I submit it? What can I do to accelerate this process? If my app is rejected, what's next? Who can I reach out to if you have questions about Zoom's APIs, documentation, or app submission process? We will answer all of these questions and more in this article, strap in! One of the factors in how quickly your app will be processed is the quality of the metadata you provide as well as how specific you are with your explanations and test plan. To start, lets look at two examples from the Zoom app submission portal, this is similar to what the reviewer sees when you submit a CREATE request: This is a screenshot from the reviewer's portal, this is part of what we see when you submit your app to be published on the Marketplace. The first impression of this app submission is very strong, the developer has submitted an app that has clear descriptions, images, a video, and all necessary links. Clicking into each of those link brings me to a page that satisfies all necessary requirements. Reading the long description, the reviewer can get a clear sense of the purpose of the app, and who may benefit from it. Looking a bit deeper, the developer has provided a te

## Flowing in the Deep - Event Streams in Kotlin

DevFeed: [Flowing in the Deep - Event Streams in Kotlin](<https://devfeed.tech/articles/flowing-in-the-deep-event-streams-in-kotlin-25478.md>)

Original publisher: [Read original article](<https://hannesdorfmann.com/presentations/2019-07-02-flowing-in-the-deep/>)

Author: Hannes Dorfmann

Published: 2019-07-02T00:00:00Z

Content type: tutorial

Language: en

Sources: [Hannes Dorfmann](<https://devfeed.tech/sources/hannes-dorfmann.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [RxJava](<https://devfeed.tech/topics/rxjava.md>), [Streams](<https://devfeed.tech/topics/streams.md>), [Android](<https://devfeed.tech/topics/android.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [backpressure](<https://devfeed.tech/tags/backpressure.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [event](<https://devfeed.tech/tags/event.md>), [flow](<https://devfeed.tech/tags/flow.md>), [flowable](<https://devfeed.tech/tags/flowable.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [presentation](<https://devfeed.tech/tags/presentation.md>), [rxjava](<https://devfeed.tech/tags/rxjava.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [streams](<https://devfeed.tech/tags/streams.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

This presentation introduces Kotlin Flow, compares it with RxJava Observable and Flowable, and explains its relationship to coroutines. It also covers implementation details, custom operators, coroutine channels, backpressure, and coroutine scopes for use in Android apps.

### Source excerpt

The Kotlin team introduced a new type called Flow which looks similar to RxJava's Observable or Flowable. Have you ever wondered what's the difference between Flow and RxJava? How does Flow work under the hood? How is it connected to Coroutines? How do you write your own operator? What about Kotlin Coroutine Channels?

## Let's Build A Simple Interpreter. Part 14: Nested Scopes and a Source-to-Source Compiler.

DevFeed: [Let's Build A Simple Interpreter. Part 14: Nested Scopes and a Source-to-Source Compiler.](<https://devfeed.tech/articles/let-s-build-a-simple-interpreter-part-14-nested-scopes-and-a-source-to-source-compiler-33317.md>)

Original publisher: [Read original article](<https://ruslanspivak.com/lsbasi-part14/>)

Author: Ruslan Spivak

Published: 2017-05-08T09:45:00Z

Content type: tutorial

Language: en

Sources: [Ruslan Spivak](<https://devfeed.tech/sources/ruslan-spivak.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Parser](<https://devfeed.tech/topics/parser.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [source](<https://devfeed.tech/tags/source.md>)

### AI overview

A tutorial on nested scopes in interpreters. It explains scoped symbol tables, name resolution, procedure declarations with formal parameters, semantic checks, scope trees, and a source-to-source compiler.

### Source excerpt

Only dead fish go with the flow. As I promised in the last article, today we're finally going to do a deep dive into the topic of scopes. This is what we're going to learn today: We're going to learn about scopes, why they are useful, and ...

## Should you use scopes or class methods?

DevFeed: [Should you use scopes or class methods?](<https://devfeed.tech/articles/should-you-use-scopes-or-class-methods-26274.md>)

Original publisher: [Read original article](<https://www.justinweiss.com/articles/should-you-use-scopes-or-class-methods/>)

Author: Justin Weiss

Published: 2015-09-01T07:30:32Z

Content type: tutorial

Language: en

Sources: [Justin Weiss](<https://devfeed.tech/sources/justin-weiss.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>)

Tags: [activerecord](<https://devfeed.tech/tags/activerecord.md>), [code](<https://devfeed.tech/tags/code.md>), [rails](<https://devfeed.tech/tags/rails.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [scopes](<https://devfeed.tech/tags/scopes.md>)

### AI overview

The article compares Rails scopes with regular Ruby class methods. It explains that scopes are useful for simple, chainable object selection and express intent, while class methods are preferable for more complicated logic or when preloading scopes is needed.

### Source excerpt

This article is also available in Korean, thanks to Soonsang Hong! Scopes are a great way to grab the right objects out of your database: app/models/review.rbclass Review < ActiveRecord::Base scope :most_recent, -> (limit) { order("created_at desc").limit(limit) } end You'd use the scope like this: app/models/homepage_controller.rb@recent_reviews = Review.most_recent(5) Calling that scope, though, looks exactly like calling a class method on Review. And it's easy to build it as a class method, instead: app/models/review.rbdef self.most_recent(limit) order("created_at desc").limit(limit) end app/controllers/homepage_controller.rb@recent_reviews = Review.most_recent(5) So why would you use a scope when you could use regular Ruby class methods? Is it worth keeping these totally separate, but equivalent, concepts in your head? What if you run into weird bugs? Isn't all this extra stuff the kind of thing that makes Rails harder to learn? When would it make sense to use a scope instead of a class method? Why use scopes when we already have class methods? What if you wanted to grab all the reviews written after a specific date? But if no date was specified, you wanted all the reviews returned instead? As a scope, that looks like this: app/models/review.rbscope :created_since, ->(time) { where("reviews.created_at > ?", time) if time.present? } Easy enough, right? What about the class method? app/models/review.rbdef self.created_since(time) if time.present? where("reviews.created_at > ?", time) else all end end It takes a little bit of extra work. Scopes prefer to return scopes, so they're easy to chain together: Review.positive.created_since(5.days.ago) But to get the class method to work the same way, you have to specifically handle the case where time is nil. Otherwise, the caller would have to figure out whether it has a valid, chainable scope. Methods that always return the same kind of object are really useful. You don't have to worry as much about edge cases or errors

## Testing Named Scopes

DevFeed: [Testing Named Scopes](<https://devfeed.tech/articles/testing-named-scopes-15907.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/testing-named-scopes>)

Author: Square Engineering

Published: 2010-10-14T16:00:00Z

Content type: tutorial

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Rails](<https://devfeed.tech/topics/rails.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [RSpec](<https://devfeed.tech/topics/rspec.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [activerecord](<https://devfeed.tech/tags/activerecord.md>), [code](<https://devfeed.tech/tags/code.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [rails](<https://devfeed.tech/tags/rails.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [scopes](<https://devfeed.tech/tags/scopes.md>), [sql](<https://devfeed.tech/tags/sql.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This tutorial presents a helper for testing Rails ActiveRecord named scopes. It uses concise Ruby conditions with RSpec to verify that a scope returns the expected subset, including cases involving SQL, joins, or subqueries.

### Source excerpt

Test your named scopes with Rail code