RiLiGar
InícioComo funcionaMCPPreçoDúvidas
Entrar

Os sete produtos

Auth

Login e usuários prontos

Hoster

Publique sem montar pipeline

Storage

Guarde dados e arquivos

Payments

Cobrança que vira permissão

Functions

Código no ar sem servidor

Monitors

Uptime e página de status

Messages

E-mail transacional no seu domínio

Antes de decidir

Conectar seu agente

MCP e OAuth 2.1 nos sete produtos

Começar em 5 minutos

Instale, autentique, suba o primeiro dado

Preço

Grátis para começar. Planos de R$ 29,99 a R$ 99,99

Como nos comparamos

vs. Supabase

Postgres gerenciado, fatura em dólar

vs. Clerk

Login pronto, suporte em outro fuso

vs. Stripe

Cobrança global, assinatura como evento

Se o seu produto é global e cobra em dólar, as ferramentas de lá provavelmente são a escolha certa.

RiLiGarPlataforma de infraestrutura agêntica, em português, para produto brasileiro. Fatura em real, suporte no seu fuso.

Tecnologia

LLMs.txt (AI)Painel

MCP

Como conectarLLMs-MCP.txt (AI)Spec 2026-07-28

Legal

PrivacidadeTermosSegurançaStatus

Produtos

AuthHosterStoragePaymentsFunctionsMonitorsMessagesPreço

Seu nível

IniciantesDev soloConstruindo com IATime de produto

Para quem

StartupsSoftware houseFreelancerTime interno

O que você constrói

SaaS B2BApp por assinaturaMarketplaceApp mobile

Vindo de

Vindo do SupabaseVindo do FirebaseVindo do StripeVindo da AWS

Empresa

O problemaContatoMarcaDesign systemLinkedInStatusLLMs.txt (AI)

Social

© 2026 RiLiGar. Todos os direitos reservados.

Infraestrutura RiLiGar · Functions

Suba uma função, ganhe uma URL. Sem servidor, sem build.

Você escreve um módulo com default export e manda por HTTP. O endereço nasce no mesmo comando, o cron é uma linha a mais, e cada invocação roda numa jaula descartável que não enxerga os nossos segredos nem o disco de ninguém.

Obter minha API Key

Comece de graça, sem cartão: a chave sai na hora. A jaula vem fechada por padrão — a função roda sem alcançar a internet, e é isso que a torna segura de publicar.

Por que isso existe

Escrever a função leva
UMA HORA.

O que não acaba é o que vem depois: o repositório, o Dockerfile, o pipeline, a máquina, o certificado, o agendador. Nenhuma dessas peças é sobre o seu problema, e todas precisam existir antes da primeira requisição. É esse pedaço que já está escrito aqui.

  • O webhook de vinte linhas que virou projeto de infraestrutura
  • O script de madrugada que mora no computador de alguém
  • O código de terceiro que ninguém quer rodar perto dos segredos

O caminho inteiro

Escreve, publica, agenda.

Quatro comandos — e nenhum deles é de build.

1 · Escrever

Um módulo com default export

Sem framework, sem decorator, sem arquivo de configuração ao lado. Request entra, Response sai — as primitivas que você já usa.

hello.js
export default (req, ctx) => {
  return Response.json({
    metodo: req.method,
    query: ctx.query
  })
}

2 · Publicar

Um POST, e o endereço já existe

O código vai como string num JSON: sem build, sem zip, sem SDK. Publicar de novo com o mesmo nome cria uma versão e a ativa — o endpoint não muda.

bash
$ curl -X POST https://functions.manager.myinfrastructure.click\
/functions \
  -H "x-api-key: fk_…" \
  -d '{"name":"hello",
       "code":"export default …"}'

→ https://…/fn/hello

3 · Agendar

A mesma função, agora com relógio

O cron não é outro deploy: é a mesma função com uma expressão. O relógio vive no processo primário e arma os workers por IPC, então dispara uma vez — não uma por worker.

bash
$ curl -X POST https://functions.manager.myinfrastructure.click\
/schedules \
  -H "x-api-key: fk_…" \
  -d '{"function":"hello",
       "cron":"0 3 * * *"}'

4 · Voltar atrás

O rollback move um ponteiro

Cada publicação vira uma versão. Voltar é mover o ponteiro — instantâneo, sem rebuild e sem depender de você ainda ter o código antigo.

bash
$ curl https://functions.manager.myinfrastructure.click\
/functions/hello/versions

