Presentation Mode: filtered views of the graph
I propose a feature I will refer to as âViewsâ. This will solve specific problems that have been discussed in topics on this forum but in a flexible way. See Separate graphs for work and home? - Questions & Help - Logseq for background.
- Typical user starts off with the typical graph structure and everything at root level as normal:
A new folder is introduced (this is to demonstrate the concept not the final UI)
The user can create a view of their graph by defining a filter query and giving it a name. It then shows up under âviewsââŠ
When you click on this query you donât just see a page with the results of the query, rather it acts more like a node a parent node in the graph and projects all the matching items of the query as nodes in the subgraph i.e like a top level folder. So you can expand it and so your total structure now looks like:
However in this expanded view, the only nodes present are the nodes that satisfy the query for that âviewââŠ
This could be made even more powerful in future, with things like:-
- The ability to publish, export, views.
This would solve the work / personal separation because, or even just situations in which you want to prepare for what can be seen at some presentation, talk or demo:-
- Those that want physical seperation can still use seperate graphs and ignore this feature.
- Alternatively those that want top level folder seperation can have seperate âparentâ pages in the hierarcht for work vs personal, and can then define a seperate âViewâ for âWorkâ that just queries everything from the âWorkâ folder. This is less fragile than relying on metadata and only needs to be set up once. When in a work presentation, the user is able to switch to the âWorkâ view, and this constrains the graph that logseq is displaying in the app and that the current user can work with, until they switch out of this view, to the default view or another. So liss danger of work content being visible during that presentation.
- And for those that are comfortable purely with metadata and queries to distingush work / personal content, can forgo structuring there pages into top level /personal / work folders and can just rely on the metadata in their queries, and still leverage views to switch contexts if desired.
Just because we already have queries , it doesnât mean that they are the right tool for creating the desired secure views. Filtering , and more generally starting with the whole and then separating it down to parts, presents all kinds of challenges and risks (never-ending global security mess testifies to that). It is not easy to:
- make a composite query work
- guarantee that a working query works exactly as desired
- make it performant for big graphs
- make a small change without breaking the above
- explain that to and educate non-technical users
- make a major update to the application without breaking the above
Should instead go for composition , which is the inverse:
- Start with graphs as separate as possible (even physically separated).
- This is the one-time hard part.
- pick the desired graphs
- optionally arrange them to determine the behavior in case of conflicts
When that is ready, there is minimal distance to also combine graphs from different users .
Iâm not sure synchronizing and merging different graphs into one would necessarily be any simpler than queries. Besides, such an approach would require to preemptively structure the different graphs around the views that you want to have, which is something that is likely to change over time and that a user might not know in advance. I donât think itâs always easy to know which graph a piece of information belongs to, making ideas like quick capture harder to implement in this scenario.
There can be some cases where the queries used might be overly complicated and underperforming, but I feel like it shouldnât really be that way for easy ones, such as filtering based on a tag or property, which I guess would be the common case.
I think having the common case be well performing and the hard case be slow but possible wouldnât be bad. But in case thatâs too hard, maybe some simpler filtering mechanisms could be put in place, ex. just specifying tags or properties. Although queries âfeelâ like they should be the right tool for this.
@mentaloid I think both approaches are somewhat complimentary. However with the composite approach, the user has to seperate there content into seperate graphs from the outset, with the eventual use case in mind which cannot always be anticipated in advance. Itâs also the case that when they want that contextual view to give some presentation, or talk at some hobby group, it may be that the boundaries of the view, and the boundaries of whats in each graph donât perfectly align so they have to physically create graphs to model their desired View⊠sounds nasty. i.e I keep alll my hobby information in a seperate graph and luckily for me I end up talking at a hobby group one day, so I can view just that graph. But then I take up another hobby and some of the content in the graph is relevent for one hobby session, but not another. Do I have to split it our again? What about when there is overlap - i.e at some point I want the freedom to flexibly model what I can see / access, not in terms of an entire graph r composite of graphs, but rather querying the graph / or accross the graphs, so whether thats a single graph (as this feature proposes) or mulltiple (youâve basically tacked on a complimentary feature but one that doesnât necessarily preclude the solution for the problem I am suggesting). I have removed the mention of âsharingâ from the proposition, because I think that is muddying the waters.
Short version
Are we trying to solve the same problem ? Remember that this discussion begun with the problem of a high-level work-home or public-private separation. I have a few questions:
- impractical?
- difficult to implement?
- Donât all graphs already group some pages together?
- a specialized virtual container of pages included explicitly with no surprises ever
- the empty set
- the set of every page
- e.g. > instead of <
Long version
I should have guessed that my suggestion would be read from the perspective of what we have today. Let me clarify :
- Problematic performance is merely an indicator of a problematic solution.
- That would be a big leap backwards .
- That would defeat the concept of graph and its benefits.
- They are like libraries of cohesive books (one per Logseq page), within a specific domain of knowledge .
- This can provide enormous leverage .
- That would be very rigid and inflexible .
- Users donât need to know any particular usage in advance .
- Though they could support meta-pages, if needed.
- With queries .
- With graphs .
- Different graphs donât need any syncing, only same graphs need.
- We have enough troubles with syncing as it is.
- Each page should belong to a specific graph.
- A page may always be put at a wrong graph and queries cannot prevent mistakes either. The goal is to make the most costly mistakes (those of security ) less easy to commit.
- That would add excessive overhead on every change (among other issues).
- When working with combined graphs, all the functionality of a single graph is still there.
- This is mostly about preventing navigation outside the desired combination.
- They run on every graph in the combination, then the merging applies to the results .
- A graph can be served both by files and by databases. Likewise, a virtual graph can be served both by one and by multiple underlying graphs.
Being inverse to each-other, the two suggestions may seem complimentary , but for me they are not.
- When all you have is queries , everything looks like a problem solvable by a query.
- If a simple problem is not solvable by a simple query, then queries are an inferior solution.
- Separating things should be as simple as putting them in separate containers .
- Mixing everything into a big container and using queries to form virtual containers, may work, but is the wrong tool.
- Working with whole containers is both simpler and faster .
- This is necessary if our house is a mess .
- We still have the feeling that we missed something.
- This works if our house is in order .
- We can easily verify the process.
- The same reason that prevented the clean separation of graphs, will prevent the creation of a straightforward query.
- Which one is more predictable ?
- The extra pages of which one can you afford to ignore ?
- It may be too late when you find out.
- You hardly know if your new fix will cover a future case .
- Simply avoid putting it in a âdangerousâ graph.
- Keep adding/removing tags until you are confident enough.
- You cannot forget putting a page somewhere. But you can forget tagging it against some view.
- When that happens, you would wish that you could work with an already smaller graph, instead of facing every single page that you have.
- That could result to the worst of both.
- The fact that one suggestion contributes to sharing graphs among users, doesnât change its primary target (that of effective content separation ), it is merely a clue that it has the right direction.
Queries are overpowered and yet overrated.
- It is not what queries are made for to begin with.
- But can you afford the remaining ones?
- Even query experts (which are rare) cannot cover every case, unless they have good knowledge of the underlying graph.
- For queries to be either simple or performant , the hard work has already taken place during tagging etc.
- this post is already lengthy
- the point is that the solution doesnât have to come from within the problemâs limited frame
- Things can get very ugly, especially in bigger graphs.
- donât need content separation
- could simply dedicate a specific graph to dumping
- Better doesnât mean more powerful (thus more dangerous), it means more fitting .
What Iâm thinking is, check what a block is tagged with, and if the tag matches one of those that should be hidden hide it. You seem to be thinking that this would be harder/more impractical or insecure than putting together a bunch of graphs in memory, and Iâm not sure I really understand why. I think we might not be understanding each other here. I feel like loading private data together with public always puts you at risk of showing the wrong thing at the wrong time, depending on the implementation.
I can agree that the full power of simple queries might be too much on this front. Maybe it would be a good idea to limit this to tagging/properties excluding more general queries. I can also agree on the fact that it could be debatable on wheter this should be done at the block or at the page level, also depending on what is more practical/achievable from a development perspective.
I do although think that it would be way more impractical, on the user perspective, to have a bunch of graphs, each one with its own journal, and to have to switch graph for every topic switch the user goes through (which is kind of what Iâve been doing in the past). I understand you want to be able to work with multiple graphs at the UX level, but then I feel like youâd have the same problems youâre thinking of when you talk about a metadata-based solution. In short, when you create a page/journal block in the multigraph, youâd have to pick a graph it belongs to, and youâd need to keep mental track of what graph contains what to avoid showing something you wouldnât want to be seen. The difference is, if weâre talking about different containers, things can no longer be intersectional: for example, something cannot be both in the âprivateâ graph and in the âpsychologyâ graph, Iâd have to pick one and I feel for some things there just wouldnât be right choices, just wrong compromises.
Would it? I feel like it would be zero work for me. I already tag my pages with the topics they belong to. To have something that is more generally private, I could just type #private at the end.
Besides, a metadata-based approach would work on existing graphs which are often already tagged, while what youâre describing would require splitting a lot knowledge bases, something I already had to do in the past to have published graphs corresponding only to certain topics. I feel like it is kind of absurd that I have to do this by hand or by grepping files, when the metadata about what page belongs to what topic is already there for me.
And, of course, this wouldnât be the only time such a restructuring would be required. Because it is, you know, a restructuring, so you can say this:
But of course putting certain things in separated graphs would impose a very rigid structure on the information you put in, which is the choice of singular graph it should belong to (even though most things almost always cross topic boundaries, as youâd want to be represented in a tool for interconnected thought).
And yet, what youâre proposing would bind views and structure, inextricably tying the information I put in (ex. my psychological state) with its usage (whether I want to keep it private or not). On the other hand, metadata allows me to just tag something with both #psychology and #private , as well as many other approaches that would fit a specific individual better.
I think itâs good that we agree on this. But then this seems to be contradictory to me:
I think Iâm missing something here? This to me feels exactly like folders, an hierarchy of containers. Please let me know if Iâm getting this wrong. Besides, my house will always be a mess. I want a tool that embraces that.
I have the same impression, so Iâm not going to answer everything.
Certainly. Maybe you read too much into the house-trip example or the word container . To clarify, Iâm going to rename containers into graph-sets. Graphs have many restrictions that graph-sets donât. Compare these two:
- every node (except of the root) belongs to one and only one other node
- Folders need planning .
- Usage needs discipline .
- Deleting, moving or even renaming a folder can easily break things.
- graphs (and graph-sets) donât belong to any graph-set, they move around as needed
- all combinations of nested graph-sets always produce a single flat graph-set
- The contents of each graph-set donât affect any other.
- They can be modified, deleted etc. at any time without affecting anything.
- Users donât need to plan graph-sets for the future, they just put together something that covers their present need.
- Even using two identical graph-sets under a different name would be fine.
Many tools can operate in messy conditions (the real âwrong compromisesâ), but never in a secure way.
- This is inherently vulnerable to leaking sensitive info.
- Every additional tag is like one more knot that filtering needs to consider.
- At the same time, missing tags affect a lot the quality of tag-based queries.
- they are difficult to maintain
- their noise hides much of their value
- When something is not loaded , it is impossible to leak .
- There are no boundaries .
- No information is tied.
- This is a prerequisite , otherwise the solution is wrong.
- both tagging and picking a target-graph need the same effort
- good for finding info
- bad for protecting info
Thank you for the thorough answer, this clarified a lot. In the end, I think this comes up to a difference in philosophies and I see where youâre coming from.
@mentaloid In terms of the strict boundary / isolation for security purposes - this is exactly why I use two seperate graphs today for personal versus work content and is what I advocated for on the thread I linked.
However for the use case I had in mind with this feature proposal, it was really all about not enforcing that requirement / answer onto the user who isnt after the strict security but more the convenience of a contextualised view perhaps for some adhoc presentation. Youâve asked some questions many of which seem to come down to the âsafetyâ in terms of security around queries versus graphs. For my particular work / personal scenario, my preference is that I want the security guarantees of not accidentally mixing content⊠but for others it might not be necessary. Keep in mind Work versus Personal is only one case. To someone who owns their own business they might not initially see any case for splitting this into two graphs. There are other cases like for example:-
- Someone who gives Demo to customers who might be asked to share their screen and they want to show that customers contents without for example - work meetings being present.
- Someone giving presentation on a project and want only that projects notes to be visible for the duration.
- Someone giving presentations at hobby groups. They may be part of several different hobby groups, and on Thursdays they just want their âBeer brewingâ content to be shown, and Fridayâs its âWhisky clubâ content time. Both areas have some overlapping content.
These people may be comfortable with accepting the tradeoff in terms of risk in security, versus having to prepare and maintain seperate graphs. You would hope they would enact simplfiied query or stucture mechanism to reduce that risk as much as possible. For example perhaps they resort to namespace per customer or something. To me the feature I proposed was the one about a user wanting to eliminate the noise from the UI for a contextualised view of the world, not a hard security feature - as the latter is already there - I can and do already use seperate graphs.
Saying all this, I could imagine support for combining or attaching graphs indirectly enabling this feature but not by eliminating the query aspect:
- User defined a query to filter context for their âcontextual viewâ
- The matching nodes is built into its own graph
- The graph is âattachedâ as a subgraph and shows up under a âViewsâ folder.
- Imagine the view now being selectable in the dropdown where you can select what graph you have open.
But⊠this is pretty much the feature I described, a seperate graph is part of the solution, but its built by an adhoc query that can meet the user where they are and not punish a user who hasnt split their content into graphs from the outset to match a potentially future adhoc requirement, and not require the original content to be maintained any differenly moving forward than it was before. In other words, after the presentation is done, the view could be deleted with no impact.
If the title is changed from promising things that queries cannot do, namely:
- content separation
- graph organization
to instead promise:
- inherently insecure
- the natural application for queries
then I can agree that this is:
- a separate feature
- with useful applications in some scenarios
@mentaloid Agreed, good suggestion. I outsourced the title creation to ChatGPT and having had this discussion I am inclined to agree itâs not the best. Thank you for all of your detailed feedback thus far. I canât seem to figure out how to change the title! I was thinking of something like âContextual Views for Presentationsâ or maybe âSwitching to a filtered version of the graph for a presentationâ - if anyone is able to adjust the title please do.
A small thought. When it comes to security its sometimes useful not just to think in terms of boundaries (i.e seperate databases, seperate web apps etc), but also there are some boundaries that have their own security model within them. For example, a SAAS web application, will let a user authenticate, and will use a query to work out what roles and permissions that user has. They then may have access to only the parts of the web application which is relevent for their role / permissions (Authorisation). The UI is presenting whatâs available to them, based on a query that takes their roles and permissions into account.
- If there was a mistake in this query, a user may well see something that they are not meant to.
- If an admin had assigned the wrong role or permission to the user, same result.
Now, LogSeq doesnât have its own internal security model, itâs a single user application and the user of the app has full ârightsâ to all pieces of content, which includes CRUD operations.
If LogSeq did have a security model, there are many ways it could be implemented.
- Seperate User Profiles would take on the role of the different âContextual Views for presentationâ
- Content blocks or pages could have strict metadata relating to the security model feature - i.e The profiles or permissions that the âuserâ needs in order to peform CRUD operations.
In LogSeq if this feature was enabled it could:-
- have strict UIâs to ensure such content had valid security model attributes reducing a certain class of error such as âtyposâ in attribute names.
- Assume a ârestrictiveâ rather than âpermissiveâ default policy - i.e any content without appropriate security model metadata would only be accessible under the ârootâ profile.
This was a thought experiment to think through how such a security model might be implemented and could achieve the same goal, without necessarily introducing seperate graphs⊠but ultimately at some level its still query based as itâs now able to achieve not just âcontent hidingâ but also preventing accidetnal CRUD operations during that presentation etc, based on the security model, and the queries powering that feature.
Mind the KISS principle.
I value simplicity and this would add complexity to Logseq and make maintenance harder.
This is my solution to the problem to be able to separate work and home. Create 2 separate graphs. I have a âhomeâ graph and a âworkâ graph. Sometimes they intersect and then I just add a link to the other graph. I have 2 windows open of Logseq which I can easily switch between. I have also added some custom.css to make a distinct color of the left panel to be able at an instance to know which graph I am looking at.
@gh_hy44 The proposed feature wouldnât add any complexity for you - simply donât use it if you donât need it. Your usage would remain just as simple as before.
- Queries, already exist.
- The ability to naviigate a graph of content in the UI already exists.
I donât see any massive complexity added here, maybe you can elaborate?
I also use seperate contexts for work and home. I am not able to edit my initial opening post, but this wasnt just about that one specific case. If you read above, there are examples where the user wants a contextual view (for example for some presentation) where its impractical to maintain content in seperate graphs from the outset or on an ongoing basis. If you reject the use cases or the proposed solution still then fine, would be good to know:-
- Maybe one should build / prepare a seperate graph manually per presentation? Or is there some way of using a query to do a filtered export of content perhaps in order to build a seperate graph? Think of the person with multiple hobbies who wants to give a presentation at one hobby group on Monday and another on Thursday and hasnt setup two seperate graphs from the outset
I canât seem to edit the opening post and I wonder if it would be best to close this topic and open a fresh one which attempts to be more refined from the outset, to make this not about content seperation but content hiding as @mentaloid suggested.
Notice that this can partially be implemented manually by using ânested graphsâ but it works only on desktop OSs that support symlinks. The point is creating some graphs and then one that contains symlinks to the /pages folders from other graphs. It works if you donât have pages with the same name in different graph and this can be solved using namespaces and you can also create a âbaseâ graph containing only âmetaâ pages like the pages for properties that you may want to be in common between all your graphs (again by using symlinks).
It sounds complex but you can setup it in 5 minutes starting from scratch while adapting your existing graph to this may takes some time.
Thatâs a clever use of symlinks and worth knowing about, thank you for sharing!
I just wanted to add clarification that the concept of composing graphs versus âviewsâ are complimentary but different features.
The graphs bit, helps with providing the raw material / data for a query. The âviewsâ bit, is about flexibility over what is presented from those graphs, whether that be:-
- a single graph or a composite
- whether a composite graph is achieved using symlinks or some other newly introduced feature
When creating a View:-
- This means you may achieve things like: select page foo - (originates from graph A), and page bar (originates from graph B), but filter out everything else.
- You could clone that view adhoc, and modify the query to also include some other page from graph C.
- You can create as many views for your use cases as you like, perhaps including overlapping sets of pages / blocks, or perhaps not, and delete them when done.
- LogSeq solution to improve that situation on the query authoring side slightly is itâs âsimple queryâ experience. Perhaps that will improve over time.
If it was for me, Logseq should expose the results of all the queries as a virtual filesystem, maybe a WebDAV local server since itâs supported by all the three desktop OSs. Maybe let you set each query to be âmountedâ as a specific folder. Those virtual files would be available as far as Logseq is running, but to make them available when it is not, it could create folders containing symlinks to pages that are query results.
To solve the problem of pointing to a specific block using a file, at least on Linux one can create a .desktop launcher that open the default text editor at a specified line.
I always wonder how other people plan to get by with just two privacy contexts in the long arc of time, given multiple employers, multiple use cases, each with slightly different security layers and/or resource sharing needs. I would certainly need more contexts than Logseq Instance windows that I can reasonably be expected to open on one device. Iâve said this elsewhere, but in my opinion, Logseq should be a package manager. Each package would be a knowledge graph. Some would require authentication, some would be public, open source knowledge graph packages. Some would be read-only, with a read-write option upon sufficient authentication (or in some cases, upon merge request, in the case of a git repository).
I do not think this is incompatible with @mentaloid âs view above, though for me, there is a hard requirement that one should be able to insert references and links across graphs. For example, if I have a public computer science graph and six private software engineering employer project-oriented graphs, I should be able to reference the public graph in the the private graphs.
- Linking across anything is easy.
- updating broken links in private graphs
- maintaining backlinks from private graphs into public graphs
- It is the trade-off between security and convenience.
Introduction
- Learning-Oriented Docs
- Problem-Oriented Docs
- Search entry
- Contents Page
- Understanding-Oriented Docs
- Blocks and Pages
- Information-Oriented Docs
This documentation follows the "Grand Unified Theory of Documentation" . Therefore it consists of
- learning-oriented tutorials ,
- problem-oriented how-to guides ,
- understanding-oriented explanations and
- information-oriented references .
How to publish Logseq notes on your website
Logseq allows you to freely publish notes using custom domain or GitHub pages. Using the below steps, you can accomplish that.
Terminology
Publishing notes - roam vs. obsidian vs. logseq, set homepage, set pages public, set custom theme, export graph/notes, previewing linked notes, math equations, viewing graph, searching notes, presenting slides.
Before going ahead, letâs clear up some terminology.
- PKM : Personal knowledge management , collecting information.
- Backlink : Link to the referred resource/note. Mostly you will refer to another note by surrounding them with double square brackets ( [[test]] to link test note)
- Bidirectional linking : if Note A refers to Note B , then Note B has Backlink to Note A . (A <=> B)
- Graph : Shows all the connections between notes. Some apps like Roam Research & Logseq refer to graph as a database (collection of your notes), whereas Obsidian refers to vault as a database.
Roam Research , Obsidian and Logseq provide bidirectional linking between notes and graph views of them.
To use Roam Research, you need to pay monthly/yearly (15$/month at this time of writing), and it allows you to create up to 3 graphs that you can store in their cloud. You can make a graph public to publish your notes. There are other services like Roam Garden which provide a more excellent UI to your notes; this is paid service (7.5$/month).
Obsidian allows you to use any folder to store your notes. All your notes are stored locally, and you can sync with any service like Syncthing , Resilio Sync , Google Drive, Dropbox, Github. Obsidian also released an Obsidian Sync feature (8$/month), where all the notes are encrypted locally with your password and sent to their servers (more secure than Roam Research). They provide an Obsidian Publish service for publishing notes, which costs 16$/month.
With Logseq, you can choose any local folder (can be synced to the cloud) to store notes; for publishing notes, they provide an option to export Graph to HTML pages, and you can deploy this to your server or domain or GitHub pages or IPFS.
Steps to publishing notes using Logseq
Note that you can import notes from Roam Research as JSON and import them to Logseq.
After selecting the folder to store your graph/database, select ... and choose Settings in the right upper corner. Select the Editor tab and disable âJournalsâ, once done the âSet the default home pageâ option will be enabled; set this to any name you would like to name your home page. Create a new note/page with the same name.
You can also make this change directly in config.edn file, go to Settings => General tab => select Edit config.edn ,
will open config.edn, search for default-home and set default home page like below
Note : You can get config.edn by using search, keyboard shortcut is Cmd+k or Ctrl+k depending on macOS or windows.
You have two options,
- Publish all notes. For this, go to Settings , select Editor , and enable All pages public when publishing.
- Select what notes you want to publish by selecting Make it public for publishing
To change the default theme, go to Settings => General tab => âEdit custom.cssâ, here you can add your custom CSS. There are many themes available; refer to this , pick any theme you like, copy the theme custom.css content, and paste in your logseq custom.css.
After having your notes, itâs time to export. Settings => select âExport Graphâ, select âExport public pagesâ, select any folder where you want to store the generated static files from your notes. You can open the index.html in this folder to preview.
Deploying notes
You can deploy the folder containing the generated static files from above to Github pages, Vercel or Netlify . You can also deploy this folder to decentralized network using IPFS, refer this post . Here is a sample graph I deployed, https://logseq.rajashekar.org .
Hovering over links, shows preview of the note.
Below is how math equations will be shown.
Excalidraw drawings are not displayed, but you can copy the diagrams as png and include them.
Logseq supports Org Mode and has some nice font icons - you can refer to this cheatsheet
Clicking on the Graph view will show links between notes. Here is preview of the graph I deployed.
Below is how backlinks are shown.
Pressing Ctrl+k (for Windows) Cmd+k (for macOS) will pop up the search bar, and you can search all your notes.
Last but not least, you can present a page/note as a slide. Click on âPresentationâ in page settings, and press f to present in full screen. Below is the demo.
Here is page used to demo. You can try it yourself.
I hope the above gave an idea of how to publish your notes and get all the excellent features of Logseq at no cost.
About Rajashekar Chintalapati
Software Engineer, Learner, Prokopton.
Roam Research: Protect your file uploads
Roam Notes Security
Scripting with ex: non-visual form of vi
Vi Vim Tips Development
How to use Logseq as a dev log for technical notes
The ease with which you can add notes in Logseq makes it the perfect companion to learn throughout the day. See how developer Bryan Jenks uses Logseq to take technical notes and reuse them later.
Are you a developer or learning to code? Bryan Jenks shows within 15 minutes how he uses Logseq to continuously learn new concepts and languages. He shares how he uses the Linked References as an inbox,
The video below starts at 12:56 as the part before is an overview and review of Logseq.
Screenshots from the video
Click an image to see it in full size
How to Set Up an Automated Daily Template in Logseq
Templates are the best way to easily structure and link your notes in Logseq. Not only do templates provide structure, having consistent links means that you can more reliably find your notes using queries. This comes in handy when you want to build systems in Logseq.
There are many different ways Logseqers use templates on their Journals page. Personally, I have a daily template to track habits, have a place to write my morning pages, import calendar events, and have a simple inbox to capture anything else.
In this article, I'll show how to create templates and define a template that's loaded onto your Journals page every day. If you already know how to create templates in Logseq, you can skip the first section and head over to how to set a daily recurring template.
How to set up a Logseq template
Before we get started with the automation part, let's first have a look at setting up a template that you want to appear on the Journals page every day. In case you already have a daily template set up, you can skip this section.
I recommend you pick one page where you store all of your templates (e.g. [[templates]] ). While it's possible to get an overview of all of your templates using a query, collecting all of them on one page makes management a lot easier.
Here are the three steps to set up a template in Logseq:
Step 1: Create a parent block
The best practice is to nest the template blocks underneath a parent block. This will make navigating the [[templates]] page much easier.
When creating the template trigger in the third step, you'll be able to set if you want to make this parent block part of the template or not. Many people who decide to include this parent block in their template often add links to it. This way, all blocks that are part of the template will be tagged with those links when you run the template. Keep this in mind as you structure your daily template.
Step 2: Add the template
Nested underneath the parent block you can add as many template blocks as you like. From a single block to hundreds; Logseq can handle them all.
In the Logseq documentation , you can find all the possibilities of templates. One popular feature are the dynamic variables which let you add date links using natural language (e.g. time or last Friday ).
Step 3: Set the template name
Right-click on the parent block of the template and select the Make template option:
Next, fill in the name of the template. This will be the name that appears in the list when you run the /template command. This name will also be used in the configuration file, so it's best to not include special characters like emojis in the template name.
If you wish to include the parent block in the template, enable the option Including the parent block in the template . However, as we're creating a daily template, the best practice is to have a template with all blocks on the root level (minimum indentation level). In other words: I recommend not enabling this option.
When you're done, click the Submit button. You'll now see metadata added to the parent block:
That's it, you're now all set. You can even choose to not automate the process and just run the /template command manually each day.
How to set a daily recurring template
Have you set up a template you want to use every day? Great! Now let's see how to make it appear on the fresh Journals page you get every day at midnight.
Step 1: Open config.edn
The config.edn file is where your settings are saved. Anytime you change anything in the Logseq settings screen, they are saved to this file. However, config.edn has a few more options than are available via the interface.
To open the configuration file, open the search bar using the Cmd-k (macOS) / Ctrl-k (Windows, Linux) shortcut. Alternatively, click the đ icon in the top menu bar. Now type config.edn , locate the result, and hit Enter :
Another way to open the config.edn file is by opening the settings screen and clicking the Edit config.edn button from the General tab:
Step 2: Define the template
Look for the following lines (probably around 18-19) in the config.edn file:
Next, type the name of the template you want to use between the quotes:
Step 3: Refresh Logseq
For the changes to take effect you need to refresh Logseq. Either use the keyboard shortcut Cmd-r (macOS) / Ctrl-r (Windows, Linux), or click the Refresh option from the menu in the left sidebar:
That's it! You're now all set. Every day at midnight you'll get a new Journals page with the template already populated.
To test if the template works, empty today's Journals page (cut-paste onto another page if it already contains content). If the template does not appear, make you sure the only thing on the page is a single bullet that says Click here to edit... If the bullet has no text, place your cursor in the block, hit Esc and then Backspace or Delete on your keyboard. Now the template should appear within a few seconds. If that's not the case, check if you wrote the template name correctly in config.edn and is wrapped with double-quotes.
Having a daily structure is an excellent way to program your attention, so change the template as you see fit. To do so, you'll only need to head over to the [[templates]] page and change the template. Your new template will show up on the next day's Journals page.
Supercharge your daily template using plugins
Logseq is improving every day thanks to its plugin ecosystem. On the Marketplace (which you can find via the ... > Plugins option in the top menubar), there are several plugins that you can use in combination with a daily template. I'll highlight a few below.
The plugin names link to their respective GitHub pages. But no worries: you can install them in one click from the Marketplace.
Logseq Habit Tracker
Using a few hashtags on your Journals page, you can easily visualize how well you've kept to habits that you set for yourself. Simply add the tags and the habit you want to track to your daily Journal, and use the plugin to see how you're doing.
Logseq Property Visualizer
If you add page properties to the first block of your Journals pages, you can visualize them using the Logseq Property Visualizer plugin. Personally, I use this instead to track habits, as I try to hit specific numbers every day (workouts, minutes of foreign language input, words written, etc.).
Logseq SmartBlocks
If you notice that you often don't use (tagged) blocks in your daily Journals template, consider replacing them with SmartBlocks buttons. Much like Roam SmartBlocks , this plugin lets you create buttons to trigger templates. If you chop up your daily template into smaller templates and add trigger buttons to your main daily template, you can reduce noise by a lot. It'll also prevent having empty but linked blocks lingering on your old Journals pages.
Logseq Full House Templates
If you need to use more complex logic for your Daily Journal templates, you can use the Full House Templates plugin. This plugin allows you to involve the JavaScript environment and any Logseq context information to create a template that suits your needs. For example, you can add a navigation header to switch between days, include a monthly review task (but only on the last day of the month), or enhance your journal with stylish views of what you're currently reading.
You can find an example of how to set up a daily journal template with the Full House Templates plugin here.
Even if you are not familiar with programming, you can still set up ready-made templates from the Showroom .
Ideas on how to make this process better?
Do you see ways to make the daily Journals template even better, or do you know of useful new plugins? Send us a message and help improve this article.
Navigation Menu
Search code, repositories, users, issues, pull requests..., provide feedback.
We read every piece of feedback, and take your input very seriously.
Saved searches
Use saved searches to filter your results more quickly.
To see all available qualifiers, see our documentation .
- Notifications
The Focus Mode plugin for Logseq allows you to quickly switch into a distraction-free "zen" mode by toggling into full-screen and hiding elements like the sidebar or properties section.
sethfair/logseq-focus-mode
Folders and files, repository files navigation.
Settings -> Plugin Settings -> Focus Mode
â ïž REQUIRED: You must configure the focus plugin before using it by clicking on the options you want to change, otherwise nothing will be affected.
MIT License
Releases 19
Contributors 4.
- JavaScript 97.0%
IMAGES
VIDEO
COMMENTS
The graphs bit, helps with providing the raw material / data for a query. The "views" bit, is about flexibility over what is presented from those graphs, whether that be:-. a single graph or a composite. whether a composite graph is achieved using symlinks or some other newly introduced feature. When creating a View:-.
Presentation mode ? Hi Does Logseq still have Presentation mode ? If so how can I activate it ( I no longer can find it)? Thanks. Click the three dots in the upper-right corner and then click "View as slides," which you can find below "Delete page" and above "Open in directory."
Logseq is a local-first, non-linear, outliner notebook for organising and sharing your knowledge base and second brain. https://discord.gg/URphjhk ... Presentation mode not working as before + asking for general advice . Edit: oh and before anyone links to it, discord doesn't work in my country. I still have the older presentations and I could ...
in recent versions (using 0.6.5), the presentation mode is buggy: some level 2 blocks are not showing at all (blank page) level 3 and above seem inaccessible, and the slide from level 2 shows hidden children message. arrow keys trigger both the reveal.js window and the main container (eg: arrow down will both move down in the rpesentation and ...
In the official Logseq Discord you'll be able to quickly get support whenever you're stuck. But our chat community is much more; meet fellow Logseq enthusiasts and hang out with the team in live calls every week. Suggest a resource. Every week we send a curated newsletter with the most useful Logseq content from around the web.
Introduction. This documentation follows the "Grand Unified Theory of Documentation". Therefore it consists of. learning-oriented tutorials, problem-oriented how-to guides, understanding-oriented explanations and. information-oriented references. Edit this page. Next.
Logseq supports Org Mode and has some nice font icons - you can refer to this cheatsheet. Cool icons Viewing graph. ... Click on "Presentation" in page settings, and press f to present in full screen. Below is the demo. Presenting slides. Here is page used to demo. You can try it yourself.
Development. No branches or pull requests. 7 participants. Describe the bug A clear and concise description of what the bug is. To Reproduce Expected behavior Slides are expected to go layer by layer with a top and bottom button as well. Desktop (please complete the following information): OS: U...
Logseq is a powerful Obsidian alternative that has gained plenty of traction in the last few month. Logseq expert Dario daSilva explores Logseq and how it wo...
Embed links and presentation in github pages. I am exploring logseq, since yesterday. I miss two features, but it may be that it is my fault and not logseq's: The presentation mode does not seem to be working for me in GitHub, example. It is forever loading, and f does nothing. Is there any way to convert links into embedded cards?
Logseq Sync BETA Always up-to-date notes between all your devices. With encrypted file syncing, you'll always have your notes backed up and securely available in real-time on any device. Whiteboards BETA A new canvas for your thoughts. Place any of your thoughts from the knowledge base
Access additional Logseq đ resources: Forum: https://discuss.logseq.com; Blog: https://blog.logseq.com; Docs: https://docs.logseq.com; Thanks for your contributions to Logseq! If you have any other issues or feature requests, please don't hesitate to let us know. We always welcome pull requests too!
Bryan Jenks shows within 15 minutes how he uses Logseq to continuously learn new concepts and languages. He shares how he uses the Linked References as an inbox, The video below starts at 12:56 as the part before is an overview and review of Logseq. How I'm Using Logseq For My DevLog & Technical Notes đšđ»âđ»ïž.
Step 3: Set the template name. Right-click on the parent block of the template and select the Make template option: Next, fill in the name of the template. This will be the name that appears in the list when you run the /template command. This name will also be used in the configuration file, so it's best to not include special characters like ...
Logseq is a local-first, non-linear, outliner notebook for organising and sharing your knowledge base and second brain. https://discord.gg/URphjhk ... and use something like vscode + revealjs to create the presentation. ... ESP32 is a series of low cost, low power system on a chip microcontrollers with integrated Wi-Fi and dual-mode Bluetooth ...
Development. Successfully merging a pull request may close this issue. fix: slide style logseq/logseq. 1 participant. The font color is white with background light blue in the light theme presentation mode. I expect a nicer design with higher contrast.
Yarle By akosbalasko - Yarle (Yet Another Rope Ladder from Evernote) is a cross-platform desktop tool that converts Evernote notebooks into Markdown format supporting Logseq dialect comprehensively. LogLink - Send text, images and locations from mobile via Telegram (and soon other platforms) to your graph.
The Focus Mode plugin for Logseq allows you to quickly switch into a distraction-free "zen" mode by toggling into full-screen and hiding elements like the sidebar or properties section. Topics. logseq logseq-plugin Resources. Readme License. MIT license Activity. Stars. 33 stars Watchers. 1 watching Forks.