Sno Station
Sno Station is your agents' workstation: open-source software that turns the AI agents you already run into one squad on your own machine. Two heads are better than one, and they get better with every
Canonical Nowo admin UI kit for Symfony: Twig macros, semantic nowo-ui-* CSS, pagination/tabs/modals/toasts/confirm, shell chrome, multi-framework class helpers (REQ-UI-001).
Translation pending
PluginsPHP · TypeScriptGitHub @nowo-techOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Canonical admin UI kit for Nowo Symfony bundles and host apps: Twig macros, semantic nowo-ui-* CSS, pagination/tabs/modals, and multi-framework class helpers (bootstrap5, tailwind, foundation, custom, …) per REQ-UI-001.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
⭐ Found this useful? Install from Packagist · Give it a star on GitHub so more developers can find it.
Canonical admin UI kit for Nowo Symfony bundles and host apps: Twig macros, semantic nowo-ui-* CSS, pagination/tabs/modals/toasts/confirm/loader, cards/filters, shell chrome (aside / nested nav / burger / avatar / user menu / footer / width toggle), theme/locale/kebab helpers, Thinking Orbs (local canvas, no CDN), and multi-framework class helpers (bootstrap5, tailwind, foundation, custom, …) per REQ-UI-001.
Compatible with Symfony 7.4+ and 8.x (PHP 8.2+; Symfony 8 requires PHP 8.4+).Read the full README ↗⭐ Found this useful? Install from Packagist · Give it a star on GitHub so more developers can find it.
Canonical admin UI kit for Nowo Symfony bundles and host apps: Twig macros, semantic nowo-ui-* CSS, pagination/tabs/modals/toasts/confirm/loader, cards/filters, shell chrome (aside / nested nav / burger / avatar / user menu / footer / width toggle), theme/locale/kebab helpers, Thinking Orbs (local canvas, no CDN), and multi-framework class helpers (bootstrap5, tailwind, foundation, custom, …) per REQ-UI-001.
Compatible with Symfony 7.4+ and 8.x (PHP 8.2+; Symfony 8 requires PHP 8.4+).
This bundle is FrankenPHP worker mode friendly (including when the kernel is not reset between requests). See docs/FRANKENPHP-WORKER-AUDIT.md.
| Is | Is not |
|---|---|
| Buttons, toolbars, tables, lists, pagination, tabs, flashes/toasts, empty states, modal/confirm, cards/filters, icons, aside (nested) / burger / avatar / user menu / footer, theme/locale/kebab/width, Thinking Orbs | DashboardMenu / BreadcrumbKit navigation chrome |
Shared nowo-ui-* look-and-feel | Domain CRUD pages / manage routes |
| Multi-framework class macros | Form widget themes (use FormKit) |
@NowoUiKitBundle/macros/ui.html.twig) with optional per-call framework overridecss/nowo-ui.css (asset package nowo_ui_kit), including dark [data-theme="dark"] tokens--nowo-ui-* theming tokens (1.13): every colour, radius, font, focus ring, overlay and shadow in kit output reads a token — no hard-coded Tailwind palette / Bootstrap colour utilities; a host theme is a short :root block (docs/THEMING.md); opt-in .nowo-ui-bs-tokens bridge for Bootstrap 5.3 stacks--nowo-ui-* token emitter with host aliases, nowo_ui_appearance_style() (CSP nonce), host storage behind AppearanceProviderInterface, optional AppearanceType form — see docs/THEMING.mdnowo_ui_route_link() route map, unified thin scrollbars (CSS + SCSS mixin), optional morphicons module — see docs/USAGE.mdlocale_tabs partial — one panel per locale for per-locale form fields, WAI-ARIA tabs (keyboard, RTL, error / required / default markers with screen-reader text), stacked fieldsets without JavaScript, browser validation opens the hidden panel, nowo-ui:tabs:change for editors, Live Component safe — see docs/USAGE.md@NowoUiKit/error/status.html.twig: illustration, retry / back links, 429 Retry-After, 5xx self-reload, skip link, CSP nonce), the Stimulus confirm_dialog wrapper, the signed-in app shell (open / close halves, cookie-rendered aside, morph burger) and a compact pagination with an auto-submitting per-page select — see composer require nowo-tech/ui-kit-bundle
php bin/console assets:install
With Flex, the recipe creates config/packages/nowo_ui_kit.yaml. See docs/INSTALLATION.md and docs/RECIPE.md.
# config/packages/nowo_ui_kit.yaml
nowo_ui_kit:
css_framework: bootstrap5 # or: tailwind | foundation | custom
icon_set: bootstrap-icons
row_actions_display: icon # or: text | icon_text
# panel_path_rewrites: # optional (1.9.0+): rewrite kit routes + 301 legacy URLs
# '/admin/blog': '/panel/blog'
# release_check: # optional (1.10.0+): footer version + GitHub release dialog
# enabled: true
# github_repo: 'acme/my-app'
# current_version: '%app.version%'
{% import '@NowoUiKitBundle/macros/ui.html.twig' as ui %}
<link rel="stylesheet" href="{{ asset('css/nowo-ui.css', 'nowo_ui_kit') }}">
<button type="button" class="{{ ui.btn('primary') }}">Save</button>
See docs/USAGE.md and docs/CONFIGURATION.md.
REQ-UI-003 — UiKit owns the page shell of every Nowo UI bundle: canonical layouts, one scaffold per view type
(@NowoUiKit/page/{list,show,form,settings,dashboard,confirm,wizard,auth}.html.twig), immutable view models
(Nowo\UiKitBundle\View\*) and one global theme (nowo_ui_kit.theme: slot classes, attributes, partial overrides,
--nowo-ui-* tokens, per-bundle exceptions). A host themes each view type once; bundles fill data blocks only.
Screenshots of every scaffold (host theme and default theme): docs/PAGE_CONTRACT.md.
css_framework, partials, tokens, per-bundle exceptionsdocs/TEMPLATES.md)Nowo\UiKitBundle\Test\PageContractTestCase — shared contract test for UI bundles (needs phpunit/phpunit in the bundle's require-dev)FrankenPHP demos (Caddy + PHP). Runtime mode: FRANKENPHP_MODE (worker default; classic for per-request PHP). See docs/DEMO-FRANKENPHP.md.
| Demo | Port | Notes |
|---|---|---|
| demo/symfony8 | 8092 | Bootstrap 5 kitchen sink; page contract host-theme demo at /page-contract |
| demo/symfony8-tailwind | 8093 | Tailwind kitchen sink |
make -C demo up-symfony8
# open http://localhost:8092/
Developer-facing docs are English only (Contributing — Language policy).
--nowo-ui-* tokens)| Suite | Coverage |
|---|---|
| PHP (PHPUnit) | 100% lines (fail under 99% in CI) |
| TypeScript (Vitest) | ≥90% lines (Vitest thresholds) |
| Python | N/A |
composer install
make test
make test-coverage
make test-ts
pnpm install && pnpm run build
See docs/COVERAGE.md.
MIT — see LICENSE.
See docs/CONTRIBUTING.md. Install hooks with make setup-hooks (REQ-GIT-001).
_theme_boot.html.twig inlines a blocking script (CSP nonce) that applies theme / density / motion / font scale / contrast from <html> attributes before first paint, sharing storage keys with the theme toggledata-nowo-ui-sidebar-rail)?new=1): _open_modal_on_load.html.twig JSON island + nowo-ui-open-modal.js (CSP-safe, no inline JS).nowo-ui-filter-bar (38px / compact 34px controls, actions on one row) + _filter_actions.html.twig (icon / icon-only actions since 1.15), table.nowo-ui-data-table_page_transition.html.twig (View Transitions, no JS)src/Resources/assets/stimulus-peers/ (see docs/STIMULUS.md) — confirm-submit (form submit or single button click, blocked value), confirm-dialog, tabs, toast-stack, clipboard-copy, page-loader, release-status, auto-refresh, temporary-reveal, collapse-panel, datatable (optional DataTables dependency), responsive-table, filters-collapse, disclosure-icon (1.17), listing-customizer, product-tour (2.13, optional driver.js), multi-select (2.14: Tom Select chips for ChoiceType multiple filters via the nowo_ui_multi_select option, optional tom-select, skin css/nowo-ui-multi-select.css), date-range (2.15: one labelled from / to filter field DateRangeType with a range calendar, optional cally; two native date inputs without JavaScript)release_check config, _release_version.html.twig, nowo-ui-release.js) — see docs/CONFIGURATION.md_thinking_orb + nowo-ui-orb.js; page loader visual: orb|spinner (THIRD_PARTY.md)css_framework, icon_set, row_actions_display, appearance, route_links; i18n domain NowoUiKitBundle (en, es, it, fr, pt, de, nl)templates/bundles/NowoUiKitBundle/