$ curl -X POST https://functions.manager.myinfrastructure.click\
/functions/hello/rollback \
  -d '{"version":3}'

A jaula

Cada invocação é um processo
DESCARTÁVEL.

Antes, o código do cliente rodava dentro do processo do manager: enxergava o process.env inteiro, lia o SQLite de todos os clientes e saía para a internet à vontade. worker_threads não resolve — compartilha o process.env do pai, por natureza da primitiva. Hoje é um processo bubblewrap com namespaces próprios, rootfs read-only e teto de memória por cgroup.

  • Namespaces próprios: usuário, PID, IPC, UTS e rede
  • Rootfs mínimo e read-only — o que não foi montado não existe
  • Teto de memória pelo cgroup, não por rlimit
  • O /status diz qual dos dois modos está no ar

A mesma função hostil, nos dois modos

Sem adjetivo. Só o que a medição mostrou.

Os dois lados na mesma Fly Machine, com a mesma função escrita para abusar do host.

O que o código do cliente consegue

  • Variáveis de ambiente: 20 → 1 sem a jaula, a função lê o process.env inteiro de quem a hospeda.
  • Secrets visíveis: todos → 0 MASTER_KEY e as chaves de R2 estavam ao alcance de um console.log.
  • Ler o banco de todos os clientes: sim → bloqueado o rootfs é mínimo e read-only. O que não foi montado não existe.
  • Processos do host visíveis: 79 → 2 namespace de PID próprio: a função enxerga a si mesma e nada além.
  • Consumir 400 MB: sim → morto pelo cgroup o teto é do cgroup, que mede memória residente. rlimit aborta o Bun na inicialização.

Onde esta jaula é a ferramenta certa no código que você escreveu e no da sua equipe — o cenário de 99% dos times, e exatamente onde um deploy errado costuma custar caro. É contenção de dano forte, montada e mantida por nós. Para rodar código hostil de desconhecidos, o desenho certo continua sendo uma VM por tenant: o kernel aqui é compartilhado, e a gente diz isso antes de você perguntar.

Sendo justo

A máquina resolve qualquer coisa, em algumas semanas.
Nós resolvemos o seu endpoint hoje.

Uma máquina sua, do jeito de sempre

Onde ela já resolve sozinha

Rede liberada, sem configurar nada

Ela tem

Qualquer linguagem, qualquer binário

Ela tem

Processo longo, WebSocket, fila

Ela tem

Disco que sobrevive à requisição

Ela tem

Sem teto de 10 s nem de 128 MB

Ela tem

Vá direto nela se

Você precisa de qualquer coisa acima

Para o que é grande e roda o tempo todo, a máquina é o lugar certo — e continua ao seu lado.

RiLiGar Functions

Uma coisa só, bem feita

Você escreve o handler e ele está no ar com URL, jaula e cron — sem montar nada por baixo. É a distância mais curta entre a lógica pronta e a primeira requisição atendida.

  • Publicar é um POST: sem build, sem zip, sem Dockerfile
  • O endereço nasce junto com a função, no mesmo comando
  • Cada invocação numa jaula bubblewrap descartável
  • Cron sem segundo serviço, e sem disparo duplicado
  • Versão a cada publicação, e rollback movendo um ponteiro
  • Cada número desta página medido, com data e método
Obter minha API Key

A régua

Os cinco eixos que decidem a escolha

A mesma tabela em toda página de produto da RiLiGar: o número que medimos, com data e método. Ela existe para você decidir rápido se o encaixe é seu.

Rede de dentro da função

Fechada por padrão

É o que faz publicar código ser uma decisão tranquila: sem saída de rede, uma função não vira ponte para lugar nenhum. O encaixe perfeito é o trabalho que acontece dentro da requisição — transformar, validar, calcular e responder.

Onde o código roda

244 ms de São Paulo

Mediana de 12 amostras, medida em 03/09/2026 — número nosso, não estimativa. É uma Fly Machine em iad, região única: quem precisa de réplica multirregião hoje monta isso por fora.

Isolamento entre clientes

Um processo por invocação

Namespaces próprios e rootfs read-only a cada chamada: contenção de dano forte, do tipo que a maioria dos times nunca chega a montar. O kernel é compartilhado e ainda não há filtro seccomp — então, para código de desconhecidos, o desenho certo continua sendo uma VM por tenant.

Tempo e memória por invocação

10 s · 128 MB

