{"id":42268537,"url":"https://github.com/udibo/juniper","last_synced_at":"2026-01-30T05:18:06.813Z","repository":{"id":292760579,"uuid":"981845861","full_name":"udibo/juniper","owner":"udibo","description":"Juniper is a web framework for building React applications with Deno. It combines Hono for server-side routing with React Router for client-side navigation, providing a seamless full-stack development experience.","archived":false,"fork":false,"pushed_at":"2026-01-27T05:06:23.000Z","size":835,"stargazers_count":6,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-27T18:33:59.104Z","etag":null,"topics":["deno","hono","react","reactrouter","ssr","typescript"],"latest_commit_sha":null,"homepage":"https://juniper.udibo.deno.net/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/udibo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-05-12T01:42:52.000Z","updated_at":"2026-01-27T05:06:24.000Z","dependencies_parsed_at":"2025-05-12T02:40:05.076Z","dependency_job_id":"7283ab14-c519-4f88-ba04-7093dc37d451","html_url":"https://github.com/udibo/juniper","commit_stats":null,"previous_names":["udibo/juniper"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/udibo/juniper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udibo%2Fjuniper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udibo%2Fjuniper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udibo%2Fjuniper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udibo%2Fjuniper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/udibo","download_url":"https://codeload.github.com/udibo/juniper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/udibo%2Fjuniper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28905134,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T04:02:34.702Z","status":"ssl_error","status_checked_at":"2026-01-30T04:02:33.562Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deno","hono","react","reactrouter","ssr","typescript"],"created_at":"2026-01-27T07:04:37.026Z","updated_at":"2026-01-30T05:18:06.772Z","avatar_url":"https://github.com/udibo.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Juniper\n\n[![JSR](https://jsr.io/badges/@udibo/juniper)](https://jsr.io/@udibo/juniper)\n[![CI/CD](https://github.com/udibo/juniper/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/udibo/juniper/actions/workflows/ci-cd.yml)\n[![codecov](https://codecov.io/gh/udibo/juniper/graph/badge.svg?token=ZXCYCMUQ34)](https://codecov.io/gh/udibo/juniper)\n[![license](https://img.shields.io/github/license/udibo/juniper)](https://github.com/udibo/juniper/blob/main/LICENSE)\n\n\u003cimg align=\"left\" src=\"example/public/images/logo-81x100.png\" alt=\"Juniper Logo\" width=\"81\" height=\"100\" style=\"margin: 0 20px 10px 0;\"\u003e\n\nJuniper is a web framework for building React applications with Deno. It\ncombines [Hono](https://hono.dev/) for server-side routing with\n[React Router](https://reactrouter.com/) for client-side navigation, providing a\nseamless full-stack development experience.\n\n\u003cbr clear=\"left\"\u003e\n\n## Features\n\n- **File-Based Routing** - Create routes by adding files to your `routes`\n  directory. The file structure directly maps to your URL structure.\n- **Server-Side Rendering** - React components render on the server for fast\n  initial page loads and SEO benefits.\n- **Data Loading and Actions** - Fetch data with loaders and handle form\n  submissions with actions, on either server or client.\n- **Hot Reload** - See changes instantly during development.\n- **TypeScript First** - Full TypeScript support with type-safe route\n  parameters, loader data, and action data.\n- **React 19 Support** - Built for React 19, including native document metadata\n  support.\n- **Hono Middleware** - Use Hono's extensive middleware ecosystem for\n  authentication, logging, CORS, and more.\n- **Error Boundaries** - Graceful error handling with route-level and root error\n  boundaries.\n- **Code Splitting** - Automatic code splitting for routes, loading only the\n  code needed for each page.\n\n## Quick Start\n\nUse `degit` to clone a template and get started:\n\n```bash\n# Minimal template\ndeno run -A npm:degit udibo/juniper/templates/minimal my-app\ncd my-app\ndeno install\ndeno task dev\n```\n\nOr with TailwindCSS:\n\n```bash\ndeno run -A npm:degit udibo/juniper/templates/tailwindcss my-app\ncd my-app\ndeno install\ndeno task dev\n```\n\nOpen your browser to `http://localhost:8000` to see your application.\n\n## Example\n\n```tsx\n// routes/index.tsx\nexport default function Home() {\n  return (\n    \u003c\u003e\n      \u003ctitle\u003eHome\u003c/title\u003e\n      \u003ch1\u003eWelcome to Juniper\u003c/h1\u003e\n    \u003c/\u003e\n  );\n}\n```\n\n```typescript\n// routes/blog/[id].ts\nimport { HttpError } from \"@udibo/juniper\";\nimport type { RouteLoaderArgs } from \"@udibo/juniper\";\n\nexport async function loader({ params }: RouteLoaderArgs\u003c{ id: string }\u003e) {\n  const post = await getPost(params.id);\n  if (!post) {\n    throw new HttpError(404, \"Post not found\");\n  }\n  return { post };\n}\n```\n\n```tsx\n// routes/blog/[id]/index.tsx\nimport type { RouteProps } from \"@udibo/juniper\";\n\nexport default function BlogPost({ loaderData }: RouteProps) {\n  return (\n    \u003c\u003e\n      \u003ctitle\u003e{loaderData.post.title}\u003c/title\u003e\n      \u003carticle\u003e\n        \u003ch1\u003e{loaderData.post.title}\u003c/h1\u003e\n        \u003cp\u003e{loaderData.post.content}\u003c/p\u003e\n      \u003c/article\u003e\n    \u003c/\u003e\n  );\n}\n```\n\n## Documentation\n\nComprehensive guides for using the framework:\n\n### Getting Started\n\n- [Introduction](docs/introduction.md) - Overview and key concepts\n- [Getting Started](docs/getting-started.md) - Set up your first project\n- [Configuration](docs/configuration.md) - Project and build configuration\n- [Development Tools](docs/development-tools.md) - Hot reload and debugging\n\n### Core Concepts\n\n- [Routing](docs/routing.md) - File-based routing and data loading\n- [Middleware](docs/middleware.md) - Server and client middleware\n- [Forms](docs/forms.md) - Form handling with client and server actions\n- [State Management](docs/state-management.md) - Sharing data across your app\n- [Error Handling](docs/error-handling.md) - Error boundaries and HttpError\n\n### Styling \u0026 Assets\n\n- [Styling](docs/styling.md) - CSS and TailwindCSS integration\n- [Static Files](docs/static-files.md) - Serving static assets\n- [Metadata](docs/metadata.md) - Page titles and meta tags\n\n### Data \u0026 Backend\n\n- [Database](docs/database.md) - Deno KV and other databases\n\n### Testing \u0026 Deployment\n\n- [Testing](docs/testing.md) - Testing utilities and patterns\n- [Logging](docs/logging.md) - Logging and OpenTelemetry\n- [CI/CD](docs/ci-cd.md) - GitHub Actions workflows\n- [Deployment](docs/deployment.md) - Deploy to Deno Deploy, Docker, and more\n\n### Tutorials\n\n- [Tutorials](docs/tutorials/README.md) - Step-by-step guides for building\n  applications\n\n### API Reference\n\nThe API documentation is available on JSR:\n[@udibo/juniper](https://jsr.io/@udibo/juniper/doc)\n\n## Contributing\n\nContributions are welcome! Please read the [contributing guide](CONTRIBUTING.md)\nbefore submitting a pull request.\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fudibo%2Fjuniper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fudibo%2Fjuniper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fudibo%2Fjuniper/lists"}