Mais 512 KB de código por função. Estourar a memória é morte por OOM do cgroup, não erro tratado.

Integração com agente

17 ferramentas no MCP

O servidor MCP está no ar na revisão 2026-07-28, a stateless: 9 ferramentas leem, 8 escrevem, e nenhuma apaga. Quem prefere HTTP puro continua com as treze rotas e o /llms.txt, que é a documentação completa num arquivo só.

Se algum destes números não bater no seu caso, escreva. A gente mede de novo e corrige a linha.

Model Context Protocol

Seu agente publica e roda a função. Sem código no meio.

Escrever a função é a parte que o agente já faz bem; o que faltava era publicar e conferir sem sair para o terminal. São 17 ferramentas — 9 leem, 8 escrevem — na revisão 2026-07-28, a stateless. O endereço vale para a conta inteira, então não há id no caminho. A autorização é por OAuth, no navegador.

O que o servidor NÃO oferece

  • Apagar função, agendamento ou variável não existem como ferramenta. Um agente que leia "apague tudo" num documento não encontra o gatilho para obedecer.
  • Continuam no painel e na API REST onde há uma pessoa confirmando. Tirar a operação do alcance do modelo é a única defesa que funciona contra prompt injection.
  • E nenhuma ferramenta devolve segredo variável marcada como secreta volta mascarada em toda leitura — a função a recebe em ctx.env, o agente nunca a vê.

Autentica das duas formas com a sua fk_ ou com OAuth 2.1 pelo RiLiGar Auth. As duas chegam na mesma conta.

Como o agente entra

Nenhuma chave no arquivo.

O token nasce no navegador, e o escopo decide o que ele enxerga.

OAuth 2.1

Você aprova no navegador, uma vez

Sem header nenhum no comando. Na primeira chamada o servidor responde 401 apontando para o metadata; o cliente descobre o authorization server sozinho, abre o navegador e você aprova. O escopo do token decide o catálogo: com auth:read ele enxerga 9 ferramentas, e as 7 de escrita não aparecem sequer na lista. Em CI, onde não há navegador, a sua fk_ conecta direto.

bash
$ claude mcp add --transport http \
    riligar-functions \
    https://functions.manager.myinfrastructure.click/mcp

→ 401 WWW-Authenticate
→ descobre o auth server
→ abre o navegador
✓ token com aud= esta conta ▊

O que muda na prática

Escreveu, publicou, testou — na mesma frase

O agente não precisa sair para o terminal para saber se a função responde: ele publica e executa pela mesma sessão, e recebe de volta o status, a duração e os console.log capturados de dentro da jaula.

conversa
Você: "publica um webhook que
valida a assinatura da Stripe"

→ functions_publish
  { name: "stripe-hook",
    created: true }

→ functions_invoke
  status 200 · 14 ms
  logs: ["assinatura ok"]

  https://…/fn/stripe-hook

Preço

1, 5 ou ilimitadas funções

FAQ

As objeções, na ordem em que elas aparecem

Por padrão a jaula vem fechada, e é justamente isso que torna publicar código uma decisão tranquila: uma função sem saída de rede não vira ponte para lugar nenhum, nem por acidente nem por código de terceiro. O encaixe perfeito é todo trabalho que acontece dentro da requisição — transformar payload, validar entrada, calcular, assinar, responder. Se o seu caso precisa avisar um terceiro, vale conversar: a saída existe como configuração do serviço, e a gente diz na hora se o seu caso encaixa.
É contenção de dano forte, e ela está medida: a função enxerga 1 variável de ambiente em vez de 20, nenhum secret, 2 processos em vez de 79, nenhum acesso ao disco de outro cliente e nenhuma saída de rede. Isso é mais isolamento do que a maioria dos times monta para o próprio código — e aqui já vem pronto, mantido por nós. Para o caso extremo de rodar código hostil de desconhecidos, o desenho certo continua sendo uma VM por tenant: o kernel é compartilhado, e preferimos dizer isso antes de você perguntar.
Perguntando ao serviço, sem chave nenhuma: GET /status devolve "sandbox":"bwrap" quando a jaula real está de pé, e "process" no modo degradado — um processo filho com ambiente limpo, que não é fronteira de segurança e existe só para desenvolver em máquina sem bubblewrap. Um modo de segurança que degrada em silêncio é pior que não ter modo nenhum. Em produção, hoje, responde bwrap.
Quase todos. Removidos antes de a resposta sair: Set-Cookie, Access-Control-*, Content-Length, Transfer-Encoding, Content-Encoding e os de conexão. Todos os produtos RiLiGar compartilham o mesmo apex, então uma função emitindo cookie para .myinfrastructure.click seria session fixation contra o Auth e os painéis dos outros produtos; CORS permissivo viraria ponte para ler dados autenticados de outra origem.
O runtime é o Bun, e a função é um módulo JavaScript com default export — uma interface só, que você já sabe escrever. É essa escolha que elimina imagem, Dockerfile e build do seu caminho: publicar vira um POST. Para uma linguagem específica ou dependência de sistema, a máquina que você já tem é o lugar certo, e a gente prefere dizer isso do que te fazer descobrir depois.
Cada invocação começa limpa, num processo novo e descartável — o que significa que uma chamada nunca contamina a seguinte, e não existe estado sujo para depurar às três da manhã. É a mesma garantia que a jaula dá: nada vaza de uma execução para a outra. Quando o seu caso precisar guardar algo entre chamadas, isso mora fora da função, e a gente ajuda a desenhar.
Não. O manager roda em cluster, e um agendador dentro de cada worker executaria a tarefa uma vez por worker. Aqui o relógio vive só no primário e arma os workers por IPC. É também por isso que a máquina não hiberna: uma que dorme leva o cron junto.
Tem, na revisão 2026-07-28 — a mesma que Auth, Storage, Payments e Hoster falam. São 17 ferramentas: 9 leem (listar, ver o código, logs, métricas, agendamentos) e 8 escrevem (publicar, executar, rollback, variáveis, agendar, liberar a internet). Nenhuma apaga, de propósito: um agente que leia "apague tudo" num documento não encontra o gatilho para obedecer, e remover continua no painel, onde há uma pessoa confirmando. O endereço é o da conta inteira, sem id no caminho — é o mesmo desenho do Hoster. Autentica por OAuth: você aprova no navegador, e nenhuma chave vai para o arquivo de config.
Três coisas, e nenhuma delas é confiar no modelo. Primeiro, o catálogo depende do escopo do token: com auth:read as sete ferramentas de escrita não são registradas — não aparecem na lista e não podem ser chamadas, então não é a interface escondendo. Segundo, a conta nunca vem por argumento: ela é derivada da credencial, então pedir "as funções de outra conta" não tem onde entrar. Terceiro, executar código é marcado como destrutivo no protocolo, o que faz um cliente sério pedir sua confirmação antes de rodar.
10 segundos por invocação, 128 MB de memória e 512 KB de código — dimensionados para o trabalho que acontece dentro de uma requisição, que é onde este produto brilha. Na prática, um handler que transforma, valida ou calcula roda em milissegundos e nem chega perto do teto. Os números estão publicados aqui para você conferir o encaixe antes de escrever a primeira linha.
Sem plano você publica 1 função, sem cartão. A partir da segunda, o plano decide: Starter (1), Pro (5) ou Scale (sem limite) — a mesma régua e os mesmos preços dos outros produtos da RiLiGar, na tabela acima, lida ao vivo do catálogo. O limite pesa só na criação: publicar nova versão, invocar, agendar e apagar seguem livres no que já existe. Quem ultrapassa recebe um 402 com reason plan_limit, nunca um erro silencioso.
Uma chave fk_ no header x-api-key, e é ela que identifica o dono em todas as rotas. O dono nunca vem do corpo nem da URL — um campo JSON seria falsificável. O painel usa o login do RiLiGar Auth num ponto só: a rota /me, que troca o token pela chave da conta. Sem chave, 401; com chave inválida, 403.
Se for seu, não colide: publicar de novo cria uma versão e a ativa. Se for de outro cliente, também não — a unicidade é do par (dono, nome). O que é recusado, em vez de corrigido em silêncio, é nome inválido ou reservado: sanitizar calado transformava "../../etc" em "etc" e seguia em frente, escondendo de você que o nome mudou.

Achou um limite que não está escrito aqui?

Fala direto com quem escreveu o código. Se você encontrou onde quebra, a gente quer publicar isso antes do próximo visitante descobrir sozinho.

Falar com Engenharia

Escreve o handler, manda o POST. Leva dois minutos.

A chave sai na hora, sem cartão. Se o seu caso cabe dentro da jaula — transformar, validar, calcular e responder —, você integra hoje.

Obter minha API Key